Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #6910
| Date | 2011-08-09 04:07 -0700 |
|---|---|
| From | Patricia Shanahan <pats@acm.org> |
| Newsgroups | comp.lang.java.programmer |
| Subject | Re: higher precision doubles |
| References | <j1hqc1$1ch$1@news.albasani.net> <cOqdnfXfM99lhaDTnZ2dnUVZ_vednZ2d@earthlink.com> <j1qdrt$30a$1@speranza.aioe.org> |
| Message-ID | <soqdnRy-6cN1idzTnZ2dnUVZ_tidnZ2d@earthlink.com> (permalink) |
On 8/8/2011 9:42 PM,
supercalifragilisticexpialadiamaticonormalizeringelimatisticantations wrote:
> On 06/08/2011 6:35 AM, Patricia Shanahan wrote:
>> In general, a Java implementation must make its floating point
>> arithmetic give the same results as the 32 and 64 bit basic formats. If
>> "strictfp" is off, the implementation can carry extra extra exponent
>> bits, avoiding some cases of overflow and underflow, but is not required
>> to do so. Even without strictfp, the mantissa sizes and therefore the
>> precision are fixed.
>
> How does that interact with JIT, though? On x86, the simplest way for
> JIT to make non-strictfp code use the FPU would be to just load the
> initial values into the (80-bit-wide!) registers and perform FADDs,
> FMULs, etc. on them. As long as the computation stayed in registers the
> higher precision then ought to remain in effect -- for JITted code.
> Adding extra code to mask off 16 of the register bits (or the mantissa
> subset of the extra bits) after every FP op would slow things down. Is
> the JLS interpreted to require the JIT do this (for non-strictfp code)?
> And, if not, what does the HotSpot JIT do in actuality?
My understanding when strictfp was being added was that the x86
instruction set allowed for efficient rounding to the correct 32 and 64
bit mantissa widths, but did not allow for the overflow and underflow
processing to be done based on the correct exponent widths.
Certainly I have seen no signs of bugs in the JIT handling of rounding
of normal range numbers regardless of strictness.
Here is a sample program you can try out that would give different
output if even one extra bit were being carried in an intermediate
result in the non-strict case:
public class DoubleTests {
public static void main(String[] args) {
test((1L << 53) - 1);
test((1L << 53) - 2);
}
static void test(double x) {
double loose = looseSum(x, 0.5, 0.5);
double strict = strictSum(x, 0.5, 0.5);
double loose1 = looseSum(x, 1, 0);
double strict1 = strictSum(x, 1, 0);
System.out.println(doubleToHex(x) + " loose: " + doubleToHex(loose)
+ " strict: " + doubleToHex(strict) + " " + (loose == strict)
+ " loose1: " + doubleToHex(loose1) + " strict1 "
+ doubleToHex(strict1));
}
static String doubleToHex(double d) {
return Long.toHexString(Double.doubleToLongBits(d));
}
static double looseSum(double x, double y, double z) {
return x + y + z;
}
static strictfp double strictSum(double x, double y, double z) {
return x + y + z;
}
}
Patricia
Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar
higher precision doubles Jan Burse <janburse@fastmail.fm> - 2011-08-06 00:20 +0200
Re: higher precision doubles Patricia Shanahan <pats@acm.org> - 2011-08-06 03:35 -0700
Re: higher precision doubles Jan Burse <janburse@fastmail.fm> - 2011-08-06 13:03 +0200
Re: higher precision doubles BGB <cr88192@hotmail.com> - 2011-08-06 12:20 -0700
Re: higher precision doubles Jan Burse <janburse@fastmail.fm> - 2011-08-06 23:30 +0200
Re: higher precision doubles BGB <cr88192@hotmail.com> - 2011-08-06 16:12 -0700
Re: higher precision doubles Jan Burse <janburse@fastmail.fm> - 2011-08-07 01:35 +0200
Re: higher precision doubles BGB <cr88192@hotmail.com> - 2011-08-06 19:26 -0700
Re: higher precision doubles supercalifragilisticexpialadiamaticonormalizeringelimatisticantations <supercalifragilisticexpialadiamaticonormalizeringelimatisticantations@averylongandannoyingdomainname.com> - 2011-08-09 00:42 -0400
Re: higher precision doubles Patricia Shanahan <pats@acm.org> - 2011-08-09 04:07 -0700
Re: higher precision doubles Jan Burse <janburse@fastmail.fm> - 2011-08-09 14:00 +0200
Re: higher precision doubles Patricia Shanahan <pats@acm.org> - 2011-08-09 09:07 -0700
Re: higher precision doubles Jan Burse <janburse@fastmail.fm> - 2011-08-10 08:50 +0200
Re: higher precision doubles supercalifragilisticexpialadiamaticonormalizeringelimatisticantations <supercalifragilisticexpialadiamaticonormalizeringelimatisticantations@averylongandannoyingdomainname.com> - 2011-08-10 20:16 -0400
Re: higher precision doubles Joshua Cranmer <Pidgeot18@verizon.invalid> - 2011-08-09 10:11 -0500
Re: higher precision doubles Arne Vajhøj <arne@vajhoej.dk> - 2011-08-09 22:40 -0400
Re: higher precision doubles Joshua Cranmer <Pidgeot18@verizon.invalid> - 2011-08-09 22:06 -0500
Re: higher precision doubles BGB <cr88192@hotmail.com> - 2011-08-10 08:53 -0700
Re: higher precision doubles Jan Burse <janburse@fastmail.fm> - 2011-08-06 21:24 +0200
Re: higher precision doubles markspace <-@.> - 2011-08-06 13:29 -0700
Re: higher precision doubles Jan Burse <janburse@fastmail.fm> - 2011-08-06 23:20 +0200
Re: higher precision doubles markspace <-@.> - 2011-08-06 15:43 -0700
Re: higher precision doubles Jan Burse <janburse@fastmail.fm> - 2011-08-07 01:06 +0200
Re: higher precision doubles Patricia Shanahan <pats@acm.org> - 2011-08-06 16:21 -0700
Re: higher precision doubles Jan Burse <janburse@fastmail.fm> - 2011-08-07 01:34 +0200
Re: higher precision doubles Patricia Shanahan <pats@acm.org> - 2011-08-06 21:32 -0700
Re: higher precision doubles Jan Burse <janburse@fastmail.fm> - 2011-08-07 17:24 +0200
Re: higher precision doubles Jan Burse <janburse@fastmail.fm> - 2011-08-07 17:39 +0200
Re: higher precision doubles Patricia Shanahan <pats@acm.org> - 2011-08-07 09:26 -0700
Re: higher precision doubles Jan Burse <janburse@fastmail.fm> - 2011-08-07 21:23 +0200
Re: higher precision doubles Eric Sosman <esosman@ieee-dot-org.invalid> - 2011-08-07 20:48 -0400
Re: higher precision doubles Jan Burse <janburse@fastmail.fm> - 2011-08-08 09:05 +0200
Re: higher precision doubles Patricia Shanahan <pats@acm.org> - 2011-08-08 05:37 -0700
Re: higher precision doubles Jan Burse <janburse@fastmail.fm> - 2011-08-08 19:08 +0200
Re: higher precision doubles Jan Burse <janburse@fastmail.fm> - 2011-08-08 19:16 +0200
Re: higher precision doubles Jan Burse <janburse@fastmail.fm> - 2011-08-08 19:29 +0200
Re: higher precision doubles Joshua Cranmer <Pidgeot18@verizon.invalid> - 2011-08-08 21:34 -0500
Re: higher precision doubles BGB <cr88192@hotmail.com> - 2011-08-08 13:49 -0700
Re: higher precision doubles Jan Burse <janburse@fastmail.fm> - 2011-08-09 01:08 +0200
Re: higher precision doubles BGB <cr88192@hotmail.com> - 2011-08-09 02:44 -0700
Re: higher precision doubles Jan Burse <janburse@fastmail.fm> - 2011-08-09 12:52 +0200
Re: higher precision doubles BGB <cr88192@hotmail.com> - 2011-08-09 13:15 -0700
Re: higher precision doubles BGB <cr88192@hotmail.com> - 2011-08-07 13:51 -0700
Re: higher precision doubles Jan Burse <janburse@fastmail.fm> - 2011-08-07 01:59 +0200
Re: higher precision doubles Joshua Cranmer <Pidgeot18@verizon.invalid> - 2011-08-08 21:03 -0500
Re: higher precision doubles Eric Sosman <esosman@ieee-dot-org.invalid> - 2011-08-06 17:33 -0400
Re: higher precision doubles Patricia Shanahan <pats@acm.org> - 2011-08-06 14:51 -0700
Re: higher precision doubles Jan Burse <janburse@fastmail.fm> - 2011-08-07 00:57 +0200
csiph-web