我正在为一个算法初始化一个无穷大的列表。写$x = 9**9**9感觉不直观,而且,我可能想在将来使用BigInt。1/0抛出一个错误。得到inf的规范方法是什么?
$x = 9**9**9
1/0
inf
nue99wik1#
可以使用特殊字符串"inf":
"inf"
perl -E'say "inf" + 1' inf perl -E'say 1 / "inf"' 0
字符串等等。;其他特殊字符串包括+inf,-inf,nan。当然,这也适用于bignum或bigint编译指示。但是,这些编译指示导出等效的函数inf和NaN,以便您可以使用空字。
+inf
-inf
nan
bignum
bigint
NaN
正如@ikegami所指出的,似乎没有一种“可移植的”方式可以在没有模块的情况下实现真正的无穷大。我刚刚浏览了interesting perlmonks thread,但它并没有减少混乱。也许最好的解决方案是从一开始就接受性能损失和use big{num,int,rat},但在不需要它们的范围内使用no big{num,int,rat}。
use big{num,int,rat}
no big{num,int,rat}
7vhp5slm2#
我使用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;已经存在很长时间了,所以它应该是非常便携的。
use bigrat;
2条答案
按热度按时间nue99wik1#
可以使用特殊字符串
"inf"
:字符串
等等。;
其他特殊字符串包括
+inf
,-inf
,nan
。当然,这也适用于bignum
或bigint
编译指示。但是,这些编译指示导出等效的函数inf
和NaN
,以便您可以使用空字。编辑
正如@ikegami所指出的,似乎没有一种“可移植的”方式可以在没有模块的情况下实现真正的无穷大。我刚刚浏览了interesting perlmonks thread,但它并没有减少混乱。也许最好的解决方案是从一开始就接受性能损失和
use big{num,int,rat}
,但在不需要它们的范围内使用no big{num,int,rat}
。7vhp5slm2#
我使用bigrat来实现这一点。很难说-E支持哪些 * 特性 *。
字符串
use bigrat;
已经存在很长时间了,所以它应该是非常便携的。