gpt4 book ai didi

c++ - 与具有浮点值的 0.0 进行比较

转载 作者:行者123 更新时间:2023-11-30 03:28:18 25 4
gpt4 key购买 nike

使用 float 时,有时会出现舍入问题。因此,通常不建议将计算结果与 == 或 != 进行比较,而是使用适当的边界,如 abs(a-b)<1.0e-10。 .

但是用它来比较 0.0 是否合适? ?

我说的是:

double foo(){
//code which can return values that aren't 0.0
//all returns are either literals or global variables defined with literals
return 0.0;
}

在这里f将始终准确地返回 0.0或明确不是 0.0 的数字.具体来说,这些数字的大小都将大于 0.1。但小于 2.0 .

威尔0.0==foo()永远是true如果它返回 0.00.0==foo() 有可能吗?成为true如果foo返回 0.0 以外的值?

最佳答案

在您的情况下使用浮点相等 == 0.0 是完全正确的。

它完全符合函数的意图(如果失败则返回某个值或 0.0)。使用任何其他 epsilon 在某种程度上是任意的,并且需要了解正确值的范围。如果有什么事情发生了变化,那很可能是值的范围而不是 0,所以测试 == 0.0 与 IMO 的其他解决方案相比不亚于 future 的证明。

我看到的唯一问题是某些编译器会警告相等性 (-Wfloat-equal) 的可疑使用...这与警告 int a,b,c; 一样有用; ...; c=a+b; 因为这样的指令可能会导致问题(整数溢出和未定义的行为)。奇怪的是,我从来没有看到第二个警告。

因此,如果您想使用 -Wall -Werror 编译器选项来证明 future ,您可以对失败进行不同的编码(例如使用负值)并测试 foo < 0.0 - 直到有人发现浮点不等式可能需要一个容忍度也很高,并将该构造声明为可疑。

关于c++ - 与具有浮点值的 0.0 进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46697947/

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