java - 使用 Java BigDecimal 提高准确性

标签 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 是 Wmd
  • J254 值:3,99E-04 是 Dxm3d
  • J 255 值:2,79E00 是 R
  • I259:365 是 t
  • J263 值:3.2 是 x

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

最佳答案

我说:

I'm betting the difference you're seeing is due to the Math.sqrt() call which takes a double. You might take a look at JScience and this answer.

但最终使用 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 - 使用 Java BigDecimal 提高准确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34424262/

相关文章:

c - 如何在内核源文件中包含 math.h #include <math.h>?

java - 我无法修复 "Exception in thread "main"java.lang.ArithmeticException :/by zero"

java - Spring RestController 方法返回状态 403

java - Spring JavaConfig 是否避免组件扫描并改善启动时间?

java - Py4J 的开销比 Jython 和 JPype 大

java - 给定一个数 N,N 是否可以表示为两个或多个连续的完全平方数之和?

javascript - 将数字分成 4 个随机数

MySQL帮助,根据计算更新字段

Java序列化问题

java - 泛型:无法从 <capture#1-of 转换?将 Object,D> 扩展到 <S,D>