gpt4 book ai didi

c++ - 将 float 加到零的精度

转载 作者:行者123 更新时间:2023-12-02 10:12:27 28 4
gpt4 key购买 nike

我熟悉将浮点数加/减在一起的不准确性,但我想知道是否将任何浮点数添加到浮点值为零会导致类似的不准确性,因为我并不完全熟悉在这种情况下如何将浮点数加在一起.
简单地说我的问题:

float sum = 0.0f;
sum += value;

assert(sum == value); // Is this guaranteed?
(编辑:
正如评论中指出的那样, similar question如果将零添加到浮点数将产生变量更改,则存在。如果操作数为零,我可以理解如何优化 CPU 以忽略加法,但是我想知道是否可以保证相反的情况,如果将非零浮点操作数添加到存储零的变量是可能的导致一个不等于添加的非零值的值。)
为了澄清为什么这个问题出现在我的脑海中,我正在处理的实际代码涉及在某些条件下将浮点数清除为零,然后在条件 block 之外将浮点数增加某个值,但我认为它可能会更好改为将浮点数设置为该值并跳过递增它。
例如:
float sum = 0.0f;
for (auto && thing : things)
{
if (thing.someCondition)
sum = 0.0f;
else if (thing.otherCondition)
{ /* more code here... */ }
else
{ /* more code here... */ }

sum += thing.value;
}
相比:
float sum = 0.0f;
for (auto && thing : things)
{
if (thing.someCondition)
{
sum = thing.value;
continue; // Continue to skip incrementing.
}
else if (thing.otherCondition)
{
/* more code here... */
}
else
{
/* more code here... */
}

sum += thing.value;
}
(忽略最后一个代码块可以将增量逻辑移至其他情况并避免使用 continue 的事实。我只是保持它的格式以对比应该始终执行增量的前一个 block 。)

最佳答案

将零添加到另一个浮点数会产生一个与另一个浮点数比较相等的值(或者另一个浮点数是 nan,结果是 nan,因此它们不比较相等,但都是 nan)。

关于c++ - 将 float 加到零的精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63006069/

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