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; }