计算-log10的非常小的值

时间:2013-02-22 10:05:18

标签: python perl r openoffice.org

有没有办法计算-log10值。

值非常小,即3 * e-178或e-320。

我尝试过使用公式日志((1 / value),10)的开放式办公室,它工作正常但是当它遇到非常小的值时,它会给出错误,例如除零,这是不可能的。

我想当我使用perl或python或R时会发生同样的情况。

请将这些值转换为-log10value

谢谢

注意:我想计算基数为10的减去日志值

5 个答案:

答案 0 :(得分: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

答案 1 :(得分: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)

math.log10(3e-320)返回正确的值时,math.log10(3e-325)会引发ValueError: math domain error

答案 2 :(得分:3)

perl one liner:

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

<强>输出:

-319.522883580228

答案 3 :(得分:2)

正如您应该从其他答案中可以看出,更好的公式是-log10(值),或者在OpenOffice Calc电子表格中,= -LOG(值,10)。

但是,您需要确保输入的值不会下溢到0。 -LOG(3E-178,10)工作(177.522879),但-LOG(1E-320,10)失败,因为1E-320下溢到0并且出现Err.502。 (这可能是你使用1 /值爆炸的原因。)

答案 4 :(得分:1)

您可以使用decimal module in Python以任意精度计算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()))

Output

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()))

Output

3e-178  -177.5228787452803375835172220093158130425818111446701314507791687173572
1e-320  -320.0000048349480421542963791664378178773271498211156984605956663618384
3e-320  -319.5228835802283797170013512631827025681270209569250025957658007215332
1e-325  -325
3e-325  -324.5228787452803375627049720967448846907998711358093041351701343596948
相关问题