Skip to content

Commit 3a4f91f

Browse files
committed
update Java version
1 parent 389bcab commit 3a4f91f

4 files changed

Lines changed: 37 additions & 5 deletions

File tree

src/main/java/com/upokecenter/numbers/EDecimal.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -774,7 +774,7 @@ public static EDecimal FromDoubleBits(long dblBits) {
774774
lvalue = ((value[0] & 0xffffffffL) | ((long)value[1] << 32));
775775
int flags = (neg ? BigNumberFlags.FlagNegative : 0) | (quiet ?
776776
BigNumberFlags.FlagQuietNaN : BigNumberFlags.FlagSignalingNaN);
777-
return lvalue == 0 ? (quiet ? NaN : SignalingNaN) :
777+
return (lvalue == 0 && !neg) ? (quiet ? NaN : SignalingNaN) :
778778
new EDecimal(
779779
FastIntegerFixed.FromInt64(lvalue),
780780
FastIntegerFixed.Zero,
@@ -1041,7 +1041,7 @@ public static EDecimal FromSingleBits(int value) {
10411041
value = (neg ? BigNumberFlags.FlagNegative : 0) |
10421042
(quiet ? BigNumberFlags.FlagQuietNaN :
10431043
BigNumberFlags.FlagSignalingNaN);
1044-
return valueFpMantissa == 0 ? (quiet ? NaN : SignalingNaN) :
1044+
return (valueFpMantissa == 0 && !neg) ? (quiet ? NaN : SignalingNaN) :
10451045
new EDecimal(
10461046
FastIntegerFixed.FromInt32(valueFpMantissa),
10471047
FastIntegerFixed.Zero,

src/main/java/com/upokecenter/numbers/EFloat.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -540,7 +540,7 @@ public static EFloat FromDoubleBits(long dblBits) {
540540
// Treat high bit of mantissa as quiet/signaling bit
541541
boolean quiet = ((dblBits >> 32) & 0x80000) != 0;
542542
lvalue = dblBits & ((1L << 51) - 1);
543-
if (lvalue == 0) {
543+
if (lvalue == 0 && !neg) {
544544
return quiet ? NaN : SignalingNaN;
545545
}
546546
int flags = (neg ? BigNumberFlags.FlagNegative : 0) |
@@ -634,7 +634,7 @@ public static EFloat FromSingleBits(int value) {
634634
bigmant = EInteger.FromInt32(valueFpMantissa);
635635
value = (neg ? BigNumberFlags.FlagNegative : 0) | (quiet ?
636636
BigNumberFlags.FlagQuietNaN : BigNumberFlags.FlagSignalingNaN);
637-
if (bigmant.isZero()) {
637+
if (bigmant.isZero() && !neg) {
638638
return quiet ? NaN : SignalingNaN;
639639
}
640640
return CreateWithFlags(

src/test/java/com/upokecenter/test/EDecimalTest.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,38 @@ public void TestCompareToBinary() {
273273
}
274274
}
275275

276+
@Test
277+
public void TestFromSingleBitsNaN() {
278+
int bits = ((int)0xffc00000);
279+
Assert.assertEquals(bits, EDecimal.FromSingleBits(bits).ToSingleBits());
280+
bits = 0x7fc00000;
281+
Assert.assertEquals(bits, EDecimal.FromSingleBits(bits).ToSingleBits());
282+
bits = ((int)0xffc00000);
283+
Assert.assertEquals(bits, EFloat.FromSingleBits(bits).ToSingleBits());
284+
bits = 0x7fc00000;
285+
Assert.assertEquals(bits, EFloat.FromSingleBits(bits).ToSingleBits());
286+
bits = ((int)0xffc00000);
287+
Assert.assertEquals(bits, ERational.FromSingleBits(bits).ToSingleBits());
288+
bits = 0x7fc00000;
289+
Assert.assertEquals(bits, ERational.FromSingleBits(bits).ToSingleBits());
290+
}
291+
292+
@Test
293+
public void TestFromDoubleBitsNaN() {
294+
long lbits = ((long)0xfff8000000000000);
295+
Assert.assertEquals(lbits, EDecimal.FromDoubleBits(lbits).ToDoubleBits());
296+
lbits = 0x7ff8000000000000L;
297+
Assert.assertEquals(lbits, EDecimal.FromDoubleBits(lbits).ToDoubleBits());
298+
lbits = ((long)0xfff8000000000000);
299+
Assert.assertEquals(lbits, EFloat.FromDoubleBits(lbits).ToDoubleBits());
300+
lbits = 0x7ff8000000000000L;
301+
Assert.assertEquals(lbits, EFloat.FromDoubleBits(lbits).ToDoubleBits());
302+
lbits = ((long)0xfff8000000000000);
303+
Assert.assertEquals(lbits, ERational.FromDoubleBits(lbits).ToDoubleBits());
304+
lbits = 0x7ff8000000000000L;
305+
Assert.assertEquals(lbits, ERational.FromDoubleBits(lbits).ToDoubleBits());
306+
}
307+
276308
@Test
277309
public void TestCompareToBinarySpecific1A() {
278310
EFloat ef;

src/test/java/com/upokecenter/test/EFloatTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -933,7 +933,7 @@ public static void TestParseNumberFxxLine(String line) {
933933
Assert.fail(line);
934934
}
935935
String f64 = line.substring(4 + 1 + 8 + 1, (4 + 1 + 8 + 1)+(16));
936-
if (line.charAt(4+1+8 + 17) != ' ') {
936+
if (line.charAt(4 + 26) != ' ') {
937937
Assert.fail(line);
938938
}
939939
String str = line.substring(4 + 1 + 8 + 1 + 16 + 1);

0 commit comments

Comments
 (0)