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