diff options
| author | Richard M. Stallman | 2005-06-25 04:31:49 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 2005-06-25 04:31:49 +0000 |
| commit | 7690cbb0f9d9f7bb56edd67c06a89f116dd4f80d (patch) | |
| tree | d53d730674e6ade81f22df362d98b1c4ca265ce1 /src/lread.c | |
| parent | cf4444417306114481ad8e86f47dcce13a589d42 (diff) | |
| download | emacs-7690cbb0f9d9f7bb56edd67c06a89f116dd4f80d.tar.gz emacs-7690cbb0f9d9f7bb56edd67c06a89f116dd4f80d.zip | |
(read1): 0.0e+NaN should make a "positive" NaN.
Diffstat (limited to 'src/lread.c')
| -rw-r--r-- | src/lread.c | 17 |
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); |