2

-log10values を計算する方法はありますか。

値が非常に小さい場合、つまり 3*e-178 または e-320。

式 log((1/value),10) でオープン オフィスを試してみましたが、正常に動作しますが、非常に小さな値に遭遇すると、ゼロ除算などのエラーが発生することはありません。

perl や python や R を使うときも同じことが起こると思います。

これらの値を -log10value に変換するのを手伝ってください

ありがとうございました

注: 基数 10 の値の負の対数を計算したい

4

5 に答える 5

6

Rで:

x <- 3e-320
log10(x)
#-319.5229

y <- 3*exp(-320)
log10(y)
#-138.4971

大きな指数の場合:

library(Brobdingnag)
x <- 3*as.brob(10)^(-1000)
log10(x)
#-999.5229

y <- 3*as.brob(exp(1))^(-1000)
log10(y)
#-433.8174

または:

log10(3)-1000
#-999.5229
于 2013-02-22T10:33:26.663 に答える
3

perl ワンライナー:

perl -e 'print log($ARGV[0])/log(10),"\n"' 3e-320

出力:

-319.522883580228
于 2013-02-22T11:01:16.660 に答える
3

Python の場合:

import math
math.log10(3e-320)

戻り値

-319.5228835802284

非常に小さな値で Python の機能に関する詳細情報を取得するには、次のようにします。

import sys
sys.float_info

戻り値 (システムによって異なります):

sys.float_info(max=1.7976931348623157e+308,
               max_exp=1024,
               max_10_exp=308,
               min=2.2250738585072014e-308,
               min_exp=-1021,
               min_10_exp=-307,
               dig=15,
               mant_dig=53,
               epsilon=2.220446049250313e-16,
               radix=2,
               rounds=1)

whilemath.log10(3e-320)は正しい値を返し、math.log10(3e-325)を発生させValueError: math domain errorます。

于 2013-02-22T10:06:34.060 に答える
1

decimalPython のモジュールを使用して任意の精度で log10 を計算できます。たとえば、デフォルトの精度を使用します。

from decimal import Decimal as D

for f in [3e-178, 1e-320, 3e-320, "1e-325", "3e-325"]:
     print("%s\t%s" % (f, D(f).log10()))

出力

3e-178  -177.5228787452803375835172220
1e-320  -320.0000048349480421542963792
3e-320  -319.5228835802283797170013513
1e-325  -325
3e-325  -324.5228787452803375627049721

または:

import decimal

decimal.getcontext().prec = 70
for f in [3e-178, 1e-320, 3e-320, "1e-325", "3e-325"]:
     print("%s\t%s" % (f, decimal.Decimal(f).log10()))

出力

3e-178  -177.5228787452803375835172220093158130425818111446701314507791687173572
1e-320  -320.0000048349480421542963791664378178773271498211156984605956663618384
3e-320  -319.5228835802283797170013512631827025681270209569250025957658007215332
1e-325  -325
3e-325  -324.5228787452803375627049720967448846907998711358093041351701343596948
于 2013-02-22T11:04:46.863 に答える