1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-21 12:10:26 +02:00

Avoid cexp, whose C standard definition is mathematically incorrect

* libguile/numbers.c (scm_exp): Do not use cexp.
This commit is contained in:
Mark H Weaver 2012-07-31 22:52:17 -04:00
parent cc26b9de1d
commit ecbded71bb

View file

@ -9593,13 +9593,13 @@ SCM_PRIMITIVE_GENERIC (scm_exp, "exp", 1, 0, 0,
{ {
if (SCM_COMPLEXP (z)) if (SCM_COMPLEXP (z))
{ {
#if defined HAVE_COMPLEX_DOUBLE && defined HAVE_CEXP \ /* Unfortunately we cannot use cexp() here, because both C99 and
&& defined (SCM_COMPLEX_VALUE) C11 specify behavior for cexp() that is mathematically
return scm_from_complex_double (cexp (SCM_COMPLEX_VALUE (z))); incorrect. In particular, they specify in annex G.6.3.1
#else that cexp(+inf.0+inf.0i) and cexp(+inf.0+nan.0i) return
+inf.0+nan.0i or -inf.0+nan.0i. */
return scm_c_make_polar (exp (SCM_COMPLEX_REAL (z)), return scm_c_make_polar (exp (SCM_COMPLEX_REAL (z)),
SCM_COMPLEX_IMAG (z)); SCM_COMPLEX_IMAG (z));
#endif
} }
else if (SCM_NUMBERP (z)) else if (SCM_NUMBERP (z))
{ {