gpt4 book ai didi

c++ - std::uniform_real_distribution(0,1) 能否返回大于 0.99999999999999994 的值?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:18:29 24 4
gpt4 key购买 nike

从 C++11 header 中,我想知道 std::uniform_real_distribution<double> 是否对象可以吐出大于 0.9999999999999994 的 double ?如果是这样,将此值乘以 2 将等于 2。

例子:

std::default_random_engine engine;
std::uniform_real_distribution<double> dist(0,1);

double num = dist(engine);

if (num > 0.99999999999999994)
num = 0.99999999999999994;

int test1 = (int)(0.99999999999999994 * 2);
int test2 = (int)(0.99999999999999995 * 2);

std::cout << test1 << std::endl; // 1
std::cout << test2 << std::endl; // 2

最佳答案

您的代码中可以返回的最大值 dist(engine)std::nextafter(1, 0)。假设 IEEE-754 binary64 格式为 double,这个数字是

0.99999999999999988897769753748434595763683319091796875

如果您的编译器将浮点文字舍入到最接近的可表示值,那么这也是您在代码中编写 0.99999999999999994 时实际获得的值(第二个最接近的可表示值当然是 1).

关于c++ - std::uniform_real_distribution<double>(0,1) 能否返回大于 0.99999999999999994 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30770110/

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