python 大数字算法,用python计算非常大的数

对于大的n,您可以用二项式的法向近似来计算这个比率。当n较大时,k必须相对接近n/2,这样{}才不可忽略。在

代码

下面是一些可以计算的代码:def n_choose_k_over_2_pow_n(n, k):

# compute the mean and standard deviation of the normal

# approximation

mu = n / 2.

sigma = np.sqrt(n) * 1/4.

# now transform to a standard normal variable

z = (k - mu) / sigma

return 1/np.sqrt(2*np.pi) * np.exp(-1/2. * z**2)

因此:

^{pr2}$

正如你所看到的,计算是下溢的。一个解决方案是计算答案的log,我们可以使用以下代码:def log_n_choose_k_over_2_pow_n(n, k):

# compute the mean and standard deviation of the normal

# approximation

mu = n / 2.

sigma = np.sqrt(n) * 1/4.

# now transform to a standard normal variable

z = (k - mu) / sigma

# return the log of the answer

return -1./2 * (np.log(2 * np.pi) + z**2)

另一个快速检查:>>> log_n_choose_k_over_2_pow_n(3e28, 2e28)

-6.6666666666666638e+27

>>> log_n_choose_k_over_2_pow_n(3e28, 1.5e28)

-0.91893853320467267

如果我们对这些进行求幂,我们就会得到之前的答案。在

解释

我们可以通过呼吁统计结果来做到这一点。二项分布由下式给出:P(K = k) = (n choose k) p^k * p^(n-k)

对于大的n,这是很好的近似正态分布的平均值{}和方差{}。在

将p设置为1/2。然后我们有:P(K = k) = (n choose k) (1/2)^k * (1/2)^(n-k)

= (n choose k) (1/2)^n

= (n choose k) / (2^n)

这正是你的比率的形式。因此,在用平均值n/2和方差n/4转换为标准正态变量后,我们可以通过对标准正态分布pdf的简单评估来计算您的比率。在

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值