HomeFreeBSD

sinpi[fl] etc: Fix the ld128 implementations

Description

sinpi[fl] etc: Fix the ld128 implementations

Mark Murray graciously provided access to an aarch64 system
to test the ld128 implementations. This patch address

  • Misuses of copysignl() in sinpil() and tanpil().
  • Redo the splitting of argument 'x' into an integer part and remainder. The remainder must satify 0 <= r < 1.
  • Update the reduction of the integer part to something that can easily be seen as even or odd, e.g., sin(pi*x) = (-1)^n*sin(pi*r) with n <= 2^112 and we an reduce n by subtracting integer powers of 2.
  • In s_cospil.c, fix typos where 'x' is used where 'ax', the remainder, is required.
  • In tanpil(), fix the use of an uninitialized variable, ax = fabsl(ax), ax should be x in fabsl().

One item of note, in the limited tested on aarch64, the max ULP
for sinpil() and cospil() were less than 1.1 ULP, which is higher
that the desired max ULP less than 1. This was traced to the
kernel for cosl() in the fundamental interval [0,pi/4].
The coefficients in the minmax polynomial likely need refinement.

PR: 218514
MFC after: 1 week

Details

Provenance
Steve Kargl <kargl@FreeBSD.org>Authored on Oct 31 2021, 10:26 PM
kibCommitted on Nov 1 2021, 2:38 AM
Parents
rGd5d2ce1c8550: nfscl: Do pNFS layout return_on_close synchronously
Branches
Unknown
Tags
Unknown