2015-12-22 2 views
1

ЗакускаПовышение точности с Java BigDecimal

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 является WMD
  • J254 значение: 3,99E-04 является Dxm3d
  • J 255 Значение: 2,79E00 представляет собой R
  • I259: 365 это т
  • значение
  • J263: 3.2 Х

enter image description here

enter image description here

BigDecimal segundoTermo = (R.multiply(x).subtract(Wmd.multiply(t)).divide(new BigDecimal(2d).multiply(new BigDecimal(Math.sqrt(Dxm3d.multiply(R).multiply(t).doubleValue()))), RoundingMode.HALF_DOWN)); 
System.out.println("value segundoTermo " + segundoTermo); 

Возвращаемое значение

valor do segundo termo pfv:6.31838147917065306052600332590254032941338413886611227745342947009953030493273342105799365116070956364 

Ожидаемое значение

6,321092458 
+0

Я получаю тот же ответ с java и wolfram-mathematica. Откуда вы получаете ожидаемое значение? – gonzo

ответ

1

Я сказал:

Я б что вы видите, связано с вызовом Math.sqrt() , который занимает двойной. Вы можете взглянуть на JScience и this answer.

Но в конце концов, что с помощью плавающей точкой JScience возвращает то же значение, как 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 

вы уверены, что ожидаемое значение является правильным?

+0

Да, правильно, может достичь правильного результата. здесь: http://pt.stackoverflow.com/questions/105192/aumentar-precis%C3%A3o-com-bigdecimal-java –

Смежные вопросы