Clojure-bigdec分割规则

Clojure-bigdec分割规则,clojure,bigdecimal,arbitrary-precision,Clojure,Bigdecimal,Arbitrary Precision,我遇到了一个浮动精度问题:我在双精度和/或长精度之间除法的一个结果是2.8421709430404007E-14,而不是0 所以我想我必须更精确地使用大小数 我的问题是: 涉及bigdec的操作是否会将操作中涉及的所有其他数字转换为合适的类型? 有这样的手术吗?我基本上是在寻找等价的,但是/'似乎不存在。 如果在计算中使用任何双精度或浮点数,最终结果将是双精度 否则,任何涉及BigDecimal的计算都将返回BigDecimal结果或引发异常 如果结果无法准确表示,如果某些中间计算导致长溢出,或

我遇到了一个浮动精度问题:我在双精度和/或长精度之间除法的一个结果是2.8421709430404007E-14,而不是0

所以我想我必须更精确地使用大小数

我的问题是:

涉及bigdec的操作是否会将操作中涉及的所有其他数字转换为合适的类型? 有这样的手术吗?我基本上是在寻找等价的,但是/'似乎不存在。 如果在计算中使用任何双精度或浮点数,最终结果将是双精度

否则,任何涉及BigDecimal的计算都将返回BigDecimal结果或引发异常

如果结果无法准确表示,如果某些中间计算导致长溢出,或者如果被零除,则可能引发异常

+'等。升级到BigInteger,其中+将导致整数溢出

可以引入舍入来处理精确的表示问题–请参见精确的文档


谢谢关于1,我不介意结果是双精度的,我想0可以表示为双精度,但我担心内部步骤,即,我不想得到非常接近于零的值,而不是0。这是否意味着在我的例子中,我应该只使用bigdec?使用double会限制计算的精度。特别是,期望得到一个接近但不完全等于以无限精度解释的计算的理想/理论值的值。如果这是不可接受的,您可以使用大小数作为速度较慢的算法,精度在您的控制之下。不管怎样,由于无限十进制展开式,您不会获得任意计算的无限精度–例如/1M 3M,但至少您可以设置自己的精度参数。比率是另一个更慢、精度更高的选项–1/3。它的缺点是,如果您需要bigdec的精度保证,您需要避免双倍,是的。您还应该精确地阅读的docstring,并在遇到无限扩展问题时使用它。如果你不太在意性能,你的计算速度可能会很慢,但确实需要非常精确,那么比率可能值得一试。