我正在尝试在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中获得相同的结果?
感谢任何帮助
答案 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);