gpt4 book ai didi

floating-point - 我们能说 0.5*x + 0.5*x == x 总是正确的吗?

转载 作者:行者123 更新时间:2023-12-04 08:26:33 37 4
gpt4 key购买 nike

0.52 的(负)幂,这意味着它可以完全由 IEEE-754 二进制浮点格式表示。在单精度中它是 0'01111110'00000000000000000000000 .

根据我关闭优化的快速测试( -O0 ),结果是如果 y = 0.5 * x ,然后 y + y == x .但它总是由 IEEE-754 标准保证吗?

我知道一般来说如果 n2 的正整数幂, 和 m = 1.0 / n , y = m * x ,然后添加 y一起n次不产生x .但似乎与n = 2是的。

我错过了什么吗?

最佳答案

不,这是一个简单的反例,带有 double精度浮点数:

double x = 4.9E-324; // minimum positive value
double y = x * 0.5; // this doesn't only look like a zero this positive zero all 0 bits
bool test = y + y == x; // false

IEEE-754 下的浮点数精度有限,除以 2 时可能会丢失信息.在大多数情况下,当您将数字变小以获得准确度时,您可以减小指数,但如上所述,这并不总是足够的。有时你不能减少指数。

任何具有最小指数和奇数尾数的东西都不会保持相等。这样的例子是 x = 5.0E-322 .

关于floating-point - 我们能说 0.5*x + 0.5*x == x 总是正确的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44470088/

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