http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56404
Bug #: 56404 Summary: About fpclassify and standard C99 Classification: Unclassified Product: gcc Version: 4.7.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: other AssignedTo: unassig...@gcc.gnu.org ReportedBy: argentinator.gcc.questi...@outlook.com (First of all, I apologize because I don't know which is the right section to post this message). I think that probably there is a bug with the macro fpclassify(). The following program classifies a 'double subnormal' number as a 'normal' one (maybe the value it is seen by the macro as a 'long double'). ---------------------------------------------------------------- #include <math.h> #include <float.h> #include <stdio.h> int main(void) { double x = DBL_MIN/1024.0; long double z = LDBL_MIN/1024.0; printf("x == %a\n\nclass x == %X\n\nclass z == %X\n", x, fpclassify(x), fpclassify(z)); } ---------------------------------------------------------------- My compiler is GCC 4.7.2 on MinGW, under Windows 7. The compiler option is just: -std=c99. (Anyway, without command line options I have found the same results). I have FLT_EVAL_METHOD == 2. The output I have obtained is: -------------------------------------------------------------- x == 0x8p-1035 class x == 400 class z == 4400 -------------------------------------------------------------- Comments: * x is a 'double subnormal' number. * fpclassify(x) tells that x is a 'normal' value (0x400), and this would be wrong. * fpclassify(z) tells that z is a 'long double subnormal' value (0x4400), which is right. It seems that fpclassify(x) have not recognized that x has type 'double'.