How to avoid division by zero problem
Opened this issue · 3 comments
//function 1/x return 0 for x=0 !!! How to avoid this
replace line number 315
// if ($op2 == 0) return $this->trigger("division by zero");
//by this
if($op2 == 0){$stack->push(NAN); break;}
Предложенный код скрывает факт ошибки:
if($op2 == 0){$stack->push(NAN); break;}
Класс EvalMath генерирует ошибки уровня E_USER_WARNING.
Самый простой способ загасить ошибку, это поставить знак "@" перед выражением:
$em = new EvalMath();
$v = @$em->evaluate('1/2');
if($v === false) {
var_dump($em->last_error); // not shown
}
var_dump($v); // float 0.5
$v = @$em->evaluate('1/0');
if($v === false) {
var_dump($em->last_error); // string 'division by zero' (length=16)
}
var_dump($v); // boolean false
View sample here http://www.sigmaths.tk/outils/tableau.php
У меня нет доступа к твоему localhost.
К стати можно просто отключить ошибки:
$m->suppress_errors - Подавление ошибок. Установите true для отключения предупреждений при вычислении выражений.
См. исходный код: https://github.com/optimistex/yii2-expression/blob/master/evalmath.class.php#L415