我实际上正在寻找一种能够计算此 Excel 公式的解决方案:
=1-PERMUT(1.15*10^77,358*10^7)/(1.15*10^77)^(358*10^7)
我也尝试用 Octave 来解决它。
有没有什么办法可以解决如此大的数字计算呢?
答案1
您不能使用直接计算,而必须使用快捷方式和简化方法,因为直接计算不适合系统数学的数值表示:
octave:1> (1.15*10^77)^(358*10^7)
ans = Inf
对较小的 x 使用近似值
https://en.wikipedia.org/wiki/Taylor_series
log(1+x) = x + O(x^2)
exp(x) = 1 + x + O(x^2)
因为你的数字比例证明了这一点:
octave:1> n=1.15*10^77
n = 1.1500e+77
octave:2> k=358*10^7
k = 3580000000
octave:3> k/n
ans = 3.1130e-68
我们可以使用以下方法开始修改计算的第二部分
P(n,k) = n! / (n-k)!
因此比例
PERMUT(1.15*10^77,358*10^7)/(1.15*10^77)^(358*10^7)
可以重写为:
P(n,k) / n^k =
= n! / (n-k)! / n^k
= (n/n) *(n-1)/n * (n-2) /n * .... *(n-k+1)/n=
= 1 * (1-1/n) * (1-2/n) * ... * (1-(k-1)/n)
传递到对数
log( P(n,k) / n^k ) =
= log (1 * (1-1/n) * (1-2/n) * ... * (1-(k-1)/n) ) =
= log(1) + log(1-1/n)+ log(1-2/n) + ... + log(1-(k-1)/n) =
=~ 0 + (-1/n) + (-2/n) + ... + (-(k-1)/n) =
= - ( 1+2+..+(k-1) )/n = - k*(k-1)/(2*n)
然后返回
P(n,k) / n^k = exp(log( P(n,k) / n^k ) ) =~ exp(- k*(k-1)/(2*n))
=~ 1 - k*(k-1)/(2*n)
所以最后
1-PERMUT(1.15*10^77,358*10^7)/(1.15*10^77)^(358*10^7)=
= 1 - (1 - k*(k-1)/(2*n) ) =
= k*(k-1)/(2*n)
octave:4> k*(k-1)/(2*n)
ans = 5.5723e-59