clang is almost useless for complex arithmetic

Peter Jeremy peter at rulingia.com
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 troutmask.apl.washington.edu> 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
http://reviews.llvm.org/D5698, committed as rL219557.

I re-implemented their division algorithm in C and checked it against
the algorithms listed in http://arxiv.org/pdf/1210.4539v2.pdf.  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: <http://lists.freebsd.org/pipermail/freebsd-toolchain/attachments/20150131/0b9cdd2b/attachment.sig>


More information about the freebsd-toolchain mailing list