Math 数学溢出——处理大数

Math 数学溢出——处理大数,math,Math,我在处理大量数据时遇到问题 我需要计算一个非常大的对数。数字是一系列数字的乘积。例如:log(2x3x66x435x444),尽管我的实际系列更长 我得到了一个数学溢出,因为产品增长非常大,非常快 是否有专门的数学库来处理庞大的数字?有什么办法可以解决这个问题吗?嗯:log(a*b)=log(a)+log(b)这个问题有一个简洁的数学解决方案 您可以使用它们的日志值,而不是通过乘以每个数字来获得序列的乘积。注意到的原则是: log(a*b) = log(a) + log(b) 对于示例系列(2

我在处理大量数据时遇到问题

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

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


是否有专门的数学库来处理庞大的数字?有什么办法可以解决这个问题吗?

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

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

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

log(a*b) = log(a) + log(b)
对于示例系列(2、3、66、435、444),蛮力积计算为2*3*66*435*44=76483440

但是,您也可以从日志的总和中获得乘积。对于一个系列(n1,n2,n3,n4,…),该系列的产品是:10^(对数(n1)+对数(n2)+对数(n3)+对数(n4)…)

这些值的总和约为7.8835。该系列产品为10^7.8835(76483440)

因为您要查找系列产品的日志,所以只需要单个log()值的总和,即7.8835。就是这样。

使用Python;)


Java类BigInteger和BigDecimal可以提供帮助


正如其他人所指出的,你不需要大量的支持来完成你的工作。但是如果你真的想使用它们,许多现代(ish)语言都内置了大量的数字。图书馆存在许多其他(C,C++等)。您正在使用或打算使用哪种语言?请查找“计算尺”库……这就是您需要数学的原因P
log(2) = 0.30103
log(3) = 0.47712
log(66) = 1.8195
log(435) = 2.6384
log(444) = 2.6474
$python
Python 2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> math.log(2*3*66*435*444)
18.15258480477539
>>>