19

我正在为算法初始化一个无穷大的列表。写作$x = 9**9**9感觉不直观,而且,我将来可能想使用 BigInt。1/0引发错误。

获得的规范方法是什么inf

4

2 回答 2

19

您可以使用特殊字符串"inf"

perl -E'say "inf" + 1'
inf
perl -E'say 1 / "inf"'
0

等等。

其他特殊字符串包括+inf, -inf, nan. 当然,这也适用于bignumor bigintpragma。但是,这些 pragma 导出等效函数infNaN因此您可以使用裸字。

编辑

正如@ikegami 指出的那样,似乎没有一种可移植的方式来实现没有模块的真正无穷大。我刚刚浏览了这个有趣的 perlmonks 线程,但它并没有变得不那么令人困惑。也许最好的解决方案是从一开始就接受性能损失use big{num,int,rat},但no big{num,int,rat}在不需要它们的范围内使用。

于 2012-11-30T12:29:00.143 回答
3

我用bigrat来做到这一点。很难说-E 启用了哪些功能。

use bigrat;
use feature qw(say);

say inf + inf;
say 9**99 / -inf();  #Perl doesn't always like "-inf" by itself

use bigrat;已经存在很长时间了,所以它应该非常便携。

于 2012-11-30T14:25:05.373 回答