# HG changeset patch # User Richard M. Stallman # Date 1119673909 0 # Node ID 36bd1972ba30e18e6fd0391d6ea400b2f7a124ea # Parent 077498a3a31939e0eafe3548a9577adfaf1a6bc8 (read1): 0.0e+NaN should make a "positive" NaN. diff -r 077498a3a319 -r 36bd1972ba30 src/lread.c --- a/src/lread.c Sat Jun 25 02:31:45 2005 +0000 +++ b/src/lread.c Sat Jun 25 04:31:49 2005 +0000 @@ -2595,6 +2595,23 @@ break; case 'N': value = zero / zero; + + /* If that made a "negative" NaN, negate it. */ + + { + int i; + union { double d; char c[sizeof (double)]; } u_data, u_minus_zero; + + u_data.d = value; + u_minus_zero.d = - 0.0; + for (i = 0; i < sizeof (double); i++) + if (u_data.c[i] & u_minus_zero.c[i]) + { + value = - value; + break; + } + } + /* Now VALUE is a positive NaN. */ break; default: value = atof (read_buffer + negative);