我已经完成了一个程序,该程序必须输出具有函数值的文件。该函数产生非常大的值,但我只需要对数,该对数可以达到大约10000甚至一百万的值(很大,但是可以使用32位整数变量管理)。
现在,很明显,函数本身的数量级是exp(10000)
巨大的。因此,我正在寻找计算对数的任何技巧。我使用python是因为我认为它对非常大的数字的本机支持会很有用,但对于非常大的数字却不是。
该函数的值计算如下:
a*(x1+x2+x3+x4)
我必须以对数的形式 我已经预处理了所有因子的对数,然后将它们全部求和,但是我不能做任何事情(至少是简单的事情)log(x1+x2+x3+x4)
。
python ar NaN的结果,因为x1,x2,x3,x4变量增长了很多。它们的计算公式为:
x = [1,1,1,1]
for i in range(1,K):
x[j] *= a*cosh(b*g[i]) # even values of i
x[j] *= a*sinh(b*g[i]) # odd values of i
对于一些常数a
,b
和一个向量g[]
。那只是伪代码,我分别写了x [1],x [2]。
有什么技巧可以计算出该对数的对数而不会遇到NaN
问题吗?
非常感谢你
PS:我之所以使用python是因为我所说的话,如果有针对C(++)的特殊库或类似的库来处理非常大的数字,我将非常感激。
PS:b
里面的常数cosh
可以是100的数量级,并且会使事情炸毁,因此,如果以某种方式取出该常数有任何关系...
我看到在您的循环中,您每次都将每个x与常数a相乘。如果您跳过该因子,而取log(x1 + x2 + x3 + x4)则可能是可管理的,则只需在其中添加log(a)即可得到最终结果。或n * log(a)(如果要乘以几倍)。
这个想法与语言无关。:-)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句