gpt4 book ai didi

c - 使用WELL512获取一定范围内的随机实数

转载 作者:行者123 更新时间:2023-12-05 00:37:32 26 4
gpt4 key购买 nike

我正在使用 this paper 中描述的 WELL512 伪随机数生成器函数.该函数返回一个随机 unsigned long值(value)。

我如何使用这个返回值在一定范围内产生一个随机实数 - 比如 340.92491 和 859812.53198 之间的浮点数。

C rand() 函数的文档似乎警告不要使用 mod。

最佳答案

好吧,从数学上讲,它只是:

min_value + (max_value - min_value) * (my_random() / (long double)ULONG_MAX)

(假设 my_random() 返回一个介于 0 和 ULONG_MAX 之间的均匀分布数)

但是,取决于 min_value 的确切值, max_value , 和 ULONG_MAX ,一些浮点数几乎肯定会比其他浮点数更有可能。

每个可能的随机无符号长整型都通过此公式映射到浮点数。但是由于 min_value之间的不同浮点数的数量和 max_value几乎可以肯定不完全是 ULONG_MAX , 一些 unsigned long 将映射到相同的浮点数,或者一些浮点数将没有 unsigned long 映射到它们,或者两者都有。

解决这个问题以使结果真正统一是...非平凡,我认为。也许有人读得比我能引用一篇论文还要好。

[编辑]

或者看这个问题的答案:

Generating random floating-point values based on random bit stream

该答案取决于 IEEE double 的内部结构表示。我也不确定我是否完全理解它是如何工作的。

[编辑 2]

好的,现在我明白它是如何工作的了。这个想法是在最小值和最大值之间选择一个随机浮点表示,然后以与其指数表示的比例成反比的概率将其丢弃。因为对于均匀分布,(比如)1/2 和 1 之间的数字需要是 1 和 2 之间的数字的一半,但这些范围内的浮点表示数是相同的。

我认为您可以通过首先在对数尺度上选择指数来使该代码更有效 - 例如,通过使用 ffs在一个随机选择的整数上——然后随机选择尾数。嗯...

关于c - 使用WELL512获取一定范围内的随机实数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6785113/

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