Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不带任何公差的浮点比较_Java - Fatal编程技术网

Java 不带任何公差的浮点比较

Java 不带任何公差的浮点比较,java,Java,这就是我对浮点等于运算的了解: 要真正比较浮点数是否相等,通常需要在允许的微小差异范围内进行比较;该范围通常被视为公差或ε 即 这是唯一一种方法,还是有其他方法可以在没有任何公差的情况下比较精确值浮点数。使用静态Double#compare(Double d1,Double d2)方法进行内部Double表示比较如果确实需要它使用静态Double#compare(双d1,双d2)内部double表示比较的方法如果您确实需要它,=操作符比较两个double值以精确相等 例如: 1.0 == 2.0

这就是我对浮点等于运算的了解:

要真正比较浮点数是否相等,通常需要在允许的微小差异范围内进行比较;该范围通常被视为公差或ε


这是唯一一种方法,还是有其他方法可以在没有任何公差的情况下比较精确值浮点数。

使用静态
Double#compare(Double d1,Double d2)
方法进行内部
Double
表示比较如果确实需要它使用静态
Double#compare(双d1,双d2)
内部
double
表示比较的方法如果您确实需要它

=
操作符比较两个
double
值以精确相等

例如:

1.0 == 2.0 - 1.0 // true
0.1 + 0.2 == 0.3 // false
0.25 == 0.125 + 0.125 // true
1.0 / 3.0 == 2.0 / 6.0 // true

=
运算符比较两个
double
值以获得精确相等

例如:

1.0 == 2.0 - 1.0 // true
0.1 + 0.2 == 0.3 // false
0.25 == 0.125 + 0.125 // true
1.0 / 3.0 == 2.0 / 6.0 // true

请注意,由于二进制代码的基本限制,浮点数不存在精确性。十进制不能精确地用二进制表示,而只能用二分之一、四分之一(以及分母为二次幂的其他比率)用于表示在某个可接受公差范围内“足够接近”的值。您不能删除此公差并比较精确值,因为否则无法用二进制表示小数

有用

更新:
刚刚在StAdvExcel中找到了这个,这样我就不必把它全部写出来了。读这个,也许你会考虑用BigDigMalm作为手头的任务。

< P>请注意,由于二进制代码的根本限制,浮点上没有精确性。不能精确地表示二进制中的十进制数。d二分之一、四分之一(以及分母为二次幂的其他比率)用于表示在某个可接受公差范围内“足够接近”的值。您不能删除此公差并比较精确值,因为否则您无法用二进制表示小数

有用

更新:
刚刚在StAdvExcel中找到了这一点,所以我不必把它全部写出来。读这个,也许你会考虑使用BigDeCimple进行手头的任务。

只是使用= =,或者使用一个公差(EpSelon)是错误的。如果浮点值是楠(不是数字),它们会给出意想不到的结果。。您应该改为使用floatToIntBits

建议仅使用==,或使用公差(epsilon)是错误的。如果浮点值为NaN(不是数字),它们将给出意外的结果。您应该改为使用floatToIntBits

使用
=
运算符…为什么要精确比较两个浮点数?是的,当然可以。您引用的建议的要点是这样做很少是一个好主意。请参阅使用
=
运算符…为什么要精确比较两个浮点数g点数?是的,当然可以。你所引用的建议的要点是这样做很少是个好主意。参见