在R中对非常大的数进行幂运算

在R中对非常大的数进行幂运算,r,logarithm,exponential,R,Logarithm,Exponential,我有非常大的值的对数,例如: log_a = 1347 log_b = 1351 我试图解决这个表达式: exp(log_a) - (0.1 * exp(log_b)) 或者等价地(相同的表达式只是形式不同): 当然,每次我试图计算exp(log_a)或exp(log_b) 我得到Inf的值。有什么技巧可以用来获得真正的结果吗 对于exp(log_a)-(0.1*exp(log_b)),以对数或 指数形式 非常感谢你的帮助 您可以使用R的gmp库,它支持大数字(据我所知,任意大) lib

我有非常大的值的对数,例如:

log_a = 1347 
log_b = 1351 
我试图解决这个表达式:

exp(log_a) - (0.1 * exp(log_b))
或者等价地(相同的表达式只是形式不同):

当然,每次我试图计算exp(log_a)或exp(log_b) 我得到Inf的值。有什么技巧可以用来获得真正的结果吗 对于exp(log_a)-(0.1*exp(log_b)),以对数或 指数形式


非常感谢你的帮助

您可以使用R的gmp库,它支持大数字(据我所知,任意大)

library(Brobdingnag)
a <- as.brob(exp(1))^1347
a*(1-0.1*exp(4))
#[1] -exp(1348.5)
比如说

> bigz('11111111111111111111111111111111111111111111111111111111111111111111111111111')
Big Integer ('bigz') :
[1] 11111111111111111111111111111111111111111111111111111111111111111111111111111

我假定求幂运算符包含在包中的某个地方。手册在这里:

您可以使用R的gmp库,它支持大数字(据我所知,任意大)

比如说

> bigz('11111111111111111111111111111111111111111111111111111111111111111111111111111')
Big Integer ('bigz') :
[1] 11111111111111111111111111111111111111111111111111111111111111111111111111111
我假定求幂运算符包含在包中的某个地方。手册如下:

expm1
是一个内置函数,可精确计算
exp(x)-1
x
接近零。只有当
expm1
的参数为负数,从而整个表达式为正数时,才能得到它的对数。然后你可以取绝对值的对数

log X = log_a + log(-expm1(-log(10) + log_b - log_a))
expm1
是一个内置函数,可精确计算
exp(x)-1
x
接近零。只有当
expm1
的参数为负数,从而整个表达式为正数时,才能得到它的对数。然后你可以取绝对值的对数

log X = log_a + log(-expm1(-log(10) + log_b - log_a))

实验(1351)=实验(1347)*实验(4)。因此,exp(1347)-(0.1*exp(1351))=exp(1347)*(1-0.1*exp(4))。这个数字的绝对值太大,R无法处理。你为什么需要这个?嗨,罗兰,谢谢你。那么有可能得到结果的自然对数吗?结果是负数…
Brobdignag
package…我假设在计算完这个大数字后,它有一个目的,所以有可能在以后的一些计算中滚动,以使这个结果符合要求。例如,如果您稍后除以某个数字,则可以将此公式分解为
exp(700)
块,并在合并整个方程之前应用该除法。exp(1351)=exp(1347)*exp(4)。因此,exp(1347)-(0.1*exp(1351))=exp(1347)*(1-0.1*exp(4))。这个数字的绝对值太大,R无法处理。你为什么需要这个?嗨,罗兰,谢谢你。那么有可能得到结果的自然对数吗?结果是负数…
Brobdignag
package…我假设在计算完这个大数字后,它有一个目的,所以有可能在以后的一些计算中滚动,以使这个结果符合要求。例如,如果您稍后除以某个数字,您可以将此公式分解为
exp(700)
块,并在合并整个方程式之前应用除法。
log X = log_a + log(-expm1(-log(10) + log_b - log_a))