使用Java BigDecimal提高准确性

使用Java BigDecimal提高准确性,java,math,Java,Math,开胃菜 R = new BigDecimal(2.79E+00); Dxm3d = new BigDecimal(3.99E-04); Wmd = new BigDecimal(2.39E-03); x = new BigDecimal(3.2); t = new BigDecimal(365); 下面是公式 这些值J263是代表我的变量的excel选票 J253值:2,39E-03为大规模杀伤性武器 J254值:3,99E-04为Dxm3d J 255值:2,79E00为R I259:36

开胃菜

R = new BigDecimal(2.79E+00);
Dxm3d = new BigDecimal(3.99E-04);
Wmd = new BigDecimal(2.39E-03);
x = new BigDecimal(3.2);
t = new BigDecimal(365);
下面是公式

这些值J263是代表我的变量的excel选票

  • J253值:2,39E-03为大规模杀伤性武器
  • J254值:3,99E-04为Dxm3d
  • J 255值:2,79E00为R
  • I259:365是t
  • J263值:3.2是x

返回的值

valor do segundo termo pfv:6.31838147917065306052600332590254032941338413886611227745342947009953030493273342105799365116070956364
期望值

6,321092458
我说,

我敢打赌,你看到的差异是由数学造成的。sqrt() 打双人电话。你可以看看

但最终使用JScience的FloatingPoint返回与问题中的BigDecimal相同的值:

FloatingPoint R = FloatingPoint.valueOf(2.79E+00);
FloatingPoint Dxm3d = FloatingPoint.valueOf(3.99E-04);
FloatingPoint Wmd = FloatingPoint.valueOf(2.39E-03);
FloatingPoint x = FloatingPoint.valueOf(3.2);
FloatingPoint t = FloatingPoint.valueOf(365);
FloatingPoint segundoTermo = (R.times(x).minus(Wmd.times(t)).divide(FloatingPoint.valueOf(2d).times(((Dxm3d.times(R).times(t)).sqrt()))));
System.out.println("value segundoTermo " + segundoTermo);
产出:

value segundoTermo 0.63188145784374107900E1

您确定期望值正确吗?

我对java和wolfram mathematica得到了相同的答案。您从何处获得期望值?是正确的,则可以获得正确的结果。请点击此处:
value segundoTermo 0.63188145784374107900E1