POSIX [1] specifies that the return value of the functions ilogbf(), ilogb(), ilogbl() for a NaN argument should all be the same, namely FP_ILOGBNAN.
[1] https://pubs.opengroup.org/onlinepubs/9699919799/functions/ilogb.html In Cygwin 3.4.6, the value of ilogbl(NaN) is not right. How to reproduce: ============================== foo.c ============================== #include <math.h> #include <float.h> #include <limits.h> #include <stdio.h> #include <stdlib.h> int main (void) { volatile double x1; volatile long double x2; int y1; int y2; x1 = 0.0 / 0.0; y1 = ilogb (x1); x2 = 0.0L / 0.0L; y2 = ilogbl (x2); printf ("%d %d %d\n", y1, y2, FP_ILOGBNAN); if (!(y1 == FP_ILOGBNAN)) abort (); /* This test fails in Cygwin 3.4.6. */ if (!(y2 == FP_ILOGBNAN)) abort (); if (!(FP_ILOGBNAN == INT_MAX || FP_ILOGBNAN == INT_MIN)) abort (); } =================================================================== $ gcc -Wall foo.c $ ./a.exe Expected output: 2147483647 2147483647 2147483647 Actual output: 2147483647 -2147483648 2147483647 Aborted (core dumped) Bruno PS: This is about the same function, but not the argument value, as in https://cygwin.com/pipermail/cygwin/2019-December/243205.html -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple