2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 странности с /dev/random
Сообщение02.03.2009, 08:07 
Аватара пользователя
решил проверить чему будет равна вероятность бросания монеты используя perl+linux+/dev/random
ожидал что она с увеличением числа итераций будет все точнее приближаться к 0.5000000000000001.... или к 0.499999999999999999999.
но на самом деле даже при большом количестве испытаний вероятность довольно сильно скачет:

Код:
#!/usr/bin/perl
$total=1;
$tt=0;

open(FR,'</dev/urandom');
while (1) {
    $g=getc(FR);
    $r=(ord($g)+0)/255.0;
     if ( $r  > 0.5 ) {
       $tt+=1;
     }
     printf("total: %d tt: %d p=%s\n",$total,$tt,$tt/$total) if $total%100000 == 0;
     $total+=1;
}


пробовал на linux,solaris с ruby и perl - результат одинаков - стабильность только до4го знака.
...................................................................
total: 24400000 tt: 12199358 p=0.49997368852459
total: 24500000 tt: 12249208 p=0.499967673469388
total: 24600000 tt: 12299211 p=0.499967926829268
total: 24700000 tt: 12349160 p=0.499965991902834
total: 24800000 tt: 12399328 p=0.499972903225806
total: 24900000 tt: 12449338 p=0.499973413654618
total: 25000000 tt: 12499403 p=0.49997612
total: 25100000 tt: 12549564 p=0.499982629482072
total: 25200000 tt: 12599578 p=0.499983253968254
total: 25300000 tt: 12649923 p=0.499996956521739
total: 25400000 tt: 12699960 p=0.49999842519685
total: 25500000 tt: 12750156 p=0.500006117647059
total: 25600000 tt: 12800283 p=0.5000110546875
total: 25700000 tt: 12850340 p=0.500013229571984
total: 25800000 tt: 12900299 p=0.500011589147287
total: 25900000 tt: 12950054 p=0.500002084942085
total: 26000000 tt: 13000077 p=0.500002961538462
total: 26100000 tt: 13050041 p=0.500001570881226
...................................................................

 
 
 
 
Сообщение02.03.2009, 08:36 
Аватара пользователя
Циферки стабилизируются просто не так быстро как вам хотелось бы.

А значение $p$ ведет себя как нормально распределенная случайная величина - см. http://mathworld.wolfram.com/CentralLimitTheorem.html

 
 
 
 
Сообщение02.03.2009, 08:46 
Генераторы случайных чисел обычно базируются на четырёхбайтовых целых числах, это -- порядка $10^9$. С другой стороны, точность приближения к половинке -- порядка $\sqrt n$. Для достижения четвёртого-пятого знака требуется как раз порядка $10^9$ чисел, но это -- уже период генератора.

 
 
 
 
Сообщение02.03.2009, 08:57 
Аватара пользователя
ewert в сообщении #190869 писал(а):
Генераторы случайных чисел обычно базируются на четырёхбайтовых целых числах, это -- порядка $10^9$.

/dev/random не такой - см. http://ru.wikipedia.org/wiki//dev/random

 
 
 
 
Сообщение02.03.2009, 09:14 
Аватара пользователя
Попробуйте на компьютере проверить закон повторного логарифма. У меня лично ничего не получилось. http://dxdy.ru/topic5246.html

 
 
 
 
Сообщение02.03.2009, 09:40 
Аватара пользователя
точно, вроде сходится, но очень медленно. это заметнее если смотреть на дельту:

total: 30000000 tt: 15005563 delta: -0.000142567 p=0.500185433
total: 40000000 tt: 20004850 delta: -0.000064183 p=0.500121250
total: 50000000 tt: 25003826 delta: -0.000044730 p=0.500076520
total: 60000000 tt: 30004195 delta: -0.000006603 p=0.500069917
total: 70000000 tt: 35002570 delta: -0.000033202 p=0.500036
.....................................................................
total: 540000000 tt: 270004512 delta: 0.000004123 p=0.500008356
total: 550000000 tt: 275006194 delta: 0.000002906 p=0.500011262
total: 560000000 tt: 280005618 delta: -0.000001230 p=0.500010032
total: 570000000 tt: 285003698 delta: -0.000003544 p=0.500006488
total: 580000000 tt: 290002644 delta: -0.000001929 p=0.500004559
total: 590000000 tt: 295002737 delta: 0.000000080 p=0.500004639
total: 600000000 tt: 300003055 delta: 0.000000453 p=0.500005092

 
 
 
 
Сообщение02.03.2009, 10:04 
total=30000000 sqrt(total)*abs(delta)=0.780872
total=40000000 sqrt(total)*abs(delta)=0.405929
total=50000000 sqrt(total)*abs(delta)=0.316289
total=60000000 sqrt(total)*abs(delta)=0.051147
total=70000000 sqrt(total)*abs(delta)=0.277788
............................................................
total=540000000 sqrt(total)*abs(delta)=0.095810
total=550000000 sqrt(total)*abs(delta)=0.068152
total=560000000 sqrt(total)*abs(delta)=0.029107
total=570000000 sqrt(total)*abs(delta)=0.084612
total=580000000 sqrt(total)*abs(delta)=0.046456
total=590000000 sqrt(total)*abs(delta)=0.001943
total=600000000 sqrt(total)*abs(delta)=0.011096

Глючит генератор -- последние цифирки шибко малы (все должны быть порядка 0.5).

 
 
 
 
Сообщение02.03.2009, 17:09 
Делали ми лабораторную в которой оценивали качество генератора случайных чисел. Мы там оценивали дисперсию на разных измерениях. Так как результат дожлжны были увидеть что дельше 4-5 измерения ниодин псевдогенератор не проходит тест.

 
 
 [ Сообщений: 8 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group