Контакти

Jquery випадкове число з діапазону. Керований random в JavaScript. Фіксування числа в діапазоні

Після generati ng випадкове число з використанням комп'ютерної програми, воно як і раніше вважається випадковим числом, якщо вибране число є частиною або повним з вихідного. Але якщо він був змінений, то математики не приймають його як випадкове число, і вони можуть називати його упередженим числом. Але якщо ви розробляєте програму для простого завдання, це не буде розглянуто. Але якщо ви розробляєте програму для генерації випадкового числа для цінного матеріалу, такого як лотерейна програма або гра в азартні ігри, тоді ваша програма буде відхилена керівництвом, якщо ви не будете розглядати цей випадок.

Так що для тих, хто таких людей, ось моя пропозиція :.

Генерація випадкових чисел за допомогою Math.random () (скажімо це n)

Now for, то підлогу n * 10 є вашим відповіддю і, якщо потрібно, то підлогу n * 100 - ваша відповідь і так далі.

Тепер увійти в свою роль:

Ви просили числа серед певного діапазону. (В цьому випадку ви зміщені в цьому діапазоні. - Прийнявши число з, звернувши кубик, ви пристрастилися до, але все ж це випадковий випадок, якщо і тільки якщо смерть неупереджено.)

Так що розгляньте свій діапазон \u003d\u003d\u003e кількість елементів в діапазоні \u003d 247 - 78 + 1 \u003d 170; (Оскільки обидві кордону включають

/ * Mthod 1: * / var i \u003d 78, j \u003d 247, k \u003d 170, a \u003d, b \u003d, c, d, e, f, l \u003d 0; for (; i<= j; i++){ a.push(i); } while(l < 170){ c = Math.random()*100; c = Math.floor(c); d = Math.random()*100; d = Math.floor(d); b.push(a[c]); e = c + d; if((b.length != k) && (e < k)){ b.push(a[e]); } l = b.length; } console.log("Method 1:"); console.log(b); /*Method 2:*/ var a, b, c, d = , l = 0; while(l < 170){ a = Math.random()*100; a = Math.floor(a); b = Math.random()*100; b = Math.floor(b); c = a + b; if(c <= 247 || c >\u003d 78) (d.push (c);) else (d.push (a);) l \u003d d.length; ) Console.log ( "Method 2:"); console.log (d);

Примітка: .. У методі один, перший я створив масив, який містить номери, які вам потрібно, і потім випадковим чином помістити їх в інший масив В методі два, генерувати числа випадковим чином і перевірте, чи знаходяться вони в тому діапазоні, який вам потрібен, а потім поміщаємо його в масив. Тут я згенерував два випадкових числа і використовував їх загальна кількість, щоб максимізувати швидкість програми, мінімізуючи частоту відмов, отримуючи корисне число. також я буду рекомендувати мій перший метод генерації випадкових чисел в певному діапазоні.

В обох методах ваш консоль e покаже результат. (Натисніть f12 в Chrome, щоб відкрити консоль)

The Math.random () function returns a floating-point, pseudo-random number in the range 0-1 (inclusive of 0, but not 1) with approximately uniform distribution over that range - which you can then scale to your desired range. The implementation selects the initial seed to the random number generation algorithm; it can not be chosen or reset by the user.

Math.random () does not provide cryptographically secure random numbers. Do not use them for anything related to security. Use the Web Crypto API instead, and more precisely the method.

Syntax

Math.random ()

Return value

A floating-point, pseudo-random number between 0 (inclusive) and 1 (exclusive).

Examples

Note that as numbers in JavaScript are IEEE 754 floating point numbers with round-to-nearest-even behavior, the ranges claimed for the functions below (excluding the one for Math.random () itself) aren "t exact. If extremely large bounds are chosen (2 53 or higher), it "s possible in extremely rare cases to calculate the usually-excluded upper bound.

Getting a random number between 0 (inclusive) and 1 (exclusive)

function getRandom () (return Math.random ();)

Getting a random number between two values

This example returns a random number between the specified values. The returned value is no lower than (and may possibly equal) min, and is less than (and not equal) max.

Function getRandomArbitrary (min, max) (return Math.random () * (max - min) + min;)

Getting a random integer between two values

This example returns a random integer between the specified values. The value is no lower than min (or the next integer greater than min if min isn "t an integer), and is less than (but not equal to) max.

Function getRandomInt (min, max) (min \u003d Math.ceil (min); max \u003d Math.floor (max); return Math.floor (Math.random () * (max - min)) + min; // The maximum is exclusive and the minimum is inclusive)

It might be tempting to use Math.round () to accomplish that, but doing so would cause your random numbers to follow a non-uniform distribution, which may not be acceptable for your needs.

Getting a random integer between two values, inclusive

While the getRandomInt () function above is inclusive at the minimum, it "s exclusive at the maximum. What if you need the results to be inclusive at both the minimum and the maximum? The getRandomIntInclusive () function below accomplishes that.

Function getRandomIntInclusive (min, max) (min \u003d Math.ceil (min); max \u003d Math.floor (max); return Math.floor (Math.random () * (max - min + 1)) + min; // The maximum is inclusive and the minimum is inclusive)

Specifications

Specification Status Comment
ECMAScript 1st Edition (ECMA-262) Standard Initial definition. JavaScript 1.0 (UNIX Only) / JavaScript 1.1 (All platforms).
ECMAScript 5.1 (ECMA-262)
Standard
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of "Math.random" in that specification.
Standard
ECMAScript Latest Draft (ECMA-262)
The definition of "Math.random" in that specification.
Draft

Browser compatibility

The compatibility table in this page is generated from structured data. If you "d like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.

Update compatibility data on GitHub

DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
randomChrome Full support YesEdge Full support 12Firefox Full support 1IE Full support YesOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yesnodejs Full support Yes
Дуже часто обчислення в JavaScript дають не зовсім ті результати, які ми хочемо. Зрозуміло, ми можемо робити з числами що завгодно - округляти в більшу або меншу сторону, встановлювати діапазони, відсікати непотрібні числа до певної кількості знаків після коми, все залежить від того, що ви хочете зробити в подальшому з цим числом.

Навіщо необхідно округлення?

Одним з цікавих аспектів JavaScript є те, що він насправді не зберігає цілі числа, ми відразу ж працюємо з числами з плаваючою точкою. Це, в поєднанні з тим фактом, що багато дробові значення не можуть бути виражені кінцевим числом знаків після коми, в JavaScript ми можемо отримати такі результати:

0.1 * 0.2; > 0.020000000000000004 0.3 - 0.1 > 0.19999999999999998
Для практичних цілей ця неточність не має ніякого значення, в нашому випадку ми говоримо про помилку в квінтильйон частках, проте, кого-то це може розчарувати. Ми можемо отримати дещо дивний результат і при роботі з числами, які представляють собою значення валют, відсотків або розмірів файлу. Для того, щоб виправити ці неточності, нам якраз і необхідно вміти округляти результати, при цьому досить встановити десяткову точність.

Округлення чисел має практичне застосування, ми можемо маніпулювати числом в деякому діапазоні, наприклад, хочемо округлити значення до найближчого цілого числа, а не працювати тільки з десятковою маються на частиною.

Округлення десяткових чисел

Для того, щоб відсікти десяткове число, використовуйте toFixed або метод toPrecision. Обидва вони приймають єдиний аргумент, який визначає, відповідно, скільки значущих цифр (тобто загальна кількість цифр, які використовуються в числі) або знаків після коми (кількість після десяткового дробу) повинен включати в себе результат:
  1. Якщо аргумент не визначений для toFixed (), то за замовчуванням він буде дорівнює нулю, що означає 0 знаків після коми, аргумент має максимальне значення, рівне 20.
  2. Якщо аргумент не заданий для toPrecision, число залишається недоторканим
let randNum \u003d 6.25; randNum.toFixed (); \u003e "6" Math.PI.toPrecision (1); \u003e "3" randNum \u003d 87.335; randNum.toFixed (2); \u003e "87.33" randNum \u003d 87.337; randNum.toPrecision (3); \u003e "87.3"
Обидва методи toFixed () і toPrecision () повертають строкове представлення результату, а не число. Це означає, що при підсумовуванні округленого значення з randNum буде проведена конкатенація рядків, а не сума чисел:

Let randNum \u003d 6.25; let rounded \u003d randNum.toFixed (); // "6" console.log (randNum + rounded); \u003e "6.256"
Якщо ви хочете, щоб результат мав числовий тип даних, то вам необхідно буде застосувати parseFloat:

Let randNum \u003d 6.25; let rounded \u003d parseFloat (randNum.toFixed (1)); console.log (rounded); \u003e 6.3
Зверніть увагу, що значення 5 округлені, за винятком рідкісних випадків.

Методи toFixed () і toPrecision () є корисними, бо вони можуть не тільки відсікати дробову частину, а й доповнювати знаки після коми, що зручно при роботі з валютою:

Let wholeNum \u003d 1 let dollarsCents \u003d wholeNum.toFixed (2); console.log (dollarsCents); \u003e "1.00"
Коштувати зверніть увагу, що toPrecision буде давати результат в експоненційної запису, якщо число цілих чисел більше, ніж сам сама точність:

Let num \u003d 123.435 num.toPrecision (2); \u003e "1.2e + 2"

Як уникнути помилок округлення з десятковими числами

У деяких випадках, toFixed і toPrecision округлює значення 5 в меншу сторону, а в більшу:

Let numTest \u003d 1.005; numTest.toFixed (2); \u003e "1.00"
Результат розрахунку вище повинен був бути 1.01, а не 1. Якщо ви хочете уникнути подібної помилки, ми можемо використовувати рішення, запропоноване Jack L Moore, яке використовує експоненціальні числа для розрахунку:

Function round (value, decimals) (return Number (Math.round (value + "e" + decimals) + "e -" + decimals);)
тепер:

Round (1.005,2); \u003e 1.01
Якщо ви хочете більш надійне рішення, ніж рішення показане вище, ви можете перейти на MDN.

Машинне епсилон округлення

Альтернативний метод округлення десяткових чисел був введений в ES6. Машинне епсилон округлення забезпечує розумну межу похибки при порівнянні двох чисел з плаваючою точкою. Без округлення, порівняння можуть дати результати, подібні наступним:

0.1 + 0.2 \u003d\u003d\u003d 0.3\u003e false
Ми використовуємо Math.EPSILON в нашій функції для отримання коректного порівняння:

Function epsEqu (x, y) (return Math.abs (x - y)< Number.EPSILON * Math.max(Math.abs(x), Math.abs(y)); }
Функція приймає два аргументи: перший - поточний розрахунок, другий - очікуваний результат. Вона повертає порівняння двох:

EpsEqu (0.1 + 0.2, 0.3)\u003e true
Всі сучасні браузери вже підтримують ES6 математичні функції, але якщо ви хочете отримати підтримку в таких браузерах, як IE 11, використовуйте polyfills.

Відсікання дробової частини

Всі методи, представлені вище вміють округляти до десяткових чисел. Для того, щоб просто відсікти число до двох знаків після коми, необхідно спочатку помножити його на 100, а потім отриманий результат вже розділити на 100:

Function truncated (num) (return Math.trunc (num * 100) / 100;) truncated (3.1416)\u003e 3.14
Якщо ви хочете пристосувати метод під будь-яку кількість знаків після коми, ви можете скористатися подвійним побітовим запереченням:

Function truncated (num, decimalPlaces) (let numPowerConverter \u003d Math.pow (10, decimalPlaces); return ~~ (num * numPowerConverter) / numPowerConverter;)
тепер:

Let randInt \u003d 35.874993; truncated (randInt, 3); \u003e 35.874

Округлення до найближчого числа

Для того, щоб округлити десяткове число до найближчого числа в більшу або в меншу сторону, в залежності від того, до чого ми ближче за все, використовуйте Math.round ():

Math.round (4.3)\u003e 4 Math.round (4.5)\u003e 5
Зверніть увагу, що «половина значення», 0.5 округляється в більшу сторону за правилами математики.

Округлення до меншого до найближчого цілого числа

Якщо ви хочете завжди округляти в меншу сторону, використовуйте Math.floor:

Math.floor (42.23); \u003e 42 Math.floor (36.93); \u003e 36
Зверніть увагу, що округлення в меншу сторону працює для всіх чисел, в тому числі і для негативних. Уявіть хмарочос з безліччю поверхів, в тому числі з поверхами нижнього рівня (що представляє негативні числа). Якщо ви перебуваєте в ліфті на нижнім рівнем між 2 і 3 (що представляє собою значення -2.5), Math.floor доставить вас до -3:

Math.floor (-2.5); \u003e -3
Але якщо ви хочете уникнути подібної ситуації, використовуйте Math.trunc, підтримуваний у всіх сучасних браузерах (крім IE / Edge):

Math.trunc (-41.43); \u003e -41
На MDN ви знайдете polyfill, який забезпечить підтримку Math.trunc в браузерах і IE / Edge.

Округлення до більшого до найближчого цілого числа

З іншого боку, якщо вам потрібно завжди округляти в більшу сторону, використовуйте Math.ceil. Знову ж, згадуємо нескінченний ліфт: Math.ceil завжди буде йти «вгору», незалежно від того, чи є число негативне чи ні:

Math.ceil (42.23); \u003e 43 Math.ceil (36.93); \u003e 37 Math.ceil (-36.93); \u003e -36

Округлення до більшого / меншого необхідного числа

Якщо ми хочемо, щоб округлити до найближчого числа, кратного 5, найпростіший спосіб створити функцію, яка ділить число на 5, округлює його, а потім множить його на ту ж суму:

Function roundTo5 (num) (return Math.round (num / 5) * 5;)
тепер:

RoundTo5 (11); \u003e 10
Якщо ви хочете округляти до кратних своїм значенням, ми використовувати більш загальну функцію, передаючи в неї початкове значення і кратне:

Function roundToMultiple (num, multiple) (return Math.round (num / multiple) * multiple;)
тепер:

Let initialNumber \u003d 11; let multiple \u003d 10; roundToMultiple (initialNumber, multiple); \u003e 10;

Фіксування числа в діапазоні

Є багато випадків, коли ми хочемо отримати значення х, що лежить в межах діапазону. Наприклад, нам може знадобитися значення від 1 до 100, але при цьому ми отримали значення 123. Для того, щоб виправити це, ми можемо використовувати мінімальну (повертає найменше із набору чисел) і максимальне (повертає найбільше з будь-якого безлічі чисел). У нашому прикладі, діапазон від 1 до 100:

Let lowBound \u003d 1; let highBound \u003d 100; let numInput \u003d 123; let clamped \u003d Math.max (lowBound, Math.min (numInput, highBound)); console.log (clamped); \u003e 100;
Знову ж таки, ми можемо перевикористати операцію і обернути все це в функцію, скористаємося рішенням запропоноване Daniel X. Moore:

Number.prototype.clamp \u003d function (min, max) (return Math.min (Math.max (this, min), max););
тепер:

NumInput.clamp (lowBound, highBound); \u003e 100;

Гаусове округлення

Гаусове округлення, також відоме як банківське округленням, полягає в тому, що округлення для цього випадку відбувається до найближчого парному. Цей метод округлення працює без статистичної похибки. Краще рішення було запропоновано Tim Down:

Function gaussRound (num, decimalPlaces) (let d \u003d decimalPlaces || 0, m \u003d Math.pow (10, d), n \u003d + (d? Num * m: num) .toFixed (8), i \u003d Math.floor (n), f \u003d n - i, e \u003d 1e-8, r \u003d (f\u003e 0.5 - e && f< 0.5 + e) ? ((i % 2 == 0) ? i: i + 1) : Math.round(n); return d ? r / m: r; }
тепер:

GaussRound (2.5)\u003e 2 gaussRound (3.5)\u003e 4 gaussRound (2.57,1)\u003e 2.6
Десятковий знак в CSS:

Так як JavaScript часто використовується для створення позиційного перетворення HTML-елементів, ви можете задатися питанням, що станеться, якщо ми cгенеріруем десяткові значення для наших елементів:

#box (width: 63.667731993px;)
Гарна новина полягає в тому, що сучасні браузери будуть враховувати десяткові значення в блокової моделі, в тому числі в процентних або піксельних одиницях виміру.

Сортування

Дуже часто нам доводиться сортувати будь-які елементи, наприклад, у нас є масив ігрових рекордів, при цьому вони повинні бути організовані за зменшенням рангу гравців. На жаль, стандартний метод sort () має деякі дивовижні обмеження: він добре працює з часто вживаними англійськими словами, але відразу ж ламається при зустрічі з числами, унікальними символами або словами в верхньому регістрі.

Сортування в алфавітному порядку

Здавалося б, сортування масиву за алфавітом повинна бути найпростішою завданням:

Let fruit \u003d [ "butternut squash", "apricot", "cantaloupe"]; fruit.sort (); \u003e "Apricot", "butternut squash", "cantaloupe"]
Проте ми стикаємося з проблемою, як тільки один з елементів знаходиться в верхньому регістрі:

Let fruit \u003d [ "butternut squash", "apricot", "Cantalope"]; fruit.sort (); \u003e "Cantaloupe", "apricot", "butternut squash"]
Це пов'язано з тим, що, за замовчуванням, сортувальник порівнює перший символ представлений в Unicode. Unicode - це унікальний код для будь-якого символу, незалежно від платформи, незалежно від програми, незалежно від мови. Наприклад, якщо дивитися по кодової таблиці символ «a» має значення U + 0061 (в шістнадцятковій системі 0x61), в той час як символ «C» має код U + 0043 (0x43), який йде раніше в Unicode-таблиці, ніж символ «a».

Щоб впорядкувати масив, який може містити змішані регістри перших букв, нам необхідно або перетворити всі елементи тимчасово в нижній регістру, або визначити свій порядок сортування за допомогою методу localeCompare () c деякими аргументами. Як правило, для такого випадку, краще відразу створити функцію для багаторазового використання:

Function alphaSort (arr) (arr.sort (function (a, b) (return a.localeCompare (b, "en", ( "sensitivity": "base"));));) let fruit \u003d [ "butternut squash "," apricot "," Cantaloupe "]; alphaSort (fruit)\u003e
Якщо ви хочете отримати масив відсортований в зворотний алфавітному порядку, просто поміняйте позиціями а й b в функції:

Function alphaSort (arr) (arr.sort (function (a, b) (return b.localeCompare (a, "en", ( "sensitivity": "base"));));) let fruit \u003d [ "butternut squash "," apricot "," Cantaloupe "]; alphaSort (fruit)\u003e [ "Cantaloupe", "butternut squash", "apricot"]
Тут варто звернути увагу, що localeCompare використовується з аргументами, ще треба пам'ятати, що він підтримується IE11 +, для більш старих версій IE, ми можемо використовувати його без аргументів, і в нижньому регістрі:

Function caseSort (arr) (arr.sort (function (a, b) (return a.toLowerCase (). LocaleCompare (b.toLowerCase ());));) let fruit \u003d [ "butternut squash", "apricot", "Cantaloupe"]; caseSort (fruit)\u003e [ "apricot", "butternut squash", "Cantaloupe"]

числова сортування

Все це не відноситься до того наприклад, про який ми говорили вище про масив ігрових рекордів. З деякими числовими масивами сортування працює просто ідеально, але в якийсь момент результат може бути непередбачуваним:

Let highScores \u003d; highScores.sort (); \u003e
Справа в тому, що метод sort () виробляє лексикографічну порівняння: а це означає, що числа будуть перетворені в рядок і порівняння будуть знову проводитися шляхом зіставлення першого символу цього рядка в порядку символів Unicode-таблиці. Тому нам знову необхідно визначити свій порядок сортування:

Let highScores \u003d; highScores.sort (function (a, b) (return a - b;)); \u003e
Знову ж таки, для сортування чисел в зворотному порядку, поміняйте позиціями a і b в функції.

Сортування JSON-подібної структури

І нарешті, якщо у нас є JSON-подібна структура даних, представлена \u200b\u200bяк масив ігрових рекордів:

Let scores \u003d [( "name": "Daniel", "score": 21768), ( "name": "Michael", "score": 33579), ( "name": "Alison", "score": 38395 )];
У ES6 +, ви можете використовувати стрілочні функції:

Scores.sort ((a, b) \u003d\u003e b.score - a.score));
Для старих браузерів, які не мають таку підтримку:

Scores.sort (function (a, b) (return a.score - b.score));
Як бачите, сортування в JavaScript це досить не очевидно річ, я сподіваюся, що ці приклади полегшать як-небудь життя.

Робота зі статечними функціями

Піднесення до степеня - операція, спочатку визначається як результат багаторазового множення натурального числа на себе, квадратний корінь з числа a - число, що дає a при зведенні в квадрат. Цими функціями ми могли користуватися постійно в повсякденному житті на уроках математики, в тому числі при обчисленні площ, обсягів або навіть при фізичному моделюванні.

В JavaScript статечна функція представлена \u200b\u200bяк Math.pow (), в новому стандарті ES7 був представлений новий оператор піднесення до степеня - "* *".

Зведення в ступінь

Для того, щоб звести число в n-ую ступінь, потрібно скористатися функцією Math.pow (), де перший аргумент це число, яке буде зведено в ступінь, другий аргумент це показник ступеня:

Math.pow (3,2)\u003e 9
Така форма запису означає 3 в квадраті, або 3 × 3, що призводить до результату 9. Можна навести ще приклад, звичайно:

Math.pow (5,3); \u003e 125
Тобто, 5 в кубі, або 5 × 5 × 5, так само 125.

ECMAScript 7 - це наступна версія JavaScript, в принципі, ми можемо використовувати новий запропонований оператор піднесення до степеня - * *, така форма запису може бути більш наочної:

3 ** 2 > 9
На даний момент підтримка цього оператора досить обмежена, тому його не рекомендується використовувати.

Степенева функція може стати в нагоді в самих різних ситуаціях. Простий приклад, обчислення кількості секунд в годині: Math.pow (60,2).

Квадратний і кубічний корінь

Math.sqrt () і Math.cbrt () протилежні функції Math.pow (). Як ми пам'ятаємо, квадратний корінь з числа a - число, що дає a при зведенні в квадрат.

Math.sqrt (9)\u003e 3
У той же час кубічний корінь з числа a - число, що дає a при зведенні в куб.

Math.cbrt (125)\u003e 5
Math.cbrt () був введений в специфікацію JavaScript зовсім недавно, і тому підтримується тільки в сучасних браузерах: Chrome 38+, Firefox і Opera 25+ та Safari 7.1+. Ви помітите, що Internet Explorer відсутня в цьому списку, однак на MDN ви знайдете поліфілл.

приклади

Звичайно, ми можемо використовувати і не цілі значення в одній з цих функцій:

Math.pow (1.25, 2); \u003e 1.5625 Math.cbrt (56.57)\u003e 3.8387991760286138
Зверніть увагу, що це цілком собі працює і при використанні негативних значеннях аргументів:

Math.pow (-5,2)\u003e 25 Math.pow (10, -2)\u003e 0.01
Проте, для квадратного кореня це не буде працювати:

Math.sqrt (-9)\u003e NaN
З математичного аналізу ми знаємо, що під уявним числом розуміють квадратні корені з від'ємних чисел. І це може привести нас до ще однієї техніці роботи з комплексними числами, але це вже інша історія.

Ви можете використовувати дробові значення в Math.pow (), щоб знайти квадратні і кубічні корені чисел. Квадратний корінь використовує показник 0.5:

Math.pow (5, 0.5); // \u003d Math.sqrt (5) \u003d 5 ** (1/2)\u003e 2.23606797749979
Однак, через примхи з плаваючою точкою, ви не можете точно припустити правильний результат:

Math.pow (2.23606797749979,2)\u003e 5.000000000000001
У таких ситуаціях, ви вам доведеться вдаватися до відсікання знаків у числа або округлення до будь-якого значення.

Деякі, з незрозумілих причин в JavaScript плутають функцію Math.pow () з Math.exp (), яка є експоненціальною функцією для чисел, в цілому. Примітка: в англійській мові «показник ступеня» перекладається як «exponent», тому це швидше відноситься до англомовним, хоча існують і альтернативні назви показника ступеня, такі як index, power.

математичні константи

Робота з математикою в JavaScript полегшується за рахунок ряду вбудованих констант. Ці константи є властивостями об'єкта Math. Варто звернути увагу, що константи пишуться у верхньому регістрі, а не CamelCase нотації.

Тільки зареєстровані користувачі можуть брати участь в опитуванні. , будь ласка.

Теги: Додати теги

Технічно термін "генератор випадкових чисел» - це абсурд, тому що числа самі по собі не є випадковими. Наприклад, 100 - це випадкове число? А 25? Що насправді означає цей термін, так це те, що створюється послідовність чисел, що з'являються випадковим чином. Це породжує більш складне питання: що таке послідовність випадкових чисел? Єдино правильна відповідь: послідовність випадкових чисел - це послідовність, в якій всі елементи є непов'язаними. Це визначення призводить до такого парадоксу, що будь-яка послідовність може бути як випадковою, так і невипадковою залежно від того, як ця послідовність отримана. Наприклад, наступний рядок чисел
1 2 3 4 5 6 7 8 9 0
була отримана друкуванням верхнього рядка клавіатури по порядку, таким чином, послідовність не може розглядатися як згенерувала випадковим чином. Але як бути, якщо ви отримаєте ту ж саму послідовність, виймаючи пронумерований тенісні кулі з бочки. В даному випадку це вже випадковим чином згенерувала послідовність. Даний приклад показує, що випадковість послідовності залежить від того, як вона була отримана, а не від неї самої.

Пам'ятайте, що послідовність чисел, що згенерувала комп'ютером, є детермінованою: кожне число, окрім першого, залежить від попередніх чисел. Технічно це означає, що комп'ютером може бути згенерована тільки квазіслучайном послідовність чисел, тобто насправді вони не є істинно випадковими. Однак, цього достатньо для більшості завдань і такі послідовності для простоти називатимуться випадковими. Один дуже цікавий метод був розроблений Джоном фон Нейманом; його часто називають середньоквадратичним. В даному методі попереднє випадкове число зводиться в квадрат, а потім з результату виділяються середні цифри. Наприклад, якщо ви створюєте числа з трьох цифр, а попереднє число було 121, то зведення в квадрат дає результат 14641. Виділення трьох середніх цифр дає наступне випадкове число 464. Недоліком даного методу є те, що він має дуже короткий період повторення, званий циклом . З цієї причини даний метод сьогодні не використовується. Сучасні методи генерації випадкових чисел значно складніше.

Випадкові числа в PHP

У PHP є дві групи функцій по роботі з випадковими числами. Чисто зовні їх можна відрізнити по префіксу mt_ у всіх функцій однієї з груп.

застарілі функції
Функція rand. Повертає ціле число від нуля до значення RAND_MAX (що дорівнює 32767). Може мати два необов'язкових цілих параметра - якщо вони вказані, то генерується випадкове число від першого параметра до другого.

Echo rand (); echo rand (1,100); // Видаємо випадкове число від 1 до 100

Функція srand. Задає послідовність випадкових чисел, що видається функцією rand. Має цілий параметр - при різних значеннях цього параметра rand видаватиме різні послідовності чисел. Функцію srand досить викликати тільки один раз перед усіма викликами функції rand. Приклад використання:

Srand (1288); // Ініціалізація генератора випадкових чисел for ($ i \u003d 0; $ i<5;$i++){ echo rand(); echo "
"; }

Увага! Починаючи з версії PHP 4.2.0 не потрібно викликати srand () - PHP робить це автоматично.
Функція getrandmax (). Повертає значення максимального випадкового числа (32767).

Функції другої групи (з префіксом mt_)
Їх назви та дії аналогічні функціям першої групи - mt_rand, mt_srand і mt_getrandmax. Основна відмінність - що випадкові числа беруться з більш широкого діапазону: від 0 до 2 19937 - 1. Більш того, ці функції працюють значно швидше за старі аналоги, так як використовують генератор випадкових чисел Вихор Мерсенна (Mersenne Twister), розроблений в 1997 японськими вченими. Звідси і префікс mt_ (Mersenne Twister).
Приклад використання:

// Видаємо випадкове число від 1000 до 2000 echo mt_rand (1000, 2000);

Випадкові числа в JavaScript

Випадкове число в JavaScript можна згенерувати за допомогою Math.random (). Однак це буде дробове число в діапазоні від 0 до 1 (не включаючи 0 і 1). Щоб згенерувати випадкове ціле число в потрібному діапазоні необхідно написати свою функцію

опис

Метод Math.random () повертає псевдовипадкове число між 0 і 1.

Псевдовипадкове число створюється в діапазоні від 0 (включно) до 1 (виключно), тобто повертається число може бути нулем, але завжди буде менше одиниці.

Для округлення числа з плаваючою точкою до цілого можна скористатися наприклад методом Math.floor ().

синтаксис

Math.random ()

значення, що повертається

  • Число з плаваючою точкою в діапазоні від 0 (включно) до 1 (виключно).

Метод Math.random () в основному використовують для генерації псевдо-випадкового числа в певному діапазоні. Наприклад, нам треба отримати число в діапазоні від 50 до 100 (включно). Для цього нам доведеться написати наступний код:

Document.write (Math.floor (Math.random () * 51 + 50));

Розглянемо докладно як працює наш приклад і чому використовується саме така форма запису. Насамперед нам треба вказати мінімальне отримується значення з потрібного діапазону, в нашому прикладі це число 50. Тепер нам потрібно якимось чином отримати випадкове число, яке при додаванні з числом 50 не перевищуватиме в сумі число 100. Як ми знаємо з математики, знаходження невідомого доданка робиться шляхом вирахування із суми відомого доданка. 100 - 50: отримуємо різницю 50. Тепер для перевірки, підходить нам це число чи ні, помножимо його на можливе мінімальне та максимальне число повертається методом Math.random (). Множимо мінімальне 0.004704564176082244 * 50 \u003d 0.2 ... і максимальне 0.9999999999746223 * 50 \u003d 49.9 ... І так ми бачимо, що при множенні різниці на максимально можливе випадкове число в результаті дає нам цілу частину числа на одиницю менше, ніж потрібно. Щоб виправити ситуацію, нам потрібно всього лише додати одну одиницю до 50, тобто 50 + 1 \u003d 51, тепер якщо отримане число помножити на максимально можливе число повертається методом у нас буде виходити число 50.9 ... - це те, що нам треба, після додавання чисел 50.9 + 50, отримуємо 100.9. Для округлення числа до цілого використовуємо метод Math.floor (). Таким чином, формула для отримання потрібного числа виглядає наступним чином: max - min + 1. Перепишемо наведений вище приклад:

Var max \u003d 100, min \u003d 50; document.write (Math.floor (Math.random () * (max - min + 1) + min));

Ця формула особливо корисна, коли заздалегідь невідомо в якому діапазоні необхідно отримати випадкове число.

приклад

Назва документу

Псевдовипадкове число в діапазоні від 1 до 10.





Сподобалася стаття? поділіться їй