2 * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
4 * @APPLE_LICENSE_HEADER_START@
6 * The contents of this file constitute Original Code as defined in and
7 * are subject to the Apple Public Source License Version 1.1 (the
8 * "License"). You may not use this file except in compliance with the
9 * License. Please obtain a copy of the License at
10 * http://www.apple.com/publicsource and read it before using this file.
12 * This Original Code and all software distributed under the License are
13 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17 * License for the specific language governing rights and limitations
20 * @APPLE_LICENSE_HEADER_END@
22 /****************************************************************
24 * The author of this software is David M. Gay.
26 * Copyright (c) 1991 by AT&T.
28 * Permission to use, copy, modify, and distribute this software for any
29 * purpose without fee is hereby granted, provided that this entire notice
30 * is included in all copies of any software which is or includes a copy
31 * or modification of this software and in all copies of the supporting
32 * documentation for such software.
34 * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
35 * WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR AT&T MAKES ANY
36 * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
37 * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
39 ***************************************************************/
41 /* Please send bug reports to
43 AT&T Bell Laboratories, Room 2C-463
45 Murray Hill, NJ 07974-2070
47 dmg@research.att.com or research!dmg
50 /* strtod for IEEE-, VAX-, and IBM-arithmetic machines.
52 * This strtod returns a nearest machine number to the input decimal
53 * string (or sets errno to ERANGE). With IEEE arithmetic, ties are
54 * broken by the IEEE round-even rule. Otherwise ties are broken by
55 * biased rounding (add half and chop).
57 * Inspired loosely by William D. Clinger's paper "How to Read Floating
58 * Point Numbers Accurately" [Proc. ACM SIGPLAN '90, pp. 92-101].
62 * 1. We only require IEEE, IBM, or VAX double-precision
63 * arithmetic (not IEEE double-extended).
64 * 2. We get by with floating-point arithmetic in a case that
65 * Clinger missed -- when we're computing d * 10^n
66 * for a small integer d and the integer n is not too
67 * much larger than 22 (the maximum integer k for which
68 * we can represent 10^k exactly), we may be able to
69 * compute (d*10^k) * 10^(e-k) with just one roundoff.
70 * 3. Rather than a bit-at-a-time adjustment of the binary
71 * result in the hard case, we use floating-point
72 * arithmetic to determine the adjustment to within
73 * one bit; only in really hard cases do we need to
74 * compute a second residual.
75 * 4. Because of 3., we don't need a large table of powers of 10
76 * for ten-to-e (just some small tables, e.g. of 10^k
81 * #define IEEE_LITTLE_ENDIAN for IEEE-arithmetic machines where the least
82 * significant byte has the lowest address.
83 * #define IEEE_BIG_ENDIAN for IEEE-arithmetic machines where the most
84 * significant byte has the lowest address.
85 * #define Long int on machines with 32-bit ints and 64-bit longs.
86 * #define Sudden_Underflow for IEEE-format machines without gradual
87 * underflow (i.e., that flush to zero on underflow).
88 * #define IBM for IBM mainframe-style floating-point arithmetic.
89 * #define VAX for VAX-style floating-point arithmetic.
90 * #define Unsigned_Shifts if >> does treats its left operand as unsigned.
91 * #define No_leftright to omit left-right logic in fast floating-point
92 * computation of dtoa.
93 * #define Check_FLT_ROUNDS if FLT_ROUNDS can assume the values 2 or 3.
94 * #define RND_PRODQUOT to use rnd_prod and rnd_quot (assembly routines
95 * that use extended-precision instructions to compute rounded
96 * products and quotients) with IBM.
97 * #define ROUND_BIASED for IEEE-format with biased rounding.
98 * #define Inaccurate_Divide for IEEE-format with correctly rounded
99 * products but inaccurate quotients, e.g., for Intel i860.
100 * #define Just_16 to store 16 bits per 32-bit Long when doing high-precision
101 * integer arithmetic. Whether this speeds things up or slows things
102 * down depends on the machine and the number being converted.
103 * #define KR_headers for old-style C function headers.
104 * #define Bad_float_h if your system lacks a float.h or if it does not
105 * define some or all of DBL_DIG, DBL_MAX_10_EXP, DBL_MAX_EXP,
106 * FLT_RADIX, FLT_ROUNDS, and DBL_MAX.
107 * #define MALLOC your_malloc, where your_malloc(n) acts like malloc(n)
108 * if memory is available and otherwise does something you deem
109 * appropriate. If MALLOC is undefined, malloc will be invoked
110 * directly -- and assumed always to succeed.
113 #if defined(LIBC_SCCS) && !defined(lint)
114 static char *rcsid
= "$OpenBSD: strtod.c,v 1.9 1997/03/25 17:07:30 rahnds Exp $";
115 #endif /* LIBC_SCCS and not lint */
117 #if defined(__m68k__) || defined(__sparc__) || defined(__i386__) || \
118 defined(__mips__) || defined(__ns32k__) || defined(__alpha__) || \
119 defined(__powerpc__) || defined(__m88k__) || defined(__ppc__)
120 #include <sys/types.h>
121 #if BYTE_ORDER == BIG_ENDIAN
122 #define IEEE_BIG_ENDIAN
124 #define IEEE_LITTLE_ENDIAN
130 * Although the CPU is little endian the FP has different
131 * byte and word endianness. The byte order is still little endian
132 * but the word order is big endian.
134 #define IEEE_BIG_ENDIAN
142 #define ULong u_int32_t
146 #define Bug(x) {fprintf(stderr, "%s\n", x); exit(1);}
165 extern char *MALLOC();
167 extern void *MALLOC(size_t);
170 #define MALLOC malloc
178 #ifdef IEEE_BIG_ENDIAN
179 #define IEEE_ARITHMETIC
181 #ifdef IEEE_LITTLE_ENDIAN
182 #define IEEE_ARITHMETIC
185 #ifdef IEEE_ARITHMETIC
187 #define DBL_MAX_10_EXP 308
188 #define DBL_MAX_EXP 1024
191 #define DBL_MAX 1.7976931348623157e+308
196 #define DBL_MAX_10_EXP 75
197 #define DBL_MAX_EXP 63
200 #define DBL_MAX 7.2370055773322621e+75
205 #define DBL_MAX_10_EXP 38
206 #define DBL_MAX_EXP 127
209 #define DBL_MAX 1.7014118346046923e+38
213 #define LONG_MAX 2147483647
228 #define CONST /* blank */
234 #ifdef Unsigned_Shifts
235 #define Sign_Extend(a,b) if (b < 0) a |= 0xffff0000;
237 #define Sign_Extend(a,b) /*no-op*/
240 #if defined(IEEE_LITTLE_ENDIAN) + defined(IEEE_BIG_ENDIAN) + defined(VAX) + \
242 Exactly one of IEEE_LITTLE_ENDIAN IEEE_BIG_ENDIAN
, VAX
, or
243 IBM should be defined
.
246 #ifdef IEEE_LITTLE_ENDIAN
247 #define word0(x) ((ULong *)&x)[1]
248 #define word1(x) ((ULong *)&x)[0]
250 #define word0(x) ((ULong *)&x)[0]
251 #define word1(x) ((ULong *)&x)[1]
254 /* The following definition of Storeinc is appropriate for MIPS processors.
255 * An alternative that might be better on some machines is
256 * #define Storeinc(a,b,c) (*a++ = b << 16 | c & 0xffff)
258 #if defined(IEEE_LITTLE_ENDIAN) + defined(VAX) + defined(__arm32__)
259 #define Storeinc(a,b,c) (((unsigned short *)a)[1] = (unsigned short)b, \
260 ((unsigned short *)a)[0] = (unsigned short)c, a++)
262 #define Storeinc(a,b,c) (((unsigned short *)a)[0] = (unsigned short)b, \
263 ((unsigned short *)a)[1] = (unsigned short)c, a++)
266 /* #define P DBL_MANT_DIG */
267 /* Ten_pmax = floor(P*log(2)/log(5)) */
268 /* Bletch = (highest power of 2 < DBL_MAX_10_EXP) / 16 */
269 /* Quick_max = floor((P-1)*log(FLT_RADIX)/log(10) - 1) */
270 /* Int_max = floor(P*log(FLT_RADIX)/log(10) - 1) */
272 #if defined(IEEE_LITTLE_ENDIAN) + defined(IEEE_BIG_ENDIAN)
274 #define Exp_shift1 20
275 #define Exp_msk1 0x100000
276 #define Exp_msk11 0x100000
277 #define Exp_mask 0x7ff00000
282 #define Exp_1 0x3ff00000
283 #define Exp_11 0x3ff00000
285 #define Frac_mask 0xfffff
286 #define Frac_mask1 0xfffff
289 #define Bndry_mask 0xfffff
290 #define Bndry_mask1 0xfffff
292 #define Sign_bit 0x80000000
298 #define Infinite(x) (word0(x) == 0x7ff00000) /* sufficient test for here */
300 #undef Sudden_Underflow
301 #define Sudden_Underflow
304 #define Exp_shift1 24
305 #define Exp_msk1 0x1000000
306 #define Exp_msk11 0x1000000
307 #define Exp_mask 0x7f000000
310 #define Exp_1 0x41000000
311 #define Exp_11 0x41000000
312 #define Ebits 8 /* exponent has 7 bits, but 8 is the right value in b2d */
313 #define Frac_mask 0xffffff
314 #define Frac_mask1 0xffffff
317 #define Bndry_mask 0xefffff
318 #define Bndry_mask1 0xffffff
320 #define Sign_bit 0x80000000
322 #define Tiny0 0x100000
329 #define Exp_msk1 0x80
330 #define Exp_msk11 0x800000
331 #define Exp_mask 0x7f80
334 #define Exp_1 0x40800000
335 #define Exp_11 0x4080
337 #define Frac_mask 0x7fffff
338 #define Frac_mask1 0xffff007f
341 #define Bndry_mask 0xffff007f
342 #define Bndry_mask1 0xffff007f
344 #define Sign_bit 0x8000
358 #define rounded_product(a,b) a = rnd_prod(a, b)
359 #define rounded_quotient(a,b) a = rnd_quot(a, b)
361 extern double rnd_prod(), rnd_quot();
363 extern double rnd_prod(double, double), rnd_quot(double, double);
366 #define rounded_product(a,b) a *= b
367 #define rounded_quotient(a,b) a /= b
370 #define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1))
371 #define Big1 0xffffffff
374 /* When Pack_32 is not defined, we store 16 bits per 32-bit Long.
375 * This makes some inner loops simpler and sometimes saves work
376 * during multiplications, but it often seems to make things slightly
377 * slower. Hence the default is now to store 32 bits per Long.
387 extern "C" double strtod(const char *s00
, char **se
);
388 extern "C" char *__dtoa(double d
, int mode
, int ndigits
,
389 int *decpt
, int *sign
, char **rve
);
395 int k
, maxwds
, sign
, wds
;
399 typedef struct Bigint Bigint
;
401 static Bigint
*freelist
[Kmax
+1];
414 if (rv
= freelist
[k
]) {
415 freelist
[k
] = rv
->next
;
419 rv
= (Bigint
*)MALLOC(sizeof(Bigint
) + (x
-1)*sizeof(Long
));
423 rv
->sign
= rv
->wds
= 0;
436 v
->next
= freelist
[v
->k
];
441 #define Bcopy(x,y) memcpy((char *)&x->sign, (char *)&y->sign, \
442 y->wds*sizeof(Long) + 2*sizeof(int))
447 (b
, m
, a
) Bigint
*b
; int m
, a
;
449 (Bigint
*b
, int m
, int a
) /* multiply by m and add a */
465 y
= (xi
& 0xffff) * m
+ a
;
466 z
= (xi
>> 16) * m
+ (y
>> 16);
468 *x
++ = (z
<< 16) + (y
& 0xffff);
477 if (wds
>= b
->maxwds
) {
492 (s
, nd0
, nd
, y9
) CONST
char *s
; int nd0
, nd
; ULong y9
;
494 (CONST
char *s
, int nd0
, int nd
, ULong y9
)
502 for(k
= 0, y
= 1; x
> y
; y
<<= 1, k
++) ;
509 b
->x
[0] = y9
& 0xffff;
510 b
->wds
= (b
->x
[1] = y9
>> 16) ? 2 : 1;
516 do b
= multadd(b
, 10, *s
++ - '0');
523 b
= multadd(b
, 10, *s
++ - '0');
530 (x
) register ULong x
;
537 if (!(x
& 0xffff0000)) {
541 if (!(x
& 0xff000000)) {
545 if (!(x
& 0xf0000000)) {
549 if (!(x
& 0xc0000000)) {
553 if (!(x
& 0x80000000)) {
555 if (!(x
& 0x40000000))
570 register ULong x
= *y
;
628 (a
, b
) Bigint
*a
, *b
;
630 (Bigint
*a
, Bigint
*b
)
636 ULong
*x
, *xa
, *xae
, *xb
, *xbe
, *xc
, *xc0
;
641 if (a
->wds
< b
->wds
) {
653 for(x
= c
->x
, xa
= x
+ wc
; x
< xa
; x
++)
661 for(; xb
< xbe
; xb
++, xc0
++) {
662 if (y
= *xb
& 0xffff) {
667 z
= (*x
& 0xffff) * y
+ (*xc
& 0xffff) + carry
;
669 z2
= (*x
++ >> 16) * y
+ (*xc
>> 16) + carry
;
682 z
= (*x
& 0xffff) * y
+ (*xc
>> 16) + carry
;
685 z2
= (*x
++ >> 16) * y
+ (*xc
& 0xffff) + carry
;
693 for(; xb
< xbe
; xc0
++) {
699 z
= *x
++ * y
+ *xc
+ carry
;
708 for(xc0
= c
->x
, xc
= xc0
+ wc
; wc
> 0 && !*--xc
; --wc
) ;
718 (b
, k
) Bigint
*b
; int k
;
723 Bigint
*b1
, *p5
, *p51
;
725 static int p05
[3] = { 5, 25, 125 };
728 b
= multadd(b
, p05
[i
-1], 0);
745 if (!(p51
= p5
->next
)) {
746 p51
= p5
->next
= mult(p5
,p5
);
757 (b
, k
) Bigint
*b
; int k
;
764 ULong
*x
, *x1
, *xe
, z
;
773 for(i
= b
->maxwds
; n1
> i
; i
<<= 1)
777 for(i
= 0; i
< n
; i
++)
798 *x1
++ = *x
<< k
& 0xffff | z
;
817 (a
, b
) Bigint
*a
, *b
;
819 (Bigint
*a
, Bigint
*b
)
822 ULong
*xa
, *xa0
, *xb
, *xb0
;
828 if (i
> 1 && !a
->x
[i
-1])
829 Bug("cmp called with a->x[a->wds-1] == 0");
830 if (j
> 1 && !b
->x
[j
-1])
831 Bug("cmp called with b->x[b->wds-1] == 0");
841 return *xa
< *xb
? -1 : 1;
851 (a
, b
) Bigint
*a
, *b
;
853 (Bigint
*a
, Bigint
*b
)
858 Long borrow
, y
; /* We need signed shifts here. */
859 ULong
*xa
, *xae
, *xb
, *xbe
, *xc
;
891 y
= (*xa
& 0xffff) - (*xb
& 0xffff) + borrow
;
893 Sign_Extend(borrow
, y
);
894 z
= (*xa
++ >> 16) - (*xb
++ >> 16) + borrow
;
896 Sign_Extend(borrow
, z
);
901 y
= (*xa
& 0xffff) + borrow
;
903 Sign_Extend(borrow
, y
);
904 z
= (*xa
++ >> 16) + borrow
;
906 Sign_Extend(borrow
, z
);
911 y
= *xa
++ - *xb
++ + borrow
;
913 Sign_Extend(borrow
, y
);
920 Sign_Extend(borrow
, y
);
941 L
= (word0(x
) & Exp_mask
) - (P
-1)*Exp_msk1
;
942 #ifndef Sudden_Underflow
950 #ifndef Sudden_Underflow
955 word0(a
) = 0x80000 >> L
;
961 word1(a
) = L
>= 31 ? 1 : 1 << 31 - L
;
971 (a
, e
) Bigint
*a
; int *e
;
976 ULong
*xa
, *xa0
, w
, y
, z
;
990 if (!y
) Bug("zero y in b2d");
996 d0
= Exp_1
| y
>> Ebits
- k
;
997 w
= xa
> xa0
? *--xa
: 0;
998 d1
= y
<< (32-Ebits
) + k
| w
>> Ebits
- k
;
1001 z
= xa
> xa0
? *--xa
: 0;
1003 d0
= Exp_1
| y
<< k
| z
>> 32 - k
;
1004 y
= xa
> xa0
? *--xa
: 0;
1005 d1
= z
<< k
| y
>> 32 - k
;
1012 if (k
< Ebits
+ 16) {
1013 z
= xa
> xa0
? *--xa
: 0;
1014 d0
= Exp_1
| y
<< k
- Ebits
| z
>> Ebits
+ 16 - k
;
1015 w
= xa
> xa0
? *--xa
: 0;
1016 y
= xa
> xa0
? *--xa
: 0;
1017 d1
= z
<< k
+ 16 - Ebits
| w
<< k
- Ebits
| y
>> 16 + Ebits
- k
;
1020 z
= xa
> xa0
? *--xa
: 0;
1021 w
= xa
> xa0
? *--xa
: 0;
1023 d0
= Exp_1
| y
<< k
+ 16 | z
<< k
| w
>> 16 - k
;
1024 y
= xa
> xa0
? *--xa
: 0;
1025 d1
= w
<< k
+ 16 | y
<< k
;
1029 word0(d
) = d0
>> 16 | d0
<< 16;
1030 word1(d
) = d1
>> 16 | d1
<< 16;
1041 (d
, e
, bits
) double d
; int *e
, *bits
;
1043 (double d
, int *e
, int *bits
)
1051 d0
= word0(d
) >> 16 | word0(d
) << 16;
1052 d1
= word1(d
) >> 16 | word1(d
) << 16;
1066 d0
&= 0x7fffffff; /* clear sign bit, which we ignore */
1067 #ifdef Sudden_Underflow
1068 de
= (int)(d0
>> Exp_shift
);
1073 if (de
= (int)(d0
>> Exp_shift
))
1078 if (k
= lo0bits(&y
)) {
1079 x
[0] = y
| z
<< 32 - k
;
1084 i
= b
->wds
= (x
[1] = z
) ? 2 : 1;
1089 Bug("Zero passed to d2b");
1098 if (k
= lo0bits(&y
))
1100 x
[0] = y
| z
<< 32 - k
& 0xffff;
1101 x
[1] = z
>> k
- 16 & 0xffff;
1107 x
[1] = y
>> 16 | z
<< 16 - k
& 0xffff;
1108 x
[2] = z
>> k
& 0xffff;
1123 Bug("Zero passed to d2b");
1141 #ifndef Sudden_Underflow
1145 *e
= (de
- Bias
- (P
-1) << 2) + k
;
1146 *bits
= 4*P
+ 8 - k
- hi0bits(word0(d
) & Frac_mask
);
1148 *e
= de
- Bias
- (P
-1) + k
;
1151 #ifndef Sudden_Underflow
1154 *e
= de
- Bias
- (P
-1) + 1 + k
;
1156 *bits
= 32*i
- hi0bits(x
[i
-1]);
1158 *bits
= (i
+2)*16 - hi0bits(x
[i
]);
1170 (a
, b
) Bigint
*a
, *b
;
1172 (Bigint
*a
, Bigint
*b
)
1181 k
= ka
- kb
+ 32*(a
->wds
- b
->wds
);
1183 k
= ka
- kb
+ 16*(a
->wds
- b
->wds
);
1187 word0(da
) += (k
>> 2)*Exp_msk1
;
1193 word0(db
) += (k
>> 2)*Exp_msk1
;
1199 word0(da
) += k
*Exp_msk1
;
1202 word0(db
) += k
*Exp_msk1
;
1210 1e0
, 1e1
, 1e2
, 1e3
, 1e4
, 1e5
, 1e6
, 1e7
, 1e8
, 1e9
,
1211 1e10
, 1e11
, 1e12
, 1e13
, 1e14
, 1e15
, 1e16
, 1e17
, 1e18
, 1e19
,
1219 static CONST
double bigtens
[] = { 1e16
, 1e32
, 1e64
, 1e128
, 1e256
};
1220 static CONST
double tinytens
[] = { 1e-16, 1e-32, 1e-64, 1e-128, 1e-256 };
1224 static CONST
double bigtens
[] = { 1e16
, 1e32
, 1e64
};
1225 static CONST
double tinytens
[] = { 1e-16, 1e-32, 1e-64 };
1228 static CONST
double bigtens
[] = { 1e16
, 1e32
};
1229 static CONST
double tinytens
[] = { 1e-16, 1e-32 };
1237 (s00
, se
) CONST
char *s00
; char **se
;
1239 (CONST
char *s00
, char **se
)
1242 int bb2
, bb5
, bbe
, bd2
, bd5
, bbbits
, bs2
, c
, dsign
,
1243 e
, e1
, esign
, i
, j
, k
, nd
, nd0
, nf
, nz
, nz0
, sign
;
1244 CONST
char *s
, *s0
, *s1
;
1245 double aadj
, aadj1
, adj
, rv
, rv0
;
1248 Bigint
*bb
, *bb1
, *bd
, *bd0
, *bs
, *delta
;
1251 CONST
char decimal_point
= localeconv()->decimal_point
[0];
1253 CONST
char decimal_point
= '.';
1256 sign
= nz0
= nz
= 0;
1260 for(s
= s00
; isspace((unsigned char) *s
); s
++)
1266 } else if (*s
== '+') {
1277 while(*++s
== '0') ;
1283 for(nd
= nf
= 0; (c
= *s
) >= '0' && c
<= '9'; nd
++, s
++)
1289 if (c
== decimal_point
) {
1292 for(; c
== '0'; c
= *++s
)
1294 if (c
> '0' && c
<= '9') {
1302 for(; c
>= '0' && c
<= '9'; c
= *++s
) {
1307 for(i
= 1; i
< nz
; i
++)
1310 else if (nd
<= DBL_DIG
+ 1)
1314 else if (nd
<= DBL_DIG
+ 1)
1322 if (c
== 'e' || c
== 'E') {
1323 if (!nd
&& !nz
&& !nz0
) {
1335 if (c
>= '0' && c
<= '9') {
1338 if (c
> '0' && c
<= '9') {
1341 while((c
= *++s
) >= '0' && c
<= '9')
1343 if (s
- s1
> 8 || L
> 19999)
1344 /* Avoid confusion from exponents
1345 * so large that e might overflow.
1347 e
= 19999; /* safe for 16 bit ints */
1366 /* Now we have nd0 digits, starting at s0, followed by a
1367 * decimal point, followed by nd-nd0 digits. The number we're
1368 * after is the integer represented by those digits times
1373 k
= nd
< DBL_DIG
+ 1 ? nd
: DBL_DIG
+ 1;
1376 rv
= tens
[k
- 9] * rv
+ z
;
1379 #ifndef RND_PRODQUOT
1386 if (e
<= Ten_pmax
) {
1388 goto vax_ovfl_check
;
1390 /* rv = */ rounded_product(rv
, tens
[e
]);
1395 if (e
<= Ten_pmax
+ i
) {
1396 /* A fancier test would sometimes let us do
1397 * this for larger i values.
1402 /* VAX exponent range is so narrow we must
1403 * worry about overflow here...
1406 word0(rv
) -= P
*Exp_msk1
;
1407 /* rv = */ rounded_product(rv
, tens
[e
]);
1408 if ((word0(rv
) & Exp_mask
)
1409 > Exp_msk1
*(DBL_MAX_EXP
+Bias
-1-P
))
1411 word0(rv
) += P
*Exp_msk1
;
1413 /* rv = */ rounded_product(rv
, tens
[e
]);
1418 #ifndef Inaccurate_Divide
1419 else if (e
>= -Ten_pmax
) {
1420 /* rv = */ rounded_quotient(rv
, tens
[-e
]);
1427 /* Get starting approximation = rv * 10**e1 */
1433 if (e1
> DBL_MAX_10_EXP
) {
1439 /* Can't trust HUGE_VAL */
1441 word0(rv
) = Exp_mask
;
1453 for(j
= 0; e1
> 1; j
++, e1
>>= 1)
1456 /* The last multiplication could overflow. */
1457 word0(rv
) -= P
*Exp_msk1
;
1459 if ((z
= word0(rv
) & Exp_mask
)
1460 > Exp_msk1
*(DBL_MAX_EXP
+Bias
-P
))
1462 if (z
> Exp_msk1
*(DBL_MAX_EXP
+Bias
-1-P
)) {
1463 /* set to largest number */
1464 /* (Can't trust DBL_MAX) */
1469 word0(rv
) += P
*Exp_msk1
;
1480 if (e1
>= 1 << n_bigtens
)
1482 for(j
= 0; e1
> 1; j
++, e1
>>= 1)
1485 /* The last multiplication could underflow. */
1501 /* The refinement below will clean
1502 * this approximation up.
1508 /* Now the hard part -- adjusting rv to the correct value.*/
1510 /* Put digits into bd: true value = bd * 10^e */
1512 bd0
= s2b(s0
, nd0
, nd
, y
);
1515 bd
= Balloc(bd0
->k
);
1517 bb
= d2b(rv
, &bbe
, &bbbits
); /* rv = bb * 2^bbe */
1533 #ifdef Sudden_Underflow
1535 j
= 1 + 4*P
- 3 - bbbits
+ ((bbe
+ bbbits
- 1) & 3);
1540 i
= bbe
+ bbbits
- 1; /* logb(rv) */
1541 if (i
< Emin
) /* denormal */
1548 i
= bb2
< bd2
? bb2
: bd2
;
1557 bs
= pow5mult(bs
, bb5
);
1563 bb
= lshift(bb
, bb2
);
1565 bd
= pow5mult(bd
, bd5
);
1567 bd
= lshift(bd
, bd2
);
1569 bs
= lshift(bs
, bs2
);
1570 delta
= diff(bb
, bd
);
1571 dsign
= delta
->sign
;
1575 /* Error is less than half an ulp -- check for
1576 * special case of mantissa a power of two.
1578 if (dsign
|| word1(rv
) || word0(rv
) & Bndry_mask
)
1580 delta
= lshift(delta
,Log2P
);
1581 if (cmp(delta
, bs
) > 0)
1586 /* exactly half-way between */
1588 if ((word0(rv
) & Bndry_mask1
) == Bndry_mask1
1589 && word1(rv
) == 0xffffffff) {
1590 /*boundary case -- increment exponent*/
1591 word0(rv
) = (word0(rv
) & Exp_mask
)
1601 else if (!(word0(rv
) & Bndry_mask
) && !word1(rv
)) {
1603 /* boundary case -- decrement exponent */
1604 #ifdef Sudden_Underflow
1605 L
= word0(rv
) & Exp_mask
;
1614 L
= (word0(rv
) & Exp_mask
) - Exp_msk1
;
1616 word0(rv
) = L
| Bndry_mask1
;
1617 word1(rv
) = 0xffffffff;
1624 #ifndef ROUND_BIASED
1625 if (!(word1(rv
) & LSB
))
1630 #ifndef ROUND_BIASED
1633 #ifndef Sudden_Underflow
1641 if ((aadj
= ratio(delta
, bs
)) <= 2.) {
1644 else if (word1(rv
) || word0(rv
) & Bndry_mask
) {
1645 #ifndef Sudden_Underflow
1646 if (word1(rv
) == Tiny1
&& !word0(rv
))
1653 /* special case -- power of FLT_RADIX to be */
1654 /* rounded down... */
1656 if (aadj
< 2./FLT_RADIX
)
1657 aadj
= 1./FLT_RADIX
;
1665 aadj1
= dsign
? aadj
: -aadj
;
1666 #ifdef Check_FLT_ROUNDS
1667 switch(FLT_ROUNDS
) {
1668 case 2: /* towards +infinity */
1671 case 0: /* towards 0 */
1672 case 3: /* towards -infinity */
1676 if (FLT_ROUNDS
== 0)
1680 y
= word0(rv
) & Exp_mask
;
1682 /* Check for overflow */
1684 if (y
== Exp_msk1
*(DBL_MAX_EXP
+Bias
-1)) {
1686 word0(rv
) -= P
*Exp_msk1
;
1687 adj
= aadj1
* ulp(rv
);
1689 if ((word0(rv
) & Exp_mask
) >=
1690 Exp_msk1
*(DBL_MAX_EXP
+Bias
-P
)) {
1691 if (word0(rv0
) == Big0
&& word1(rv0
) == Big1
)
1698 word0(rv
) += P
*Exp_msk1
;
1701 #ifdef Sudden_Underflow
1702 if ((word0(rv
) & Exp_mask
) <= P
*Exp_msk1
) {
1704 word0(rv
) += P
*Exp_msk1
;
1705 adj
= aadj1
* ulp(rv
);
1708 if ((word0(rv
) & Exp_mask
) < P
*Exp_msk1
)
1710 if ((word0(rv
) & Exp_mask
) <= P
*Exp_msk1
)
1713 if (word0(rv0
) == Tiny0
1714 && word1(rv0
) == Tiny1
)
1721 word0(rv
) -= P
*Exp_msk1
;
1724 adj
= aadj1
* ulp(rv
);
1728 /* Compute adj so that the IEEE rounding rules will
1729 * correctly round rv + adj in some half-way cases.
1730 * If rv * ulp(rv) is denormalized (i.e.,
1731 * y <= (P-1)*Exp_msk1), we must adjust aadj to avoid
1732 * trouble from bits lost to denormalization;
1733 * example: 1.2e-307 .
1735 if (y
<= (P
-1)*Exp_msk1
&& aadj
>= 1.) {
1736 aadj1
= (double)(int)(aadj
+ 0.5);
1740 adj
= aadj1
* ulp(rv
);
1744 z
= word0(rv
) & Exp_mask
;
1746 /* Can we stop now? */
1749 /* The tolerances below are conservative. */
1750 if (dsign
|| word1(rv
) || word0(rv
) & Bndry_mask
) {
1751 if (aadj
< .4999999 || aadj
> .5000001)
1754 else if (aadj
< .4999999/FLT_RADIX
)
1772 return sign
? -rv
: rv
;
1778 (b
, S
) Bigint
*b
, *S
;
1780 (Bigint
*b
, Bigint
*S
)
1786 ULong
*bx
, *bxe
, *sx
, *sxe
;
1794 /*debug*/ if (b
->wds
> n
)
1795 /*debug*/ Bug("oversize b in quorem");
1803 q
= *bxe
/ (*sxe
+ 1); /* ensure q <= true quotient */
1805 /*debug*/ if (q
> 9)
1806 /*debug*/ Bug("oversized quotient in quorem");
1814 ys
= (si
& 0xffff) * q
+ carry
;
1815 zs
= (si
>> 16) * q
+ (ys
>> 16);
1817 y
= (*bx
& 0xffff) - (ys
& 0xffff) + borrow
;
1819 Sign_Extend(borrow
, y
);
1820 z
= (*bx
>> 16) - (zs
& 0xffff) + borrow
;
1822 Sign_Extend(borrow
, z
);
1825 ys
= *sx
++ * q
+ carry
;
1827 y
= *bx
- (ys
& 0xffff) + borrow
;
1829 Sign_Extend(borrow
, y
);
1836 while(--bxe
> bx
&& !*bxe
)
1841 if (cmp(b
, S
) >= 0) {
1850 ys
= (si
& 0xffff) + carry
;
1851 zs
= (si
>> 16) + (ys
>> 16);
1853 y
= (*bx
& 0xffff) - (ys
& 0xffff) + borrow
;
1855 Sign_Extend(borrow
, y
);
1856 z
= (*bx
>> 16) - (zs
& 0xffff) + borrow
;
1858 Sign_Extend(borrow
, z
);
1863 y
= *bx
- (ys
& 0xffff) + borrow
;
1865 Sign_Extend(borrow
, y
);
1873 while(--bxe
> bx
&& !*bxe
)
1881 /* dtoa for IEEE arithmetic (dmg): convert double to ASCII string.
1883 * Inspired by "How to Print Floating-Point Numbers Accurately" by
1884 * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 92-101].
1887 * 1. Rather than iterating, we use a simple numeric overestimate
1888 * to determine k = floor(log10(d)). We scale relevant
1889 * quantities using O(log2(k)) rather than O(k) multiplications.
1890 * 2. For some modes > 2 (corresponding to ecvt and fcvt), we don't
1891 * try to generate digits strictly left to right. Instead, we
1892 * compute with fewer bits and propagate the carry if necessary
1893 * when rounding the final digit up. This is often faster.
1894 * 3. Under the assumption that input will be rounded nearest,
1895 * mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22.
1896 * That is, we allow equality in stopping tests when the
1897 * round-nearest rule will give the same floating-point value
1898 * as would satisfaction of the stopping test with strict
1900 * 4. We remove common factors of powers of 2 from relevant
1902 * 5. When converting floating-point integers less than 1e16,
1903 * we use floating-point arithmetic rather than resorting
1904 * to multiple-precision integers.
1905 * 6. When asked to produce fewer than 15 digits, we first try
1906 * to get by with floating-point arithmetic; we resort to
1907 * multiple-precision integer arithmetic only if we cannot
1908 * guarantee that the floating-point calculation has given
1909 * the correctly rounded result. For k requested digits and
1910 * "uniformly" distributed input, the probability is
1911 * something like 10^(k-15) that we must resort to the Long
1918 (d
, mode
, ndigits
, decpt
, sign
, rve
)
1919 double d
; int mode
, ndigits
, *decpt
, *sign
; char **rve
;
1921 (double d
, int mode
, int ndigits
, int *decpt
, int *sign
, char **rve
)
1924 /* Arguments ndigits, decpt, sign are similar to those
1925 of ecvt and fcvt; trailing zeros are suppressed from
1926 the returned string. If not null, *rve is set to point
1927 to the end of the return value. If d is +-Infinity or NaN,
1928 then *decpt is set to 9999.
1931 0 ==> shortest string that yields d when read in
1932 and rounded to nearest.
1933 1 ==> like 0, but with Steele & White stopping rule;
1934 e.g. with IEEE P754 arithmetic , mode 0 gives
1935 1e23 whereas mode 1 gives 9.999999999999999e22.
1936 2 ==> max(1,ndigits) significant digits. This gives a
1937 return value similar to that of ecvt, except
1938 that trailing zeros are suppressed.
1939 3 ==> through ndigits past the decimal point. This
1940 gives a return value similar to that from fcvt,
1941 except that trailing zeros are suppressed, and
1942 ndigits can be negative.
1943 4-9 should give the same return values as 2-3, i.e.,
1944 4 <= mode <= 9 ==> same return as mode
1945 2 + (mode & 1). These modes are mainly for
1946 debugging; often they run slower but sometimes
1947 faster than modes 2-3.
1948 4,5,8,9 ==> left-to-right digit generation.
1949 6-9 ==> don't try fast floating-point estimate
1952 Values of mode other than 0-9 are treated as mode 0.
1954 Sufficient space is allocated to the return value
1955 to hold the suppressed trailing zeros.
1958 int bbits
, b2
, b5
, be
, dig
, i
, ieps
, ilim
, ilim0
, ilim1
,
1959 j
, j1
, k
, k0
, k_check
, leftright
, m2
, m5
, s2
, s5
,
1960 spec_case
, try_quick
;
1962 #ifndef Sudden_Underflow
1966 Bigint
*b
, *b1
, *delta
, *mlo
, *mhi
, *S
;
1969 static Bigint
*result
;
1970 static int result_k
;
1973 result
->k
= result_k
;
1974 result
->maxwds
= 1 << result_k
;
1979 if (word0(d
) & Sign_bit
) {
1980 /* set sign for everything, including 0's and NaNs */
1982 word0(d
) &= ~Sign_bit
; /* clear sign bit */
1987 #if defined(IEEE_Arith) + defined(VAX)
1989 if ((word0(d
) & Exp_mask
) == Exp_mask
)
1991 if (word0(d
) == 0x8000)
1994 /* Infinity or NaN */
1998 !word1(d
) && !(word0(d
) & 0xfffff) ? "Infinity" :
2011 d
+= 0; /* normalize */
2021 b
= d2b(d
, &be
, &bbits
);
2022 #ifdef Sudden_Underflow
2023 i
= (int)(word0(d
) >> Exp_shift1
& (Exp_mask
>>Exp_shift1
));
2025 if (i
= (int)(word0(d
) >> Exp_shift1
& (Exp_mask
>>Exp_shift1
))) {
2028 word0(d2
) &= Frac_mask1
;
2029 word0(d2
) |= Exp_11
;
2031 if (j
= 11 - hi0bits(word0(d2
) & Frac_mask
))
2035 /* log(x) ~=~ log(1.5) + (x-1.5)/1.5
2036 * log10(x) = log(x) / log(10)
2037 * ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10))
2038 * log10(d) = (i-Bias)*log(2)/log(10) + log10(d2)
2040 * This suggests computing an approximation k to log10(d) by
2042 * k = (i - Bias)*0.301029995663981
2043 * + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 );
2045 * We want k to be too large rather than too small.
2046 * The error in the first-order Taylor series approximation
2047 * is in our favor, so we just round up the constant enough
2048 * to compensate for any error in the multiplication of
2049 * (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077,
2050 * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14,
2051 * adding 1e-13 to the constant term more than suffices.
2052 * Hence we adjust the constant term to 0.1760912590558.
2053 * (We could get a more accurate k by invoking log10,
2054 * but this is probably not worthwhile.)
2062 #ifndef Sudden_Underflow
2066 /* d is denormalized */
2068 i
= bbits
+ be
+ (Bias
+ (P
-1) - 1);
2069 x
= i
> 32 ? word0(d
) << 64 - i
| word1(d
) >> i
- 32
2070 : word1(d
) << 32 - i
;
2072 word0(d2
) -= 31*Exp_msk1
; /* adjust exponent */
2073 i
-= (Bias
+ (P
-1) - 1) + 1;
2077 ds
= (d2
-1.5)*0.289529654602168 + 0.1760912590558 + i
*0.301029995663981;
2079 if (ds
< 0. && ds
!= k
)
2080 k
--; /* want k = floor(ds) */
2082 if (k
>= 0 && k
<= Ten_pmax
) {
2106 if (mode
< 0 || mode
> 9)
2127 ilim
= ilim1
= i
= ndigits
;
2133 i
= ndigits
+ k
+ 1;
2140 for(result_k
= 0; sizeof(Bigint
) - sizeof(ULong
) + j
<= i
;
2141 j
<<= 1) result_k
++;
2142 result
= Balloc(result_k
);
2143 s
= s0
= (char *)result
;
2145 if (ilim
>= 0 && ilim
<= Quick_max
&& try_quick
) {
2147 /* Try to get by with floating-point arithmetic. */
2153 ieps
= 2; /* conservative */
2158 /* prevent overflows */
2160 d
/= bigtens
[n_bigtens
-1];
2163 for(; j
; j
>>= 1, i
++)
2171 d
*= tens
[j1
& 0xf];
2172 for(j
= j1
>> 4; j
; j
>>= 1, i
++)
2178 if (k_check
&& d
< 1. && ilim
> 0) {
2187 word0(eps
) -= (P
-1)*Exp_msk1
;
2197 #ifndef No_leftright
2199 /* Use Steele & White method of only
2200 * generating digits needed.
2202 eps
= 0.5/tens
[ilim
-1] - eps
;
2206 *s
++ = '0' + (int)L
;
2219 /* Generate ilim digits, then fix them up. */
2220 eps
*= tens
[ilim
-1];
2221 for(i
= 1;; i
++, d
*= 10.) {
2224 *s
++ = '0' + (int)L
;
2228 else if (d
< 0.5 - eps
) {
2236 #ifndef No_leftright
2246 /* Do we have a "small" integer? */
2248 if (be
>= 0 && k
<= Int_max
) {
2251 if (ndigits
< 0 && ilim
<= 0) {
2253 if (ilim
< 0 || d
<= 5*ds
)
2260 #ifdef Check_FLT_ROUNDS
2261 /* If FLT_ROUNDS == 2, L will usually be high by 1 */
2267 *s
++ = '0' + (int)L
;
2270 if (d
> ds
|| d
== ds
&& L
& 1) {
2294 #ifndef Sudden_Underflow
2295 denorm
? be
+ (Bias
+ (P
-1) - 1 + 1) :
2298 1 + 4*P
- 3 - bbits
+ ((bbits
+ be
- 1) & 3);
2312 if ((i
= ilim
) < 0) {
2321 if (m2
> 0 && s2
> 0) {
2322 i
= m2
< s2
? m2
: s2
;
2330 mhi
= pow5mult(mhi
, m5
);
2339 b
= pow5mult(b
, b5
);
2343 S
= pow5mult(S
, s5
);
2345 /* Check for special case that d is a normalized power of 2. */
2348 if (!word1(d
) && !(word0(d
) & Bndry_mask
)
2349 #ifndef Sudden_Underflow
2350 && word0(d
) & Exp_mask
2353 /* The special case */
2362 /* Arrange for convenient computation of quotients:
2363 * shift left if necessary so divisor has 4 leading 0 bits.
2365 * Perhaps we should just compute leading 28 bits of S once
2366 * and for all and pass them and a shift to quorem, so it
2367 * can do shifts and ors to compute the numerator for q.
2370 if (i
= ((s5
? 32 - hi0bits(S
->x
[S
->wds
-1]) : 1) + s2
) & 0x1f)
2373 if (i
= ((s5
? 32 - hi0bits(S
->x
[S
->wds
-1]) : 1) + s2
) & 0xf)
2395 b
= multadd(b
, 10, 0); /* we botched the k estimate */
2397 mhi
= multadd(mhi
, 10, 0);
2401 if (ilim
<= 0 && mode
> 2) {
2402 if (ilim
< 0 || cmp(b
,S
= multadd(S
,5,0)) <= 0) {
2403 /* no digits, fcvt style */
2415 mhi
= lshift(mhi
, m2
);
2417 /* Compute mlo -- check for special case
2418 * that d is a normalized power of 2.
2423 mhi
= Balloc(mhi
->k
);
2425 mhi
= lshift(mhi
, Log2P
);
2429 dig
= quorem(b
,S
) + '0';
2430 /* Do we yet have the shortest decimal string
2431 * that will round to d?
2434 delta
= diff(S
, mhi
);
2435 j1
= delta
->sign
? 1 : cmp(b
, delta
);
2437 #ifndef ROUND_BIASED
2438 if (j1
== 0 && !mode
&& !(word1(d
) & 1)) {
2447 if (j
< 0 || j
== 0 && !mode
2448 #ifndef ROUND_BIASED
2455 if ((j1
> 0 || j1
== 0 && dig
& 1)
2463 if (dig
== '9') { /* possible if i == 1 */
2474 b
= multadd(b
, 10, 0);
2476 mlo
= mhi
= multadd(mhi
, 10, 0);
2478 mlo
= multadd(mlo
, 10, 0);
2479 mhi
= multadd(mhi
, 10, 0);
2485 *s
++ = dig
= quorem(b
,S
) + '0';
2488 b
= multadd(b
, 10, 0);
2491 /* Round off last digit */
2495 if (j
> 0 || j
== 0 && dig
& 1) {
2512 if (mlo
&& mlo
!= mhi
)
2518 if (s
== s0
) { /* don't return empty string */