Clojure 中的默认十进制文字不是 BigDecimal 类型有什么原因吗?
Is there any reason that default decimal literal is not BigDecimal type in Clojure?
我了解到 Clojure reader 将带有后缀 'M' 的十进制文字解释为 BigDecimal,例如 1.23M。而且我也知道没有 'M' 的十进制数会变成 Java double.
但我认为普通十进制数是BigDecimal会更好,并且依赖于主机的十进制数有后缀,比如1.23H。因此,当数字由于 IEEE 双精度限制而损坏或被截断时,我们可以很容易地注意到该数字是有精度限制的。另外,我认为更简单的表达应该是独立于主机的。
除了时间性能之外,Clojure 是否有任何理由将文字小数解释为 Java double?另外,我不认为时间性能是一个答案,因为它不是 C/C++,并且可以像“1.23H”一样实现其他声明依赖于主机的小数的方式。
性能可能是一回事。也许 clojure.core
开发人员可以就原因插话。
我个人认为默认情况下没有 bigdecimal 没什么大不了的,因为 :
曾几何时,对于整数,Clojure 会在需要时自动提升到更大的大小。这已更改,以便抛出溢出异常。我的感觉,从远处看是:
- Clojure 作为一种实用的语言在实际的时间内做实际的事情的能力。他们不希望性能爆炸,因为数字运算意外地使用了任意精度库而不是 CPU 整数运算。与似乎优先考虑数学美观而不是实用性的方案形成对比。
- 人们不喜欢在 运行 时感到惊讶,因为 Java 库需要一个 32 位整数而不是任意大小的整数。
所以决定默认使用普通整数(我认为 Java 长?)并且只在程序员要求时使用任意大的整数,当程序员有意地决定他们愿意时承受性能损失和互操作损失。
我的猜测 与对带小数点的数字所做的类似决定。
我了解到 Clojure reader 将带有后缀 'M' 的十进制文字解释为 BigDecimal,例如 1.23M。而且我也知道没有 'M' 的十进制数会变成 Java double.
但我认为普通十进制数是BigDecimal会更好,并且依赖于主机的十进制数有后缀,比如1.23H。因此,当数字由于 IEEE 双精度限制而损坏或被截断时,我们可以很容易地注意到该数字是有精度限制的。另外,我认为更简单的表达应该是独立于主机的。
除了时间性能之外,Clojure 是否有任何理由将文字小数解释为 Java double?另外,我不认为时间性能是一个答案,因为它不是 C/C++,并且可以像“1.23H”一样实现其他声明依赖于主机的小数的方式。
性能可能是一回事。也许 clojure.core
开发人员可以就原因插话。
我个人认为默认情况下没有 bigdecimal 没什么大不了的,因为 :
曾几何时,对于整数,Clojure 会在需要时自动提升到更大的大小。这已更改,以便抛出溢出异常。我的感觉,从远处看是:
- Clojure 作为一种实用的语言在实际的时间内做实际的事情的能力。他们不希望性能爆炸,因为数字运算意外地使用了任意精度库而不是 CPU 整数运算。与似乎优先考虑数学美观而不是实用性的方案形成对比。
- 人们不喜欢在 运行 时感到惊讶,因为 Java 库需要一个 32 位整数而不是任意大小的整数。
所以决定默认使用普通整数(我认为 Java 长?)并且只在程序员要求时使用任意大的整数,当程序员有意地决定他们愿意时承受性能损失和互操作损失。
我的猜测 与对带小数点的数字所做的类似决定。