检查双重平等是否安全?

Is checking a double for equality ever safe?(检查双重平等是否安全?)
本文介绍了检查双重平等是否安全?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我有以下代码:

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?

推荐答案

你不应该检查浮点数是否相等的原因是浮点数不是完全精确的——存储中有一些数字不准确,比如那些这延伸到尾数和重复小数太远(请注意,我正在谈论以2为底的重复小数).您可以将这种不精确性视为四舍五入".超出浮点数精度的数字将被截断,实际上是向下舍入.

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.

如果它没有改变,它将保持这种平等.但是,如果你稍微改变它,你可能不应该使用等式,而是使用像 (x < 0.0001 && x > -.0001) 这样的范围.

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).

简而言之:只要你不是在很小的级别上玩 x 就可以了.

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

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

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

How to send data to COM PORT using JAVA?(如何使用 JAVA 向 COM PORT 发送数据?)
How to make a report page direction to change to quot;rtlquot;?(如何使报表页面方向更改为“rtl?)
Use cyrillic .properties file in eclipse project(在 Eclipse 项目中使用西里尔文 .properties 文件)
Is there any way to detect an RTL language in Java?(有没有办法在 Java 中检测 RTL 语言?)
How to load resource bundle messages from DB in Java?(如何在 Java 中从 DB 加载资源包消息?)
How do I change the default locale settings in Java to make them consistent?(如何更改 Java 中的默认语言环境设置以使其保持一致?)