------- Additional Comments From kargl at gcc dot gnu dot org 2005-05-28 14:39 ------- FX,
On i386-*-freebsd, -fdump-tree-original shows MAIN__ () { complex4 z; complex4 c; z = __complex__ (4.0e+0, 0.0); c = csqrtf (z); kargl[214] find . -type f | xargs grep csqrtf ./gcc/builtins.def:DEF_C99_BUILTIN (BUILT_IN_CSQRTF, "csqrtf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING) ./gcc/doc/extend.texi:@findex csqrtf ./gcc/doc/extend.texi:@code{csinhl}, @code{csinh}, @code{csinl}, @code{csin}, @code{csqrtf}, ./libstdc++-v3/ChangeLog-2000: (EXTRA_DIST): Remove csqrt.c and csqrtf.c. ./libstdc++-v3/acinclude.m4: csqrtf(tmpf); ./libstdc++-v3/configure: csqrtf(tmpf); ./libstdc++-v3/include/std/std_complex.h: __complex_sqrt(__complex__ float __z) { return __builtin_csqrtf(__z); } ./libstdc++-v3/ChangeLog-1998: * math/csqrtf.c: Likewise. ./libstdc++-v3/ChangeLog-1998: * math/csqrtf.c: Likewise. ./libstdc++-v3/ChangeLog-1999: * math/csqrtf.c: Likewise. ./libgfortran/generated/exp_c4.c:csqrtf (GFC_COMPLEX_4 z) If we look through libgfortran/generated/exp_c4.c, we see that csqrtf mixes float and double C math functions if (im == 0.0) { if (re < 0.0) { COMPLEX_ASSIGN (v, 0.0, copysignf (sqrtf (-re), im)); } else { COMPLEX_ASSIGN (v, fabsf (sqrt (re)), copysignf (0.0, im)); } } Note the sqrt (re) instead of sqrtf (re). -- What |Removed |Added ---------------------------------------------------------------------------- CC| |kargl at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21797