Нужен генератор случайных чисел без 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, время: 13:53. |