This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug other/56404] New: About fpclassify and standard C99
- From: "argentinator.gcc.questions at outlook dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 20 Feb 2013 00:06:49 +0000
- Subject: [Bug other/56404] New: About fpclassify and standard C99
- Auto-submitted: auto-generated
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'.