https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116299

--- Comment #4 from Ryan <rmaguire314 at gmail dot com> ---
Ah, sure here you go.

Output of gcc -v:

gcc version 12.2.0 (Debian 12.2.0-14)
Target: powerpc64le-linux-gnu
Thread model: posix

Output of uname -a:

Linux Ryans-CotG 6.1.0-23-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.99-1
(2024-07-15) ppc64le GNU/Linux

Emulated via deboostrap + chroot.

Preprocessed code.
With volatile: Peak relative error = 5x10^-32
Without volatile: Peak relative error = 10^-12
Quite a difference.

extern void
tmpl_LDouble_SinCosPi(long double t, long double *sin_t, long double *cos_t);

static inline
long double tmpl_LDouble_Normalized_Fresnel_Cos_Asymptotic(long double x)
{
    volatile const double x_double = (double)x;
    volatile const double split = x_double*3.4359738369E+10;
    volatile const double xhi_double = split - (split - x_double);
    const long double xhi = (long double)xhi_double;

    const long double xlo = x - xhi;
    const long double t = 1.0L /
(3.14159265358979323846264338327950288419716939L*x);

    long double sin_hi, cos_hi, sin_lo, cos_lo, sin_x;

    tmpl_LDouble_SinCosPi(xlo * xhi, &sin_hi, &cos_hi);
    tmpl_LDouble_SinCosPi(0.5L * xlo * xlo, &sin_lo, &cos_lo);
    sin_x = cos_hi*sin_lo + cos_lo*sin_hi;
    return 0.5L + t * sin_x;
}

Reply via email to