Java 规模不断增长,超出数学上下文精度
我正在编写一些代码来计算2轴图形上的点,我注意到当X或Y坐标值为零时,速度会减慢。我进行了一些调试,发现坐标值的比例在不断增长。我认为传递数学上下文会使返回的bigdecimal无法具有更大的范围。我希望把尺度限制在我的数学精度范围内。这段代码显示了我所看到的Java 规模不断增长,超出数学上下文精度,java,bigdecimal,Java,Bigdecimal,我正在编写一些代码来计算2轴图形上的点,我注意到当X或Y坐标值为零时,速度会减慢。我进行了一些调试,发现坐标值的比例在不断增长。我认为传递数学上下文会使返回的bigdecimal无法具有更大的范围。我希望把尺度限制在我的数学精度范围内。这段代码显示了我所看到的 MathContext mc = new MathContext(32); BigDecimal xPos = new BigDecimal("0.0", mc); for (int i = 0; i < 8; i++) {
MathContext mc = new MathContext(32);
BigDecimal xPos = new BigDecimal("0.0", mc);
for (int i = 0; i < 8; i++)
{
System.out.println("" + xPos + " scale=" + xPos.scale());
xPos = xPos.multiply(xPos, mc);
}
MathContext mc=新的MathContext(32);
BigDecimal xPos=新的BigDecimal(“0.0”,mc);
对于(int i=0;i<8;i++)
{
System.out.println(“+xPos+”scale=“+xPos.scale()”);
xPos=xPos.multiply(xPos,mc);
}
随着每次迭代,规模不断增加。因为我传递了一个乘法数学上下文,所以它应该限制返回的精度,我的想法是不是不正确?
谢谢您的阅读。这都在本手册中解释过了
操作首选结果量表
添加最大值(addend.scale(),augend.scale())
减去最大值(minuted.scale(),subtrahand.scale())
乘法乘法器.scale()+乘法器.scale()
除数.scale()-除数.scale()
这在某种程度上是有意义的。这都在文章中解释过了
操作首选结果量表
添加最大值(addend.scale(),augend.scale())
减去最大值(minuted.scale(),subtrahand.scale())
乘法乘法器.scale()+乘法器.scale()
除数.scale()-除数.scale()
这在某种程度上是有意义的。我的错误是认为将MathContext传递给乘法方法会将结果设置为MathContext的规模。但很明显,它只关注环绕模式。我无法理解为什么它需要MathContext,而实际上它只需要RoundingMode。调用multiply后,我调用setScale传递一个scale和舍入模式,这允许我限制我的迭代方程的精度。我的错误是认为将MathContext传递给multiply方法会将结果设置为MathContext的比例。但很明显,它只关注环绕模式。我无法理解为什么它需要MathContext,而实际上它只需要RoundingMode。在调用multiply之后,我调用setScale传递一个刻度和舍入模式,这允许我限制我的迭代方程的精度。 Operation Preferred Scale of Result Add max(addend.scale(), augend.scale()) Subtract max(minuend.scale(), subtrahend.scale()) Multiply multiplier.scale() + multiplicand.scale() Divide dividend.scale() - divisor.scale()