|
Как повысить "мощность" Rnd -- с Single до Double?
|
|||
---|---|---|---|
#18+
Eolt А битовые операции? SHL, SHR, AND/OR/XOR ? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2020, 10:54 |
|
Как повысить "мощность" Rnd -- с Single до Double?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2020, 11:02 |
|
Как повысить "мощность" Rnd -- с Single до Double?
|
|||
---|---|---|---|
#18+
Спасибо коту с сигаретой. Автор вобщем тебе можем насетапить любой генератор какой хочешь. Инфа - сотка. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2020, 11:10 |
|
Как повысить "мощность" Rnd -- с Single до Double?
|
|||
---|---|---|---|
#18+
Снова понадобился датчик случайных чисел. Перечитал ветку, и после этого не успел даже начать размышлять, как всплыло решение: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
-- замечу, что в потоке генерируемых чисел значения будут повторяться, но сама последовательность чисел "зациклится" только через 2^32 шагов. Видно, что здесь Rnd используется только для производства каждого конкретного случайного числа, а за внутреннее состояние датчика (и его модификацию) отвечает longinnerstate (и его инкрементация) Без "+ Rnd" в последней формуле последовательность выдаваемых чисел выглядит как монотонно убывающая. Понятно, что когда-то она скакнёт вверх, но меня такое поведение всё равно не устраивает, так что пришлось вписать "+ Rnd". ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2021, 08:10 |
|
Как повысить "мощность" Rnd -- с Single до Double?
|
|||
---|---|---|---|
#18+
повторяться будут и внутри скобок (потеря точности) (-Abs(CSng(longinnerstate) + Rnd)) longinnerstate=1^9 Rnd=0.9 И "LET" для простых переменных можно не писать уже больше 30лет. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2021, 14:55 |
|
Как повысить "мощность" Rnd -- с Single до Double?
|
|||
---|---|---|---|
#18+
имел ввиду миллиард, как здесь (да и для 100млн тоже) exp98 повторяться будут и внутри скобок (потеря точности) (-Abs(CSng(longinnerstate) + Rnd)) longinnerstate=10^9 Rnd=0.9 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2021, 17:16 |
|
Как повысить "мощность" Rnd -- с Single до Double?
|
|||
---|---|---|---|
#18+
exp98, да, спасибо, значит нужно поставить "* Rnd" вместо "+ Rnd". А Let я пишу, потому что мне ндравится . ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2021, 18:47 |
|
Как повысить "мощность" Rnd -- с Single до Double?
|
|||
---|---|---|---|
#18+
Иван FXS значит нужно поставить "* Rnd" вместо "+ Rnd". В простых случаях известны распределения для (X+Y) и (X*Y) случ-х независимых величин. 1) Уже говорили про X+Y, когда обе имеют р.р. на [a; b] - тогда имеем треугольник или разновидность трапеции, когда отрезки разные, или даже 2-х модовую трапецию. Имеем различную частоту выпадания значения t=(X+Y) 2) Пусть X, Y р.р. на [0; a] (вариант попроще), тогда (X*Y) имеет пл.распр. p(t)= Ln(a^2/t)/a^2 на ]0; a^2]. Т.о., она линейно убывает от Ln(t), причём p(a^2)= 0, p(0+) -->беск. Имеем криволинейный треугольник и тоже различную частоту выпадания (X*Y). 3) Пусть Y р.р. на [a; b], а X имеет абсолютно непрерывную ф-цию распр F(t). Тогда (X+Y) имеет пл.распр. p(t)= (F(t-a) - F(t-b))/(b-a). Любая ф.р. всегда сигмоидна (в частности, для р.р. она линейна только на отрезке, а вне его постоянна). Она не обязательно имеет линейные участки, поэтому и p(t), будучи dF(t)/dt, не обязана быть const. Опять имеем различную частоту выпадания (X+Y). В этом варианте для ГПСЧ нужно выбирать участки значений t, где F(t) ведёт себя как можно более линейно (как у р.р. , и даже наклон как у р.р. ), пока это приемлемо. Впрочем точно так же как и в остальных случаях. Но если F(t) где-то линейно, то там же его плотносоть ~const. П.С. Всех с праздниками, к кому это относится. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2021, 17:08 |
|
Как повысить "мощность" Rnd -- с Single до Double?
|
|||
---|---|---|---|
#18+
Иван FXS, охо-хо-хо, ММК на стандартном генераторе это нечто потратьте время, переведите хоть один из нормальных генераторов, тынц там для линейного распределения ещё есть варианты PS: для ММК используются генераторы для линейного распределения, выдавающие значения (0..1], а не [0..1) как в стандартных либах ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2021, 17:51 |
|
Как повысить "мощность" Rnd -- с Single до Double?
|
|||
---|---|---|---|
#18+
x1ca4064 1. Почитайте про линейные конгруэнтные генераторы: x[n+1]=(A*X[n]+B) mod C Rnd[n+1]=x[n+1]/C нужно правильно выбрать параметры A,B,C и алгоритм инициализации (x[0]), обычно, A,B взаимно просты, C-степень 2 минус 1) x1ca4064 A=44485709377909 B=11863279 С=2^48 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2022, 15:26 |
|
|
start [/forum/topic.php?fid=16&msg=40126030&tid=1339596]: |
0ms |
get settings: |
6ms |
get forum list: |
6ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
32ms |
get topic data: |
2ms |
get forum data: |
1ms |
get page messages: |
191ms |
get tp. blocked users: |
0ms |
others: | 361ms |
total: | 601ms |
0 / 0 |