gpt4 book ai didi

c++ - 如何将随机整数转换为均匀的实数 [0,1[ 分布

转载 作者:行者123 更新时间:2023-11-30 01:17:42 27 4
gpt4 key购买 nike

在维基百科上,我发现了以下 random number generator :

#include <stdint.h>

/* The state must be seeded so that it is not everywhere zero. */

uint64_t s[ 2 ];

uint64_t next(void) {
uint64_t s1 = s[ 0 ];
const uint64_t s0 = s[ 1 ];
s[ 0 ] = s0;
s1 ^= s1 << 23;
return ( s[ 1 ] = ( s1 ^ s0 ^ ( s1 >> 17 ) ^ ( s0 >> 26 ) ) ) + s0;
}

现在,当实现时(对 s[0] 和 s 1 使用随机种子),效果很好,但输出的数字如下:

2318509732609079156, 5455176535758408500, 14446583927462861784, 3420274542024626201, etc.

我现在的问题是:如何将这些数字转换为均匀实数分布 [0,1[,即包含 0 并排除 1?

最佳答案

在 C++11 中,有一种方法可以使用 std::uniform_real_distribution 在一个区间内生成均匀分布的数字:

// uniform_real_distribution
#include <iostream>
#include <random>

int main()
{
std::default_random_engine generator;
std::uniform_real_distribution<double> distribution(0.0,1.0);
double random_number_in_01 = distribution(generator);

return 0;
}

关于c++ - 如何将随机整数转换为均匀的实数 [0,1[ 分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23883607/

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