有沒有辦法計算-log10values。計算非常小的值-log10
其中值非常小即3 * e-178或e-320。
我試過公式日誌((1 /值),10)的開放式辦公,它工作的很好,但是當它遇到非常小的值時,它給出的錯誤如零除以不可能。
我想同樣會發生時,我會用Perl或Python或R
在將這些值-log10value
請幫忙,謝謝
注:我想計算負日誌與底座10
有沒有辦法計算-log10values。計算非常小的值-log10
其中值非常小即3 * e-178或e-320。
我試過公式日誌((1 /值),10)的開放式辦公,它工作的很好,但是當它遇到非常小的值時,它給出的錯誤如零除以不可能。
我想同樣會發生時,我會用Perl或Python或R
在將這些值-log10value
請幫忙,謝謝
注:我想計算負日誌與底座10
一個Perl的一個班輪:
perl -e 'print log($ARGV[0])/log(10),"\n"' 3e-320
輸出:
-319.522883580228
值在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)
雖然math.log10(3e-320)
返回正確的值, math.log10(3e-325)
產生了ValueError: math domain error
。
在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
你可以計算日誌10使用decimal
module in Python例如任意精度使用默認精度:
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
正如您應該能夠從其他答案中所瞭解的那樣,更好的公式是-log10(value),或者在OpenOffice Calc電子表格中,= -LOG(value,10)。
但是,您需要確保輸入的值不會下溢到0。 -OG(3E-178,10)工作(177.522879),但-LOG(1E-320,10)失敗,因爲1E-320下溢到0並且出現Err.502。 (這也許就是爲什麼你使用1 /值也會爆炸的原因。)
你從哪裏得到你的號碼?他們代表什麼? – QkuCeHBH 2013-02-22 11:37:30
這些是p值 – Angelo 2013-02-22 12:20:02
我在想這些值的任何虛假設可能都是錯誤的。 – 2013-02-23 03:53:05