vxs*_*122 0 lisp floating-point scheme
或者更确切地说,为什么(= 1e16 (- 1e16 1))返回真实?我怎样才能收到更准确的答案?
1e16就Scheme而言,是一个不精确的数字(或者更实际的说,是一个浮点数).对于(双精度)浮点数高于2 53(9007199254740992),ulp大于1,这意味着1的变化太小而无法表示.†
另一方面,10000000000000000是一个整数.如果你这样做(- 10000000000000000 1),你的确会回来999999999999999.在Scheme中,你也可以写#e1e16代表相同的数量; 的#e前缀使确切的数目(在方案范围;在实践中,这意味着一个整数或理性).
†请评价(+ 9007199254740992.0 1)和(- 9007199254740992.0 1),然后请评价(+ 9007199254740992 1),并(- 9007199254740992 1)与整数对比.
| 归档时间: |
|
| 查看次数: |
4188 次 |
| 最近记录: |