You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The following test program computes cosh of 1, 1/2, 1/4, ..., 1/2^-128.
#include<stdio.h>#include<math.h>intmain(intargc, char**argv) {
long doubled=1.0;
for (inti=0; i<128; i++) {
printf("coshl(%La) = %La\n", d, coshl(d));
d /= 2;
}
}
For small ε, cosh(ε) ≈ 1+ε^2/2. So if we run on AArch64, which has 128-bit long doubles with a 112-bit mantissa, we expect that by the time the input is about 2^-56, the output will be indistinguishable from 1. And indeed this looks sensible to start off with:
Naive question: could this branch be amended to return one instead of w?
Also, I checked the OpenBSD source (where openlibm's 128-bit long double definition for coshl came from) and the code hasn't changed since the version imported here, so it has the same issue. When the issue is fixed here it could be worthwhile for someone to contribute the fix back upstream as well.
Activity
ararslan commentedon Jan 17, 2024
Naive question: could this branch be amended to return
oneinstead ofw?Also, I checked the OpenBSD source (where openlibm's 128-bit
long doubledefinition forcoshlcame from) and the code hasn't changed since the version imported here, so it has the same issue. When the issue is fixed here it could be worthwhile for someone to contribute the fix back upstream as well.ld128: fix coshl returning 1+x instead of 1 for tiny |x|
add regression test for JuliaMath#285 coshl tiny inputs
ld128: fix coshl returning 1+x instead of 1 for tiny |x|
add regression test for JuliaMath#285 coshl tiny inputs
add regression test for JuliaMath#285 coshl tiny inputs