Tcl Source Code

Artifact [dfd6b0f1fd]
Login

Artifact dfd6b0f1fd642d0c7ed5fa3340b7fd54989c1dea:

Attachment "3105247_2.patch" to ticket [3105247fff] added by nijtmans 2010-12-09 15:13:15.
Index: generic/tclStrToD.c
===================================================================
RCS file: /cvsroot/tcl/tcl/generic/tclStrToD.c,v
retrieving revision 1.52
diff -u -r1.52 tclStrToD.c
--- generic/tclStrToD.c	7 Dec 2010 16:27:39 -0000	1.52
+++ generic/tclStrToD.c	9 Dec 2010 08:10:48 -0000
@@ -314,7 +314,7 @@
 			    Tcl_WideUInt significand, int nSigDigs,
 			    int exponent);
 #ifdef IEEE_FLOATING_POINT
-static double		MakeNaN(int signum, Tcl_WideUInt tag);
+static double		MakeNaN(Tcl_WideUInt tag);
 #endif
 static double		RefineApproximation(double approx,
 			    mp_int *exactSignificand, int exponent);
@@ -1370,7 +1370,7 @@
 #ifdef IEEE_FLOATING_POINT
 	case sNAN:
 	case sNANFINISH:
-	    objPtr->internalRep.doubleValue = MakeNaN(signum,significandWide);
+	    objPtr->internalRep.doubleValue = MakeNaN(significandWide);
 	    objPtr->typePtr = &tclDoubleType;
 	    break;
 #endif
@@ -1747,7 +1747,6 @@
 #ifdef IEEE_FLOATING_POINT
 static double
 MakeNaN(
-    int signum,			/* Sign bit (1=negative, 0=nonnegative. */
     Tcl_WideUInt tags)		/* Tag bits to put in the NaN. */
 {
     union {
@@ -1757,11 +1756,7 @@
 
     theNaN.iv = tags;
     theNaN.iv &= (((Tcl_WideUInt) 1) << 51) - 1;
-    if (signum) {
-	theNaN.iv |= ((Tcl_WideUInt) (0x8000 | NAN_START)) << 48;
-    } else {
-	theNaN.iv |= ((Tcl_WideUInt) NAN_START) << 48;
-    }
+    theNaN.iv |= ((Tcl_WideUInt) NAN_START) << 48;
     if (n770_fp) {
 	theNaN.iv = Nokia770Twiddle(theNaN.iv);
     }
@@ -4913,7 +4908,6 @@
     }
     if (bitwhack.iv & ((Tcl_WideUInt) 1 << 63)) {
 	bitwhack.iv &= ~ ((Tcl_WideUInt) 1 << 63);
-	*buffer++ = '-';
     }
     *buffer++ = 'N';
     *buffer++ = 'a';
Index: tests/binary.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/binary.test,v
retrieving revision 1.43
diff -u -r1.43 binary.test
--- tests/binary.test	9 Nov 2010 14:20:19 -0000	1.43
+++ tests/binary.test	9 Dec 2010 08:10:48 -0000
@@ -1578,11 +1578,11 @@
 test binary-40.3 {ScanNumber: NaN} -body {
     unset -nocomplain arg1
     list [binary scan \xff\xff\xff\xff f1 arg1] $arg1
-} -match glob -result {1 -NaN*}
+} -match glob -result {1 NaN*}
 test binary-40.4 {ScanNumber: NaN} -body {
     unset -nocomplain arg1
     list [binary scan \xff\xff\xff\xff\xff\xff\xff\xff d arg1] $arg1
-} -match glob -result {1 -NaN*}
+} -match glob -result {1 NaN*}
 
 test binary-41.1 {ScanNumber: word alignment} {
     unset -nocomplain arg1; unset arg2
@@ -2373,7 +2373,7 @@
 test binary-63.2 {NaN} ieeeFloatingPoint {
     binary scan [binary format q -NaN] w w
     format 0x%016lx [expr {$w & 0xfff3ffffffffffff}]
-} 0xfff0000000000000
+} 0x7ff0000000000000
 test binary-63.3 {NaN} ieeeFloatingPoint {
     binary scan [binary format q NaN(3123456789aBc)] w w
     format 0x%016lx [expr {$w & 0xfff3ffffffffffff}]
@@ -2382,6 +2382,13 @@
     binary scan [binary format q {NaN( 3123456789aBc)}] w w
     format 0x%016lx [expr {$w & 0xfff3ffffffffffff}]
 } 0x7ff3123456789abc
+test binary-63.5 {NaN roundtrip} ieeeFloatingPoint {
+    binary scan [binary format w 0xfff0000000000001] q d
+    binary scan [binary format q $d] w w
+    llength $d; #force shimmering
+    binary scan [binary format q $d] w r
+    list $d [format 0x%016lx $w] [format 0x%016lx $r]
+} {NaN(1) 0xfff0000000000001 0x7ff8000000000001}
 
 test binary-64.1 {NaN} -constraints ieeeFloatingPoint -body {
     binary scan [binary format w 0x7ff8000000000000] q d
Index: tests/util.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/util.test,v
retrieving revision 1.21
diff -u -r1.21 util.test
--- tests/util.test	28 Nov 2010 23:20:11 -0000	1.21
+++ tests/util.test	9 Dec 2010 08:10:48 -0000
@@ -1153,7 +1153,7 @@
      -body {
 	 testdoubledigits -NaN -1 shortest
      }
-    -result {NaN 9999 -}
+    -result {NaN 9999 +}
 }
 test util-12.5 {TclDoubleDigits - 0} {
      testdoubledigits 0.0 -1 shortest
@@ -1892,7 +1892,7 @@
     -body {
 	set ieeeValues(-NaN)
     }
-    -result -NaN
+    -result NaN
 }
 
 test util-14.2 {funky NaN} {*}{
@@ -1900,7 +1900,7 @@
     -body {
 	set ieeeValues(-NaN(3456789abcdef))
     }
-    -result -NaN(3456789abcdef)
+    -result NaN(3456789abcdef)
 }
 
 # cleanup