[kaffe] Re: The problem of "Double.c and buggy strtod" is settled

Ito Kazumitsu kaz at maczuka.gcd.org
Thu Jun 5 08:57:01 PDT 2003

>>>>> "*" == Ito Kazumitsu <kaz at maczuka.gcd.org> writes:

*> In fact, FreeBSD 4.7-RELEASE's /usr/include/float.h says
*> #define DBL_MIN         2.2250738585072014E-308
*> and replace/strtod.c says, when HAVE_FLOAT_H is undefined,
*> almost the same thing:
*> # define DBL_MIN 2.2250738585072010e-308
*> I remember Linux 2.0.x's float.h also defines something like this.
*> So Java's double MIN_VALUE 4.9406564584124654418e-324 will be
*> considered to be 0.0 by this strtod.c.

Studying this issue further,  I found that DBL_MIN is not the only
factor that makes strtod convert 4.9406564584124654418e-324 to 0.0.

Even if I comment out 
       if (num < DBL_MIN * pow (10.0, (double) -exponent))
        goto underflow;
this strtod converts 4.9406564584124654418e-324 to 0.0 although
errno is not set.

Inserting "printf("## num, exp = %f, %d\n", num, exponent);"
before "num *= pow (10.0, (double) exponent);",  I get
"## num, exp = 49406564584124661760.000000, -343".  So
the reason why 4.9406564584124654418e-324 becomes 0.0
seems to be the limitation of the function pow().

More information about the kaffe mailing list