Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 规模不断增长,超出数学上下文精度_Java_Bigdecimal - Fatal编程技术网

Java 规模不断增长,超出数学上下文精度

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++) {

我正在编写一些代码来计算2轴图形上的点,我注意到当X或Y坐标值为零时,速度会减慢。我进行了一些调试,发现坐标值的比例在不断增长。我认为传递数学上下文会使返回的bigdecimal无法具有更大的范围。我希望把尺度限制在我的数学精度范围内。这段代码显示了我所看到的

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()