代码之家  ›  专栏  ›  技术社区  ›  Alberto Zavala

Java数学.pow(my_num,3)正在返回另一个结果[duplicate]

  •  0
  • Alberto Zavala  · 技术社区  · 6 年前

    如果您尝试运行以下代码

    public class Main {
       public static void main(String[] args) {
           long a = (long)Math.pow(13, 15);
           System.out.println(a + " " + a%13);
       }
    }
    

    的正确值 13^15年 51185893014090757 ,即大于 Math.pow 通过 5

    0 回复  |  直到 11 年前
        1
  •  11
  •   aroth    12 年前

    如果您需要Java中任意精确的算术,请考虑使用 BigInteger BigDecimal .

        2
  •  6
  •   Jon Skeet    12 年前

    问题是当你越来越高的时候 double 值时,连续值之间的差距增大-a 不能代表其范围内的每个整数值,这就是问题所在。它正在返回 最近的

        3
  •  5
  •   Pierre-Nicolas Mougel    11 年前

    这不是精度问题。这个数学.pow方法执行结果的近似值。要获得正确的结果,请使用以下代码。

    long b = 13;
    for(int i = 0; i != 14; i ++) {
        b = b * 13;
    }
    System.out.println(b);
    

    输出为预期结果51185893014090757L。

    更广泛地说数学.pow当指数为整数时,应避免使用方法。首先,结果是一个近似值,其次计算成本更高。

    实施数学.pow(以及Math类中的大多数其他方法)基于网络库netlib作为包“可自由分发的数学库”(请参见 StrictMath javadoc ). C语言的实现可在 e_pow.c .

        4
  •  1
  •   Neet    12 年前

        5
  •  0
  •   Peter Lawrey    12 年前

    正确答案是提供可以用 double

    你查过是不是这样?

        6
  •  0
  •   F M    12 年前

    这是因为限制了在long中通过转换为double,float保存数字的限制,您可能能够做到,但是会有一些错误,您应该自己处理计算的数字,方法是将它们保存在数组中,这不是一种简单的方法

    但是在python编程语言中你可以得到任何长度的结果,它是如此强大!