我需要取一个非常大的数字(long
类型)的对数。
from scipy import misc
from numpy import log
n1 = 40000
k1 = 20000
r = log(misc.comb(n1, k1, exact=True))
引发
AttributeError:'long'对象没有属性'log'
如果我尝试转换为float
:
*** OverflowError:long int太大而无法转换为float
知道位数也是合适的。我注意到long
内置了bit_length()
,但我不确定这是如何转化为数字位数的。谢谢!
答案 0 :(得分:2)
使用math.log
代替numpy.log
。
from scipy import misc
import math
n1 = 40000
k1 = 20000
r = math.log(misc.comb(n1, k1, exact=True),10)
它应该给12038.800733910726
你可以围绕。
答案 1 :(得分:0)
n=misc.comb(n1, k1, exact=True)
是一个非常大的数字,因此无法转换为float。 len(str(n))
给出小数位数:12039。
您还可以按r.bit_length()/log2(10)=12039.09