Java的功率精度

时间:2012-10-25 00:20:53

标签: java precision

我正在尝试在Java中为指数小于1执行功率计算,例如:(2 ^ 0.333) 但是当我在Java中计算时,我得到的结果精度低于在普通计算器上进行相同计算的结果。

Java中的

double f = Math.pow(2.0,0.333);
System.out.println(f);

//output
//1.2596299799473993

在正常的计算器中我得到了

//output
//1.2596299799473993502546921425703

如何在不失精度的情况下在java中获得相同的结果?

感谢任何帮助

4 个答案:

答案 0 :(得分:1)

Java中的内置浮点算法精度有限。内置的BigDecimal类不提供您需要的操作(实数取幂,甚至是日志)。您可以使用第三方应用,例如Apfloat(请参阅ApfloatMath类)或JScience,这两个应用都可以将取幂计算为任意精度。

答案 1 :(得分:1)

仅使用原始双精度不能获得更精确的值。相反,使用BigDecimal,它用于表示任意精确的浮点值。

请注意,您需要一个自定义pow函数来处理BigDecimal。可以找到一个实现in this SO answer

答案 2 :(得分:0)

双精度浮点值,就像您在Java代码中使用的那样,只能准确地表示15到17位有效数字。除非您正在使用的Windows计算器应用程序在内部使用更高精度的数据类型(这不太可能),否则这些数字可能毫无意义。

答案 3 :(得分:0)

您可以尝试使用 BigDecimal 并设置精度。

   BigDecimal base = new BigDecimal(2.0);

   BigDecimal exp = new BigDecimal(0.3333);

   BigDecimal resul = new BigDecimal((Math.pow(base.doubleValue(),exp.doubleValue()))).setScale(31,RoundingMode.HALF_UP);
    System.out.println("resul "+ resul);