1
为什么Octave在给出1/3
或0.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
为什么Octave在给出1/3
或0.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
这是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。所以在二进制中只有三个“十进制”点,因此没有截断和舍入误差。