a == b,指数表示法。八度怪异?

时间:2012-01-27 19:57:24

标签: octave

如果我将其输入八度:

a = 8*10^-5;
b = 8.0e-005;
a==b

我得到答案:

ans = 1

但如果我把它输入八度:

a = 3*10^-5;
b = 3.0e-005;
a==b

我得到了这个答案

ans = 0

我错过了什么吗?这不是测试平等的正确方法吗?

2 个答案:

答案 0 :(得分:3)

这是在涉及浮点数的计算过程中精度损失的结果,例如在Java 3 * Math.pow(10, -5)中会给你'2.9999999999999997E-5',它在第二个例子中不再匹配b。这与在表达式求值期间如何表示和演化浮点值有关。对于更精细的观点,您可以使用您用于评估这些表达式的上下文/环境来进行谷歌“精度损失”后缀。希望这会有所帮助。

答案 1 :(得分:1)

这是浮点数在计算机系统中表示的常见问题。

许多十进制“圆”的数字在计算机使用的二进制表示中变成重复分数,并且它们必须在某些时候被截断,以获得非常轻微的精度损失。如果两个浮点数以不同方式到达,则必须将它们与一点点斜率进行比较,例如: abs(a-b) < EPSILON其中EPSILON是一个适当的常量,如1e-12。