数学溢出——处理大数

标签 math

我在处理大数字时遇到问题。

我需要计算一个非常大的数字的对数。数字是一系列数字的乘积。例如: log(2x3x66x435x444) 虽然我的实际系列更长。

我遇到了数学溢出,因为产品增长得非常大,非常快。

是否有特殊的数学库来处理巨大的数字?有什么想法可以解决这个问题吗?

最佳答案

这个问题有一个简洁的数学解决方案。

您可以使用它们的对数值,而不是通过将每个数字相乘来获得系列的乘积。注意到的原则是:

log(a*b) = log(a) + log(b)

对于示例系列 (2, 3, 66, 435, 444),蛮力积计算为 2 * 3 * 66 * 435 * 44 = 76,483,440。

但是,您也可以从日志总和中获取乘积。对于系列 (n1, n2, n3, n4,...),该系列的乘积为:10 ^ (log(n1) + log(n2) + log(n3) + log(n4)...)
log(2) = 0.30103
log(3) = 0.47712
log(66) = 1.8195
log(435) = 2.6384
log(444) = 2.6474

这些值的总和大约为 7.8835。该系列的乘积为 10 ^ 7.8835 (76,483,440)。

由于您正在寻找系列乘积的对数,因此只是各个 log() 值的总和,7.8835。就是这样。

关于数学溢出——处理大数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1734954/

相关文章:

java - 我可以使用什么可能的模式来存储单词组合?

performance - 大规模 LP 的等式与不等式约束

linux - 用 bash 计算最大的增量(吞吐量峰值)

Python 将对象值转换为 int

javascript - 将变量四舍五入为下一个最接近的 X 倍数

c - 有效地找到二维空间中位置的两倍最优成本

java - 逆乘法

c - 奇怪的十六进制到十进制的转换

java - 当事情发生时随机化

python - 如何避免 math.sin(math.pi*2*VERY LARGE NUMBER) 的误差范围比 math.sin(math.pi*2) 大得多?