Нужен генератор случайных чисел без Math.random
Помогите сделать код есть вот такая формула "Если пользователю потребуется, чтобы случайное число x находилось в интервале (a; b), отличном от (0;1), нужно воспользоваться формулой x=a+(b-a)*r, где r - случайное число из интервала (0;1)."
|
Помочь вам написать генератор псевдослучайных чисел? :)
|
без Math.random? но почему? :blink:
можно по колдовать с тайм кодом. с ms |
Цитата:
Если использовать метку времени, то случайным число не будет. |
Nexus,
как его еще получить? |
function rand(){ return (new Date()).getMilliseconds()/1000; }; alert(rand()+'; '+rand()); |
j0hnik, понятия не имею, мне всегда Math.random хватало.
|
Цитата:
|
Цитата:
|
и еще один вопрос, как сделать так чтобы число генерировалось в заданном в ручную диапазоне например от 1 до 10?
|
Kirill_98,
var rnd =(a, b)=> Math.floor(('0.'+ new Date().getMilliseconds()) * (b - a)) + a; console.log(rnd(10,20)); |
Цитата:
Мне даже интересно взялся бы кто-нибудь действительно писать ГПСЧ. Чтобы ваше задание выполнить, можно отправить запрос на сервер, который вернет случайное число. |
Kirill_98,
var rnd =(a, b)=> Math.floor(('0.'+ (new Date().getMilliseconds()+''.slice(1)) ) * (b - a)) + a; console.log(rnd(0,100)); дайте преподу секундомер, и пусть попробует угадать генерируемое число, если не угадает значит случайное. |
Цитата:
я попробывал сделать вот так function rand(){ return (new Date()).getMilliseconds()/1000; }; function getRandomCount(){ var resultObject = document.getElementById('resultPlace'); resultObject.innerHTML = ""; for (var i = 0; i < 5; i++) { var a = Number (document.getElementById('a').value); var b = Number (document.getElementById('b').value); var result = a + (b - a) * rand(); resultObject.innerHTML += "<br>Сгенерированное число: " + result; } } </script> вопрос как сделать так чтобы выкидывал допустим 5 разных чисел, в моем коде он выдает одно и тоже число 5 раз |
var rnd =(a, b)=> { var n = 99999900; while(n--) n; return Math.floor(('0.'+ (new Date().getMilliseconds()+''.slice(1)) ) * (b - a)) + a; }; console.log(rnd(0,100)+'--'+rnd(0,100)+'--'+rnd(0,100)+'--'+rnd(0,100)+'--'+rnd(0,100)); Nexus проблема решена |
генератор случайных чисел без Math.random
Цитата:
Цитата:
<script> function rund(b) { var a = (new Date).getMilliseconds(); return function() { a = (25173 * a + 13849) % 65536; return a % b + 1 } }; var x = rund(10); for (var i=0; i< 1000; i++) document.write(x()+",") </script> |
Цитата:
|
Рони, прокомментируй
a = (25173 * a + 13849) % 65536; |
рони,
есть варианты генерировать без date? |
var __rand_last_val, __rand_last_time; function rand() { var res = (new Date()).getMilliseconds() / 1000; if (res == __rand_last_time) res = res * +('0.' + __rand_last_val.toString().substr(-2)) + __rand_last_val / 1000; else __rand_last_time = res; return __rand_last_val = res; }; var i = 10, r = [] while (i--) r.push(rand()); console.log(r); |
Цитата:
|
в голову приходит только генерировать используя различные таймкоды,
время выполнения определенных частей кода, время ответа сервера, время общения с какому либо адресу и ответ сервера... в общем все связано со временем. |
|
Цитата:
|
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> </head> <body> min <input type="number" min="0" max="999999" value="0" id="inp1"><br> max <input type="number" min="0" max="999999" value="10" id="inp2"><br> чисел <input type="number" min="0" max="100" value="1" id="inp3"><br> <button>Кнопка</button> <div id="text"></div> <script> $('button').click(function(){ var data = { 'jsonrpc': '2.0', 'method': 'generateIntegers', 'params': { 'apiKey': '00000000-0000-0000-0000-000000000000', 'n': inp3.value, 'min': inp1.value, 'max': inp2.value, 'replacement': true, 'base': 10 }, 'id': 2601 }; $.ajax({ url: 'https://api.random.org/json-rpc/1/invoke', type: "POST", data: JSON.stringify(data), contentType: "application/json; charset=utf-8", dataType: "json", success: function(result) { $('#text').html(result.result.random.data.toString()); } }); }); </script> </body> </html> вот трушный рандом, сгенерированный на основе атмосферного шума! преподу привет. |
function getRandom(a, b){ var r = window.crypto.getRandomValues(new Uint32Array(1))/0xffffffff; var x = a+(b-a)*r; return x } Вот вам без Math.random().:) Но если не использовать никаких API, а лишь чистый javascript - то и получить соответственно можно лишь псевдослучайные числа. А псвевдослучайные и случайные - две большие разницы. Алгоритмов же для псевдослучайных чисел навалом, гуглите да копипастите. При всех алгоритмических хитростях принцип и результат един. |
Всем коллегам привет, препод сказал еще один способ получения СЧ, подстановка чисел и что они там как то меняться должны я чет вообще не догнал может кто сталкивался ?
|
Цитата:
|
Похоже, что это нетотспособ-сенсэй - такие дают задание, а после правильного решения говорят что ты решил его не тем способом и ставят два (хотя в задании ничего не сказано про способ).
Вспоминай что было на парах, никак иначе не понять чего он хочет. |
прикол в том что он не преподавал
|
Цитата:
в статье есть метод перемешивания скорей всего это оно и есть, и еще одно данная статья использовалась у меня на предмете |
почитал вашу статью, всю математику можно переменить в JS , но чем генерировать 1 и 0 ? из того что нашел в статье и применимо в целом к JS это подкидывать монетку, вбивать в input значения, например 1-орел, 0-решка, и пропускать через вашу формулу. или другой подобный тому нехитрый метод.
|
Цитата:
|
Цитата:
|
Цитата:
кто сделает больше? |
<head> <script type="text/javascript" src="//code.jquery.com/jquery-1.9.1.js"></script> <style> .c0 {color:blueviolet;} .c1 {//color:red;} .c0, .c1 { position:relative; font-family:monospace;} .bits {color:brown; position:absolute; left:100pt;} </style> </head> <body> <button id="b">ещё</button> (<span id="num">0</span>) <div id="r"></div> <script> var r0 = 285017901, clr = true, cnt = num = 0; function random() { //console.log('r0:', r0.toString(2).padStart(32, '0')); var left = ((parseInt('01111111110000000000000000000000', 2) & r0) >>> 23); var r1 = (r0 << 10 >>> 1) | left; //console.log('r1:', r1.toString(2).padStart(32, '0')); var right = ((parseInt('111111111', 2)) & r0) << 24 >>> 1; var r2 = (r0 >>> 9) | right; //console.log('r2:', r2.toString(2).padStart(32, '0')); r0 = r1 + r2; $('#r').prepend($('<div>'+r0+' <span class="bits">'+ (r0.toString(2).padStart(32, '0')) +'</span>'+'</div>').addClass('c'+Number(clr))); //console.log('r0:', r0.toString(2)); if(++cnt >= 5) { clr = !clr; cnt = 0; } $('#num').text(++num); } $('#b').on('click', random); </script> </body> |
Белый шум,
:) |
Цитата:
jquery-1.9.1.js Failed to load resource: net::ERR_FILE_NOT_FOUND rand.html:34 Uncaught ReferenceError: $ is not defined at rand.html:34 после того как добавил <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.js"></script> rand.html:25 Uncaught TypeError: r0.toString(...).padStart is not a function at HTMLButtonElement.random (rand.html:25) at HTMLButtonElement.dispatch (jquery-1.9.1.js:3074) at HTMLButtonElement.elemData.handle (jquery-1.9.1.js:2750) |
Kirill_98,
Удали падстарт либо обнови браузер - https://developer.mozilla.org/ru/doc...tring/padStart А работает он в соответствии с алгоритмом по твоей ссылке, только я взял смещение в 9 бит (в js числа 32-битные ЕЯПО, минус 1 бит на знак). |
Вернее, немного не соответствовал. Сейчас поправил, теперь должен соответствовать вроде. С цифирками можно поиграться, если где-то накосячил (я просто сам принцип проверял, а не домашку за студента делал).
|
Часовой пояс GMT +3, время: 19:40. |