tinyexpr: Check for nan in ncr

Turns out this takes ages.

Fixes #8170
This commit is contained in:
Fabian Homborg 2021-07-26 18:39:09 +02:00
parent 4bb1c72a91
commit d32e1c12be
2 changed files with 8 additions and 0 deletions

View File

@ -156,6 +156,8 @@ static double fac(double a) { /* simplest version of fac */
}
static double ncr(double n, double r) {
// Doing this for NAN takes ages - just return the result right away.
if (std::isnan(n)) return INFINITY;
if (n < 0.0 || r < 0.0 || n < r) return NAN;
if (n > UINT_MAX || r > UINT_MAX) return INFINITY;
unsigned long int un = static_cast<unsigned int>(n), ur = static_cast<unsigned int>(r), i;

View File

@ -219,3 +219,9 @@ math pow 2, cos -pi
# i.e. 4
math pow 2 x cos'(-pi)', 2
# CHECK: 4
# This used to take ages, see #8170.
# If this test hangs, that's reintroduced!
math 'ncr(0/0, 1)'
# CHECKERR: math: Error: Result is infinite
# CHECKERR: 'ncr(0/0, 1)'