检查平等的双重安全吗? [英] Is checking a double for equality ever safe?

查看:152
本文介绍了检查平等的双重安全吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下代码:

  double x = 0; 

... ...做的东西...}

if(x == 0){

}

我总是被教导你不应该检查花车是否平等。检查是否等于零有什么不同?

浮点数不是非常精确 - 存储中存在一些不准确的数字,比如那些延伸到尾数和重复小数点的数字(请注意,我正在谈论重复以小数点为基数的小数)。你可以把这种不精确的想法看成四舍五入。超出浮点数字精度的数字被截断,实际上四舍五入。

如果没有改变,它将保持相等。然而,如果你稍微改变它,你可能不应该使用平等,而是使用(x <0.0001& x> -.0001)

简而言之:只要你不是在一个很小的级别上玩x,就可以。


I have the following code:

double x = 0;

{ ...do stuff ...}

if(x == 0){

}

I was always taught that you shouldn't check floats for equality. Is checking to see if it is equal to zero any different?

解决方案

The reason you shouldn't check floats for equality is that floating point numbers are not perfectly precise -- there's some inaccuracy in storage with some numbers, such as those that extended too far into the mantissa and repeating decimals (note that I'm talking about repeating decimals in base 2). You can think of this imprecision as "rounding down". The digits that extend beyond the precision of the floating-point number are truncated, effectively rounding down.

If it has not changed, it will keep that equality. However, if you change it even slightly, you probably should not use equalities, but instead a range like (x < 0.0001 && x > -.0001).

In short: as long as you're not playing with x at a very small level, it's OK.

这篇关于检查平等的双重安全吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆