Perl — это не C; если вы попытаетесь вычислить слишком большое целое число, вместо этого вы получите результат с плавающей запятой (если вы не используете use bigint
, что делает целые числа неограниченными). Кроме того, вы получаете inf
.
Вы можете увидеть это с помощью Devel::Peek
, который показывает вам внутреннее представление значения в Perl:
$ perl -E 'use Devel::Peek; Dump(1000); Dump(1000**100); Dump(1000**100 + 1)'
SV = IV(0xcdf290) at 0xcdf2a0
REFCNT = 1
FLAGS = (PADTMP,IOK,READONLY,pIOK)
IV = 1000
SV = NV(0xd04f20) at 0xcdf258
REFCNT = 1
FLAGS = (PADTMP,NOK,READONLY,pNOK)
NV = 1e+300
SV = NV(0xd04f18) at 0xcdf228
REFCNT = 1
FLAGS = (PADTMP,NOK,READONLY,pNOK)
NV = 1e+300
IV
указывает целочисленное значение; NV
указывает значение с плавающей запятой (Число?).
Вам определенно следует использовать инструмент, подходящий для вашей цели, а не нечеткий хак; List::Util::min
как уже упоминалось в другом ответе, отлично. Просто подумал, что вам может понравиться подтверждение вашего первоначального вопроса :)
person
Eevee
schedule
28.02.2013
O(n log n)
. По сравнению с обходом (O(n)
) это проблема, только если у вас есть массивы с тысячами и миллионами элементов. - person Niet the Dark Absol   schedule 28.02.2013O(n log n)
. - person Krishnachandra Sharma   schedule 28.02.2013