你可以用以下代码测试一下概率。
[Fortran] 纯文本查看 复制代码 Program Main
real :: a
integer(8) :: i = 0_8 , j
integer(8) :: ddc(38) = 0
call RANDOM_SEED()
do
call RANDOM_NUMBER(a)
j = int(-log10(a)) + 1
ddc(j) = ddc(j) + 1
i = i + 1_8
if( mod(i,100000000_8) == 0_8 ) then
write(*,'("Total:",g0)') i
write(*,'(*(5i16,/))') ddc
write(*,'("check:",g0)') sum(ddc)
end if
end do
read(*,*)
End Program Main
这个代码用来统计,N次取随机数的结果,其结果各数量级的个数,也就是 0.1以内的个数,0.01以内的个数,0.001以内的个数...
当 N 足够大时,个数之间的比例大约是
0.9 , 0.09 , 0.009 .... 加起来约等于 1
如图:
也就是说,我算了 20亿次,才得到一个 e-10 次方数量级的数。
你要想得到 0 ,你需要大约10次得到 e-38 次方数量级的数的机会。
|