0

我正在使用 Perl 创建一个迷你搜索引擎。这样做时,我使用了一个以 10 为底的日志公式。但是对于某些值,我收到了一个错误:

无法记录 -9.4351e+0.007。

无法跟踪我从哪里得到这个错误。我只想忽略这个案例。如何在 Perl 中处理这个问题。查找以 10 为底的日志的子程序如下:

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

所以可能我正在寻找一张支票,上面写着如果某某某值找不到日志。

4

3 回答 3

6

您不能记录负数。

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

于 2012-04-20T02:52:20.430 回答
2

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

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

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

于 2012-04-20T03:27:17.293 回答
1

ln y”的意思是“找到等于的x地方”。exy

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

您找不到负数的日志。


正如 Borodin 还指出的那样,-9.4351e+0.007Perl 不将其识别为数字。

>perl -wE"say 0+'-9.4351e+0.007'"
Argument "-9.4351e+0.007" isn't numeric in addition (+) at -e line 1.
-9.4351
于 2012-04-20T03:24:40.240 回答