[kaffe] MIN_VALUE of java.lang.Double
Ito Kazumitsu
ito.kazumitsu@hitachi-cable.co.jp
Thu, 10 Oct 2002 10:42:47 +0900
In message "Re: [kaffe] MIN_VALUE of java.lang.Double"
on 02/10/09, "Kevin D. Kissell" <kevink@mips.com> writes:
> I don't have the revised Java Language Specification handy to
> see of they fixed it. In any case, I believe that kaffe should be using
> the value that corresponds to the true minimum denormalized IEEE
> double.
http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#230798
reads:
The smallest positive finite nonzero literal of type double is
4.94065645841246544e-324.
A compile-time error occurs if a nonzero floating-point literal is
too small, so that, on rounded conversion to its internal representation,
it becomes a zero.
So I understand 4.94065645841246544e-324 should be used, but the
problem is that a compile-time error occurs where some poor strtod
converts 4.94065645841246544e-324 to zero.
Formerly, precompiled Klasses.jar was included in the kaffe package
so I did not have to compile java/lang/Double.java. But now we
have to make rt.jar ourselves. So the compile-time error that
java/lang/Double.java causes is really annoying.
This is how strtod of my machine works:
$ uname -smr
Linux 2.0.38 i686
$ cat Double.c
#include <stdlib.h>
extern int errno;
int main(int argc, char* argv[]) {
double d = strtod(argv[1], NULL);
printf("%s %d %40.20e\n",argv[1], errno, d);
}
$ cc -o Double Double.c
$ ./Double 4.94065645841246544e-324
4.94065645841246544e-324 0 0.00000000000000000000e+00
$ ./Double 4.9e-324
4.9e-324 0 0.00000000000000000000e+00
$ ./Double 5e-324
5e-324 0 4.94065645841246544177e-324