clang is almost useless for complex arithmetic

Peter Jeremy peter at
Fri Jan 30 22:39:36 UTC 2015

To resurrect an old thread...

On 2014-Mar-25 17:22:05 -0700, Steve Kargl <sgk at> wrote:
>It appears that clang developers have chosen the naive
>complex division algorithm, and it does not matter whether
>one turns CX_LIMITED_RANGE on or off.  This means that 
>if one uses clang with complex types, one must be careful
>with the range of values allowed in complex division.  In
>other words, implementation of complex libm routines cannot
>use complex data types and must fallback to a decomposition
>into real and imaginary components. 

Whilst the fixes don't seem to have made it into FreeBSD yet, it seems
that this has been improved in recent Clang/LLVM - see, committed as rL219557.

I re-implemented their division algorithm in C and checked it against
the algorithms listed in  Whilst
it fails on same of the difficult values listed in that paper, when
faced with a range of random arguments, it seems to perform better[*]
than the "robust" algorithm.

I didn't look closely at the multiplication algorithm but, based on a
quick look, it seems that it's still susceptable to spurious overflows.

[*] or at least closer to the result given by the naive algorithm using
    x87 long doubles.

Peter Jeremy
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 949 bytes
Desc: not available
URL: <>

More information about the freebsd-numerics mailing list