错误:无法记录-9.4351e + 0.007的日志

时间:2012-04-20 02:47:22

标签: perl logarithm

我正在使用Perl创建一个迷你搜索引擎。虽然这样做我正在使用一个带有日志到基数10的公式。但是对于某些值我得到一个错误:

无法记录-9.4351e + 0.007。

无法跟踪我从哪里收到此错误。我只是想忽略这个案子。如何在Perl中处理这个问题。查找基数10的子程序如下:

sub log10 {
my $n=shift;
return log($n)/log(10);
}

所以我可能正在寻找一张支票,上面写着,如果是这样,那么价值就找不到日志。

3 个答案:

答案 0 :(得分:6)

您无法记录负数。

有关详细信息,请参阅Wolfram MathWorld

答案 1 :(得分:2)

除了值为负数之外,字符串-9.4351e+0.007不是有效数字,因为浮点常量的指数部分只能是整数。

您必须将字符串传递给log10函数,因为Perl不会以这种格式抱怨数字。

你需要查看这些值的来源,因为在调用函数之前出现了问题,即使对于那些可以无错误地传递给log的值,它也可能会给你不正确的结果。 / p>

答案 2 :(得分:1)

ln y”表示“找到x ex等于y”。

e是一个正数(接近2.17828),所以无论你将e与自身相乘多少次,你都不会得到一个负数。

您无法找到负数日志。


正如鲍罗丁还指出,-9.4351e+0.007不被Perl识别为数字。

>perl -wE"say 0+'-9.4351e+0.007'"
Argument "-9.4351e+0.007" isn't numeric in addition (+) at -e line 1.
-9.4351