1

たとえば、非常に大きな値の対数があります。

log_a = 1347 
log_b = 1351 

そして、私はこの表現を解決しようとしています:

exp(log_a) - (0.1 * exp(log_b))

または同等にこれ(同じ表現を別の形式で):

exp( log_a ) - exp( log(0.1) + log_b ) 

しかしもちろん、exp(log_a)またはexp(log_b)の値を計算しようとするたびに、Infを取得します。exp(log_a)-(0.1 * exp(log_b))の実際の結果を対数または指数形式で取得するために使用できるトリックはありますか?

助けてくれてありがとう!

4

3 に答える 3

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

または手動で計算:

-(exp(1347+log(0.1*exp(4)-1))=-exp(1347+1.4951...)=-exp(1348.4951...)
于 2013-02-04T17:28:52.237 に答える
4
X = exp(log_a) - (0.1 * exp(log_b))
  = exp(log_a) * (1 - 0.1 * exp(log_b) / exp(log_b))
  = exp(log_a) * (1 - exp(-log(10) + log_b - log_a))
  = -exp(log_a) * expm1(-log(10) + log_b - log_a)

expm1exp(x)-1は、ゼロにx近い値を正確に計算する組み込み関数です。この対数は、toの引数expm1が負であり、式全体が正である場合にのみ取得できます。次に、絶対値の対数を取ることができます。

log X = log_a + log(-expm1(-log(10) + log_b - log_a))
于 2013-02-04T17:45:24.660 に答える
1

多数をサポートするR用のgmpライブラリを使用できます(私が知る限り、任意に大きい)

例えば

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

べき乗演算子はパッケージのどこかに含まれていると思います。マニュアルはここにあります:http://cran.r-project.org/web/packages/gmp/gmp.pdf

于 2013-02-04T17:29:45.230 に答える