0

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

在爪哇

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

//output
//1.2596299799473993

在我得到的普通计算器中

//output
//1.2596299799473993502546921425703

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

任何帮助表示赞赏

4

4 回答 4

2

Java 中的内置浮点运算精度有限。内置BigDecimal类不提供您需要的操作(真正的求幂,甚至日志)。您可以使用第三方应用程序,例如Apfloat(参见ApfloatMath课程)或JScience,它们都可以进行任意精度的幂计算。

于 2012-10-25T00:30:26.867 回答
1

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

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

于 2012-10-25T00:31:51.530 回答
0

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

于 2012-10-25T00:27:43.330 回答
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);
于 2021-06-24T03:10:08.117 回答