检查双重平等是否安全?

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.

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

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Show progress during FTP file upload in a java applet(在 Java 小程序中显示 FTP 文件上传期间的进度)
How to copy a file on the FTP server to a directory on the same server in Java?(java - 如何将FTP服务器上的文件复制到Java中同一服务器上的目录?)
FTP zip upload is corrupted sometimes(FTP zip 上传有时会损坏)
Enable logging in Apache Commons Net for FTP protocol(在 Apache Commons Net 中为 FTP 协议启用日志记录)
Checking file existence on FTP server(检查 FTP 服务器上的文件是否存在)
FtpClient storeFile always return False(FtpClient storeFile 总是返回 False)