This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug other/56404] New: About fpclassify and standard C99


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: unassigned@gcc.gnu.org
        ReportedBy: argentinator.gcc.questions@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'.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]