I wrote a little C program to show that cexp() does not preserve the zero-signed-ness:
cos,sin: +1.000000 -0.000000
__sincos: +1.000000 -0.000000
cexp: +1.000000 +0.000000
The scm_c_make_polar will use sincos() if available, but macOS does not have sincos(), it has __sincos().
#include <stdio.h>
#include <stdint.h>
#include <math.h>
#include <complex.h>
extern double z, p, n;
int main() {
double complex c;
double d, sine, cosine;
d = z*n;
printf(" cos,sin: %+f %+f\n", cos(d), sin(d));
__sincos(d, &sine, &cosine);
printf("__sincos: %+f %+f\n", cosine, sine);
c = cexp(CMPLX(0.0, d));
printf(" cexp: %+f %+f\n", creal(c), cimag(c));
}
double z = 0.0, p = +1.0, n = -1.0;
--- configure.ac.orig 2017-02-18 08:35:06.000000000 -0800
+++ configure.ac 2017-02-18 08:35:26.000000000 -0800
@@ -1152,8 +1152,9 @@
# asinh, acosh, atanh, trunc - C99 standard, generally not available on
# older systems
# sincos - GLIBC extension
+# __sincos - APPLE extension
#
-AC_CHECK_FUNCS(asinh acosh atanh copysign finite sincos trunc)
+AC_CHECK_FUNCS(asinh acosh atanh copysign finite sincos __sincos trunc)
# C99 specifies isinf and isnan as macros.
# HP-UX provides only macros, no functions.
--- libguile/numbers.c.patch.labs 2017-02-18 08:31:21.000000000 -0800
+++ libguile/numbers.c 2017-02-18 08:34:18.000000000 -0800
@@ -9109,6 +9109,8 @@
details. */
#if (defined HAVE_SINCOS) && (defined __GLIBC__) && (defined _GNU_SOURCE)
sincos (ang, &s, &c);
+#elif (defined HAVE___SINCOS)
+ __sincos (ang, &s, &c);
#else
s = sin (ang);
c = cos (ang);