ieee-fp: fix ext:float-{infinity/nan}-p

ext:float-infinity-p returned true for NaNs and ext:float-nan-p was
slower than necessary.
This commit is contained in:
Marius Gerbershagen 2019-07-13 17:45:38 +02:00
parent 5c7aecc15f
commit fa28f08770

View file

@ -64,17 +64,16 @@ si_float_infinity_p(cl_object x)
bool
ecl_float_nan_p(cl_object x)
{
return !ecl_number_equalp(x,x);
/* switch (ecl_t_of(x)) { */
/* case t_singlefloat: */
/* return !isnan(ecl_single_float(x)); */
/* case t_doublefloat: */
/* return !isnan(ecl_double_float(x)); */
/* case t_longfloat: */
/* return !isnan(ecl_long_float(x)); */
/* default: */
/* return 0; */
/* } */
switch (ecl_t_of(x)) {
case t_singlefloat:
return isnan(ecl_single_float(x));
case t_doublefloat:
return isnan(ecl_double_float(x));
case t_longfloat:
return isnan(ecl_long_float(x));
default:
return 0;
}
}
bool
@ -82,11 +81,11 @@ ecl_float_infinity_p(cl_object x)
{
switch (ecl_t_of(x)) {
case t_singlefloat:
return !isfinite(ecl_single_float(x));
return isinf(ecl_single_float(x));
case t_doublefloat:
return !isfinite(ecl_double_float(x));
return isinf(ecl_double_float(x));
case t_longfloat:
return !isfinite(ecl_long_float(x));
return isinf(ecl_long_float(x));
default:
return 0;
}