gpt4 book ai didi

java - Clojure 中的默认十进制文字不是 BigDecimal 类型有什么原因吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:08:18 29 4
gpt4 key购买 nike

我了解到 Clojure 阅读器将带后缀“M”的十进制文字(如 1.23M)解释为 BigDecimal。而且我还知道没有“M”的十进制数字会变成 Java double。
但我认为普通十进制数是BigDecimal会更好,并且依赖于主机的十进制数有后缀,比如1.23H。因此,当数字由于 IEEE double 的精度限制而损坏或被截断时,我们可以很容易地注意到该数字是有精度限制的。另外,我认为更简单的表达应该是独立于主机的。

除了时间性能之外,Clojure 将文字十进制解释为 Java double 有什么原因吗?另外,我不认为时间性能是一个答案,因为它不是 C/C++,并且可以像“1.23H”一样实现声明依赖于主机的小数的其他方式。

最佳答案

曾几何时,对于整数,Clojure 会在需要时自动提升到更大的尺寸。这已更改,以便抛出溢出异常。从远处看,我的感觉是:

  1. 对于 Clojure 来说,作为一种实用的语言在实际的时间内做实际的事情的能力。他们不希望性能爆炸,因为数字操作意外地使用了任意精度库而不是 CPU 整数操作。与似乎将数学优美性置于实用性之上的方案形成对比。
  2. 人们不喜欢在运行时对互操作调用失败感到惊讶,因为 Java 库需要 32 位整数而不是任意大小的整数。

因此决定默认使用普通整数(我认为 Java 很长?)并且只在程序员要求时才使用任意大的整数,当程序员有意识地决定他们愿意承担性能损失时,和互操作命中。

我的猜测对于带小数点的数字做出了类似的决定。

关于java - Clojure 中的默认十进制文字不是 BigDecimal 类型有什么原因吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34418792/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com