gpt4 book ai didi

c - Rand() 转换警告

转载 作者:行者123 更新时间:2023-11-30 17:08:54 24 4
gpt4 key购买 nike

我有:

r = ((float)(rand()/(float)(RAND_MAX)) *  BOUND);

这也给出了相同的警告:

r = ((rand()/(float)(RAND_MAX)) *  BOUND);

还有警告:

 conversion to ‘float’ from ‘int’ may alter its value

有什么可能的修复方法吗?

最佳答案

RAND_MAXrand() 本身的返回值都是 int 类型。

32 位 int 的最大值 (INT_MAX) 最多可达 10 位数字。

浮点——通常作为 32 位 FP 实现——具有大约 6 位精度。

这意味着没有足够的精度来区分,例如2,147,483,647 来自 2,147,483,646。这就是编译器生成警告的原因:您的转换并非在所有情况下都是安全的。

快速解决方法是使用 double,它通常作为 64 位 FP 实现,具有大约 15 位精度。这足以容纳 32 位 int(但不足以容纳 64 位)。

总而言之,rand() 是一个糟糕的函数,而且标准也允许它在“随机性”方面也很糟糕。如果您需要好的随机数,则不应依赖标准库,而应使用专用的第三方解决方案(通常包括立即返回浮点的函数)。

关于c - Rand() 转换警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33468062/

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