gpt4 book ai didi

javascript - 为什么我的排列计算器返回小数?

转载 作者:行者123 更新时间:2023-12-02 14:37:11 26 4
gpt4 key购买 nike

我做了一个排列组合计算器。求一个数的阶乘的代码是:

 function factorial(num){
total=1;
if(num==1||num==0){
return total;
}
else{
for(i=2;i<=num;i++){
total*=i;
}
return total;
}
}

这是查找排列的代码:

  answer.innerHTML="Answer: "+factorial(n)/factorial(n-r);

如果我选择 55P9,我的答案是 0.5 折。如果我使用 Math.floor() 一切正常,但我想找到问题的根源。

最佳答案

它返回小数的原因是因为 55 阶乘 (1.27 * 10^73) 和 46 阶乘 (5.50 * 10^57) 被存储为 float ,因为 Javascript 自动将所有数字视为 double float 。同时,由于它太大,由于浮点近似只是一个近似,因此商会存在舍入误差。

在 MATLAB 中仔细检查:

>> factorial(55)/factorial(46)
ans =
2.3073e+15
>> ans - floor(ans)
ans =
0.5000
>> .5/(factorial(55)/factorial(46))
ans =
2.1670e-16
>> eps
ans =
2.2204e-16

正如您在此处所看到的,由于浮点精度误差,MATLAB 得到了相同的结果。此外,因此,0.5 是该计算预期的绝对误差,因为它应该是 2 的幂。

关于javascript - 为什么我的排列计算器返回小数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37358488/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com