我刚刚开始使用Emacs org-mode,我已经对一个简单的列总和(org-table-sum)感到困惑。我从
开始| date | sum |
|------+-------|
| | 16.2 |
| | 6.16 |
| | 6.16 |
| | |
当我在第二列下方点击C-c +
(org-table-sum)时,我得到正确的总和28.52
。如果我添加另一行来实现它
| date | sum |
|------+-------|
| | 16.2 |
| | 6.16 |
| | 6.16 |
| | 13.11 |
| | |
C-c +
给了我41.629999999999995
。 ???
如果我将最后一行从13.11
更改为13.12
,则C-c +
会给我(正确的)41.64
。
WTF?
任何解释赞赏!谢谢!
答案 0 :(得分:4)
大多数十进制数不能用二进制浮点编码精确表示(单精度或双精度)。
测试13.11 here,看到在转换为双精度后,最接近的数字为13.109999656677246
。
此问题与emacs无关,但在使用不同基数(二进制而非十进制)的浮点表示时是一个基本问题。
使用calc的vsum
,结果是OK:
| date | sum |
|------+-------|
| | 16.2 |
| | 6.16 |
| | 6.16 |
| | 13.11 |
|------+-------|
| | 41.63 |
#+TBLFM: @6$2=vsum(@I..@II)
这是有效的,因为calc以任意精度工作,不会以二进制浮点格式对数字进行编码。