1

为什么Octave在给出1/30.1时给了我以下结果?Octave 1/3和0.1值

octave:1> (4/3-1)*3-1 
ans = -2.2204e-16 

octave:2> (10.1-10)*10-1 
ans = -3.5527e-15 

octave:3> (10.125-10)*8-1 
ans = 0 

回答

2

这是floating point arithmetic的后果。您的计算机无法完全准确地represent 4/3 as a floating point binary number,因此会出现舍入错误。但它可以完全准确地represent 10.125 in binary,因此没有错误。

换言之,考虑小数点后的数字部分。对于4/3,我们有0.333333 ...这是0.010101010101 ...二进制。您的计算机无法存储无限数量的数字,因此会截断为某种精度。然而,对于10.125,考虑0.125是二进制的,只有0.001。所以在二进制中只有三个“十进制”点,因此没有截断和舍入误差。