gpt4 book ai didi

c - 生成浮点随机值(也为负)

转载 作者:行者123 更新时间:2023-12-05 01:24:13 25 4
gpt4 key购买 nike

如何在 C 中生成浮点随机值? ( 也为负 )

最佳答案

一般来说,要从任意分布生成随机数,您首先要生成均匀随机数,然后将它们传递给累积分布函数的逆函数。

例如,假设您想要在区间 [-10.0, 10.0] 上均匀分布的随机数,而您所得到的只是来自 [0.0, 1.0] 的随机数。 [-10.0, 10.0] 上均匀分布的累积分布函数为:

cdf(x) = 0.05 * x + 0.5   for x in [-10.0, 10.0]

这表示生成的随机数小于 x 的概率。逆是
icdf(y) = 20.0 * y - 10.0   for y in [0.0, 1.0]

(您可以通过切换 x 和 y 轴在纸上轻松获得此信息)。

因此,要获得均匀分布在 [-10.0, 10.0] 上的随机数,您可以使用以下代码:
#include <stdlib.h>

// Returns uniformly distributed random numbers from [0.0, 1.0].
double uniform0to1Random() {
double r = random();
return r / ((double)RAND_MAX + 1);
}

// Returns uniformly distributed random numbers from [-10.0, 10.0].
double myRandom() {
return 20.0 * uniform0to1Random() - 10.0;
}

实际上,您不需要uniform0to1Random(),因为已经有很多来自[0.0, 1.0] 的好的均匀随机数生成器(例如在boost 库中)。

您可以使用该方法通过对逆累积分布进行采样来生成具有几乎任何您想要的概率分布的随机数,如上所示。

http://en.wikipedia.org/wiki/Inverse_transform_sampling更多细节。

关于c - 生成浮点随机值(也为负),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7978759/

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