Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中计算25的阶乘时出现奇怪的结果_Java_Factorial - Fatal编程技术网

在Java中计算25的阶乘时出现奇怪的结果

在Java中计算25的阶乘时出现奇怪的结果,java,factorial,Java,Factorial,在Java中计算25的阶乘时,我发现了一个奇怪的结果。如果我使用升序模式进行计算(即:1*2*3*4…*25)。它给出了一个结果。但如果我在降序模式下做(25*24*23…*1),它会给出另一个结果。我在这里粘贴了我认为是正确的代码,并在许多Java编译器中进行了尝试(以粗体显示差异) 上升模式:1.5511210043330986E25 下降模式:1.5511210043330984E25 我是否做错了什么,或者这可能是语言中的错误 代码 public static void ma

在Java中计算25的阶乘时,我发现了一个奇怪的结果。如果我使用升序模式进行计算(即:1*2*3*4…*25)。它给出了一个结果。但如果我在降序模式下做(25*24*23…*1),它会给出另一个结果。我在这里粘贴了我认为是正确的代码,并在许多Java编译器中进行了尝试(以粗体显示差异)

  • 上升模式:1.5511210043330986E25
  • 下降模式:1.5511210043330984E25
我是否做错了什么,或者这可能是语言中的错误

代码

    public static void main(String[] args) {
        int factorialToCalculate = 25;
        double accumulator1 = 1;
        double accumulator2 = 1;
        for (int i = factorialToCalculate; i>=1; i--) {
            accumulator1 = accumulator1 * i;
        }
        for (int i = 1; i<=factorialToCalculate; i++) {
            accumulator2 = accumulator2 * i;
        }
        System.out.println("Factorial with descending multiplication: " + accumulator1);
        System.out.println("Factorial with ascending multiplication: " + accumulator2);
    }

publicstaticvoidmain(字符串[]args){
int factorialToCalculate=25;
双蓄电池1=1;
双蓄电池2=1;
对于(int i=factorialToCalculate;i>=1;i--){
累加器1=累加器1*i;
}

对于(int i=1;我不是一个bug,这就是浮点数学在超过其可以处理的精度时的工作原理。正确答案是1.5511210043330984E25,可以使用
biginger
计算。感谢您的响应!但是为什么如果我在一个方向上乘以相同的数字,它会给出正确答案,而在另一个方向上则不会给出正确答案?当我使用相同的数字时,乘法运算对于相同的数字集不应该是幂等的?因为累积舍入误差取决于值的乘法顺序。请参阅顶部。您刚才向我介绍了。非常感谢!不是错误,这就是浮点数学在超过精度时的工作方式可以处理。正确的答案是1.55112100433309885984E25,可以使用
biginger
计算。感谢您的回答!但是为什么如果我在一个方向上乘以相同的数字,它会给出正确的答案,而在另一个方向上则不会?因为我在使用相同的数字,所以乘法运算对于相同的数字集?因为累积舍入误差取决于值的相乘顺序。请参见顶部。您刚刚启发了我。非常感谢!