diff -r b90884cf34f5 -r 5fd29d2cbc4b jdk/src/share/classes/sun/misc/FloatingDecimal.java --- a/jdk/src/share/classes/sun/misc/FloatingDecimal.java Tue Feb 08 15:50:30 2011 +0000 +++ b/jdk/src/share/classes/sun/misc/FloatingDecimal.java Tue Feb 08 19:31:44 2011 +0000 @@ -1547,7 +1547,7 @@ if ( (cmpResult = bigB.cmp( bigD ) ) > 0 ){ overvalue = true; // our candidate is too big. diff = bigB.sub( bigD ); - if ( (bigIntNBits == 1) && (bigIntExp > -expBias) ){ + if ( (bigIntNBits == 1) && (bigIntExp > -expBias+1) ){ // candidate is a normalized exact power of 2 and // is too big. We will be subtracting. // For our purposes, ulp is the ulp of the