org-table-sum 组织模式出错?
Error in org-table-sum org-mode?
我刚刚开始使用 Emacs 组织模式,我已经对简单的列总和 (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?
任何解释表示赞赏!谢谢!
大多数十进制数无法用二进制浮点编码(单精度或双精度)准确表示。
测试13.11 here,可以看到转换为双精度后,表示的最接近的数字是13.109999656677246
。
此问题与 emacs 无关,但在使用不同基数(二进制而不是十进制)的浮点表示时是一个基本问题。
使用calc的vsum
,结果OK:
| date | sum |
|------+-------|
| | 16.2 |
| | 6.16 |
| | 6.16 |
| | 13.11 |
|------+-------|
| | 41.63 |
#+TBLFM: @6=vsum(@I..@II)
之所以可行,是因为 calc 以任意精度工作,不会以二进制浮点格式对数字进行编码。
我刚刚开始使用 Emacs 组织模式,我已经对简单的列总和 (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?
任何解释表示赞赏!谢谢!
大多数十进制数无法用二进制浮点编码(单精度或双精度)准确表示。
测试13.11 here,可以看到转换为双精度后,表示的最接近的数字是13.109999656677246
。
此问题与 emacs 无关,但在使用不同基数(二进制而不是十进制)的浮点表示时是一个基本问题。
使用calc的vsum
,结果OK:
| date | sum |
|------+-------|
| | 16.2 |
| | 6.16 |
| | 6.16 |
| | 13.11 |
|------+-------|
| | 41.63 |
#+TBLFM: @6=vsum(@I..@II)
之所以可行,是因为 calc 以任意精度工作,不会以二进制浮点格式对数字进行编码。