Mercurial > hg > xemacs-beta
comparison src/number-mp.c @ 1990:4f5e0297b73f
[xemacs-hg @ 2004-04-06 20:52:08 by james]
Fix bignum_to_double so it actually gives the right answer.
author | james |
---|---|
date | Tue, 06 Apr 2004 20:52:20 +0000 |
parents | 9c872f33ecbe |
children | e567417c2e5d |
comparison
equal
deleted
inserted
replaced
1989:55bab11c30e8 | 1990:4f5e0297b73f |
---|---|
157 | 157 |
158 double | 158 double |
159 bignum_to_double (bignum b) | 159 bignum_to_double (bignum b) |
160 { | 160 { |
161 short rem, sign; | 161 short rem, sign; |
162 double retval = 0.0; | 162 double retval = 0.0, factor = 1.0; |
163 REGISTER unsigned int i; | 163 REGISTER unsigned int i; |
164 MINT *quo; | 164 MINT *quo; |
165 | 165 |
166 sign = MP_MCMP (b, bignum_zero) < 0 ? -1 : 1; | 166 sign = MP_MCMP (b, bignum_zero) < 0 ? -1 : 1; |
167 quo = MP_ITOM (sign); | 167 quo = MP_ITOM (sign); |
168 MP_MULT (b, quo, quo); | 168 MP_MULT (b, quo, quo); |
169 for (i = 0U; MP_MCMP(quo, bignum_zero) > 0; i++) | 169 for (i = 0U; MP_MCMP (quo, bignum_zero) > 0; i++) |
170 { | 170 { |
171 MP_SDIV (quo, 256, quo, &rem); | 171 MP_SDIV (quo, 256, quo, &rem); |
172 retval += rem * i * 256; | 172 retval += rem * factor; |
173 factor *= 256.0; | |
173 } | 174 } |
174 MP_MFREE (quo); | 175 MP_MFREE (quo); |
175 return retval * sign; | 176 return retval * sign; |
176 } | 177 } |
177 | 178 |