gpt4 book ai didi

转换为 int 和浮点错误?

转载 作者:太空狗 更新时间:2023-10-29 17:03:41 26 4
gpt4 key购买 nike

myInt = int( 5 * myRandom() )

myRandom() 是随机生成的 float ,应该为 0.2。

因此该语句的计算结果应为 1

我的问题:是否有可能由于浮点错误,它不会计算为 1

例如,如果由于浮点错误,应该是 0.2 的东西是否可以LESS?IE,例如考虑以下 3 种可能性:

int(5 * 0.2 )                = 1 //case 1 normal
int(5 * 0.2000000000000001 ) = 1 //case 2 slightly larger, its OK
int(5 * 0.1999999999999999 ) = 0 //case 3 negative, is NOT OK, as int() floors it

case3 甚至可能吗?0.1999999999999999 是浮点错误的结果吗?到目前为止,我实际上从未见过负 epsilon,只有情况 2,当它稍微大一点时,没关系,因为当它被转换为 int() 时,它会“降低”到正确的结果。然而,对于负 epsilon,“地板”效应将使结果 0.9999999999999996 评估为 0。

最佳答案

myRandom 不可能返回 .2,因为 .2 不能表示为 float 或 double ,假设您的目标系统使用的是 IEEE 754 二进制浮点标准,这是绝大多数默认值。

如果 myRandom() 返回最接近 .2 的可表示数字,则 myInt 将为 1,因为可表示为 float 的最接近 .2 的数字略大于 .2(它是 0.20000000298023223876953125),因此是最接近的可表示 double (0.20000000000000001110223024625156540423631668090820312)。

在其他情况下,情况并非如此。例如,最接近 .6 的 double 是 0.59999999999999997779553950749686919152736663818359375,因此 myInt 将为 2,而不是 3。

关于转换为 int 和浮点错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11350994/

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