在我的一个模块中,我必须处理无穷大的概念。迄今为止,我一直使用9**9**9
正无穷大,这似乎运作良好,速度很快,并且似乎是 perl 的内部使用的无穷大。
但是,如果我的模块的用户决定使用其中一个大数模块(如use bigint;
),然后他们使用inf
orMath::BigInt->binf()
来表示无穷大,事情就会变得有点冒险。
在某些地方它似乎工作正常,但在其他地方,应该为真或应该为假的比较最终会以错误的方式结束,导致难以追踪错误。
我想用一些适用于普通 perl 数字和任意精度数字的东西来支持各种其他的无穷大概念。
但我也担心性能,因为我与无穷大的一些比较发生在紧密的内部循环中。显然inf
fromMath::BigInt
会比9**9**9
(由于在每次访问时调用绑定或重载方法)要慢。过去有没有人处理过这个问题?如果是这样,您的解决方案是什么?
我考虑过使用自己的无穷大常量,定义如下:
use constant INF => if_any_bignum_modules_loaded()
? Math::BigInt->binf
: 9**9**9;
然后向我的模块添加警告,即应首先加载任何 bignum 模块。这听起来合理吗?那里有可靠的实现if_any_bignum...
,还是我应该自己推出?