Есть ли способы получить inf
или -inf
от eval {1/0}
, eval {1/-0}
вместо Illegal division by zero
исключение?Perl division by zero - need infinity
ответ
Если вас use bignum
, вы получите inf
из 1/0
:
use bignum;
print 1/0; # produces "inf"
1/-0
еще inf
(я предполагаю, что это потому, что -0 == 0
).
Но '-1/0' возвращает' -inf', и для меня это кажется достаточно) Спасибо! –
Из коробки? Нет, потому что это неправильный ответ. Подразделение на ноль - не определено не бесконечно.
Вы могли бы использовать что-то вроде //
, чтобы проверить, если результат вашей eval
не определено:
my $result = eval { 1/0 } // 'inf';
print $result;
И установлено, что способ по умолчанию. (Хотя в приведенном выше примере, 'inf'
является строкой, числовое значение может быть более полезным). Существует набор библиотек математики, которые дают вам константы inf
, такие как bignum
bigrat
bigint
. Однако переносимость может быть проблемой.
Но таким образом я не могу отличить + и - бесконечность. Что касается вашей заметки о бесконечности - это сложный вопрос: https://www.quora.com/Is-1-0-infinity. Мне нужно специальное числовое значение 'inf' в моем случае. –
Что вам действительно нужно Data::Float:
#!/usr/bin/env perl
use strict;
use warnings;
use Carp qw(croak);
use Data::Float qw(have_infinite pos_infinity neg_infinity float_is_infinite);
have_infinite() or croak "No support for infinite float values";
my $v = -1;
my $x = 1;
my $y = 0;
my $z = eval { $x/$y };
unless (defined $z) {
$z = ($x >= 0) ? pos_infinity : neg_infinity;
}
print "$z\n";
$z = eval { $v/$y };
unless (defined $z) {
$z = ($v >= 0) ? pos_infinity : neg_infinity;
}
print "$z\n";
Выход:
$ ./inf.pl Inf -Inf
Конечно, если вы используете 5.10 или более поздней версии, вы можете сделать:
my $z = eval { $x/$y };
$z //= ($x >= 0) ? pos_infinity : neg_infinity;
print "$z\n";
$z = eval { $v/$y };
$z //= ($v >= 0) ? pos_infinity : neg_infinity;
print "$z\n";
Пожалуйста, не могли бы вы привести пример, как я могу использовать его для разделения? –
@EugeneSoldatov См. Обновленный ответ. –
Хорошо, теперь я понимаю, спасибо! –
- 1. PHP Division by Zero?
- 2. PHP Warning: Division by zero
- 3. Weird division by zero error
- 4. Odoo 9 qweb float division by zero
- 5. Modulo приводит к ошибке «Division by zero»
- 6. Warning: Division By Zero - Расчет процентов
- 7. Matlab - Matrix Division by Zero - Zeros и NaNs
- 8. Pandas - Multiindex Division [т. Division by Group]
- 9. C++ division by 0
- 10. Divide by Zero issues
- 11. Divide By Zero Oddities
- 12. divide by zero exception
- 13. main java.lang.ArithmeticException:/by Zero
- 14. Когда использовать NaN или +/- Infinity?
- 15. python ZeroDivisionError: float division by zero - как относиться к нему как к исключению
- 16. Divide by zero return infin
- 17. Divide by Zero Display Values
- 18. sql count/group by/zero
- 19. SQL Group By Count Zero
- 20. SQL Divide by Zero Error
- 21. Вычисляемые поля Divide by Zero
- 22. TSQL Divide by Zero Error
- 23. Divide by Zero Простая программа
- 24. Выберите count & count division by sysdate
- 25. I need correct ORDER BY date
- 26. Почему Infinity-Infinity NaN?
- 27. java.lang.ArithmeticException:/by zero with Primefaces LazyDataModel
- 28. Поведение компилятора относительно NaN и +/- Infinity
- 29. Perl split by regexp issue
- 30. Сборка: LC3 Division
Связанный: http://stackoverflow.com/questions/13645034/is-there-an-inf-constant-in-perl. – ruakh
@руах, я знаю, что это 'inf' в perl, мой вопрос о том, как получить его из деления на ноль. –
Все, что я написал, это то, что этот вопрос связан. Люди, которые находят ваш вопрос, также могут быть заинтересованы в этом вопросе. (Помните, ваш вопрос не только для вас.) – ruakh