dav*_*dsd 5 java math scala bigdecimal arbitrary-precision
我正在尝试以大于双精度的固定精度在Scala(和/或Java)中进行计算.我正在使用带有Scala默认MathContext的 BigDecimals ,它具有精度34.即使所有输入都具有这种精度,我发现经过一些计算后,结果的精度开始爆炸.
这是一个示例计算,我认为说明了问题:
import math.BigDecimal
val z40 = BigDecimal(0).setScale(40) // 0E-40
z40.scale // 40
z40.precision // 1
(1 + z40*z40).precision // 81
Run Code Online (Sandbox Code Playgroud)
结果是81,精度高于z40.在我的例子中,我从不使用setScale,但是计算中出现了具有非常大比例的零.
这不是我想要的行为.我想要(1 + z40*z40)精度34 - 正在执行计算的MathContext的精度(因为z40*z40与1相比可以忽略不计).我怎么能得到这种算术?
更新:此行为是由于Scala 2.9.*和2.10.*之间的MathContexts处理的更改.(感谢Paul Phillips指出了提交.)另见本讨论.
其实我相信最后一行
(1 + z40*z40).precision
Run Code Online (Sandbox Code Playgroud)
产生结果34(不是81)。我认为这里的精度实际上并没有提高。
| 归档时间: |
|
| 查看次数: |
926 次 |
| 最近记录: |