gpt4 book ai didi

c - 我的随机 32 位生成错误

转载 作者:太空宇宙 更新时间:2023-11-04 03:27:47 26 4
gpt4 key购买 nike

我想使用以下 C 代码生成 32 位随机数。对于小型“LOOP”,效果很好。但是对于更大的LOOP>1024*1024*4,所有最终值都变成了1/32。您能否解释一下以下代码中的问题所在。

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include<math.h>

#define ul unsigned int
#define ull unsigned long long



ul myrand32(){

ul temp=4294967296.0*drand48();

return temp;

}

int main(){

ul temp;
ull i,j,s,Z, LOOP=1024*1024*1024;
double A[32];
srand(time(NULL));
srand48(time(NULL));

for(i=0;i<32;i++)
A[i]=0;

for(i=0;i<LOOP;i++){
temp=myrand32();

j=temp%32;
A[j]+=1;


}

for(j=0;j<32;j++)
printf("%lf %llu %lf\n", A[j]/i,j,1.0/32);

}

最佳答案

所以 drand48 使用 48 位的随机性。这会生成一个介于 0 和 1 之间的二进制 float 。

0.000000000000000000000000000000000000000000000000
and
0.111111111111111111111111111111111111111111111111

(不完全是 1,但有 48 个“1”。)

乘以 40 亿,变成

0000000000000000000000000000000000000000000000000000000000000000
to
1111111111111111111111111111111111111111111111110000000000000000

截断为5位时,即

00000
00000

乘以所需的范围...例如32,而不是一个很大的数字。

关于c - 我的随机 32 位生成错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39867011/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com