aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lread.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/lread.c b/src/lread.c
index 9317933013e..ccc94c32dd1 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -2595,6 +2595,23 @@ read1 (readcharfun, pch, first_in_list)
2595 break; 2595 break;
2596 case 'N': 2596 case 'N':
2597 value = zero / zero; 2597 value = zero / zero;
2598
2599 /* If that made a "negative" NaN, negate it. */
2600
2601 {
2602 int i;
2603 union { double d; char c[sizeof (double)]; } u_data, u_minus_zero;
2604
2605 u_data.d = value;
2606 u_minus_zero.d = - 0.0;
2607 for (i = 0; i < sizeof (double); i++)
2608 if (u_data.c[i] & u_minus_zero.c[i])
2609 {
2610 value = - value;
2611 break;
2612 }
2613 }
2614 /* Now VALUE is a positive NaN. */
2598 break; 2615 break;
2599 default: 2616 default:
2600 value = atof (read_buffer + negative); 2617 value = atof (read_buffer + negative);