一列有数字(总是有2位小数,有些是计算的,但所有乘法和除法都舍入到2位小数),另一列是累积的。累积列的公式为=<above cell>+<left cell>
。
在累积列中,结果为58.78,第一列中的下一个数字为-58.78。由于零的格式不同于正数或负数,我发现有些错误。将格式更改为几位小数,数字显示为:
£58.780000000000000000000000000000
-£58.780000000000000000000000000000 £0.000000000000007105427357601000
非零零约为2 ^( - 47)。另一次同样情况下的数字是:
£50.520000000000000000000000000000
-£50.520000000000000000000000000000 -£0.000000000000007105427357601000
怎么会发生这种情况?
另外,如果我将累积列中的单元格更改为实际数字58.78,结果会突然变为零。
答案 0 :(得分:1)
Google表格使用双精度浮点算术,creates such artifacts。这种格式的相对精度是2 ^( - 53),因此对于大约2 ^ 6 = 64的大小的数量,我们期望2 ^( - 47)截断误差。
如果发现“58.78”实际上不是58.78,某些电子表格用户会担心,因为这个数字不允许以这种浮点格式表示确切的表示。因此,当要求更多数字时,电子表格隐藏了真相,四舍五入显示和打印假零。 58.78之后的那些零是假的。
当你减去看似相同但不相同的两个数字时,事实就会明白 - 因为它们是以不同的方式计算的,例如:一个通过直接输入获得,而另一个获得。将减法结果舍入为零将是一个太多的谎言:这不再是一个小的相对误差的问题,2 ^( - 47)和0之间的差异可能是一个重要的差异。因此,幕后机制的意外揭示。
另请参阅:Why does Google Spreadsheets says Zero is not equals Zero?