gpt4 book ai didi

c++ - 将 float 与零进行比较的标准方法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:28 24 4
gpt4 key购买 nike

可能的问题是:比较 float 和零的标准方法是什么?

据我所知直接比较:

if ( x == 0 ) { 
// x is zero?
} else {
// x is not zero??

可能会因浮点变量而失败。

我曾经用过

float x = ...
...
if ( std::abs(x) <= 1e-7f ) {
// x is zero, do the job1
} else {
// x is not zero, do the job2
...

我找到了相同的方法 here .但我看到两个问题:

  1. 随机魔数(Magic Number) 1e-7f(或上面链接中的 0.00005)。
  2. 代码更难阅读

这是一个很常见的比较,我想知道是否有一个标准的简短方法可以做到这一点。喜欢

 x.is_zero();

最佳答案

要将浮点值与 0 进行比较,只需比较它:

if (f == 0)
// whatever

这样比较没有错。如果它没有按照您的预期运行,那是因为 f 的值不是您认为的那样。它本质上与此相同的问题:

int i = 1/3;
i *= 3;
if (i == 1)
// whatever

该比较没有错,但是i 的值不是1。几乎所有的程序员都理解整数值的精度损失;许多人不理解浮点值。

使用“几乎相等”代替 == 是一种高级技术;它通常会导致意想不到的问题。例如,它是不可传递的;也就是说,a 几乎等于 bb 几乎等于 c 不是 a 几乎等于 c

关于c++ - 将 float 与零进行比较的标准方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19754949/

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