accuracy of mathematical functions

Brian Inglis
Sat Feb 6 00:40:30 GMT 2021

On 2021-02-05 16:46, Joel Sherrill wrote:
> On Fri, Feb 5, 2021 at 5:01 PM Brian Inglis wrote:
>> On 2021-02-05 03:43, Paul Zimmermann wrote:
>>> I have updated my comparison with the newly released 2.33 version.
>>> No big difference with the previous version, except that I included
>>> the "long double" format (aka ldbl-96), which is not supported by Newlib.
>> Thanks for doing this work and making it available is greatly appreciated.
>> While newlib is mainly targeted to smaller platforms, the Cygwin port math
>> library supports gcc __FLT64X_...__/__FLT128_...__ under
>> .../newlib-cygwin/winsup/cygwin/math/ and related includes.

> Any thoughts on what's required to have long double support on the targets 
> where long double != double? Someone was recently cleaning up the warnings 
> from the RTEMS tests which check that the headers match POSIX's man page and
> I generated this list of architectures from the RTEMS tools and which have 
> long double support in libm.a
> no  aarch64-rtems6
> yes arm-rtems6
> yes bfin-rtems6
> no  i386-rtems6
> yes lm32-rtems6
> no  m68k-rtems6
> yes microblaze-rtems6
> yes mips-rtems6
> yes moxie-rtems6
> yes nios2-rtems6
> yes or1k-rtems6
> yes powerpc-rtems6
> no  riscv-rtems6
> yes sh-rtems6
> no  sparc64-rtems6
> yes sparc-rtems6
> yes v850-rtems6
> no  x86_64-rtems6
> It probably is a decent GSoC project if upstream sources for long double on
> some of those architectures can be identified for potential incorporation.
ARM aarch64 probably have c and S sources available, maybe recent PowerPC.

Cygwin sources appear to be from mingw-w64 and are PD, ZPL, or unspecified:

$cd ~/src/newlib-cygwin/winsup/cygwin/math/
$ egrep -c 'Zope|PD' *l.* | pr -4th ""
acoshl.c:1        complex_internal. floorl.S:1        nearbyintl.S:1
acosl.c:1         conjl.c:1         fmal.c:1          nextafterl.c:1
asinhl.c:1        copysignl.S:1     fmaxl.c:1         pow10l.c:0
asinl.c:1         coshl.c:1         fminl.c:1         powil.c:1
atan2l.c:1        cosl.c:1          fmodl.c:1         powl.c:1
atanhl.c:1        cosl_internal.S:1 frexpl.S:1        remainderl.S:1
atanl.c:1         cpowl.c:1         ilogbl.S:1        remquol.S:1
cabsl.c:1         cprojl.c:1        internal_logl.S:1 rintl.c:1
cacosl.c:1        creal.def.h:1     ldexpl.c:1        roundl.c:1
cargl.c:1         creall.c:1        lgammal.c:1       scalbl.S:1
casinl.c:1        csinl.c:1         llrintl.c:1       scalbnl.S:1
catanl.c:1        csqrtl.c:1        llroundl.c:1      sinhl.c:1
cbrtl.c:1         ctanl.c:1         log10l.S:1        sinl.c:1
ccosl.c:1         erfl.c:1          log1pl.S:1        sinl_internal.S:1
ceil.S:1          exp10l.c:0        log2l.S:1         sqrtl.c:1
ceill.S:1         exp2l.S:1         logbl.c:1         tanhl.c:1
cexpl.c:1         expl.c:1          logl.c:1          tanl.S:1
cimagl.c:1        expm1l.c:1        lrintl.c:1        tgammal.c:1
clog10l.c:1       fabsl.c:1         lroundl.c:1       truncl.c:1
clogl.c:1         fdiml.c:1         modfl.c:1
$ head ???10l.c
==> exp10l.c <==
#undef exp10l
#include <math.h>

long double
exp10l (long double x)
   return powl (10.0L, x);

==> pow10l.c <==
#undef pow10l
#include <math.h>

long double
pow10l (long double x)
   return powl (10.0L, x);

>> As you may already be aware, clang and gcc have added support for ARM 
>> __FLT16/__fp16, AMD and Intel have added it to x86/amd64 as CVT16/FP16C 
>>, and more compiler and library support 
>> are likely to follow, as they are already used in graphics and GPGPU
>> areas.
> What would this require from newlib, if anything?  He asks ignorantly. :)

More of a comment to the OP for future exhaustive testing.

Indication of demand or need; arch and compiler support; adopt/adapt software 

Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada

This email may be disturbing to some readers as it contains
too much technical detail. Reader discretion is advised.
[Data in binary units and prefixes, physical quantities in SI.]

More information about the Newlib mailing list