Существует ли постоянная inf в Perl?

Я инициализирую список с бесконечностями для алгоритма. Написание $x = 9**9**9 кажется неинтуитивным, а также, возможно, я захочу использовать BigInt в будущем. 1/0 выдает сообщение об ошибке.

Какой канонический способ получить inf?

Ответы

Ответ 1

Вы можете использовать специальную строку "inf":

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

et cetera.

Другие специальные строки включают +inf, -inf, nan. Конечно, это также работает с bignum или bigint прагмами. Однако эти прагмы экспортируют эквивалентные функции inf и nan, чтобы вы могли использовать простые слова.

Изменить

Как отметил @ikegami, похоже, что нет портативного способа выполнения истинных бесконечностей без модуля. Я просто пробрался через этот интересный поток perlmonks, но он не становится менее запутанным. Возможно, лучшим решением было бы принять штраф за производительность и use big{num,int,rat} с самого начала, но использовать no big{num,int,rat} в областях, где они не требуются.

Ответ 2

Я использовал 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; существует долгое время, поэтому он должен быть довольно портативным.