(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'.
Report this to the mingw folks since they are the ones who provide fpclassify. That is they provide the header file which does fpclassify and GCC does not.
(In reply to comment #1) > Report this to the mingw folks since they are the ones who provide fpclassify. > That is they provide the header file which does fpclassify and GCC does not. Sorry because my ignorance. Thanks by your advice.