Import of the latest gdtoa sources, which include fixes for minor

problems relating to NaNs and rounding.
This commit is contained in:
David Schultz 2007-01-03 04:58:54 +00:00
parent 19927830ac
commit c88250a57d
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/vendor/gdtoa/dist/; revision=165743
svn path=/vendor/gdtoa/20050923/; revision=165745; tag=vendor/gdtoa/20050923
65 changed files with 1235 additions and 960 deletions

View file

@ -144,18 +144,33 @@ appropriate depends on the compiler; for this to work, it may be
necessary to #include "float.h" or another system-dependent header
file.
The values returned for NaNs may be signaling NaNs on some systems,
since the rules for distinguishing signaling from quiet NaNs are
system-dependent. You can easily fix this by suitably modifying the
ULto* routines in strtor*.c.
Source file strtodnrp.c gives a strtod that does not require 53-bit
rounding precision on systems (such as Intel IA32 systems) that may
suffer double rounding due to use of extended-precision registers.
For some conversions this variant of strtod is less efficient than the
one in strtod.c when the latter is run with 53-bit rounding precision.
The values that the strto* routines return for NaNs are determined by
gd_qnan.h, which the makefile generates by running the program whose
source is qnan.c. Note that the rules for distinguishing signaling
from quiet NaNs are system-dependent. For cross-compilation, you need
to determine arith.h and gd_qnan.h suitably, e.g., using the
arithmetic of the target machine.
C99's hexadecimal floating-point constants are recognized by the
strto* routines (but this feature has not yet been heavily tested).
Compiling with NO_HEX_FP #defined disables this feature.
The strto* routines do not (yet) recognize C99's NaN(...) syntax; the
strto* routines simply regard '(' as the first unprocessed input
character.
When compiled with -DINFNAN_CHECK, the strto* routines recognize C99's
NaN and Infinity syntax. Moreover, unless No_Hex_NaN is #defined, the
strto* routines also recognize C99's NaN(...) syntax: they accept
(case insensitively) strings of the form NaN(x), where x is a string
of hexadecimal digits and spaces; if there is only one string of
hexadecimal digits, it is taken for the fraction bits of the resulting
NaN; if there are two or more strings of hexadecimal digits, each
string is assigned to the next available sequence of 32-bit words of
fractions bits (starting with the most significant), right-aligned in
each sequence.
For binary -> decimal conversions, I've provided just one family
of helper routines:
@ -213,7 +228,7 @@ for intermediate quantities, and MALLOC (see gdtoaimp.h) is called only
if the private pool does not suffice. 2000 is large enough that MALLOC
is called only under very unusual circumstances (decimal -> binary
conversion of very long strings) for conversions to and from double
precision. For systems with preemptivaly scheduled multiple threads
precision. For systems with preemptively scheduled multiple threads
or for conversions to extended or quad, it may be appropriate to
#define PRIVATE_MEM nnnn, where nnnn is a suitable value > 2000.
For extended and quad precisions, -DPRIVATE_MEM=20000 is probably
@ -317,7 +332,5 @@ Compiling g__fmt.c, strtod.c, and strtodg.c with -DUSE_LOCALE causes
the decimal-point character to be taken from the current locale; otherwise
it is '.'.
Please send comments to
David M. Gay
dmg@acm.org
Please send comments to David M. Gay (dmg at acm dot org, with " at "
changed at "@" and " dot " changed to ".").

View file

@ -136,6 +136,7 @@ fzcheck()
return b == 0.;
}
int
main()
{
Akind *a = 0;

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"

View file

@ -26,21 +26,15 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"
/* dtoa for IEEE arithmetic (dmg): convert double to ASCII string.
*
* Inspired by "How to Print Floating-Point Numbers Accurately" by
* Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 92-101].
* Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 112-126].
*
* Modifications:
* 1. Rather than iterating, we use a simple numeric overestimate

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"
@ -83,7 +77,7 @@ g_Qfmt(char *buf, void *V, int ndig, unsigned bufsize)
if (ex == 0x7fff) {
/* Infinity or NaN */
if (bits[0] | bits[1] | bits[2] | bits[3])
b = strcpy(b, "NaN");
b = strcp(b, "NaN");
else {
b = buf;
if (sign)

View file

@ -26,10 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
dmg@acm.org
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"

View file

@ -26,14 +26,7 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg@acm.org). */
#include "gdtoaimp.h"
#include <string.h>

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"
@ -96,6 +90,7 @@ g_xfmt(char *buf, void *V, int ndig, unsigned bufsize)
}
else if (bits[0] | bits[1]) {
i = STRTOG_Denormal;
ex = 1;
}
else {
b = buf;

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"
@ -83,7 +77,7 @@ bitstob(ULong *bits, int nbits, int *bbits)
/* dtoa for IEEE arithmetic (dmg): convert double to ASCII string.
*
* Inspired by "How to Print Floating-Point Numbers Accurately" by
* Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 92-101].
* Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 112-126].
*
* Modifications:
* 1. Rather than iterating, we use a simple numeric overestimate

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#ifndef GDTOA_H_INCLUDED
#define GDTOA_H_INCLUDED

View file

@ -33,13 +33,8 @@ THIS SOFTWARE.
double-precision arithmetic (any of IEEE, VAX D_floating,
or IBM mainframe arithmetic).
Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
Please send bug reports to David M. Gay (dmg at acm dot org,
with " at " changed at "@" and " dot " changed to ".").
*/
/* On a machine with IEEE extended-precision registers, it is
@ -61,7 +56,7 @@ THIS SOFTWARE.
* biased rounding (add half and chop).
*
* Inspired loosely by William D. Clinger's paper "How to Read Floating
* Point Numbers Accurately" [Proc. ACM SIGPLAN '90, pp. 92-101].
* Point Numbers Accurately" [Proc. ACM SIGPLAN '90, pp. 112-126].
*
* Modifications:
*
@ -132,10 +127,7 @@ THIS SOFTWARE.
* 8-byte pointers, PRIVATE_MEM >= 7400 appears to suffice; with
* 4-byte pointers, PRIVATE_MEM >= 7112 appears adequate.
* #define INFNAN_CHECK on IEEE systems to cause strtod to check for
* Infinity and NaN (case insensitively). On some systems (e.g.,
* some HP systems), it may be necessary to #define NAN_WORD0
* appropriately -- to the most significant word of a quiet NaN.
* (On HP Series 700/800 machines, -DNAN_WORD0=0x7ff40000 works.)
* Infinity and NaN (case insensitively).
* When INFNAN_CHECK is #defined and No_Hex_NaN is not #defined,
* strtodg also accepts (case insensitively) strings of the form
* NaN(x), where x is a string of hexadecimal digits and spaces;
@ -176,6 +168,7 @@ THIS SOFTWARE.
#ifndef GDTOAIMP_H_INCLUDED
#define GDTOAIMP_H_INCLUDED
#include "gdtoa.h"
#include "gd_qnan.h"
#ifdef DEBUG
#include "stdio.h"
@ -503,7 +496,7 @@ extern void memcpy_D2A ANSI((void*, const void*, size_t));
#define gethex gethex_D2A
#define hexdig hexdig_D2A
#define hexnan hexnan_D2A
#define hi0bits hi0bits_D2A
#define hi0bits(x) hi0bits_D2A((ULong)(x))
#define i2b i2b_D2A
#define increment increment_D2A
#define lo0bits lo0bits_D2A
@ -553,7 +546,7 @@ extern void memcpy_D2A ANSI((void*, const void*, size_t));
extern int gethex ANSI((CONST char**, FPI*, Long*, Bigint**, int));
extern void hexdig_init_D2A(Void);
extern int hexnan ANSI((CONST char**, FPI*, ULong*));
extern int hi0bits ANSI((ULong));
extern int hi0bits_D2A ANSI((ULong));
extern Bigint *i2b ANSI((int));
extern Bigint *increment ANSI((Bigint*));
extern int lo0bits ANSI((ULong*));
@ -579,31 +572,39 @@ extern void memcpy_D2A ANSI((void*, const void*, size_t));
#ifdef __cplusplus
}
#endif
/*
* NAN_WORD0 and NAN_WORD1 are only referenced in strtod.c. Prior to
* 20050115, they used to be hard-wired here (to 0x7ff80000 and 0,
* respectively), but now are determined by compiling and running
* qnan.c to generate gd_qnan.h, which specifies d_QNAN0 and d_QNAN1.
* Formerly gdtoaimp.h recommended supplying suitable -DNAN_WORD0=...
* and -DNAN_WORD1=... values if necessary. This should still work.
* (On HP Series 700/800 machines, -DNAN_WORD0=0x7ff40000 works.)
*/
#ifdef IEEE_Arith
#ifdef IEEE_MC68k
#define _0 0
#define _1 1
#ifndef NAN_WORD0
#define NAN_WORD0 d_QNAN0
#endif
#ifndef NAN_WORD1
#define NAN_WORD1 d_QNAN1
#endif
#else
#define _0 1
#define _1 0
#ifndef NAN_WORD0
#define NAN_WORD0 d_QNAN1
#endif
#ifndef NAN_WORD1
#define NAN_WORD1 d_QNAN0
#endif
#endif
#else
#undef INFNAN_CHECK
#endif
#ifdef INFNAN_CHECK
#ifndef NAN_WORD0
#define NAN_WORD0 0x7ff80000
#endif
#ifndef NAN_WORD1
#define NAN_WORD1 0
#endif
#endif /* INFNAN_CHECK */
#undef SI
#ifdef Sudden_Underflow
#define SI 1

View file

@ -26,10 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
dmg@acm.org
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"
@ -47,7 +45,7 @@ gethex( CONST char **sp, FPI *fpi, Long *exp, Bigint **bp, int sign)
{
Bigint *b;
CONST unsigned char *decpt, *s0, *s, *s1;
int esign, havedig, irv, k, n, nbits, up;
int esign, havedig, irv, k, n, nbits, up, zret;
ULong L, lostbits, *x;
Long e, e1;
#ifdef USE_LOCALE
@ -65,22 +63,20 @@ gethex( CONST char **sp, FPI *fpi, Long *exp, Bigint **bp, int sign)
s0 += havedig;
s = s0;
decpt = 0;
zret = 0;
e = 0;
if (!hexdig[*s]) {
if (*s == decimalpoint) {
decpt = ++s;
if (!hexdig[*s])
goto ret0;
}
else {
ret0:
*sp = (char*)s;
return havedig ? STRTOG_Zero : STRTOG_NoNumber;
}
zret = 1;
if (*s != decimalpoint)
goto pcheck;
decpt = ++s;
if (!hexdig[*s])
goto pcheck;
while(*s == '0')
s++;
if (hexdig[*s])
zret = 0;
havedig = 1;
if (!hexdig[*s])
goto ret0;
s0 = s;
}
while(hexdig[*s])
@ -90,9 +86,9 @@ gethex( CONST char **sp, FPI *fpi, Long *exp, Bigint **bp, int sign)
while(hexdig[*s])
s++;
}
e = 0;
if (decpt)
e = -(((Long)(s-decpt)) << 2);
pcheck:
s1 = s;
switch(*s) {
case 'p':
@ -117,6 +113,8 @@ gethex( CONST char **sp, FPI *fpi, Long *exp, Bigint **bp, int sign)
e += e1;
}
*sp = (char*)s;
if (zret)
return havedig ? STRTOG_Zero : STRTOG_NoNumber;
n = s1 - s0 - 1;
for(k = 0; n > 7; n >>= 1)
k++;

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"

View file

@ -30,13 +30,18 @@ CFLAGS = -g -DINFNAN_CHECK
.c.o:
$(CC) -c $(CFLAGS) $*.c
all: arith.h gdtoa.a
all: arith.h gd_qnan.h gdtoa.a
arith.h: arithchk.c
$(CC) $(CFLAGS) arithchk.c || $(CC) -DNO_LONG_LONG $(CFLAGS) arithchk.c
./a.out >arith.h
rm -f a.out arithchk.o
gd_qnan.h: arith.h qnan.c
$(CC) $(CFLAGS) qnan.c
./a.out >gd_qnan.h
rm -f a.out qnan.o
gdtoa.a: dmisc.c dtoa.c g_Qfmt.c g__fmt.c g_ddfmt.c g_dfmt.c g_ffmt.c\
g_xLfmt.c g_xfmt.c gdtoa.c gethex.c gmisc.c hd_init.c hexnan.c\
misc.c smisc.c strtoIQ.c strtoId.c strtoIdd.c strtoIf.c strtoIg.c\
@ -51,10 +56,10 @@ gdtoa.a: dmisc.c dtoa.c g_Qfmt.c g__fmt.c g_ddfmt.c g_dfmt.c g_ffmt.c\
xs0 = README arithchk.c dmisc.c dtoa.c g_Qfmt.c g__fmt.c g_ddfmt.c g_dfmt.c\
g_ffmt.c g_xLfmt.c g_xfmt.c gdtoa.c gdtoa.h gdtoaimp.h gethex.c\
gmisc.c hd_init.c hexnan.c makefile misc.c smisc.c strtoIQ.c\
gmisc.c hd_init.c hexnan.c makefile misc.c qnan.c smisc.c strtoIQ.c\
strtoId.c strtoIdd.c strtoIf.c strtoIg.c strtoIx.c strtoIxL.c\
strtod.c strtodI.c strtodg.c strtof.c strtopQ.c strtopd.c strtopdd.c\
strtopf.c strtopx.c strtopxL.c strtorQ.c strtord.c strtordd.c\
strtod.c strtodI.c strtodg.c strtodnrp.c strtof.c strtopQ.c strtopd.c\
strtopdd.c strtopf.c strtopx.c strtopxL.c strtorQ.c strtord.c strtordd.c\
strtorf.c strtorx.c strtorxL.c sum.c ulp.c
# "make xsum.out" to check for transmission errors; source for xsum is
@ -66,4 +71,4 @@ xsum.out: xsum0.out $(xs0)
cmp xsum0.out xsum1.out && mv xsum1.out xsum.out || diff xsum[01].out
clean:
rm -f arith.h *.[ao] xsum.out xsum1.out
rm -f arith.h gd_qnan.h *.[ao] xsum.out xsum1.out

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"
@ -143,7 +137,7 @@ lo0bits
if (!(x & 1)) {
k++;
x >>= 1;
if (!x & 1)
if (!x)
return 32;
}
*y = x;
@ -208,7 +202,7 @@ multadd
}
int
hi0bits
hi0bits_D2A
#ifdef KR_headers
(x) register ULong x;
#else
@ -686,7 +680,10 @@ d2b
#endif
{
Bigint *b;
int de, i, k;
#ifndef Sudden_Underflow
int i;
#endif
int de, k;
ULong *x, y, z;
#ifdef VAX
ULong d0, d1;
@ -723,7 +720,10 @@ d2b
}
else
x[0] = y;
i = b->wds = (x[1] = z) !=0 ? 2 : 1;
#ifndef Sudden_Underflow
i =
#endif
b->wds = (x[1] = z) !=0 ? 2 : 1;
}
else {
#ifdef DEBUG
@ -732,7 +732,10 @@ d2b
#endif
k = lo0bits(&z);
x[0] = z;
i = b->wds = 1;
#ifndef Sudden_Underflow
i =
#endif
b->wds = 1;
k += 32;
}
#else

110
contrib/gdtoa/qnan.c Normal file
View file

@ -0,0 +1,110 @@
/****************************************************************
The author of this software is David M. Gay.
Copyright (C) 2005 by David M. Gay
All Rights Reserved
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies and that
both that the copyright notice and this permission notice and warranty
disclaimer appear in supporting documentation, and that the name of
the author or any of his current or former employers not be used in
advertising or publicity pertaining to distribution of the software
without specific, written prior permission.
THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
NO EVENT SHALL THE AUTHOR OR ANY OF HIS CURRENT OR FORMER EMPLOYERS BE
LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
SOFTWARE.
****************************************************************/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
/* Program to compute quiet NaNs of various precisions (float, */
/* double, and perhaps long double) on the current system, */
/* provided the system uses binary IEEE (P754) arithmetic. */
/* Note that one system's quiet NaN may be a signaling NaN on */
/* another system. The IEEE arithmetic standards (P754, P854) */
/* do not specify how to distinguish signaling NaNs from quiet */
/* ones, and this detail varies across systems. The computed */
/* NaN values are encoded in #defines for values for an */
/* unsigned 32-bit integer type, called Ulong below, and */
/* (for long double) perhaps as unsigned short values. Once */
/* upon a time, there were PC compilers for Intel CPUs that */
/* had sizeof(long double) = 10. Are such compilers still */
/* distributed? */
#include <stdio.h>
#include "arith.h"
#ifndef Long
#define Long long
#endif
typedef unsigned Long Ulong;
#undef HAVE_IEEE
#ifdef IEEE_8087
#define _0 1
#define _1 0
#define HAVE_IEEE
#endif
#ifdef IEEE_MC68k
#define _0 0
#define _1 1
#define HAVE_IEEE
#endif
#define UL (unsigned long)
int
main(void)
{
#ifdef HAVE_IEEE
typedef union {
float f;
double d;
Ulong L[4];
#ifndef NO_LONG_LONG
unsigned short u[5];
long double D;
#endif
} U;
U a, b, c;
int i;
a.L[0] = b.L[0] = 0x7f800000;
c.f = a.f - b.f;
printf("#define f_QNAN 0x%lx\n", UL c.L[0]);
a.L[_0] = b.L[_0] = 0x7ff00000;
a.L[_1] = b.L[_1] = 0;
c.d = a.d - b.d; /* quiet NaN */
printf("#define d_QNAN0 0x%lx\n", UL c.L[0]);
printf("#define d_QNAN1 0x%lx\n", UL c.L[1]);
#ifdef NO_LONG_LONG
for(i = 0; i < 4; i++)
printf("#define ld_QNAN%d 0xffffffff\n", i);
for(i = 0; i < 5; i++)
printf("#define ldus_QNAN%d 0xffff\n", i);
#else
b.D = c.D = a.d;
if (printf("") < 0)
c.D = 37; /* never executed; just defeat optimization */
a.L[2] = a.L[3] = 0;
a.D = b.D - c.D;
for(i = 0; i < 4; i++)
printf("#define ld_QNAN%d 0x%lx\n", i, UL a.L[i]);
for(i = 0; i < 5; i++)
printf("#define ldus_QNAN%d 0x%x\n", i, a.u[i]);
#endif
#endif /* HAVE_IEEE */
return 0;
}

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"

View file

@ -26,12 +26,13 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
dmg@acm.org
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"
#ifndef NO_FENV_H
#include <fenv.h>
#endif
#ifdef USE_LOCALE
#include "locale.h"
@ -68,7 +69,7 @@ strtod
#ifdef Avoid_Underflow
int scale;
#endif
int bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, dsign,
int bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, decpt, dsign,
e, e1, esign, i, j, k, nd, nd0, nf, nz, nz0, sign;
CONST char *s, *s0, *s1;
double aadj, aadj1, adj, rv, rv0;
@ -82,7 +83,7 @@ strtod
int rounding;
#endif
sign = nz0 = nz = 0;
sign = nz0 = nz = decpt = 0;
dval(rv) = 0.;
for(s = s00;;s++) switch(*s) {
case '-':
@ -114,7 +115,18 @@ strtod
switch(s[1]) {
case 'x':
case 'X':
switch((i = gethex(&s, &fpi, &exp, &bb, sign)) & STRTOG_Retmask) {
{
#if defined(FE_DOWNWARD) && defined(FE_TONEAREST) && defined(FE_TOWARDZERO) && defined(FE_UPWARD)
FPI fpi1 = fpi;
switch(fegetround()) {
case FE_TOWARDZERO: fpi1.rounding = 0; break;
case FE_UPWARD: fpi1.rounding = 2; break;
case FE_DOWNWARD: fpi1.rounding = 3;
}
#else
#define fpi1 fpi
#endif
switch((i = gethex(&s, &fpi1, &exp, &bb, sign)) & STRTOG_Retmask) {
case STRTOG_NoNumber:
s = s00;
sign = 0;
@ -126,7 +138,7 @@ strtod
Bfree(bb);
}
ULtod(((U*)&rv)->L, bits, exp, i);
}
}}
goto ret;
}
}
@ -150,6 +162,7 @@ strtod
if (c == '.')
#endif
{
decpt = 1;
c = *++s;
if (!nd) {
for(; c == '0'; c = *++s)
@ -225,7 +238,8 @@ strtod
ULong bits[2];
static FPI fpinan = /* only 52 explicit bits */
{ 52, 1-1023-53+1, 2046-1023-53+1, 1, SI };
switch(c) {
if (!decpt)
switch(c) {
case 'i':
case 'I':
if (match(&s,"nf")) {
@ -248,8 +262,10 @@ strtod
word1(rv) = bits[0];
}
else {
#endif
word0(rv) = NAN_WORD0;
word1(rv) = NAN_WORD1;
#ifndef No_Hex_NaN
}
#endif
goto ret;

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"
@ -61,11 +55,7 @@ strtodI(s, sp, dd) CONST char *s; char **sp; double *dd;
strtodI(CONST char *s, char **sp, double *dd)
#endif
{
#ifdef Sudden_Underflow
static FPI fpi = { 53, 1-1023-53+1, 2046-1023-53+1, 1, 1 };
#else
static FPI fpi = { 53, 1-1023-53+1, 2046-1023-53+1, 1, 0 };
#endif
static FPI fpi = { 53, 1-1023-53+1, 2046-1023-53+1, 1, SI };
ULong bits[2], sign;
Long exp;
int j, k;
@ -165,8 +155,8 @@ strtodI(CONST char *s, char **sp, double *dd)
break;
case STRTOG_NaN:
u->L[_0] = u->L[2+_0] = 0x7fffffff | sign;
u->L[_1] = u->L[2+_1] = (ULong)-1;
u->L[0] = u->L[2] = d_QNAN0;
u->L[1] = u->L[3] = d_QNAN1;
break;
case STRTOG_NaNbits:

View file

@ -26,10 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
dmg@acm.org
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"
@ -239,7 +237,7 @@ rvOK
inex = STRTOG_Inexhi;
b = increment(b);
if ( (j = nb & kmask) !=0)
j = 32 - j;
j = ULbits - j;
if (hi0bits(b->x[b->wds - 1]) != j) {
if (!lostbits)
lostbits = b->x[0] & 1;
@ -325,8 +323,8 @@ strtodg
#endif
{
int abe, abits, asub;
int bb0, bb2, bb5, bbe, bd2, bd5, bbbits, bs2;
int c, denorm, dsign, e, e1, e2, emin, esign, finished, i, inex, irv;
int bb0, bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, decpt, denorm;
int dsign, e, e1, e2, emin, esign, finished, i, inex, irv;
int j, k, nbits, nd, nd0, nf, nz, nz0, rd, rvbits, rve, rve1, sign;
int sudden_underflow;
CONST char *s, *s0, *s1;
@ -385,7 +383,7 @@ strtodg
sudden_underflow = fpi->sudden_underflow;
s0 = s;
y = z = 0;
for(nd = nf = 0; (c = *s) >= '0' && c <= '9'; nd++, s++)
for(decpt = nd = nf = 0; (c = *s) >= '0' && c <= '9'; nd++, s++)
if (nd < 9)
y = 10*y + c - '0';
else if (nd < 16)
@ -397,6 +395,7 @@ strtodg
if (c == '.')
#endif
{
decpt = 1;
c = *++s;
if (!nd) {
for(; c == '0'; c = *++s)
@ -471,7 +470,8 @@ strtodg
if (!nz && !nz0) {
#ifdef INFNAN_CHECK
/* Check for Nan and Infinity */
switch(c) {
if (!decpt)
switch(c) {
case 'i':
case 'I':
if (match(&s,"nf")) {
@ -632,7 +632,14 @@ strtodg
dval(rv) *= tinytens[j];
}
}
#ifdef IBM
/* e2 is a correction to the (base 2) exponent of the return
* value, reflecting adjustments above to avoid overflow in the
* native arithmetic. For native IBM (base 16) arithmetic, we
* must multiply e2 by 4 to change from base 16 to 2.
*/
e2 <<= 2;
#endif
rvb = d2b(dval(rv), &rve, &rvbits); /* rv = rvb * 2^rve */
rve += e2;
if ((j = rvbits - nbits) > 0) {
@ -642,16 +649,8 @@ strtodg
}
bb0 = 0; /* trailing zero bits in rvb */
e2 = rve + rvbits - nbits;
if (e2 > fpi->emax) {
rvb->wds = 0;
irv = STRTOG_Infinite | STRTOG_Overflow | STRTOG_Inexhi;
#ifndef NO_ERRNO
errno = ERANGE;
#endif
infnanexp:
*exp = fpi->emax + 1;
goto ret;
}
if (e2 > fpi->emax + 1)
goto huge;
rve1 = rve + rvbits - nbits;
if (e2 < (emin = fpi->emin)) {
denorm = 1;
@ -823,8 +822,8 @@ strtodg
break;
if (dsign) {
rvb = increment(rvb);
if ( (j = rvbits >> kshift) !=0)
j = 32 - j;
if ( (j = rvbits & kmask) !=0)
j = ULbits - j;
if (hi0bits(rvb->x[(rvb->wds - 1) >> kshift])
!= j)
rvbits++;
@ -965,9 +964,11 @@ strtodg
Bfree(bs);
Bfree(delta);
}
if (!denorm && rvbits < nbits) {
j = nbits - rvbits;
rvb = lshift(rvb, j);
if (!denorm && (j = nbits - rvbits)) {
if (j > 0)
rvb = lshift(rvb, j);
else
rshift(rvb, -j);
rve -= j;
}
*exp = rve;
@ -976,6 +977,16 @@ strtodg
Bfree(bs);
Bfree(bd0);
Bfree(delta);
if (rve > fpi->emax) {
huge:
rvb->wds = 0;
irv = STRTOG_Infinite | STRTOG_Overflow | STRTOG_Inexhi;
#ifndef NO_ERRNO
errno = ERANGE;
#endif
infnanexp:
*exp = fpi->emax + 1;
}
ret:
if (denorm) {
if (sudden_underflow) {

87
contrib/gdtoa/strtodnrp.c Normal file
View file

@ -0,0 +1,87 @@
/****************************************************************
The author of this software is David M. Gay.
Copyright (C) 2004 by David M. Gay.
All Rights Reserved
Based on material in the rest of /netlib/fp/gdota.tar.gz,
which is copyright (C) 1998, 2000 by Lucent Technologies.
Permission to use, copy, modify, and distribute this software and
its documentation for any purpose and without fee is hereby
granted, provided that the above copyright notice appear in all
copies and that both that the copyright notice and this
permission notice and warranty disclaimer appear in supporting
documentation, and that the name of Lucent or any of its entities
not be used in advertising or publicity pertaining to
distribution of the software without specific, written prior
permission.
LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
THIS SOFTWARE.
****************************************************************/
/* This is a variant of strtod that works on Intel ia32 systems */
/* with the default extended-precision arithmetic -- it does not */
/* require setting the precision control to 53 bits. */
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"
double
#ifdef KR_headers
strtod(s, sp) CONST char *s; char **sp;
#else
strtod(CONST char *s, char **sp)
#endif
{
static FPI fpi = { 53, 1-1023-53+1, 2046-1023-53+1, 1, SI };
ULong bits[2];
Long exp;
int k;
union { ULong L[2]; double d; } u;
k = strtodg(s, sp, &fpi, &exp, bits);
switch(k & STRTOG_Retmask) {
case STRTOG_NoNumber:
case STRTOG_Zero:
u.L[0] = u.L[1] = 0;
break;
case STRTOG_Normal:
u.L[_1] = bits[0];
u.L[_0] = (bits[1] & ~0x100000) | ((exp + 0x3ff + 52) << 20);
break;
case STRTOG_Denormal:
u.L[_1] = bits[0];
u.L[_0] = bits[1];
break;
case STRTOG_Infinite:
u.L[_0] = 0x7ff00000;
u.L[_1] = 0;
break;
case STRTOG_NaN:
u.L[0] = d_QNAN0;
u.L[1] = d_QNAN1;
break;
case STRTOG_NaNbits:
u.L[_0] = 0x7ff00000 | bits[1];
u.L[_1] = bits[0];
}
if (k & STRTOG_Neg)
u.L[_0] |= 0x80000000L;
return u.d;
}

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"
@ -44,11 +38,7 @@ strtof(s, sp) CONST char *s; char **sp;
strtof(CONST char *s, char **sp)
#endif
{
#ifdef Sudden_Underflow
static FPI fpi = { 24, 1-127-24+1, 254-127-24+1, 1, 1 };
#else
static FPI fpi = { 24, 1-127-24+1, 254-127-24+1, 1, 0 };
#endif
static FPI fpi = { 24, 1-127-24+1, 254-127-24+1, 1, SI };
ULong bits[1];
Long exp;
int k;
@ -75,7 +65,7 @@ strtof(CONST char *s, char **sp)
break;
case STRTOG_NaN:
u.L[0] = 0x7fffffff;
u.L[0] = f_QNAN;
}
if (k & STRTOG_Neg)
u.L[0] |= 0x80000000L;

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"
@ -62,11 +56,7 @@ strtopQ(s, sp, V) CONST char *s; char **sp; void *V;
strtopQ(CONST char *s, char **sp, void *V)
#endif
{
#ifdef Sudden_Underflow
static FPI fpi = { 113, 1-16383-113+1, 32766 - 16383 - 113 + 1, 1, 1 };
#else
static FPI fpi = { 113, 1-16383-113+1, 32766 - 16383 - 113 + 1, 1, 0 };
#endif
static FPI fpi = { 113, 1-16383-113+1, 32766 - 16383 - 113 + 1, 1, SI };
ULong bits[4];
Long exp;
int k;
@ -100,8 +90,10 @@ strtopQ(CONST char *s, char **sp, void *V)
break;
case STRTOG_NaN:
L[_0] = 0x7fffffff;
L[_1] = L[_2] = L[_3] = (ULong)-1;
L[0] = ld_QNAN0;
L[1] = ld_QNAN1;
L[2] = ld_QNAN2;
L[3] = ld_QNAN3;
}
if (k & STRTOG_Neg)
L[_0] |= 0x80000000L;

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"
@ -173,8 +167,8 @@ strtopdd(CONST char *s, char **sp, double *dd)
break;
case STRTOG_NaN:
u->L[_0] = u->L[2+_0] = 0x7fffffff;
u->L[_1] = u->L[2+_1] = (ULong)-1;
u->L[0] = u->L[2] = d_QNAN0;
u->L[1] = u->L[3] = d_QNAN1;
}
if (rv & STRTOG_Neg) {
u->L[ _0] |= 0x80000000L;

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"
@ -44,11 +38,7 @@ strtopf(s, sp, f) CONST char *s; char **sp; float *f;
strtopf(CONST char *s, char **sp, float *f)
#endif
{
#ifdef Sudden_Underflow
static FPI fpi = { 24, 1-127-24+1, 254-127-24+1, 1, 1 };
#else
static FPI fpi = { 24, 1-127-24+1, 254-127-24+1, 1, 0 };
#endif
static FPI fpi = { 24, 1-127-24+1, 254-127-24+1, 1, SI };
ULong bits[1], *L;
Long exp;
int k;
@ -75,7 +65,7 @@ strtopf(CONST char *s, char **sp, float *f)
break;
case STRTOG_NaN:
L[0] = 0x7fffffff;
L[0] = f_QNAN;
}
if (k & STRTOG_Neg)
L[0] |= 0x80000000L;

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"
@ -64,11 +58,7 @@ strtopx(s, sp, V) CONST char *s; char **sp; void *V;
strtopx(CONST char *s, char **sp, void *V)
#endif
{
#ifdef Sudden_Underflow
static FPI fpi = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, 1 };
#else
static FPI fpi = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, 0 };
#endif
static FPI fpi = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, SI };
ULong bits[2];
Long exp;
int k;
@ -81,14 +71,18 @@ strtopx(CONST char *s, char **sp, void *V)
L[0] = L[1] = L[2] = L[3] = L[4] = 0;
break;
case STRTOG_Normal:
case STRTOG_Denormal:
L[_0] = 0;
goto normal_bits;
case STRTOG_Normal:
case STRTOG_NaNbits:
L[_0] = exp + 0x3fff + 63;
normal_bits:
L[_4] = (UShort)bits[0];
L[_3] = (UShort)(bits[0] >> 16);
L[_2] = (UShort)bits[1];
L[_1] = (UShort)(bits[1] >> 16);
L[_0] = exp + 0x3fff + 63;
break;
case STRTOG_Infinite:
@ -97,8 +91,11 @@ strtopx(CONST char *s, char **sp, void *V)
break;
case STRTOG_NaN:
L[_0] = 0x7fff;
L[_1] = L[_2] = L[_3] = L[_4] = (UShort)-1;
L[0] = ldus_QNAN0;
L[1] = ldus_QNAN1;
L[2] = ldus_QNAN2;
L[3] = ldus_QNAN3;
L[4] = ldus_QNAN4;
}
if (k & STRTOG_Neg)
L[_0] |= 0x8000;

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"
@ -60,11 +54,7 @@ strtopxL(s, sp, V) CONST char *s; char **sp; void *V;
strtopxL(CONST char *s, char **sp, void *V)
#endif
{
#ifdef Sudden_Underflow
static FPI fpi = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, 1 };
#else
static FPI fpi = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, 0 };
#endif
static FPI fpi = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, SI };
ULong bits[2];
Long exp;
int k;
@ -91,8 +81,9 @@ strtopxL(CONST char *s, char **sp, void *V)
break;
case STRTOG_NaN:
L[_0] = 0x7fff << 16;
L[_1] = L[_2] = (ULong)-1;
L[0] = ld_QNAN0;
L[1] = ld_QNAN1;
L[2] = ld_QNAN2;
}
if (k & STRTOG_Neg)
L[_0] |= 0x80000000L;

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"
@ -89,8 +83,10 @@ ULtoQ(ULong *L, ULong *bits, Long exp, int k)
break;
case STRTOG_NaN:
L[_0] = 0x7fffffff;
L[_1] = L[_2] = L[_3] = (ULong)-1;
L[0] = ld_QNAN0;
L[1] = ld_QNAN1;
L[2] = ld_QNAN2;
L[3] = ld_QNAN3;
}
if (k & STRTOG_Neg)
L[_0] |= 0x80000000L;

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"
@ -67,8 +61,8 @@ ULtod(ULong *L, ULong *bits, Long exp, int k)
break;
case STRTOG_NaN:
L[_0] = 0x7fffffff;
L[_1] = (ULong)-1;
L[0] = d_QNAN0;
L[1] = d_QNAN1;
}
if (k & STRTOG_Neg)
L[_0] |= 0x80000000L;

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"
@ -159,8 +153,8 @@ ULtodd(ULong *L, ULong *bits, Long exp, int k)
break;
case STRTOG_NaN:
L[_0] = L[2+_0] = 0x7fffffff;
L[_1] = L[2+_1] = (ULong)-1;
L[0] = L[2] = d_QNAN0;
L[1] = L[3] = d_QNAN1;
break;
case STRTOG_NaNbits:

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"
@ -64,7 +58,7 @@ ULtof(ULong *L, ULong *bits, Long exp, int k)
break;
case STRTOG_NaN:
L[0] = 0x7fffffff;
L[0] = f_QNAN;
}
if (k & STRTOG_Neg)
L[0] |= 0x80000000L;

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"
@ -70,14 +64,18 @@ ULtox(UShort *L, ULong *bits, Long exp, int k)
L[0] = L[1] = L[2] = L[3] = L[4] = 0;
break;
case STRTOG_Normal:
case STRTOG_Denormal:
L[_0] = 0;
goto normal_bits;
case STRTOG_Normal:
case STRTOG_NaNbits:
L[_0] = exp + 0x3fff + 63;
normal_bits:
L[_4] = (UShort)bits[0];
L[_3] = (UShort)(bits[0] >> 16);
L[_2] = (UShort)bits[1];
L[_1] = (UShort)(bits[1] >> 16);
L[_0] = exp + 0x3fff + 63;
break;
case STRTOG_Infinite:
@ -86,8 +84,11 @@ ULtox(UShort *L, ULong *bits, Long exp, int k)
break;
case STRTOG_NaN:
L[_0] = 0x7fff;
L[_1] = L[_2] = L[_3] = L[_4] = (UShort)-1;
L[0] = ldus_QNAN0;
L[1] = ldus_QNAN1;
L[2] = ldus_QNAN2;
L[3] = ldus_QNAN3;
L[4] = ldus_QNAN4;
}
if (k & STRTOG_Neg)
L[_0] |= 0x8000;

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"
@ -80,8 +74,9 @@ ULtoxL(ULong *L, ULong *bits, Long exp, int k)
break;
case STRTOG_NaN:
L[_0] = 0x7fff << 16;
L[_1] = L[_2] = (ULong)-1;
L[0] = ld_QNAN0;
L[1] = ld_QNAN1;
L[2] = ld_QNAN2;
}
if (k & STRTOG_Neg)
L[_0] |= 0x80000000L;

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
/* Test program for g_Qfmt, strtoIQ, strtopQ, and strtorQ.
*
@ -86,7 +80,7 @@ THIS SOFTWARE.
int
main(Void)
{
char *s, *se, *se1;
char *s, *s1, *se, *se1;
int i, dItry, ndig = 0, r = 1;
union { long double d; ULong bits[4]; } u, v[2];
@ -107,8 +101,17 @@ main(Void)
}
break; /* nan? */
case '#':
sscanf(s+1, "%lx %lx %lx %lx", &u.bits[_0],
&u.bits[_1], &u.bits[_2], &u.bits[_3]);
/* sscanf(s+1, "%lx %lx %lx %lx", &u.bits[_0], */
/* &u.bits[_1], &u.bits[_2], &u.bits[_3]); */
u.bits[_0] = (ULong)strtoul(s1 = s+1, &se, 16);
if (se > s1) {
u.bits[_1] = (ULong)strtoul(s1 = se, &se, 16);
if (se > s1) {
u.bits[_2] = (ULong)strtoul(s1 = se, &se, 16);
if (se > s1)
u.bits[_3] = (ULong)strtoul(s1 = se, &se, 16);
}
}
printf("\nInput: %s", ibuf);
printf(" --> f = #%lx %lx %lx %lx\n", u.bits[_0],
u.bits[_1], u.bits[_2], u.bits[_3]);

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"
#include <stdio.h>

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
/* Test program for g_ddfmt, strtoIdd, strtopdd, and strtordd.
*
@ -73,22 +67,22 @@ dprint(char *what, double d)
#endif
{
char buf[32];
ULong *L = (ULong*)&d;
union { double d; ULong L[2]; } u;
u.d = d;
g_dfmt(buf,&d,0,sizeof(buf));
printf("%s = %s = #%lx %lx\n", what, buf, U L[_0], U L[_1]);
printf("%s = %s = #%lx %lx\n", what, buf, U u.L[_0], U u.L[_1]);
}
int
main(Void)
{
ULong *L;
char *s, *s1, *se, *se1;
int dItry, i, j, r = 1, ndig = 0;
double dd[2], ddI[4];
double ddI[4];
long LL[4];
union { double dd[2]; ULong L[4]; } u;
L = (ULong*)&dd[0];
while( (s = fgets(ibuf, sizeof(ibuf), stdin)) !=0) {
while(*s <= ' ')
if (!*s++)
@ -106,16 +100,16 @@ main(Void)
}
break; /* nan? */
case '#':
LL[0] = L[_0];
LL[1] = L[_1];
LL[2] = L[2+_0];
LL[3] = L[2+_1];
LL[0] = u.L[_0];
LL[1] = u.L[_1];
LL[2] = u.L[2+_0];
LL[3] = u.L[2+_1];
sscanf(s+1, "%lx %lx %lx %lx", &LL[0], &LL[1],
&LL[2], &LL[3]);
L[_0] = LL[0];
L[_1] = LL[1];
L[2+_0] = LL[2];
L[2+_1] = LL[3];
u.L[_0] = LL[0];
u.L[_1] = LL[1];
u.L[2+_0] = LL[2];
u.L[2+_1] = LL[3];
printf("\nInput: %s", ibuf);
printf(" --> f = #%lx %lx %lx %lx\n",
LL[0],LL[1],LL[2],LL[3]);
@ -126,24 +120,24 @@ main(Void)
while(*s1 <= ' ' && *s1) s1++;
if (!*s1) {
dItry = 1;
i = strtordd(ibuf, &se, r, dd);
i = strtordd(ibuf, &se, r, u.dd);
if (r == 1) {
j = strtopdd(ibuf, &se1, ddI);
if (i != j || dd[0] != ddI[0]
|| dd[1] != ddI[1] || se != se1)
if (i != j || u.dd[0] != ddI[0]
|| u.dd[1] != ddI[1] || se != se1)
printf("***strtopdd and strtordd disagree!!\n:");
}
printf("strtopdd consumes %d bytes and returns %d\n",
(int)(se-ibuf), i);
}
else {
dd[0] = strtod(s, &se);
dd[1] = strtod(se, &se);
u.dd[0] = strtod(s, &se);
u.dd[1] = strtod(se, &se);
}
fmt_test:
dprint("dd[0]", dd[0]);
dprint("dd[1]", dd[1]);
se = g_ddfmt(obuf, dd, ndig, sizeof(obuf));
dprint("dd[0]", u.dd[0]);
dprint("dd[1]", u.dd[1]);
se = g_ddfmt(obuf, u.dd, ndig, sizeof(obuf));
printf("g_ddfmt(%d) gives %d bytes: \"%s\"\n\n",
ndig, (int)(se-obuf), se ? obuf : "<null>");
if (!dItry)
@ -151,7 +145,7 @@ main(Void)
printf("strtoIdd returns %d,", strtoIdd(ibuf, &se, ddI,&ddI[2]));
printf(" consuming %d bytes.\n", (int)(se-ibuf));
if (ddI[0] == ddI[2] && ddI[1] == ddI[3]) {
if (ddI[0] == dd[0] && ddI[1] == dd[1])
if (ddI[0] == u.dd[0] && ddI[1] == u.dd[1])
printf("ddI[0] == ddI[1] == strtopdd\n");
else
printf("ddI[0] == ddI[1] = #%lx %lx + %lx %lx\n= %.17g + %17.g\n",
@ -170,9 +164,9 @@ main(Void)
U ((ULong*)ddI)[4+_0], U ((ULong*)ddI)[4+_1],
U ((ULong*)ddI)[6+_0], U ((ULong*)ddI)[6+_1],
ddI[2], ddI[3]);
if (ddI[0] == dd[0] && ddI[1] == dd[1])
if (ddI[0] == u.dd[0] && ddI[1] == u.dd[1])
printf("ddI[0] == strtod\n");
else if (ddI[2] == dd[0] && ddI[3] == dd[1])
else if (ddI[2] == u.dd[0] && ddI[3] == u.dd[1])
printf("ddI[1] == strtod\n");
else
printf("**** Both differ from strtopdd ****\n");

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
/* Test program for strtod and dtoa.
*
@ -169,7 +163,8 @@ check(double d)
double d1;
s = dtoa(d, 0, 0, &decpt, &sign, &se);
sprintf(buf, "%s.%se%d", sign ? "-" : "", s, decpt);
sprintf(buf, "%s%s%se%d", sign ? "-" : "",
decpt == 9999 ? "" : ".", s, decpt);
errno = 0;
d1 = strtod(buf, (char **)0);
if (errno)
@ -182,9 +177,10 @@ check(double d)
}
}
int
main(Void){
char buf[2048], buf1[32];
char *fmt, *s, *se;
char *fmt, *s, *s1, *se;
double d, d1;
int decpt, sign;
int mode = 0, ndigits = 17;
@ -202,7 +198,13 @@ main(Void){
if (*buf == '#') {
x = word0(d);
y = word1(d);
sscanf(buf+1, "%lx %lx:%d %d", &x, &y, &mode, &ndigits);
/* sscanf(buf+1, "%lx %lx:%d %d", &x, &y, &mode, &ndigits); */
x = (ULong)strtoul(s1 = buf+1, &se, 16);
if (se > s1) {
y = (ULong)strtoul(s1 = se, &se, 16);
if (se > s1)
sscanf(se, ":%d %d", &mode, &ndigits);
}
word0(d) = x;
word1(d) = y;
fmt = "Output: d =\n%.17g = 0x%lx %lx\n";

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
/* Test program for g_dfmt, strtoId, strtod, strtopd, and strtord.
*
@ -68,13 +62,12 @@ THIS SOFTWARE.
int
main(Void)
{
ULong *L;
char *s, *se, *se1;
double f, f1, fI[2];
double f1, fI[2];
int i, i1, ndig = 0, r = 1;
long LL[2];
union { double f; ULong L[2]; } u;
L = (ULong*)&f;
while( (s = fgets(ibuf, sizeof(ibuf), stdin)) !=0) {
while(*s <= ' ')
if (!*s++)
@ -91,28 +84,28 @@ main(Void)
}
break; /* nan? */
case '#':
LL[0] = L[_0];
LL[1] = L[_1];
LL[0] = u.L[_0];
LL[1] = u.L[_1];
sscanf(s+1, "%lx %lx", &LL[0], &LL[1]);
L[_0] = LL[0];
L[_1] = LL[1];
u.L[_0] = LL[0];
u.L[_1] = LL[1];
printf("\nInput: %s", ibuf);
printf("--> f = #%lx %lx\n", (long)L[_0], (long)L[_1]);
printf("--> f = #%lx %lx\n", (long)u.L[_0], (long)u.L[_1]);
goto fmt_test;
}
printf("\nInput: %s", ibuf);
i = strtord(ibuf, &se, r, &f);
i = strtord(ibuf, &se, r, &u.f);
if (r == 1) {
if ((f != strtod(ibuf, &se1) || se1 != se))
if ((u.f != strtod(ibuf, &se1) || se1 != se))
printf("***strtod and strtord disagree!!\n");
i1 = strtopd(ibuf, &se, &f1);
if (i != i1 || f != f1 || se != se1)
if (i != i1 || u.f != f1 || se != se1)
printf("***strtord and strtopd disagree!!\n");
}
printf("strtod consumes %d bytes and returns %d with f = %.17g = #%lx %lx\n",
(int)(se-ibuf), i, f, U L[_0], U L[_1]);
(int)(se-ibuf), i, u.f, U u.L[_0], U u.L[_1]);
fmt_test:
se = g_dfmt(obuf, &f, ndig, sizeof(obuf));
se = g_dfmt(obuf, &u.f, ndig, sizeof(obuf));
printf("g_dfmt(%d) gives %d bytes: \"%s\"\n\n",
ndig, (int)(se-obuf), se ? obuf : "<null>");
if (*s == '#')
@ -120,7 +113,7 @@ main(Void)
printf("strtoId returns %d,", strtoId(ibuf, &se, fI, &fI[1]));
printf(" consuming %d bytes.\n", (int)(se-ibuf));
if (fI[0] == fI[1]) {
if (fI[0] == f)
if (fI[0] == u.f)
printf("fI[0] == fI[1] == strtod\n");
else
printf("fI[0] == fI[1] = #%lx %lx = %.17g\n",
@ -133,9 +126,9 @@ main(Void)
printf("fI[1] = #%lx %lx = %.17g\n",
U ((ULong*)&fI[1])[_0], U ((ULong*)&fI[1])[_1],
fI[1]);
if (fI[0] == f)
if (fI[0] == u.f)
printf("fI[0] == strtod\n");
else if (fI[1] == f)
else if (fI[1] == u.f)
printf("fI[1] == strtod\n");
else
printf("**** Both differ from strtod ****\n");

View file

@ -5,11 +5,11 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = 1, 3 digits:
123
nextafter(d,+Inf) = 1.2300000000000002 = 0x3ff3ae14 7ae147af:
nextafter(d,+Infinity) = 1.2300000000000002 = 0x3ff3ae14 7ae147af:
g_fmt gives "1.2300000000000002"
dtoa returns sign = 0, decpt = 1, 17 digits:
12300000000000002
nextafter(d,-Inf) = 1.2299999999999998 = 0x3ff3ae14 7ae147ad:
nextafter(d,-Infinity) = 1.2299999999999998 = 0x3ff3ae14 7ae147ad:
g_fmt gives "1.2299999999999998"
dtoa returns sign = 0, decpt = 1, 17 digits:
12299999999999998
@ -20,11 +20,11 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = 21, 3 digits:
123
nextafter(d,+Inf) = 1.2300000000000002e+20 = 0x441aabdf 2145b431:
nextafter(d,+Infinity) = 1.2300000000000002e+20 = 0x441aabdf 2145b431:
g_fmt gives "123000000000000020000"
dtoa returns sign = 0, decpt = 21, 17 digits:
12300000000000002
nextafter(d,-Inf) = 1.2299999999999998e+20 = 0x441aabdf 2145b42f:
nextafter(d,-Infinity) = 1.2299999999999998e+20 = 0x441aabdf 2145b42f:
g_fmt gives "122999999999999980000"
dtoa returns sign = 0, decpt = 21, 17 digits:
12299999999999998
@ -35,11 +35,11 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = -19, 3 digits:
123
nextafter(d,+Inf) = 1.2300000000000002e-20 = 0x3bcd0ae4 cf767532:
nextafter(d,+Infinity) = 1.2300000000000002e-20 = 0x3bcd0ae4 cf767532:
g_fmt gives "1.2300000000000002e-20"
dtoa returns sign = 0, decpt = -19, 17 digits:
12300000000000002
nextafter(d,-Inf) = 1.2299999999999999e-20 = 0x3bcd0ae4 cf767530:
nextafter(d,-Infinity) = 1.2299999999999999e-20 = 0x3bcd0ae4 cf767530:
g_fmt gives "1.2299999999999999e-20"
dtoa returns sign = 0, decpt = -19, 17 digits:
12299999999999999
@ -50,11 +50,11 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = 1, 9 digits:
123456789
nextafter(d,+Inf) = 1.2345678900000001 = 0x3ff3c0ca 4283de1c:
nextafter(d,+Infinity) = 1.2345678900000001 = 0x3ff3c0ca 4283de1c:
g_fmt gives "1.2345678900000001"
dtoa returns sign = 0, decpt = 1, 17 digits:
12345678900000001
nextafter(d,-Inf) = 1.2345678899999997 = 0x3ff3c0ca 4283de1a:
nextafter(d,-Infinity) = 1.2345678899999997 = 0x3ff3c0ca 4283de1a:
g_fmt gives "1.2345678899999997"
dtoa returns sign = 0, decpt = 1, 17 digits:
12345678899999997
@ -65,11 +65,11 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = 21, 9 digits:
123456589
nextafter(d,+Inf) = 1.2345658900000001e+20 = 0x441ac537 a660b998:
nextafter(d,+Infinity) = 1.2345658900000001e+20 = 0x441ac537 a660b998:
g_fmt gives "123456589000000010000"
dtoa returns sign = 0, decpt = 21, 17 digits:
12345658900000001
nextafter(d,-Inf) = 1.2345658899999998e+20 = 0x441ac537 a660b996:
nextafter(d,-Infinity) = 1.2345658899999998e+20 = 0x441ac537 a660b996:
g_fmt gives "123456588999999980000"
dtoa returns sign = 0, decpt = 21, 17 digits:
12345658899999998
@ -80,11 +80,11 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = 31, 3 digits:
123
nextafter(d,+Inf) = 1.2300000000000001e+30 = 0x462f0cb0 4e8fb791:
nextafter(d,+Infinity) = 1.2300000000000001e+30 = 0x462f0cb0 4e8fb791:
g_fmt gives "1.2300000000000001e+30"
dtoa returns sign = 0, decpt = 31, 17 digits:
12300000000000001
nextafter(d,-Inf) = 1.2299999999999998e+30 = 0x462f0cb0 4e8fb78f:
nextafter(d,-Infinity) = 1.2299999999999998e+30 = 0x462f0cb0 4e8fb78f:
g_fmt gives "1.2299999999999998e+30"
dtoa returns sign = 0, decpt = 31, 17 digits:
12299999999999998
@ -95,11 +95,11 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = -29, 3 digits:
123
nextafter(d,+Inf) = 1.2300000000000002e-30 = 0x39b8f286 6f5010ac:
nextafter(d,+Infinity) = 1.2300000000000002e-30 = 0x39b8f286 6f5010ac:
g_fmt gives "1.2300000000000002e-30"
dtoa returns sign = 0, decpt = -29, 17 digits:
12300000000000002
nextafter(d,-Inf) = 1.2299999999999999e-30 = 0x39b8f286 6f5010aa:
nextafter(d,-Infinity) = 1.2299999999999999e-30 = 0x39b8f286 6f5010aa:
g_fmt gives "1.2299999999999999e-30"
dtoa returns sign = 0, decpt = -29, 17 digits:
12299999999999999
@ -110,11 +110,11 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = -19, 9 digits:
123456789
nextafter(d,+Inf) = 1.2345678900000001e-20 = 0x3bcd2681 471e7adb:
nextafter(d,+Infinity) = 1.2345678900000001e-20 = 0x3bcd2681 471e7adb:
g_fmt gives "1.2345678900000001e-20"
dtoa returns sign = 0, decpt = -19, 17 digits:
12345678900000001
nextafter(d,-Inf) = 1.2345678899999998e-20 = 0x3bcd2681 471e7ad9:
nextafter(d,-Infinity) = 1.2345678899999998e-20 = 0x3bcd2681 471e7ad9:
g_fmt gives "1.2345678899999998e-20"
dtoa returns sign = 0, decpt = -19, 17 digits:
12345678899999998
@ -125,11 +125,11 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = -29, 9 digits:
123456789
nextafter(d,+Inf) = 1.2345678900000002e-30 = 0x39b90a3e 33bbd996:
nextafter(d,+Infinity) = 1.2345678900000002e-30 = 0x39b90a3e 33bbd996:
g_fmt gives "1.2345678900000002e-30"
dtoa returns sign = 0, decpt = -29, 17 digits:
12345678900000002
nextafter(d,-Inf) = 1.2345678899999998e-30 = 0x39b90a3e 33bbd994:
nextafter(d,-Infinity) = 1.2345678899999998e-30 = 0x39b90a3e 33bbd994:
g_fmt gives "1.2345678899999998e-30"
dtoa returns sign = 0, decpt = -29, 17 digits:
12345678899999998
@ -140,11 +140,11 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = 1, 17 digits:
12345678901234567
nextafter(d,+Inf) = 1.2345678901234569 = 0x3ff3c0ca 428c59fc:
nextafter(d,+Infinity) = 1.2345678901234569 = 0x3ff3c0ca 428c59fc:
g_fmt gives "1.234567890123457"
dtoa returns sign = 0, decpt = 1, 16 digits:
1234567890123457
nextafter(d,-Inf) = 1.2345678901234565 = 0x3ff3c0ca 428c59fa:
nextafter(d,-Infinity) = 1.2345678901234565 = 0x3ff3c0ca 428c59fa:
g_fmt gives "1.2345678901234565"
dtoa returns sign = 0, decpt = 1, 17 digits:
12345678901234565
@ -155,11 +155,11 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = 1, 17 digits:
12345678901234567
nextafter(d,+Inf) = 1.2345678901234569 = 0x3ff3c0ca 428c59fc:
nextafter(d,+Infinity) = 1.2345678901234569 = 0x3ff3c0ca 428c59fc:
g_fmt gives "1.234567890123457"
dtoa returns sign = 0, decpt = 1, 16 digits:
1234567890123457
nextafter(d,-Inf) = 1.2345678901234565 = 0x3ff3c0ca 428c59fa:
nextafter(d,-Infinity) = 1.2345678901234565 = 0x3ff3c0ca 428c59fa:
g_fmt gives "1.2345678901234565"
dtoa returns sign = 0, decpt = 1, 17 digits:
12345678901234565
@ -170,11 +170,11 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = 307, 3 digits:
123
nextafter(d,+Inf) = 1.2300000000000002e+306 = 0x7f7c0676 cd1c61f6:
nextafter(d,+Infinity) = 1.2300000000000002e+306 = 0x7f7c0676 cd1c61f6:
g_fmt gives "1.2300000000000002e+306"
dtoa returns sign = 0, decpt = 307, 17 digits:
12300000000000002
nextafter(d,-Inf) = 1.2299999999999999e+306 = 0x7f7c0676 cd1c61f4:
nextafter(d,-Infinity) = 1.2299999999999999e+306 = 0x7f7c0676 cd1c61f4:
g_fmt gives "1.2299999999999999e+306"
dtoa returns sign = 0, decpt = 307, 17 digits:
12299999999999999
@ -185,11 +185,11 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = -305, 3 digits:
123
nextafter(d,+Inf) = 1.2300000000000002e-306 = 0x6ba3b8 5da396e9:
nextafter(d,+Infinity) = 1.2300000000000002e-306 = 0x6ba3b8 5da396e9:
g_fmt gives "1.2300000000000002e-306"
dtoa returns sign = 0, decpt = -305, 17 digits:
12300000000000002
nextafter(d,-Inf) = 1.2299999999999999e-306 = 0x6ba3b8 5da396e7:
nextafter(d,-Infinity) = 1.2299999999999999e-306 = 0x6ba3b8 5da396e7:
g_fmt gives "1.2299999999999999e-306"
dtoa returns sign = 0, decpt = -305, 17 digits:
12299999999999999
@ -200,11 +200,11 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = -319, 3 digits:
123
nextafter(d,+Inf) = 1.2307175237905451e-320 = 0x0 9bb:
nextafter(d,+Infinity) = 1.2307175237905451e-320 = 0x0 9bb:
g_fmt gives "1.2307e-320"
dtoa returns sign = 0, decpt = -319, 5 digits:
12307
nextafter(d,-Inf) = 1.2297293924988626e-320 = 0x0 9b9:
nextafter(d,-Infinity) = 1.2297293924988626e-320 = 0x0 9b9:
g_fmt gives "1.2297e-320"
dtoa returns sign = 0, decpt = -319, 5 digits:
12297
@ -215,11 +215,11 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = -19, 3 digits:
123
nextafter(d,+Inf) = 1.2300000000000002e-20 = 0x3bcd0ae4 cf767532:
nextafter(d,+Infinity) = 1.2300000000000002e-20 = 0x3bcd0ae4 cf767532:
g_fmt gives "1.2300000000000002e-20"
dtoa returns sign = 0, decpt = -19, 17 digits:
12300000000000002
nextafter(d,-Inf) = 1.2299999999999999e-20 = 0x3bcd0ae4 cf767530:
nextafter(d,-Infinity) = 1.2299999999999999e-20 = 0x3bcd0ae4 cf767530:
g_fmt gives "1.2299999999999999e-20"
dtoa returns sign = 0, decpt = -19, 17 digits:
12299999999999999
@ -230,11 +230,11 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = 308, 9 digits:
123456789
nextafter(d,+Inf) = 1.2345678900000003e+307 = 0x7fb194b1 4bdaecdd:
nextafter(d,+Infinity) = 1.2345678900000003e+307 = 0x7fb194b1 4bdaecdd:
g_fmt gives "1.2345678900000003e+307"
dtoa returns sign = 0, decpt = 308, 17 digits:
12345678900000003
nextafter(d,-Inf) = 1.2345678899999998e+307 = 0x7fb194b1 4bdaecdb:
nextafter(d,-Infinity) = 1.2345678899999998e+307 = 0x7fb194b1 4bdaecdb:
g_fmt gives "1.2345678899999998e+307"
dtoa returns sign = 0, decpt = 308, 17 digits:
12345678899999998
@ -245,11 +245,11 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = -306, 9 digits:
123456589
nextafter(d,+Inf) = 1.2345658900000001e-307 = 0x363196 bb9845fb:
nextafter(d,+Infinity) = 1.2345658900000001e-307 = 0x363196 bb9845fb:
g_fmt gives "1.2345658900000001e-307"
dtoa returns sign = 0, decpt = -306, 17 digits:
12345658900000001
nextafter(d,-Inf) = 1.2345658899999997e-307 = 0x363196 bb9845f9:
nextafter(d,-Infinity) = 1.2345658899999997e-307 = 0x363196 bb9845f9:
g_fmt gives "1.2345658899999997e-307"
dtoa returns sign = 0, decpt = -306, 17 digits:
12345658899999997
@ -260,11 +260,11 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = 1, 17 digits:
12345678901234567
nextafter(d,+Inf) = 1.2345678901234569 = 0x3ff3c0ca 428c59fc:
nextafter(d,+Infinity) = 1.2345678901234569 = 0x3ff3c0ca 428c59fc:
g_fmt gives "1.234567890123457"
dtoa returns sign = 0, decpt = 1, 16 digits:
1234567890123457
nextafter(d,-Inf) = 1.2345678901234565 = 0x3ff3c0ca 428c59fa:
nextafter(d,-Infinity) = 1.2345678901234565 = 0x3ff3c0ca 428c59fa:
g_fmt gives "1.2345678901234565"
dtoa returns sign = 0, decpt = 1, 17 digits:
12345678901234565
@ -275,11 +275,11 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = 302, 17 digits:
12345678901234568
nextafter(d,+Inf) = 1.234567890123457e+301 = 0x7e726f51 75f56414:
nextafter(d,+Infinity) = 1.234567890123457e+301 = 0x7e726f51 75f56414:
g_fmt gives "1.234567890123457e+301"
dtoa returns sign = 0, decpt = 302, 16 digits:
1234567890123457
nextafter(d,-Inf) = 1.2345678901234565e+301 = 0x7e726f51 75f56412:
nextafter(d,-Infinity) = 1.2345678901234565e+301 = 0x7e726f51 75f56412:
g_fmt gives "1.2345678901234565e+301"
dtoa returns sign = 0, decpt = 302, 17 digits:
12345678901234565
@ -290,11 +290,11 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = -300, 17 digits:
12345678901234567
nextafter(d,+Inf) = 1.2345678901234569e-301 = 0x1752a64 e34ba0d4:
nextafter(d,+Infinity) = 1.2345678901234569e-301 = 0x1752a64 e34ba0d4:
g_fmt gives "1.234567890123457e-301"
dtoa returns sign = 0, decpt = -300, 16 digits:
1234567890123457
nextafter(d,-Inf) = 1.2345678901234565e-301 = 0x1752a64 e34ba0d2:
nextafter(d,-Infinity) = 1.2345678901234565e-301 = 0x1752a64 e34ba0d2:
g_fmt gives "1.2345678901234565e-301"
dtoa returns sign = 0, decpt = -300, 17 digits:
12345678901234565
@ -305,11 +305,11 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = -320, 4 digits:
1235
nextafter(d,+Inf) = 1.2401047710615288e-321 = 0x0 fb:
nextafter(d,+Infinity) = 1.2401047710615288e-321 = 0x0 fb:
g_fmt gives "1.24e-321"
dtoa returns sign = 0, decpt = -320, 3 digits:
124
nextafter(d,-Inf) = 1.2302234581447039e-321 = 0x0 f9:
nextafter(d,-Infinity) = 1.2302234581447039e-321 = 0x0 f9:
g_fmt gives "1.23e-321"
dtoa returns sign = 0, decpt = -320, 3 digits:
123
@ -320,17 +320,15 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = 24, 1 digits:
1
nextafter(d,+Inf) = 1.0000000000000001e+23 = 0x44b52d02 c7e14af7:
nextafter(d,+Infinity) = 1.0000000000000001e+23 = 0x44b52d02 c7e14af7:
g_fmt gives "1.0000000000000001e+23"
dtoa returns sign = 0, decpt = 24, 17 digits:
10000000000000001
nextafter(d,-Inf) = 9.9999999999999975e+22 = 0x44b52d02 c7e14af5:
nextafter(d,-Infinity) = 9.9999999999999975e+22 = 0x44b52d02 c7e14af5:
g_fmt gives "9.999999999999997e+22"
dtoa returns sign = 0, decpt = 23, 16 digits:
9999999999999997
Input: 1e310
errno strtod: Result too large
Output: d =
Infinity = 0x7ff00000 0, se =
g_fmt gives "Infinity"
@ -344,7 +342,7 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = -276, 16 digits:
9025971879324148
nextafter(d,+Inf) = 9.0259718793241499e-277 = 0x6a00000 1:
nextafter(d,+Infinity) = 9.0259718793241499e-277 = 0x6a00000 1:
g_fmt gives "9.02597187932415e-277"
dtoa returns sign = 0, decpt = -276, 15 digits:
902597187932415
@ -355,7 +353,7 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = -276, 16 digits:
9025971879324148
nextafter(d,+Inf) = 9.0259718793241499e-277 = 0x6a00000 1:
nextafter(d,+Infinity) = 9.0259718793241499e-277 = 0x6a00000 1:
g_fmt gives "9.02597187932415e-277"
dtoa returns sign = 0, decpt = -276, 15 digits:
902597187932415
@ -366,7 +364,7 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = -276, 16 digits:
9025971879324148
nextafter(d,+Inf) = 9.0259718793241499e-277 = 0x6a00000 1:
nextafter(d,+Infinity) = 9.0259718793241499e-277 = 0x6a00000 1:
g_fmt gives "9.02597187932415e-277"
dtoa returns sign = 0, decpt = -276, 15 digits:
902597187932415
@ -377,7 +375,7 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = -307, 17 digits:
22250738585072014
nextafter(d,+Inf) = 2.2250738585072019e-308 = 0x100000 1:
nextafter(d,+Infinity) = 2.2250738585072019e-308 = 0x100000 1:
g_fmt gives "2.225073858507202e-308"
dtoa returns sign = 0, decpt = -307, 16 digits:
2225073858507202
@ -388,7 +386,7 @@ Output: d =
dtoa(mode = 0, ndigits = 17):
dtoa returns sign = 0, decpt = -307, 17 digits:
22250738585072014
nextafter(d,+Inf) = 2.2250738585072019e-308 = 0x100000 1:
nextafter(d,+Infinity) = 2.2250738585072019e-308 = 0x100000 1:
g_fmt gives "2.225073858507202e-308"
dtoa returns sign = 0, decpt = -307, 16 digits:
2225073858507202
@ -399,11 +397,11 @@ Output: d =
dtoa(mode = 2, ndigits = 6):
dtoa returns sign = 0, decpt = 1, 3 digits:
123
nextafter(d,+Inf) = 1.2300000000000002 = 0x3ff3ae14 7ae147af:
nextafter(d,+Infinity) = 1.2300000000000002 = 0x3ff3ae14 7ae147af:
g_fmt gives "1.2300000000000002"
dtoa returns sign = 0, decpt = 1, 3 digits:
123
nextafter(d,-Inf) = 1.2299999999999998 = 0x3ff3ae14 7ae147ad:
nextafter(d,-Infinity) = 1.2299999999999998 = 0x3ff3ae14 7ae147ad:
g_fmt gives "1.2299999999999998"
dtoa returns sign = 0, decpt = 1, 3 digits:
123
@ -414,11 +412,11 @@ Output: d =
dtoa(mode = 4, ndigits = 6):
dtoa returns sign = 0, decpt = 1, 3 digits:
123
nextafter(d,+Inf) = 1.2300000000000002 = 0x3ff3ae14 7ae147af:
nextafter(d,+Infinity) = 1.2300000000000002 = 0x3ff3ae14 7ae147af:
g_fmt gives "1.2300000000000002"
dtoa returns sign = 0, decpt = 1, 3 digits:
123
nextafter(d,-Inf) = 1.2299999999999998 = 0x3ff3ae14 7ae147ad:
nextafter(d,-Infinity) = 1.2299999999999998 = 0x3ff3ae14 7ae147ad:
g_fmt gives "1.2299999999999998"
dtoa returns sign = 0, decpt = 1, 3 digits:
123
@ -429,11 +427,11 @@ Output: d =
dtoa(mode = 2, ndigits = 6):
dtoa returns sign = 0, decpt = 21, 3 digits:
123
nextafter(d,+Inf) = 1.2300000000000002e+20 = 0x441aabdf 2145b431:
nextafter(d,+Infinity) = 1.2300000000000002e+20 = 0x441aabdf 2145b431:
g_fmt gives "123000000000000020000"
dtoa returns sign = 0, decpt = 21, 3 digits:
123
nextafter(d,-Inf) = 1.2299999999999998e+20 = 0x441aabdf 2145b42f:
nextafter(d,-Infinity) = 1.2299999999999998e+20 = 0x441aabdf 2145b42f:
g_fmt gives "122999999999999980000"
dtoa returns sign = 0, decpt = 21, 3 digits:
123
@ -444,11 +442,11 @@ Output: d =
dtoa(mode = 4, ndigits = 6):
dtoa returns sign = 0, decpt = 21, 3 digits:
123
nextafter(d,+Inf) = 1.2300000000000002e+20 = 0x441aabdf 2145b431:
nextafter(d,+Infinity) = 1.2300000000000002e+20 = 0x441aabdf 2145b431:
g_fmt gives "123000000000000020000"
dtoa returns sign = 0, decpt = 21, 3 digits:
123
nextafter(d,-Inf) = 1.2299999999999998e+20 = 0x441aabdf 2145b42f:
nextafter(d,-Infinity) = 1.2299999999999998e+20 = 0x441aabdf 2145b42f:
g_fmt gives "122999999999999980000"
dtoa returns sign = 0, decpt = 21, 3 digits:
123
@ -459,11 +457,11 @@ Output: d =
dtoa(mode = 2, ndigits = 6):
dtoa returns sign = 0, decpt = -19, 3 digits:
123
nextafter(d,+Inf) = 1.2300000000000002e-20 = 0x3bcd0ae4 cf767532:
nextafter(d,+Infinity) = 1.2300000000000002e-20 = 0x3bcd0ae4 cf767532:
g_fmt gives "1.2300000000000002e-20"
dtoa returns sign = 0, decpt = -19, 3 digits:
123
nextafter(d,-Inf) = 1.2299999999999999e-20 = 0x3bcd0ae4 cf767530:
nextafter(d,-Infinity) = 1.2299999999999999e-20 = 0x3bcd0ae4 cf767530:
g_fmt gives "1.2299999999999999e-20"
dtoa returns sign = 0, decpt = -19, 3 digits:
123
@ -474,11 +472,11 @@ Output: d =
dtoa(mode = 4, ndigits = 6):
dtoa returns sign = 0, decpt = -19, 3 digits:
123
nextafter(d,+Inf) = 1.2300000000000002e-20 = 0x3bcd0ae4 cf767532:
nextafter(d,+Infinity) = 1.2300000000000002e-20 = 0x3bcd0ae4 cf767532:
g_fmt gives "1.2300000000000002e-20"
dtoa returns sign = 0, decpt = -19, 3 digits:
123
nextafter(d,-Inf) = 1.2299999999999999e-20 = 0x3bcd0ae4 cf767530:
nextafter(d,-Infinity) = 1.2299999999999999e-20 = 0x3bcd0ae4 cf767530:
g_fmt gives "1.2299999999999999e-20"
dtoa returns sign = 0, decpt = -19, 3 digits:
123
@ -489,11 +487,11 @@ Output: d =
dtoa(mode = 2, ndigits = 6):
dtoa returns sign = 0, decpt = 1, 6 digits:
123457
nextafter(d,+Inf) = 1.2345678900000001 = 0x3ff3c0ca 4283de1c:
nextafter(d,+Infinity) = 1.2345678900000001 = 0x3ff3c0ca 4283de1c:
g_fmt gives "1.2345678900000001"
dtoa returns sign = 0, decpt = 1, 6 digits:
123457
nextafter(d,-Inf) = 1.2345678899999997 = 0x3ff3c0ca 4283de1a:
nextafter(d,-Infinity) = 1.2345678899999997 = 0x3ff3c0ca 4283de1a:
g_fmt gives "1.2345678899999997"
dtoa returns sign = 0, decpt = 1, 6 digits:
123457
@ -504,11 +502,11 @@ Output: d =
dtoa(mode = 4, ndigits = 6):
dtoa returns sign = 0, decpt = 1, 6 digits:
123457
nextafter(d,+Inf) = 1.2345678900000001 = 0x3ff3c0ca 4283de1c:
nextafter(d,+Infinity) = 1.2345678900000001 = 0x3ff3c0ca 4283de1c:
g_fmt gives "1.2345678900000001"
dtoa returns sign = 0, decpt = 1, 6 digits:
123457
nextafter(d,-Inf) = 1.2345678899999997 = 0x3ff3c0ca 4283de1a:
nextafter(d,-Infinity) = 1.2345678899999997 = 0x3ff3c0ca 4283de1a:
g_fmt gives "1.2345678899999997"
dtoa returns sign = 0, decpt = 1, 6 digits:
123457
@ -519,11 +517,11 @@ Output: d =
dtoa(mode = 2, ndigits = 6):
dtoa returns sign = 0, decpt = 21, 6 digits:
123457
nextafter(d,+Inf) = 1.2345658900000001e+20 = 0x441ac537 a660b998:
nextafter(d,+Infinity) = 1.2345658900000001e+20 = 0x441ac537 a660b998:
g_fmt gives "123456589000000010000"
dtoa returns sign = 0, decpt = 21, 6 digits:
123457
nextafter(d,-Inf) = 1.2345658899999998e+20 = 0x441ac537 a660b996:
nextafter(d,-Infinity) = 1.2345658899999998e+20 = 0x441ac537 a660b996:
g_fmt gives "123456588999999980000"
dtoa returns sign = 0, decpt = 21, 6 digits:
123457
@ -534,11 +532,11 @@ Output: d =
dtoa(mode = 4, ndigits = 6):
dtoa returns sign = 0, decpt = 21, 6 digits:
123457
nextafter(d,+Inf) = 1.2345658900000001e+20 = 0x441ac537 a660b998:
nextafter(d,+Infinity) = 1.2345658900000001e+20 = 0x441ac537 a660b998:
g_fmt gives "123456589000000010000"
dtoa returns sign = 0, decpt = 21, 6 digits:
123457
nextafter(d,-Inf) = 1.2345658899999998e+20 = 0x441ac537 a660b996:
nextafter(d,-Infinity) = 1.2345658899999998e+20 = 0x441ac537 a660b996:
g_fmt gives "123456588999999980000"
dtoa returns sign = 0, decpt = 21, 6 digits:
123457
@ -549,11 +547,11 @@ Output: d =
dtoa(mode = 2, ndigits = 6):
dtoa returns sign = 0, decpt = -19, 6 digits:
123457
nextafter(d,+Inf) = 1.2345678900000001e-20 = 0x3bcd2681 471e7adb:
nextafter(d,+Infinity) = 1.2345678900000001e-20 = 0x3bcd2681 471e7adb:
g_fmt gives "1.2345678900000001e-20"
dtoa returns sign = 0, decpt = -19, 6 digits:
123457
nextafter(d,-Inf) = 1.2345678899999998e-20 = 0x3bcd2681 471e7ad9:
nextafter(d,-Infinity) = 1.2345678899999998e-20 = 0x3bcd2681 471e7ad9:
g_fmt gives "1.2345678899999998e-20"
dtoa returns sign = 0, decpt = -19, 6 digits:
123457
@ -564,11 +562,11 @@ Output: d =
dtoa(mode = 4, ndigits = 6):
dtoa returns sign = 0, decpt = -19, 6 digits:
123457
nextafter(d,+Inf) = 1.2345678900000001e-20 = 0x3bcd2681 471e7adb:
nextafter(d,+Infinity) = 1.2345678900000001e-20 = 0x3bcd2681 471e7adb:
g_fmt gives "1.2345678900000001e-20"
dtoa returns sign = 0, decpt = -19, 6 digits:
123457
nextafter(d,-Inf) = 1.2345678899999998e-20 = 0x3bcd2681 471e7ad9:
nextafter(d,-Infinity) = 1.2345678899999998e-20 = 0x3bcd2681 471e7ad9:
g_fmt gives "1.2345678899999998e-20"
dtoa returns sign = 0, decpt = -19, 6 digits:
123457
@ -579,7 +577,7 @@ Output: d =
dtoa(mode = 2, ndigits = 6):
dtoa returns sign = 0, decpt = 7, 6 digits:
123456
nextafter(d,+Inf) = 1234565.0000000002 = 0x4132d685 1:
nextafter(d,+Infinity) = 1234565.0000000002 = 0x4132d685 1:
g_fmt gives "1234565.0000000002"
dtoa returns sign = 0, decpt = 7, 6 digits:
123457
@ -590,7 +588,7 @@ Output: d =
dtoa(mode = 4, ndigits = 6):
dtoa returns sign = 0, decpt = 7, 6 digits:
123456
nextafter(d,+Inf) = 1234565.0000000002 = 0x4132d685 1:
nextafter(d,+Infinity) = 1234565.0000000002 = 0x4132d685 1:
g_fmt gives "1234565.0000000002"
dtoa returns sign = 0, decpt = 7, 6 digits:
123457
@ -601,11 +599,11 @@ Output: d =
dtoa(mode = 2, ndigits = 6):
dtoa returns sign = 0, decpt = 1, 6 digits:
123456
nextafter(d,+Inf) = 1.2345650000000001 = 0x3ff3c0c7 3abc9471:
nextafter(d,+Infinity) = 1.2345650000000001 = 0x3ff3c0c7 3abc9471:
g_fmt gives "1.2345650000000001"
dtoa returns sign = 0, decpt = 1, 6 digits:
123457
nextafter(d,-Inf) = 1.2345649999999997 = 0x3ff3c0c7 3abc946f:
nextafter(d,-Infinity) = 1.2345649999999997 = 0x3ff3c0c7 3abc946f:
g_fmt gives "1.2345649999999997"
dtoa returns sign = 0, decpt = 1, 6 digits:
123456
@ -616,11 +614,11 @@ Output: d =
dtoa(mode = 4, ndigits = 6):
dtoa returns sign = 0, decpt = 1, 6 digits:
123456
nextafter(d,+Inf) = 1.2345650000000001 = 0x3ff3c0c7 3abc9471:
nextafter(d,+Infinity) = 1.2345650000000001 = 0x3ff3c0c7 3abc9471:
g_fmt gives "1.2345650000000001"
dtoa returns sign = 0, decpt = 1, 6 digits:
123457
nextafter(d,-Inf) = 1.2345649999999997 = 0x3ff3c0c7 3abc946f:
nextafter(d,-Infinity) = 1.2345649999999997 = 0x3ff3c0c7 3abc946f:
g_fmt gives "1.2345649999999997"
dtoa returns sign = 0, decpt = 1, 6 digits:
123456
@ -631,11 +629,11 @@ Output: d =
dtoa(mode = 2, ndigits = 6):
dtoa returns sign = 0, decpt = 21, 6 digits:
123456
nextafter(d,+Inf) = 1.2345650000000002e+20 = 0x441ac536 6299040e:
nextafter(d,+Infinity) = 1.2345650000000002e+20 = 0x441ac536 6299040e:
g_fmt gives "123456500000000020000"
dtoa returns sign = 0, decpt = 21, 6 digits:
123457
nextafter(d,-Inf) = 1.2345649999999998e+20 = 0x441ac536 6299040c:
nextafter(d,-Infinity) = 1.2345649999999998e+20 = 0x441ac536 6299040c:
g_fmt gives "123456499999999980000"
dtoa returns sign = 0, decpt = 21, 6 digits:
123456
@ -646,11 +644,11 @@ Output: d =
dtoa(mode = 4, ndigits = 6):
dtoa returns sign = 0, decpt = 21, 6 digits:
123456
nextafter(d,+Inf) = 1.2345650000000002e+20 = 0x441ac536 6299040e:
nextafter(d,+Infinity) = 1.2345650000000002e+20 = 0x441ac536 6299040e:
g_fmt gives "123456500000000020000"
dtoa returns sign = 0, decpt = 21, 6 digits:
123457
nextafter(d,-Inf) = 1.2345649999999998e+20 = 0x441ac536 6299040c:
nextafter(d,-Infinity) = 1.2345649999999998e+20 = 0x441ac536 6299040c:
g_fmt gives "123456499999999980000"
dtoa returns sign = 0, decpt = 21, 6 digits:
123456
@ -661,11 +659,11 @@ Output: d =
dtoa(mode = 2, ndigits = 6):
dtoa returns sign = 0, decpt = -19, 6 digits:
123456
nextafter(d,+Inf) = 1.2345650000000001e-20 = 0x3bcd267c ce45a940:
nextafter(d,+Infinity) = 1.2345650000000001e-20 = 0x3bcd267c ce45a940:
g_fmt gives "1.2345650000000001e-20"
dtoa returns sign = 0, decpt = -19, 6 digits:
123457
nextafter(d,-Inf) = 1.2345649999999998e-20 = 0x3bcd267c ce45a93e:
nextafter(d,-Infinity) = 1.2345649999999998e-20 = 0x3bcd267c ce45a93e:
g_fmt gives "1.2345649999999998e-20"
dtoa returns sign = 0, decpt = -19, 6 digits:
123456
@ -676,11 +674,11 @@ Output: d =
dtoa(mode = 4, ndigits = 6):
dtoa returns sign = 0, decpt = -19, 6 digits:
123456
nextafter(d,+Inf) = 1.2345650000000001e-20 = 0x3bcd267c ce45a940:
nextafter(d,+Infinity) = 1.2345650000000001e-20 = 0x3bcd267c ce45a940:
g_fmt gives "1.2345650000000001e-20"
dtoa returns sign = 0, decpt = -19, 6 digits:
123457
nextafter(d,-Inf) = 1.2345649999999998e-20 = 0x3bcd267c ce45a93e:
nextafter(d,-Infinity) = 1.2345649999999998e-20 = 0x3bcd267c ce45a93e:
g_fmt gives "1.2345649999999998e-20"
dtoa returns sign = 0, decpt = -19, 6 digits:
123456

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
/* Test program for g_ffmt, strtof, strtoIf, strtopf, and strtorf.
*
@ -67,12 +61,11 @@ THIS SOFTWARE.
int
main(Void)
{
ULong *L;
char *s, *se, *se1;
int dItry, i, i1, ndig = 0, r = 1;
float f, f1, fI[2];
float f1, fI[2];
union { float f; ULong L[1]; } u;
L = (ULong*)&f;
while( (s = fgets(ibuf, sizeof(ibuf), stdin)) !=0) {
while(*s <= ' ')
if (!*s++)
@ -90,32 +83,33 @@ main(Void)
}
break; /* nan? */
case '#':
sscanf(s+1, "%lx", &L[0]);
/* sscanf(s+1, "%lx", &u.L[0]); */
u.L[0] = (ULong)strtoul(s+1, &se, 16);
printf("\nInput: %s", ibuf);
printf(" --> f = #%lx\n", L[0]);
printf(" --> f = #%lx\n", U u.L[0]);
goto fmt_test;
}
dItry = 1;
printf("\nInput: %s", ibuf);
i = strtorf(ibuf, &se, r, &f);
i = strtorf(ibuf, &se, r, &u.f);
if (r == 1) {
if (f != (i1 = strtopf(ibuf, &se1, &f1), f1)
if (u.f != (i1 = strtopf(ibuf, &se1, &f1), f1)
|| se != se1 || i != i1) {
printf("***strtopf and strtorf disagree!!\n");
if (f != f1)
if (u.f != f1)
printf("\tf1 = %g\n", (double)f1);
if (i != i1)
printf("\ti = %d but i1 = %d\n", i, i1);
if (se != se1)
printf("se - se1 = %d\n", (int)(se-se1));
}
if (f != strtof(ibuf, &se1) || se != se1)
if (u.f != strtof(ibuf, &se1) || se != se1)
printf("***strtof and strtorf disagree!\n");
}
printf("strtof consumes %d bytes and returns %.8g = #%lx\n",
(int)(se-ibuf), f, U *(ULong*)&f);
(int)(se-ibuf), u.f, U u.L[0]);
fmt_test:
se = g_ffmt(obuf, &f, ndig, sizeof(obuf));
se = g_ffmt(obuf, &u.f, ndig, sizeof(obuf));
printf("g_ffmt(%d) gives %d bytes: \"%s\"\n\n",
ndig, (int)(se-obuf), se ? obuf : "<null>");
if (!dItry)
@ -123,7 +117,7 @@ main(Void)
printf("strtoIf returns %d,", strtoIf(ibuf, &se, fI, &fI[1]));
printf(" consuming %d bytes.\n", (int)(se-ibuf));
if (fI[0] == fI[1]) {
if (fI[0] == f)
if (fI[0] == u.f)
printf("fI[0] == fI[1] == strtof\n");
else
printf("fI[0] == fI[1] = #%lx = %.8g\n",
@ -133,9 +127,9 @@ main(Void)
printf("fI[0] = #%lx = %.8g\nfI[1] = #%lx = %.8g\n",
U *(ULong*)fI, fI[0],
U *(ULong*)&fI[1], fI[1]);
if (fI[0] == f)
if (fI[0] == u.f)
printf("fI[0] == strtof\n");
else if (fI[1] == f)
else if (fI[1] == u.f)
printf("fI[1] == strtof\n");
else
printf("**** Both differ from strtof ****\n");

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include <stdio.h>
#include <stdlib.h>

View file

@ -27,6 +27,8 @@
CC = cc
CFLAGS = -g -I..
A = ../gdtoa.a
L = -lm
INFFIX = | sed 's/[Ii][Nn][Ff][intyINTY]*/Infinity/g'
.c.o:
$(CC) -c $(CFLAGS) $*.c
@ -35,7 +37,7 @@ all: dt dItest ddtest dtest ftest Qtest xLtest xtest ddtestsi dItestsi tests
dt = dt.o $A
dt: $(dt)
$(CC) -o dt $(dt)
$(CC) -o dt $(dt) $L
dItest = dItest.o getround.o $A
dItest: $(dItest)
@ -43,11 +45,11 @@ dItest: $(dItest)
ddtest = ddtest.o getround.o $A
ddtest: $(ddtest)
$(CC) -o ddtest $(ddtest)
$(CC) -o ddtest $(ddtest) $L
dtest = dtest.o getround.o $A
dtest: $(dtest)
$(CC) -o dtest $(dtest)
$(CC) -o dtest $(dtest) $L
ftest = ftest.o getround.o $A
ftest: $(ftest)
@ -77,7 +79,7 @@ strtoIdSI.o: strtoIdSI.c ../strtoId.c
ddtestsi = ddtest.o strtopddSI.o strtorddSI.o strtoIddSI.o getround.o $A
ddtestsi: $(ddtestsi)
$(CC) -o ddtestsi $(ddtestsi)
$(CC) -o ddtestsi $(ddtestsi) $L
dItestsi = dItest.o strtodISI.o strtoIdSI.o getround.o $A
dItestsi: $(dItestsi)
@ -85,7 +87,18 @@ dItestsi: $(dItestsi)
strtodt = strtodt.o $A
strtodt: $(strtodt)
$(CC) -o strtodt $(strtodt)
$(CC) -o strtodt $(strtodt) $L
## On Intel (and Intel-like) systems using extended-precision registers
## for double-precision (C type double) computations that sometimes suffer
## double rounding errors, the test below involving strtodt generally shows
## five lines of unexpected results. Variant strtodtnrp uses ../strtodrnp.c
## (which does all computations in integer arithmetic) and should show no
## unexpected results.
strtodtnrp = strtodt.o ../strtodnrp.c $A
strtodtnrp: $(strtodtnrp)
$(CC) -o strtodtnrp $(strtodtnrp)
# xQtest generates cp commands that depend on sizeof(long double).
# See the source for details. If you know better, create Q.out,
@ -102,21 +115,23 @@ Q.out x.out xL.out:
## The rmdir below will fail if any test results differ.
tests: Q.out x.out xL.out dt dItest ddtest dtest ftest Qtest xLtest xtest ddtestsi dItestsi strtodt
tests: Q.out x.out xL.out dt dItest ddtest dtest ftest Qtest xLtest xtest ddtestsi dItestsi strtodt strtodtnrp
mkdir bad
cat testnos testnos1 | ./dt >zap 2>&1
cat testnos testnos1 | ./dt $(INFFIX) >zap 2>&1
cmp dtst.out zap || mv zap bad/dtst.out
./dItest <testnos >zap 2>&1
./dItest <testnos $(INFFIX) >zap 2>&1
cmp dI.out zap || mv zap bad/dI.out
./dItestsi <testnos >zap 2>&1
./dItestsi <testnos $(INFFIX) >zap 2>&1
cmp dIsi.out zap || mv zap bad/dIsi.out
./ddtestsi <testnos >zap 2>&1
./ddtestsi <testnos $(INFFIX) >zap 2>&1
cmp ddsi.out zap || mv zap bad/ddsi.out
for i in dd d f x xL Q; do cat testnos rtestnos | \
./"$$i"test >zap 2>&1;\
./"$$i"test $(INFFIX) >zap 2>&1;\
cmp $$i.out zap || mv zap bad/$$i.out; done
./strtodt testnos3 >bad/strtodt.out && rm bad/strtodt.out || \
cat bad/strtodt.out
./strtodtnrp testnos3 >bad/strtodtnrp.out && rm bad/strtodtnrp.out || \
cat bad/strtodtnrp.out
rmdir bad
touch tests
@ -131,5 +146,5 @@ xsum.out: xsum0.out $(xs0)
cmp xsum0.out xsum1.out && mv xsum1.out xsum.out || diff xsum[01].out
clean:
rm -f *.[ao] dt *test *testsi strtodt xsum.out xsum1.out tests zap x.out xL.out Q.out
rm -f *.[ao] dt *test *testsi strtodt strtodtnrp xsum.out xsum1.out tests zap x.out xL.out Q.out
rm -rf bad

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
/* Test strtod. */
@ -44,6 +38,7 @@ THIS SOFTWARE.
* Complain about errors.
*/
#include "gdtoa.h" /* for ULong */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@ -51,7 +46,7 @@ THIS SOFTWARE.
static int W0, W1;
typedef union {
double d;
long L[2];
ULong L[2];
} U;
static int
@ -59,8 +54,7 @@ process(char *fname, FILE *f)
{
U a, b;
char buf[2048];
double d;
char *s;
char *s, *s1, *se;
int line, n;
line = n = 0;
@ -75,7 +69,9 @@ process(char *fname, FILE *f)
continue;
while(*s > ' ')
s++;
if (sscanf(s,"\t%lx\t%lx", &a.L[0], &a.L[1]) != 2) {
/* if (sscanf(s,"\t%lx\t%lx", &a.L[0], &a.L[1]) != 2) */
if ((a.L[0] = (ULong)strtoul(s, &s1,16), s1 <= s)
|| (a.L[1] = (ULong)strtoul(s1,&se,16), se <= s1)) {
printf("Badly formatted line %d of %s\n",
line, fname);
n++;

View file

@ -7,7 +7,7 @@ g_xfmt(0) gives 4 bytes: "1.23"
strtoIx returns 33, consuming 4 bytes.
fI[0] = #3fff 9d70 a3d7 a3d 70a3
fI[1] = #3fff 9d70 a3d7 a3d 70a3
fI[1] = #3fff 9d70 a3d7 a3d 70a4
fI[1] == strtox
@ -29,7 +29,7 @@ g_xfmt(0) gives 8 bytes: "1.23e-20"
strtoIx returns 17, consuming 8 bytes.
fI[0] = #3fbc e857 267b b3a9 84f2
fI[1] = #3fbc e857 267b b3a9 84f2
fI[1] = #3fbc e857 267b b3a9 84f3
fI[0] == strtox
@ -41,7 +41,7 @@ g_xfmt(0) gives 10 bytes: "1.23456789"
strtoIx returns 33, consuming 10 bytes.
fI[0] = #3fff 9e06 5214 1ef0 dbf5
fI[1] = #3fff 9e06 5214 1ef0 dbf5
fI[1] = #3fff 9e06 5214 1ef0 dbf6
fI[1] == strtox
@ -63,7 +63,7 @@ g_xfmt(0) gives 8 bytes: "1.23e+30"
strtoIx returns 17, consuming 8 bytes.
fI[0] = #4062 f865 8274 7dbc 824a
fI[1] = #4062 f865 8274 7dbc 824a
fI[1] = #4062 f865 8274 7dbc 824b
fI[0] == strtox
@ -75,7 +75,7 @@ g_xfmt(0) gives 8 bytes: "1.23e-30"
strtoIx returns 17, consuming 8 bytes.
fI[0] = #3f9b c794 337a 8085 54eb
fI[1] = #3f9b c794 337a 8085 54eb
fI[1] = #3f9b c794 337a 8085 54ec
fI[0] == strtox
@ -87,7 +87,7 @@ g_xfmt(0) gives 14 bytes: "1.23456789e-20"
strtoIx returns 17, consuming 14 bytes.
fI[0] = #3fbc e934 a38 f3d6 d352
fI[1] = #3fbc e934 a38 f3d6 d352
fI[1] = #3fbc e934 a38 f3d6 d353
fI[0] == strtox
@ -99,7 +99,7 @@ g_xfmt(0) gives 14 bytes: "1.23456789e-30"
strtoIx returns 17, consuming 14 bytes.
fI[0] = #3f9b c851 f19d decc a8fc
fI[1] = #3f9b c851 f19d decc a8fc
fI[1] = #3f9b c851 f19d decc a8fd
fI[0] == strtox
@ -111,7 +111,7 @@ g_xfmt(0) gives 20 bytes: "1.234567890123456789"
strtoIx returns 17, consuming 20 bytes.
fI[0] = #3fff 9e06 5214 62cf db8d
fI[1] = #3fff 9e06 5214 62cf db8d
fI[1] = #3fff 9e06 5214 62cf db8e
fI[0] == strtox
@ -123,7 +123,7 @@ g_xfmt(0) gives 20 bytes: "1.234567890123456789"
strtoIx returns 17, consuming 40 bytes.
fI[0] = #3fff 9e06 5214 62cf db8d
fI[1] = #3fff 9e06 5214 62cf db8d
fI[1] = #3fff 9e06 5214 62cf db8e
fI[0] == strtox
@ -135,7 +135,7 @@ g_xfmt(0) gives 9 bytes: "1.23e+306"
strtoIx returns 17, consuming 8 bytes.
fI[0] = #43f7 e033 b668 e30f a6d5
fI[1] = #43f7 e033 b668 e30f a6d5
fI[1] = #43f7 e033 b668 e30f a6d6
fI[0] == strtox
@ -147,7 +147,7 @@ g_xfmt(0) gives 9 bytes: "1.23e-306"
strtoIx returns 33, consuming 9 bytes.
fI[0] = #3c06 dd1d c2ed 1cb7 3f24
fI[1] = #3c06 dd1d c2ed 1cb7 3f24
fI[1] = #3c06 dd1d c2ed 1cb7 3f25
fI[1] == strtox
@ -159,7 +159,7 @@ g_xfmt(0) gives 9 bytes: "1.23e-320"
strtoIx returns 33, consuming 9 bytes.
fI[0] = #3bd8 9b98 c371 844c 3f19
fI[1] = #3bd8 9b98 c371 844c 3f19
fI[1] = #3bd8 9b98 c371 844c 3f1a
fI[1] == strtox
@ -171,7 +171,7 @@ g_xfmt(0) gives 8 bytes: "1.23e-20"
strtoIx returns 17, consuming 8 bytes.
fI[0] = #3fbc e857 267b b3a9 84f2
fI[1] = #3fbc e857 267b b3a9 84f2
fI[1] = #3fbc e857 267b b3a9 84f3
fI[0] == strtox
@ -183,7 +183,7 @@ g_xfmt(0) gives 15 bytes: "1.23456789e+307"
strtoIx returns 17, consuming 14 bytes.
fI[0] = #43fb 8ca5 8a5e d766 de75
fI[1] = #43fb 8ca5 8a5e d766 de75
fI[1] = #43fb 8ca5 8a5e d766 de76
fI[0] == strtox
@ -195,7 +195,7 @@ g_xfmt(0) gives 15 bytes: "1.23456589e-307"
strtoIx returns 17, consuming 15 bytes.
fI[0] = #3c03 b18c b5dc c22f d369
fI[1] = #3c03 b18c b5dc c22f d369
fI[1] = #3c03 b18c b5dc c22f d36a
fI[0] == strtox
@ -207,7 +207,7 @@ g_xfmt(0) gives 20 bytes: "1.234567890123456789"
strtoIx returns 17, consuming 20 bytes.
fI[0] = #3fff 9e06 5214 62cf db8d
fI[1] = #3fff 9e06 5214 62cf db8d
fI[1] = #3fff 9e06 5214 62cf db8e
fI[0] == strtox
@ -219,7 +219,7 @@ g_xfmt(0) gives 25 bytes: "1.234567890123456789e+301"
strtoIx returns 33, consuming 24 bytes.
fI[0] = #43e7 937a 8baf ab20 980b
fI[1] = #43e7 937a 8baf ab20 980b
fI[1] = #43e7 937a 8baf ab20 980c
fI[1] == strtox
@ -231,7 +231,7 @@ g_xfmt(0) gives 25 bytes: "1.234567890123456789e-301"
strtoIx returns 33, consuming 25 bytes.
fI[0] = #3c17 a953 271a 5d06 9ad8
fI[1] = #3c17 a953 271a 5d06 9ad8
fI[1] = #3c17 a953 271a 5d06 9ad9
fI[1] == strtox
@ -243,7 +243,7 @@ g_xfmt(0) gives 25 bytes: "1.234567890123456789e-321"
strtoIx returns 33, consuming 25 bytes.
fI[0] = #3bd4 f9e1 1b4c ea6d cce8
fI[1] = #3bd4 f9e1 1b4c ea6d cce8
fI[1] = #3bd4 f9e1 1b4c ea6d cce9
fI[1] == strtox
@ -265,7 +265,7 @@ g_xfmt(0) gives 6 bytes: "1e+310"
strtoIx returns 33, consuming 5 bytes.
fI[0] = #4404 de81 e40a 34b cf4f
fI[1] = #4404 de81 e40a 34b cf4f
fI[1] = #4404 de81 e40a 34b cf50
fI[1] == strtox
@ -277,7 +277,7 @@ g_xfmt(0) gives 23 bytes: "9.0259718793241475e-277"
strtoIx returns 33, consuming 23 bytes.
fI[0] = #3c69 ffff ffff ffff fcf6
fI[1] = #3c69 ffff ffff ffff fcf6
fI[1] = #3c69 ffff ffff ffff fcf7
fI[1] == strtox
@ -289,7 +289,7 @@ g_xfmt(0) gives 26 bytes: "9.0259718793241478803e-277"
strtoIx returns 17, consuming 37 bytes.
fI[0] = #3c6a 8000 0 0 0
fI[1] = #3c6a 8000 0 0 0
fI[1] = #3c6a 8000 0 0 1
fI[0] == strtox
@ -301,7 +301,7 @@ g_xfmt(0) gives 26 bytes: "9.0259718793241478803e-277"
strtoIx returns 33, consuming 37 bytes.
fI[0] = #3c69 ffff ffff ffff ffff
fI[1] = #3c6a 8000 0 ffff ffff
fI[1] = #3c6a 8000 0 0 0
fI[1] == strtox
@ -313,7 +313,7 @@ g_xfmt(0) gives 23 bytes: "2.2250738585072014e-308"
strtoIx returns 17, consuming 23 bytes.
fI[0] = #3c01 8000 0 0 46
fI[1] = #3c01 8000 0 0 46
fI[1] = #3c01 8000 0 0 47
fI[0] == strtox
@ -325,7 +325,7 @@ g_xfmt(0) gives 23 bytes: "2.2250738585072013e-308"
strtoIx returns 17, consuming 23 bytes.
fI[0] = #3c00 ffff ffff ffff fd4f
fI[1] = #3c00 ffff ffff ffff fd4f
fI[1] = #3c00 ffff ffff ffff fd50
fI[0] == strtox
Rounding mode for strtor... changed from 1 (nearest) to 0 (toward zero)
@ -338,7 +338,7 @@ g_xfmt(0) gives 21 bytes: "1.0999999999999999999"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff 8ccc cccc cccc cccc
fI[1] = #3fff 8ccc cccc cccc cccc
fI[1] = #3fff 8ccc cccc cccc cccd
fI[0] == strtox
@ -350,7 +350,7 @@ g_xfmt(0) gives 22 bytes: "-1.0999999999999999999"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff 8ccc cccc cccc cccd
fI[1] = #bfff 8ccc cccc cccc cccd
fI[1] = #bfff 8ccc cccc cccc cccc
fI[1] == strtox
@ -362,7 +362,7 @@ g_xfmt(0) gives 21 bytes: "1.1999999999999999999"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff 9999 9999 9999 9999
fI[1] = #3fff 9999 9999 9999 9999
fI[1] = #3fff 9999 9999 9999 999a
fI[0] == strtox
@ -374,7 +374,7 @@ g_xfmt(0) gives 22 bytes: "-1.1999999999999999999"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff 9999 9999 9999 999a
fI[1] = #bfff 9999 9999 9999 999a
fI[1] = #bfff 9999 9999 9999 9999
fI[1] == strtox
@ -386,7 +386,7 @@ g_xfmt(0) gives 3 bytes: "1.3"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff a666 6666 6666 6666
fI[1] = #3fff a666 6666 6666 6666
fI[1] = #3fff a666 6666 6666 6667
fI[0] == strtox
@ -398,7 +398,7 @@ g_xfmt(0) gives 4 bytes: "-1.3"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff a666 6666 6666 6667
fI[1] = #bfff a666 6666 6666 6667
fI[1] = #bfff a666 6666 6666 6666
fI[1] == strtox
@ -410,7 +410,7 @@ g_xfmt(0) gives 3 bytes: "1.4"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff b333 3333 3333 3333
fI[1] = #3fff b333 3333 3333 3333
fI[1] = #3fff b333 3333 3333 3334
fI[0] == strtox
@ -422,7 +422,7 @@ g_xfmt(0) gives 4 bytes: "-1.4"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff b333 3333 3333 3334
fI[1] = #bfff b333 3333 3333 3334
fI[1] = #bfff b333 3333 3333 3333
fI[1] == strtox
@ -454,7 +454,7 @@ g_xfmt(0) gives 21 bytes: "1.5999999999999999999"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff cccc cccc cccc cccc
fI[1] = #3fff cccc cccc cccc cccc
fI[1] = #3fff cccc cccc cccc cccd
fI[0] == strtox
@ -466,7 +466,7 @@ g_xfmt(0) gives 22 bytes: "-1.5999999999999999999"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff cccc cccc cccc cccd
fI[1] = #bfff cccc cccc cccc cccd
fI[1] = #bfff cccc cccc cccc cccc
fI[1] == strtox
@ -478,7 +478,7 @@ g_xfmt(0) gives 21 bytes: "1.6999999999999999999"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff d999 9999 9999 9999
fI[1] = #3fff d999 9999 9999 9999
fI[1] = #3fff d999 9999 9999 999a
fI[0] == strtox
@ -490,7 +490,7 @@ g_xfmt(0) gives 22 bytes: "-1.6999999999999999999"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff d999 9999 9999 999a
fI[1] = #bfff d999 9999 9999 999a
fI[1] = #bfff d999 9999 9999 9999
fI[1] == strtox
@ -502,7 +502,7 @@ g_xfmt(0) gives 3 bytes: "1.8"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff e666 6666 6666 6666
fI[1] = #3fff e666 6666 6666 6666
fI[1] = #3fff e666 6666 6666 6667
fI[0] == strtox
@ -514,7 +514,7 @@ g_xfmt(0) gives 4 bytes: "-1.8"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff e666 6666 6666 6667
fI[1] = #bfff e666 6666 6666 6667
fI[1] = #bfff e666 6666 6666 6666
fI[1] == strtox
@ -526,7 +526,7 @@ g_xfmt(0) gives 3 bytes: "1.9"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff f333 3333 3333 3333
fI[1] = #3fff f333 3333 3333 3333
fI[1] = #3fff f333 3333 3333 3334
fI[0] == strtox
@ -538,7 +538,7 @@ g_xfmt(0) gives 4 bytes: "-1.9"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff f333 3333 3333 3334
fI[1] = #bfff f333 3333 3333 3334
fI[1] = #bfff f333 3333 3333 3333
fI[1] == strtox
Rounding mode for strtor... changed from 0 (toward zero) to 1 (nearest)
@ -551,7 +551,7 @@ g_xfmt(0) gives 3 bytes: "1.1"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff 8ccc cccc cccc cccc
fI[1] = #3fff 8ccc cccc cccc cccc
fI[1] = #3fff 8ccc cccc cccc cccd
fI[1] == strtox
@ -563,7 +563,7 @@ g_xfmt(0) gives 4 bytes: "-1.1"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff 8ccc cccc cccc cccd
fI[1] = #bfff 8ccc cccc cccc cccd
fI[1] = #bfff 8ccc cccc cccc cccc
fI[0] == strtox
@ -575,7 +575,7 @@ g_xfmt(0) gives 3 bytes: "1.2"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff 9999 9999 9999 9999
fI[1] = #3fff 9999 9999 9999 9999
fI[1] = #3fff 9999 9999 9999 999a
fI[1] == strtox
@ -587,7 +587,7 @@ g_xfmt(0) gives 4 bytes: "-1.2"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff 9999 9999 9999 999a
fI[1] = #bfff 9999 9999 9999 999a
fI[1] = #bfff 9999 9999 9999 9999
fI[0] == strtox
@ -599,7 +599,7 @@ g_xfmt(0) gives 3 bytes: "1.3"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff a666 6666 6666 6666
fI[1] = #3fff a666 6666 6666 6666
fI[1] = #3fff a666 6666 6666 6667
fI[0] == strtox
@ -611,7 +611,7 @@ g_xfmt(0) gives 4 bytes: "-1.3"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff a666 6666 6666 6667
fI[1] = #bfff a666 6666 6666 6667
fI[1] = #bfff a666 6666 6666 6666
fI[1] == strtox
@ -623,7 +623,7 @@ g_xfmt(0) gives 3 bytes: "1.4"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff b333 3333 3333 3333
fI[1] = #3fff b333 3333 3333 3333
fI[1] = #3fff b333 3333 3333 3334
fI[0] == strtox
@ -635,7 +635,7 @@ g_xfmt(0) gives 4 bytes: "-1.4"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff b333 3333 3333 3334
fI[1] = #bfff b333 3333 3333 3334
fI[1] = #bfff b333 3333 3333 3333
fI[1] == strtox
@ -667,7 +667,7 @@ g_xfmt(0) gives 3 bytes: "1.6"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff cccc cccc cccc cccc
fI[1] = #3fff cccc cccc cccc cccc
fI[1] = #3fff cccc cccc cccc cccd
fI[1] == strtox
@ -679,7 +679,7 @@ g_xfmt(0) gives 4 bytes: "-1.6"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff cccc cccc cccc cccd
fI[1] = #bfff cccc cccc cccc cccd
fI[1] = #bfff cccc cccc cccc cccc
fI[0] == strtox
@ -691,7 +691,7 @@ g_xfmt(0) gives 3 bytes: "1.7"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff d999 9999 9999 9999
fI[1] = #3fff d999 9999 9999 9999
fI[1] = #3fff d999 9999 9999 999a
fI[1] == strtox
@ -703,7 +703,7 @@ g_xfmt(0) gives 4 bytes: "-1.7"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff d999 9999 9999 999a
fI[1] = #bfff d999 9999 9999 999a
fI[1] = #bfff d999 9999 9999 9999
fI[0] == strtox
@ -715,7 +715,7 @@ g_xfmt(0) gives 3 bytes: "1.8"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff e666 6666 6666 6666
fI[1] = #3fff e666 6666 6666 6666
fI[1] = #3fff e666 6666 6666 6667
fI[0] == strtox
@ -727,7 +727,7 @@ g_xfmt(0) gives 4 bytes: "-1.8"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff e666 6666 6666 6667
fI[1] = #bfff e666 6666 6666 6667
fI[1] = #bfff e666 6666 6666 6666
fI[1] == strtox
@ -739,7 +739,7 @@ g_xfmt(0) gives 3 bytes: "1.9"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff f333 3333 3333 3333
fI[1] = #3fff f333 3333 3333 3333
fI[1] = #3fff f333 3333 3333 3334
fI[0] == strtox
@ -751,7 +751,7 @@ g_xfmt(0) gives 4 bytes: "-1.9"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff f333 3333 3333 3334
fI[1] = #bfff f333 3333 3333 3334
fI[1] = #bfff f333 3333 3333 3333
fI[1] == strtox
Rounding mode for strtor... changed from 1 (nearest) to 2 (toward +Infinity)
@ -764,7 +764,7 @@ g_xfmt(0) gives 3 bytes: "1.1"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff 8ccc cccc cccc cccc
fI[1] = #3fff 8ccc cccc cccc cccc
fI[1] = #3fff 8ccc cccc cccc cccd
fI[1] == strtox
@ -776,7 +776,7 @@ g_xfmt(0) gives 22 bytes: "-1.0999999999999999999"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff 8ccc cccc cccc cccd
fI[1] = #bfff 8ccc cccc cccc cccd
fI[1] = #bfff 8ccc cccc cccc cccc
fI[1] == strtox
@ -788,7 +788,7 @@ g_xfmt(0) gives 3 bytes: "1.2"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff 9999 9999 9999 9999
fI[1] = #3fff 9999 9999 9999 9999
fI[1] = #3fff 9999 9999 9999 999a
fI[1] == strtox
@ -800,7 +800,7 @@ g_xfmt(0) gives 22 bytes: "-1.1999999999999999999"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff 9999 9999 9999 999a
fI[1] = #bfff 9999 9999 9999 999a
fI[1] = #bfff 9999 9999 9999 9999
fI[1] == strtox
@ -812,7 +812,7 @@ g_xfmt(0) gives 21 bytes: "1.3000000000000000001"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff a666 6666 6666 6666
fI[1] = #3fff a666 6666 6666 6666
fI[1] = #3fff a666 6666 6666 6667
fI[1] == strtox
@ -824,7 +824,7 @@ g_xfmt(0) gives 4 bytes: "-1.3"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff a666 6666 6666 6667
fI[1] = #bfff a666 6666 6666 6667
fI[1] = #bfff a666 6666 6666 6666
fI[1] == strtox
@ -836,7 +836,7 @@ g_xfmt(0) gives 21 bytes: "1.4000000000000000001"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff b333 3333 3333 3333
fI[1] = #3fff b333 3333 3333 3333
fI[1] = #3fff b333 3333 3333 3334
fI[1] == strtox
@ -848,7 +848,7 @@ g_xfmt(0) gives 4 bytes: "-1.4"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff b333 3333 3333 3334
fI[1] = #bfff b333 3333 3333 3334
fI[1] = #bfff b333 3333 3333 3333
fI[1] == strtox
@ -880,7 +880,7 @@ g_xfmt(0) gives 3 bytes: "1.6"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff cccc cccc cccc cccc
fI[1] = #3fff cccc cccc cccc cccc
fI[1] = #3fff cccc cccc cccc cccd
fI[1] == strtox
@ -892,7 +892,7 @@ g_xfmt(0) gives 22 bytes: "-1.5999999999999999999"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff cccc cccc cccc cccd
fI[1] = #bfff cccc cccc cccc cccd
fI[1] = #bfff cccc cccc cccc cccc
fI[1] == strtox
@ -904,7 +904,7 @@ g_xfmt(0) gives 3 bytes: "1.7"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff d999 9999 9999 9999
fI[1] = #3fff d999 9999 9999 9999
fI[1] = #3fff d999 9999 9999 999a
fI[1] == strtox
@ -916,7 +916,7 @@ g_xfmt(0) gives 22 bytes: "-1.6999999999999999999"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff d999 9999 9999 999a
fI[1] = #bfff d999 9999 9999 999a
fI[1] = #bfff d999 9999 9999 9999
fI[1] == strtox
@ -928,7 +928,7 @@ g_xfmt(0) gives 21 bytes: "1.8000000000000000001"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff e666 6666 6666 6666
fI[1] = #3fff e666 6666 6666 6666
fI[1] = #3fff e666 6666 6666 6667
fI[1] == strtox
@ -940,7 +940,7 @@ g_xfmt(0) gives 4 bytes: "-1.8"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff e666 6666 6666 6667
fI[1] = #bfff e666 6666 6666 6667
fI[1] = #bfff e666 6666 6666 6666
fI[1] == strtox
@ -952,7 +952,7 @@ g_xfmt(0) gives 21 bytes: "1.9000000000000000001"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff f333 3333 3333 3333
fI[1] = #3fff f333 3333 3333 3333
fI[1] = #3fff f333 3333 3333 3334
fI[1] == strtox
@ -964,7 +964,7 @@ g_xfmt(0) gives 4 bytes: "-1.9"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff f333 3333 3333 3334
fI[1] = #bfff f333 3333 3333 3334
fI[1] = #bfff f333 3333 3333 3333
fI[1] == strtox
Rounding mode for strtor... changed from 2 (toward +Infinity) to 3 (toward -Infinity)
@ -977,7 +977,7 @@ g_xfmt(0) gives 21 bytes: "1.0999999999999999999"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff 8ccc cccc cccc cccc
fI[1] = #3fff 8ccc cccc cccc cccc
fI[1] = #3fff 8ccc cccc cccc cccd
fI[0] == strtox
@ -989,7 +989,7 @@ g_xfmt(0) gives 4 bytes: "-1.1"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff 8ccc cccc cccc cccd
fI[1] = #bfff 8ccc cccc cccc cccd
fI[1] = #bfff 8ccc cccc cccc cccc
fI[0] == strtox
@ -1001,7 +1001,7 @@ g_xfmt(0) gives 21 bytes: "1.1999999999999999999"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff 9999 9999 9999 9999
fI[1] = #3fff 9999 9999 9999 9999
fI[1] = #3fff 9999 9999 9999 999a
fI[0] == strtox
@ -1013,7 +1013,7 @@ g_xfmt(0) gives 4 bytes: "-1.2"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff 9999 9999 9999 999a
fI[1] = #bfff 9999 9999 9999 999a
fI[1] = #bfff 9999 9999 9999 9999
fI[0] == strtox
@ -1025,7 +1025,7 @@ g_xfmt(0) gives 3 bytes: "1.3"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff a666 6666 6666 6666
fI[1] = #3fff a666 6666 6666 6666
fI[1] = #3fff a666 6666 6666 6667
fI[0] == strtox
@ -1037,7 +1037,7 @@ g_xfmt(0) gives 22 bytes: "-1.3000000000000000001"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff a666 6666 6666 6667
fI[1] = #bfff a666 6666 6666 6667
fI[1] = #bfff a666 6666 6666 6666
fI[0] == strtox
@ -1049,7 +1049,7 @@ g_xfmt(0) gives 3 bytes: "1.4"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff b333 3333 3333 3333
fI[1] = #3fff b333 3333 3333 3333
fI[1] = #3fff b333 3333 3333 3334
fI[0] == strtox
@ -1061,7 +1061,7 @@ g_xfmt(0) gives 22 bytes: "-1.4000000000000000001"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff b333 3333 3333 3334
fI[1] = #bfff b333 3333 3333 3334
fI[1] = #bfff b333 3333 3333 3333
fI[0] == strtox
@ -1093,7 +1093,7 @@ g_xfmt(0) gives 21 bytes: "1.5999999999999999999"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff cccc cccc cccc cccc
fI[1] = #3fff cccc cccc cccc cccc
fI[1] = #3fff cccc cccc cccc cccd
fI[0] == strtox
@ -1105,7 +1105,7 @@ g_xfmt(0) gives 4 bytes: "-1.6"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff cccc cccc cccc cccd
fI[1] = #bfff cccc cccc cccc cccd
fI[1] = #bfff cccc cccc cccc cccc
fI[0] == strtox
@ -1117,7 +1117,7 @@ g_xfmt(0) gives 21 bytes: "1.6999999999999999999"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff d999 9999 9999 9999
fI[1] = #3fff d999 9999 9999 9999
fI[1] = #3fff d999 9999 9999 999a
fI[0] == strtox
@ -1129,7 +1129,7 @@ g_xfmt(0) gives 4 bytes: "-1.7"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff d999 9999 9999 999a
fI[1] = #bfff d999 9999 9999 999a
fI[1] = #bfff d999 9999 9999 9999
fI[0] == strtox
@ -1141,7 +1141,7 @@ g_xfmt(0) gives 3 bytes: "1.8"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff e666 6666 6666 6666
fI[1] = #3fff e666 6666 6666 6666
fI[1] = #3fff e666 6666 6666 6667
fI[0] == strtox
@ -1153,7 +1153,7 @@ g_xfmt(0) gives 22 bytes: "-1.8000000000000000001"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff e666 6666 6666 6667
fI[1] = #bfff e666 6666 6666 6667
fI[1] = #bfff e666 6666 6666 6666
fI[0] == strtox
@ -1165,7 +1165,7 @@ g_xfmt(0) gives 3 bytes: "1.9"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff f333 3333 3333 3333
fI[1] = #3fff f333 3333 3333 3333
fI[1] = #3fff f333 3333 3333 3334
fI[0] == strtox
@ -1177,6 +1177,6 @@ g_xfmt(0) gives 22 bytes: "-1.9000000000000000001"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff f333 3333 3333 3334
fI[1] = #bfff f333 3333 3333 3334
fI[1] = #bfff f333 3333 3333 3333
fI[0] == strtox

View file

@ -9,7 +9,7 @@ g_xfmt(0) gives 4 bytes: "1.23"
strtoIx returns 33, consuming 4 bytes.
fI[0] = #3fff 9d70 a3d7 a3d 70a3
= 1.22999999999999999991
fI[1] = #3fff 9d70 a3d7 a3d 70a3
fI[1] = #3fff 9d70 a3d7 a3d 70a4
= 1.23000000000000000002
fI[1] == strtox
@ -35,7 +35,7 @@ g_xfmt(0) gives 8 bytes: "1.23e-20"
strtoIx returns 17, consuming 8 bytes.
fI[0] = #3fbc e857 267b b3a9 84f2
= 1.22999999999999999997e-20
fI[1] = #3fbc e857 267b b3a9 84f2
fI[1] = #3fbc e857 267b b3a9 84f3
= 1.23000000000000000004e-20
fI[0] == strtox
@ -50,7 +50,7 @@ g_xfmt(0) gives 10 bytes: "1.23456789"
strtoIx returns 33, consuming 10 bytes.
fI[0] = #3fff 9e06 5214 1ef0 dbf5
= 1.23456788999999999992
fI[1] = #3fff 9e06 5214 1ef0 dbf5
fI[1] = #3fff 9e06 5214 1ef0 dbf6
= 1.23456789000000000003
fI[1] == strtox
@ -76,7 +76,7 @@ g_xfmt(0) gives 8 bytes: "1.23e+30"
strtoIx returns 17, consuming 8 bytes.
fI[0] = #4062 f865 8274 7dbc 824a
= 1.22999999999999999999e+30
fI[1] = #4062 f865 8274 7dbc 824a
fI[1] = #4062 f865 8274 7dbc 824b
= 1.23000000000000000006e+30
fI[0] == strtox
@ -91,7 +91,7 @@ g_xfmt(0) gives 8 bytes: "1.23e-30"
strtoIx returns 17, consuming 8 bytes.
fI[0] = #3f9b c794 337a 8085 54eb
= 1.22999999999999999999e-30
fI[1] = #3f9b c794 337a 8085 54eb
fI[1] = #3f9b c794 337a 8085 54ec
= 1.23000000000000000007e-30
fI[0] == strtox
@ -106,7 +106,7 @@ g_xfmt(0) gives 14 bytes: "1.23456789e-20"
strtoIx returns 17, consuming 14 bytes.
fI[0] = #3fbc e934 a38 f3d6 d352
= 1.23456788999999999998e-20
fI[1] = #3fbc e934 a38 f3d6 d352
fI[1] = #3fbc e934 a38 f3d6 d353
= 1.23456789000000000005e-20
fI[0] == strtox
@ -121,7 +121,7 @@ g_xfmt(0) gives 14 bytes: "1.23456789e-30"
strtoIx returns 17, consuming 14 bytes.
fI[0] = #3f9b c851 f19d decc a8fc
= 1.23456788999999999999e-30
fI[1] = #3f9b c851 f19d decc a8fc
fI[1] = #3f9b c851 f19d decc a8fd
= 1.23456789000000000007e-30
fI[0] == strtox
@ -136,7 +136,7 @@ g_xfmt(0) gives 20 bytes: "1.234567890123456789"
strtoIx returns 17, consuming 20 bytes.
fI[0] = #3fff 9e06 5214 62cf db8d
= 1.23456789012345678899
fI[1] = #3fff 9e06 5214 62cf db8d
fI[1] = #3fff 9e06 5214 62cf db8e
= 1.23456789012345678909
fI[0] == strtox
@ -151,7 +151,7 @@ g_xfmt(0) gives 20 bytes: "1.234567890123456789"
strtoIx returns 17, consuming 40 bytes.
fI[0] = #3fff 9e06 5214 62cf db8d
= 1.23456789012345678899
fI[1] = #3fff 9e06 5214 62cf db8d
fI[1] = #3fff 9e06 5214 62cf db8e
= 1.23456789012345678909
fI[0] == strtox
@ -166,7 +166,7 @@ g_xfmt(0) gives 9 bytes: "1.23e+306"
strtoIx returns 17, consuming 8 bytes.
fI[0] = #43f7 e033 b668 e30f a6d5
= 1.22999999999999999997e+306
fI[1] = #43f7 e033 b668 e30f a6d5
fI[1] = #43f7 e033 b668 e30f a6d6
= 1.23000000000000000005e+306
fI[0] == strtox
@ -181,7 +181,7 @@ g_xfmt(0) gives 9 bytes: "1.23e-306"
strtoIx returns 33, consuming 9 bytes.
fI[0] = #3c06 dd1d c2ed 1cb7 3f24
= 1.22999999999999999995e-306
fI[1] = #3c06 dd1d c2ed 1cb7 3f24
fI[1] = #3c06 dd1d c2ed 1cb7 3f25
= 1.23000000000000000002e-306
fI[1] == strtox
@ -196,7 +196,7 @@ g_xfmt(0) gives 9 bytes: "1.23e-320"
strtoIx returns 33, consuming 9 bytes.
fI[0] = #3bd8 9b98 c371 844c 3f19
= 1.22999999999999999991e-320
fI[1] = #3bd8 9b98 c371 844c 3f19
fI[1] = #3bd8 9b98 c371 844c 3f1a
= 1.23000000000000000002e-320
fI[1] == strtox
@ -211,7 +211,7 @@ g_xfmt(0) gives 8 bytes: "1.23e-20"
strtoIx returns 17, consuming 8 bytes.
fI[0] = #3fbc e857 267b b3a9 84f2
= 1.22999999999999999997e-20
fI[1] = #3fbc e857 267b b3a9 84f2
fI[1] = #3fbc e857 267b b3a9 84f3
= 1.23000000000000000004e-20
fI[0] == strtox
@ -226,7 +226,7 @@ g_xfmt(0) gives 15 bytes: "1.23456789e+307"
strtoIx returns 17, consuming 14 bytes.
fI[0] = #43fb 8ca5 8a5e d766 de75
= 1.23456788999999999998e+307
fI[1] = #43fb 8ca5 8a5e d766 de75
fI[1] = #43fb 8ca5 8a5e d766 de76
= 1.23456789000000000011e+307
fI[0] == strtox
@ -241,7 +241,7 @@ g_xfmt(0) gives 15 bytes: "1.23456589e-307"
strtoIx returns 17, consuming 15 bytes.
fI[0] = #3c03 b18c b5dc c22f d369
= 1.23456588999999999999e-307
fI[1] = #3c03 b18c b5dc c22f d369
fI[1] = #3c03 b18c b5dc c22f d36a
= 1.23456589000000000009e-307
fI[0] == strtox
@ -256,7 +256,7 @@ g_xfmt(0) gives 20 bytes: "1.234567890123456789"
strtoIx returns 17, consuming 20 bytes.
fI[0] = #3fff 9e06 5214 62cf db8d
= 1.23456789012345678899
fI[1] = #3fff 9e06 5214 62cf db8d
fI[1] = #3fff 9e06 5214 62cf db8e
= 1.23456789012345678909
fI[0] == strtox
@ -271,7 +271,7 @@ g_xfmt(0) gives 25 bytes: "1.234567890123456789e+301"
strtoIx returns 33, consuming 24 bytes.
fI[0] = #43e7 937a 8baf ab20 980b
= 1.23456789012345678889e+301
fI[1] = #43e7 937a 8baf ab20 980b
fI[1] = #43e7 937a 8baf ab20 980c
= 1.234567890123456789e+301
fI[1] == strtox
@ -286,7 +286,7 @@ g_xfmt(0) gives 25 bytes: "1.234567890123456789e-301"
strtoIx returns 33, consuming 25 bytes.
fI[0] = #3c17 a953 271a 5d06 9ad8
= 1.23456789012345678892e-301
fI[1] = #3c17 a953 271a 5d06 9ad8
fI[1] = #3c17 a953 271a 5d06 9ad9
= 1.23456789012345678902e-301
fI[1] == strtox
@ -301,7 +301,7 @@ g_xfmt(0) gives 25 bytes: "1.234567890123456789e-321"
strtoIx returns 33, consuming 25 bytes.
fI[0] = #3bd4 f9e1 1b4c ea6d cce8
= 1.23456789012345678893e-321
fI[1] = #3bd4 f9e1 1b4c ea6d cce8
fI[1] = #3bd4 f9e1 1b4c ea6d cce9
= 1.234567890123456789e-321
fI[1] == strtox
@ -327,7 +327,7 @@ g_xfmt(0) gives 6 bytes: "1e+310"
strtoIx returns 33, consuming 5 bytes.
fI[0] = #4404 de81 e40a 34b cf4f
= 9.9999999999999999994e+309
fI[1] = #4404 de81 e40a 34b cf4f
fI[1] = #4404 de81 e40a 34b cf50
= 1e+310
fI[1] == strtox
@ -342,7 +342,7 @@ g_xfmt(0) gives 23 bytes: "9.0259718793241475e-277"
strtoIx returns 33, consuming 23 bytes.
fI[0] = #3c69 ffff ffff ffff fcf6
= 9.02597187932414749967e-277
fI[1] = #3c69 ffff ffff ffff fcf6
fI[1] = #3c69 ffff ffff ffff fcf7
= 9.02597187932414750016e-277
fI[1] == strtox
@ -357,7 +357,7 @@ g_xfmt(0) gives 26 bytes: "9.0259718793241478803e-277"
strtoIx returns 17, consuming 37 bytes.
fI[0] = #3c6a 8000 0 0 0
= 9.02597187932414788035e-277
fI[1] = #3c6a 8000 0 0 0
fI[1] = #3c6a 8000 0 0 1
= 9.02597187932414788132e-277
fI[0] == strtox
@ -372,7 +372,7 @@ g_xfmt(0) gives 26 bytes: "9.0259718793241478803e-277"
strtoIx returns 33, consuming 37 bytes.
fI[0] = #3c69 ffff ffff ffff ffff
= 9.02597187932414787986e-277
fI[1] = #3c6a 8000 0 ffff ffff
fI[1] = #3c6a 8000 0 0 0
= 9.02597187932414788035e-277
fI[1] == strtox
@ -387,7 +387,7 @@ g_xfmt(0) gives 23 bytes: "2.2250738585072014e-308"
strtoIx returns 17, consuming 23 bytes.
fI[0] = #3c01 8000 0 0 46
= 2.22507385850720139998e-308
fI[1] = #3c01 8000 0 0 46
fI[1] = #3c01 8000 0 0 47
= 2.22507385850720140022e-308
fI[0] == strtox
@ -402,7 +402,7 @@ g_xfmt(0) gives 23 bytes: "2.2250738585072013e-308"
strtoIx returns 17, consuming 23 bytes.
fI[0] = #3c00 ffff ffff ffff fd4f
= 2.22507385850720129998e-308
fI[1] = #3c00 ffff ffff ffff fd4f
fI[1] = #3c00 ffff ffff ffff fd50
= 2.2250738585072013001e-308
fI[0] == strtox
@ -418,7 +418,7 @@ g_xfmt(0) gives 21 bytes: "1.0999999999999999999"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff 8ccc cccc cccc cccc
= 1.09999999999999999991
fI[1] = #3fff 8ccc cccc cccc cccc
fI[1] = #3fff 8ccc cccc cccc cccd
= 1.10000000000000000002
fI[0] == strtox
@ -433,7 +433,7 @@ g_xfmt(0) gives 22 bytes: "-1.0999999999999999999"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff 8ccc cccc cccc cccd
= -1.10000000000000000002
fI[1] = #bfff 8ccc cccc cccc cccd
fI[1] = #bfff 8ccc cccc cccc cccc
= -1.09999999999999999991
fI[1] == strtox
@ -448,7 +448,7 @@ g_xfmt(0) gives 21 bytes: "1.1999999999999999999"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff 9999 9999 9999 9999
= 1.19999999999999999993
fI[1] = #3fff 9999 9999 9999 9999
fI[1] = #3fff 9999 9999 9999 999a
= 1.20000000000000000004
fI[0] == strtox
@ -463,7 +463,7 @@ g_xfmt(0) gives 22 bytes: "-1.1999999999999999999"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff 9999 9999 9999 999a
= -1.20000000000000000004
fI[1] = #bfff 9999 9999 9999 999a
fI[1] = #bfff 9999 9999 9999 9999
= -1.19999999999999999993
fI[1] == strtox
@ -478,7 +478,7 @@ g_xfmt(0) gives 3 bytes: "1.3"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff a666 6666 6666 6666
= 1.29999999999999999996
fI[1] = #3fff a666 6666 6666 6666
fI[1] = #3fff a666 6666 6666 6667
= 1.30000000000000000007
fI[0] == strtox
@ -493,7 +493,7 @@ g_xfmt(0) gives 4 bytes: "-1.3"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff a666 6666 6666 6667
= -1.30000000000000000007
fI[1] = #bfff a666 6666 6666 6667
fI[1] = #bfff a666 6666 6666 6666
= -1.29999999999999999996
fI[1] == strtox
@ -508,7 +508,7 @@ g_xfmt(0) gives 3 bytes: "1.4"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff b333 3333 3333 3333
= 1.39999999999999999998
fI[1] = #3fff b333 3333 3333 3333
fI[1] = #3fff b333 3333 3333 3334
= 1.40000000000000000009
fI[0] == strtox
@ -523,7 +523,7 @@ g_xfmt(0) gives 4 bytes: "-1.4"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff b333 3333 3333 3334
= -1.40000000000000000009
fI[1] = #bfff b333 3333 3333 3334
fI[1] = #bfff b333 3333 3333 3333
= -1.39999999999999999998
fI[1] == strtox
@ -560,7 +560,7 @@ g_xfmt(0) gives 21 bytes: "1.5999999999999999999"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff cccc cccc cccc cccc
= 1.59999999999999999991
fI[1] = #3fff cccc cccc cccc cccc
fI[1] = #3fff cccc cccc cccc cccd
= 1.60000000000000000002
fI[0] == strtox
@ -575,7 +575,7 @@ g_xfmt(0) gives 22 bytes: "-1.5999999999999999999"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff cccc cccc cccc cccd
= -1.60000000000000000002
fI[1] = #bfff cccc cccc cccc cccd
fI[1] = #bfff cccc cccc cccc cccc
= -1.59999999999999999991
fI[1] == strtox
@ -590,7 +590,7 @@ g_xfmt(0) gives 21 bytes: "1.6999999999999999999"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff d999 9999 9999 9999
= 1.69999999999999999993
fI[1] = #3fff d999 9999 9999 9999
fI[1] = #3fff d999 9999 9999 999a
= 1.70000000000000000004
fI[0] == strtox
@ -605,7 +605,7 @@ g_xfmt(0) gives 22 bytes: "-1.6999999999999999999"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff d999 9999 9999 999a
= -1.70000000000000000004
fI[1] = #bfff d999 9999 9999 999a
fI[1] = #bfff d999 9999 9999 9999
= -1.69999999999999999993
fI[1] == strtox
@ -620,7 +620,7 @@ g_xfmt(0) gives 3 bytes: "1.8"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff e666 6666 6666 6666
= 1.79999999999999999996
fI[1] = #3fff e666 6666 6666 6666
fI[1] = #3fff e666 6666 6666 6667
= 1.80000000000000000007
fI[0] == strtox
@ -635,7 +635,7 @@ g_xfmt(0) gives 4 bytes: "-1.8"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff e666 6666 6666 6667
= -1.80000000000000000007
fI[1] = #bfff e666 6666 6666 6667
fI[1] = #bfff e666 6666 6666 6666
= -1.79999999999999999996
fI[1] == strtox
@ -650,7 +650,7 @@ g_xfmt(0) gives 3 bytes: "1.9"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff f333 3333 3333 3333
= 1.89999999999999999998
fI[1] = #3fff f333 3333 3333 3333
fI[1] = #3fff f333 3333 3333 3334
= 1.90000000000000000009
fI[0] == strtox
@ -665,7 +665,7 @@ g_xfmt(0) gives 4 bytes: "-1.9"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff f333 3333 3333 3334
= -1.90000000000000000009
fI[1] = #bfff f333 3333 3333 3334
fI[1] = #bfff f333 3333 3333 3333
= -1.89999999999999999998
fI[1] == strtox
@ -681,7 +681,7 @@ g_xfmt(0) gives 3 bytes: "1.1"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff 8ccc cccc cccc cccc
= 1.09999999999999999991
fI[1] = #3fff 8ccc cccc cccc cccc
fI[1] = #3fff 8ccc cccc cccc cccd
= 1.10000000000000000002
fI[1] == strtox
@ -696,7 +696,7 @@ g_xfmt(0) gives 4 bytes: "-1.1"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff 8ccc cccc cccc cccd
= -1.10000000000000000002
fI[1] = #bfff 8ccc cccc cccc cccd
fI[1] = #bfff 8ccc cccc cccc cccc
= -1.09999999999999999991
fI[0] == strtox
@ -711,7 +711,7 @@ g_xfmt(0) gives 3 bytes: "1.2"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff 9999 9999 9999 9999
= 1.19999999999999999993
fI[1] = #3fff 9999 9999 9999 9999
fI[1] = #3fff 9999 9999 9999 999a
= 1.20000000000000000004
fI[1] == strtox
@ -726,7 +726,7 @@ g_xfmt(0) gives 4 bytes: "-1.2"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff 9999 9999 9999 999a
= -1.20000000000000000004
fI[1] = #bfff 9999 9999 9999 999a
fI[1] = #bfff 9999 9999 9999 9999
= -1.19999999999999999993
fI[0] == strtox
@ -741,7 +741,7 @@ g_xfmt(0) gives 3 bytes: "1.3"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff a666 6666 6666 6666
= 1.29999999999999999996
fI[1] = #3fff a666 6666 6666 6666
fI[1] = #3fff a666 6666 6666 6667
= 1.30000000000000000007
fI[0] == strtox
@ -756,7 +756,7 @@ g_xfmt(0) gives 4 bytes: "-1.3"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff a666 6666 6666 6667
= -1.30000000000000000007
fI[1] = #bfff a666 6666 6666 6667
fI[1] = #bfff a666 6666 6666 6666
= -1.29999999999999999996
fI[1] == strtox
@ -771,7 +771,7 @@ g_xfmt(0) gives 3 bytes: "1.4"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff b333 3333 3333 3333
= 1.39999999999999999998
fI[1] = #3fff b333 3333 3333 3333
fI[1] = #3fff b333 3333 3333 3334
= 1.40000000000000000009
fI[0] == strtox
@ -786,7 +786,7 @@ g_xfmt(0) gives 4 bytes: "-1.4"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff b333 3333 3333 3334
= -1.40000000000000000009
fI[1] = #bfff b333 3333 3333 3334
fI[1] = #bfff b333 3333 3333 3333
= -1.39999999999999999998
fI[1] == strtox
@ -823,7 +823,7 @@ g_xfmt(0) gives 3 bytes: "1.6"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff cccc cccc cccc cccc
= 1.59999999999999999991
fI[1] = #3fff cccc cccc cccc cccc
fI[1] = #3fff cccc cccc cccc cccd
= 1.60000000000000000002
fI[1] == strtox
@ -838,7 +838,7 @@ g_xfmt(0) gives 4 bytes: "-1.6"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff cccc cccc cccc cccd
= -1.60000000000000000002
fI[1] = #bfff cccc cccc cccc cccd
fI[1] = #bfff cccc cccc cccc cccc
= -1.59999999999999999991
fI[0] == strtox
@ -853,7 +853,7 @@ g_xfmt(0) gives 3 bytes: "1.7"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff d999 9999 9999 9999
= 1.69999999999999999993
fI[1] = #3fff d999 9999 9999 9999
fI[1] = #3fff d999 9999 9999 999a
= 1.70000000000000000004
fI[1] == strtox
@ -868,7 +868,7 @@ g_xfmt(0) gives 4 bytes: "-1.7"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff d999 9999 9999 999a
= -1.70000000000000000004
fI[1] = #bfff d999 9999 9999 999a
fI[1] = #bfff d999 9999 9999 9999
= -1.69999999999999999993
fI[0] == strtox
@ -883,7 +883,7 @@ g_xfmt(0) gives 3 bytes: "1.8"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff e666 6666 6666 6666
= 1.79999999999999999996
fI[1] = #3fff e666 6666 6666 6666
fI[1] = #3fff e666 6666 6666 6667
= 1.80000000000000000007
fI[0] == strtox
@ -898,7 +898,7 @@ g_xfmt(0) gives 4 bytes: "-1.8"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff e666 6666 6666 6667
= -1.80000000000000000007
fI[1] = #bfff e666 6666 6666 6667
fI[1] = #bfff e666 6666 6666 6666
= -1.79999999999999999996
fI[1] == strtox
@ -913,7 +913,7 @@ g_xfmt(0) gives 3 bytes: "1.9"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff f333 3333 3333 3333
= 1.89999999999999999998
fI[1] = #3fff f333 3333 3333 3333
fI[1] = #3fff f333 3333 3333 3334
= 1.90000000000000000009
fI[0] == strtox
@ -928,7 +928,7 @@ g_xfmt(0) gives 4 bytes: "-1.9"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff f333 3333 3333 3334
= -1.90000000000000000009
fI[1] = #bfff f333 3333 3333 3334
fI[1] = #bfff f333 3333 3333 3333
= -1.89999999999999999998
fI[1] == strtox
@ -944,7 +944,7 @@ g_xfmt(0) gives 3 bytes: "1.1"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff 8ccc cccc cccc cccc
= 1.09999999999999999991
fI[1] = #3fff 8ccc cccc cccc cccc
fI[1] = #3fff 8ccc cccc cccc cccd
= 1.10000000000000000002
fI[1] == strtox
@ -959,7 +959,7 @@ g_xfmt(0) gives 22 bytes: "-1.0999999999999999999"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff 8ccc cccc cccc cccd
= -1.10000000000000000002
fI[1] = #bfff 8ccc cccc cccc cccd
fI[1] = #bfff 8ccc cccc cccc cccc
= -1.09999999999999999991
fI[1] == strtox
@ -974,7 +974,7 @@ g_xfmt(0) gives 3 bytes: "1.2"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff 9999 9999 9999 9999
= 1.19999999999999999993
fI[1] = #3fff 9999 9999 9999 9999
fI[1] = #3fff 9999 9999 9999 999a
= 1.20000000000000000004
fI[1] == strtox
@ -989,7 +989,7 @@ g_xfmt(0) gives 22 bytes: "-1.1999999999999999999"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff 9999 9999 9999 999a
= -1.20000000000000000004
fI[1] = #bfff 9999 9999 9999 999a
fI[1] = #bfff 9999 9999 9999 9999
= -1.19999999999999999993
fI[1] == strtox
@ -1004,7 +1004,7 @@ g_xfmt(0) gives 21 bytes: "1.3000000000000000001"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff a666 6666 6666 6666
= 1.29999999999999999996
fI[1] = #3fff a666 6666 6666 6666
fI[1] = #3fff a666 6666 6666 6667
= 1.30000000000000000007
fI[1] == strtox
@ -1019,7 +1019,7 @@ g_xfmt(0) gives 4 bytes: "-1.3"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff a666 6666 6666 6667
= -1.30000000000000000007
fI[1] = #bfff a666 6666 6666 6667
fI[1] = #bfff a666 6666 6666 6666
= -1.29999999999999999996
fI[1] == strtox
@ -1034,7 +1034,7 @@ g_xfmt(0) gives 21 bytes: "1.4000000000000000001"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff b333 3333 3333 3333
= 1.39999999999999999998
fI[1] = #3fff b333 3333 3333 3333
fI[1] = #3fff b333 3333 3333 3334
= 1.40000000000000000009
fI[1] == strtox
@ -1049,7 +1049,7 @@ g_xfmt(0) gives 4 bytes: "-1.4"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff b333 3333 3333 3334
= -1.40000000000000000009
fI[1] = #bfff b333 3333 3333 3334
fI[1] = #bfff b333 3333 3333 3333
= -1.39999999999999999998
fI[1] == strtox
@ -1086,7 +1086,7 @@ g_xfmt(0) gives 3 bytes: "1.6"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff cccc cccc cccc cccc
= 1.59999999999999999991
fI[1] = #3fff cccc cccc cccc cccc
fI[1] = #3fff cccc cccc cccc cccd
= 1.60000000000000000002
fI[1] == strtox
@ -1101,7 +1101,7 @@ g_xfmt(0) gives 22 bytes: "-1.5999999999999999999"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff cccc cccc cccc cccd
= -1.60000000000000000002
fI[1] = #bfff cccc cccc cccc cccd
fI[1] = #bfff cccc cccc cccc cccc
= -1.59999999999999999991
fI[1] == strtox
@ -1116,7 +1116,7 @@ g_xfmt(0) gives 3 bytes: "1.7"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff d999 9999 9999 9999
= 1.69999999999999999993
fI[1] = #3fff d999 9999 9999 9999
fI[1] = #3fff d999 9999 9999 999a
= 1.70000000000000000004
fI[1] == strtox
@ -1131,7 +1131,7 @@ g_xfmt(0) gives 22 bytes: "-1.6999999999999999999"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff d999 9999 9999 999a
= -1.70000000000000000004
fI[1] = #bfff d999 9999 9999 999a
fI[1] = #bfff d999 9999 9999 9999
= -1.69999999999999999993
fI[1] == strtox
@ -1146,7 +1146,7 @@ g_xfmt(0) gives 21 bytes: "1.8000000000000000001"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff e666 6666 6666 6666
= 1.79999999999999999996
fI[1] = #3fff e666 6666 6666 6666
fI[1] = #3fff e666 6666 6666 6667
= 1.80000000000000000007
fI[1] == strtox
@ -1161,7 +1161,7 @@ g_xfmt(0) gives 4 bytes: "-1.8"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff e666 6666 6666 6667
= -1.80000000000000000007
fI[1] = #bfff e666 6666 6666 6667
fI[1] = #bfff e666 6666 6666 6666
= -1.79999999999999999996
fI[1] == strtox
@ -1176,7 +1176,7 @@ g_xfmt(0) gives 21 bytes: "1.9000000000000000001"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff f333 3333 3333 3333
= 1.89999999999999999998
fI[1] = #3fff f333 3333 3333 3333
fI[1] = #3fff f333 3333 3333 3334
= 1.90000000000000000009
fI[1] == strtox
@ -1191,7 +1191,7 @@ g_xfmt(0) gives 4 bytes: "-1.9"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff f333 3333 3333 3334
= -1.90000000000000000009
fI[1] = #bfff f333 3333 3333 3334
fI[1] = #bfff f333 3333 3333 3333
= -1.89999999999999999998
fI[1] == strtox
@ -1207,7 +1207,7 @@ g_xfmt(0) gives 21 bytes: "1.0999999999999999999"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff 8ccc cccc cccc cccc
= 1.09999999999999999991
fI[1] = #3fff 8ccc cccc cccc cccc
fI[1] = #3fff 8ccc cccc cccc cccd
= 1.10000000000000000002
fI[0] == strtox
@ -1222,7 +1222,7 @@ g_xfmt(0) gives 4 bytes: "-1.1"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff 8ccc cccc cccc cccd
= -1.10000000000000000002
fI[1] = #bfff 8ccc cccc cccc cccd
fI[1] = #bfff 8ccc cccc cccc cccc
= -1.09999999999999999991
fI[0] == strtox
@ -1237,7 +1237,7 @@ g_xfmt(0) gives 21 bytes: "1.1999999999999999999"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff 9999 9999 9999 9999
= 1.19999999999999999993
fI[1] = #3fff 9999 9999 9999 9999
fI[1] = #3fff 9999 9999 9999 999a
= 1.20000000000000000004
fI[0] == strtox
@ -1252,7 +1252,7 @@ g_xfmt(0) gives 4 bytes: "-1.2"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff 9999 9999 9999 999a
= -1.20000000000000000004
fI[1] = #bfff 9999 9999 9999 999a
fI[1] = #bfff 9999 9999 9999 9999
= -1.19999999999999999993
fI[0] == strtox
@ -1267,7 +1267,7 @@ g_xfmt(0) gives 3 bytes: "1.3"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff a666 6666 6666 6666
= 1.29999999999999999996
fI[1] = #3fff a666 6666 6666 6666
fI[1] = #3fff a666 6666 6666 6667
= 1.30000000000000000007
fI[0] == strtox
@ -1282,7 +1282,7 @@ g_xfmt(0) gives 22 bytes: "-1.3000000000000000001"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff a666 6666 6666 6667
= -1.30000000000000000007
fI[1] = #bfff a666 6666 6666 6667
fI[1] = #bfff a666 6666 6666 6666
= -1.29999999999999999996
fI[0] == strtox
@ -1297,7 +1297,7 @@ g_xfmt(0) gives 3 bytes: "1.4"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff b333 3333 3333 3333
= 1.39999999999999999998
fI[1] = #3fff b333 3333 3333 3333
fI[1] = #3fff b333 3333 3333 3334
= 1.40000000000000000009
fI[0] == strtox
@ -1312,7 +1312,7 @@ g_xfmt(0) gives 22 bytes: "-1.4000000000000000001"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff b333 3333 3333 3334
= -1.40000000000000000009
fI[1] = #bfff b333 3333 3333 3334
fI[1] = #bfff b333 3333 3333 3333
= -1.39999999999999999998
fI[0] == strtox
@ -1349,7 +1349,7 @@ g_xfmt(0) gives 21 bytes: "1.5999999999999999999"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff cccc cccc cccc cccc
= 1.59999999999999999991
fI[1] = #3fff cccc cccc cccc cccc
fI[1] = #3fff cccc cccc cccc cccd
= 1.60000000000000000002
fI[0] == strtox
@ -1364,7 +1364,7 @@ g_xfmt(0) gives 4 bytes: "-1.6"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff cccc cccc cccc cccd
= -1.60000000000000000002
fI[1] = #bfff cccc cccc cccc cccd
fI[1] = #bfff cccc cccc cccc cccc
= -1.59999999999999999991
fI[0] == strtox
@ -1379,7 +1379,7 @@ g_xfmt(0) gives 21 bytes: "1.6999999999999999999"
strtoIx returns 33, consuming 3 bytes.
fI[0] = #3fff d999 9999 9999 9999
= 1.69999999999999999993
fI[1] = #3fff d999 9999 9999 9999
fI[1] = #3fff d999 9999 9999 999a
= 1.70000000000000000004
fI[0] == strtox
@ -1394,7 +1394,7 @@ g_xfmt(0) gives 4 bytes: "-1.7"
strtoIx returns 41, consuming 4 bytes.
fI[0] = #bfff d999 9999 9999 999a
= -1.70000000000000000004
fI[1] = #bfff d999 9999 9999 999a
fI[1] = #bfff d999 9999 9999 9999
= -1.69999999999999999993
fI[0] == strtox
@ -1409,7 +1409,7 @@ g_xfmt(0) gives 3 bytes: "1.8"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff e666 6666 6666 6666
= 1.79999999999999999996
fI[1] = #3fff e666 6666 6666 6666
fI[1] = #3fff e666 6666 6666 6667
= 1.80000000000000000007
fI[0] == strtox
@ -1424,7 +1424,7 @@ g_xfmt(0) gives 22 bytes: "-1.8000000000000000001"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff e666 6666 6666 6667
= -1.80000000000000000007
fI[1] = #bfff e666 6666 6666 6667
fI[1] = #bfff e666 6666 6666 6666
= -1.79999999999999999996
fI[0] == strtox
@ -1439,7 +1439,7 @@ g_xfmt(0) gives 3 bytes: "1.9"
strtoIx returns 17, consuming 3 bytes.
fI[0] = #3fff f333 3333 3333 3333
= 1.89999999999999999998
fI[1] = #3fff f333 3333 3333 3333
fI[1] = #3fff f333 3333 3333 3334
= 1.90000000000000000009
fI[0] == strtox
@ -1454,7 +1454,7 @@ g_xfmt(0) gives 22 bytes: "-1.9000000000000000001"
strtoIx returns 25, consuming 4 bytes.
fI[0] = #bfff f333 3333 3333 3334
= -1.90000000000000000009
fI[1] = #bfff f333 3333 3333 3334
fI[1] = #bfff f333 3333 3333 3333
= -1.89999999999999999998
fI[0] == strtox

File diff suppressed because it is too large Load diff

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
/* Test program for g_xLfmt, strtoIxL, strtopxL, and strtorxL.
*
@ -85,7 +79,7 @@ THIS SOFTWARE.
int
main(Void)
{
char *s, *se, *se1;
char *s, *s1, *se, *se1;
int dItry, i, ndig = 0, r = 1;
union { long double d; ULong bits[3]; } u, v[2];
@ -106,8 +100,14 @@ main(Void)
}
break; /* nan? */
case '#':
sscanf(s+1, "%lx %lx %lx", &u.bits[_0],
&u.bits[_1], &u.bits[_2]);
/* sscanf(s+1, "%lx %lx %lx", &u.bits[_0], */
/* &u.bits[_1], &u.bits[_2]); */
u.bits[_0] = (ULong)strtoul(s1 = s+1, &se, 16);
if (se > s1) {
u.bits[_1] = (ULong)strtoul(s1=se, &se, 16);
if (se > s1)
u.bits[_2] = (ULong)strtoul(s1=se, &se, 16);
}
printf("\nInput: %s", ibuf);
printf(" --> f = #%lx %lx %lx\n", u.bits[_0],
u.bits[_1], u.bits[_2]);

View file

@ -1,20 +1,20 @@
README e6ebdc91 2429
Qtest.c 140625e2 4778
dItest.c 8689031 2401
ddtest.c ea24d330 4943
dtest.c 900d971 4071
dt.c addb61c 6198
ftest.c f609ce43 3958
getround.c f471599 2041
Qtest.c e8353ffc 5046
dItest.c e33800ce 2371
ddtest.c f9d06e7b 4984
dtest.c ee533ac3 4078
dt.c 7eeda57 6384
ftest.c ec8a6654 3999
getround.c f810968 2011
strtoIdSI.c 7bfb88b 49
strtoIddSI.c 72e8852 50
strtodISI.c ed08b740 49
strtodt.c 17aca428 3213
strtodt.c aaf94bc 3330
strtopddSI.c 13e7138d 50
strtorddSI.c f7e4b1d5 50
xLtest.c faca328f 4646
xLtest.c f3f96ad1 4833
xQtest.c efdea3a2 1549
xtest.c 1f19b87 4858
xtest.c ee81e661 4830
rtestnos f94bcdf6 336
testnos e89999d6 485
testnos1 7e16229 294
@ -23,13 +23,13 @@ dI.out d522eef 4369
dIsi.out 1dd6d02f 4350
ddsi.out 1f94bbe2 10251
dd.out e262456e 40923
dtst.out ee75f6b9 23308
dtst.out e284ac98 23711
d.out f271efc9 28131
f.out 4b0bd51 21207
x.ou0 1cfc5d22 25378
x.ou0 1402f834 25372
xL.ou0 faa3a741 26363
x.ou1 1a7e9dd4 34587
xL.ou1 418057a 26476
x.ou1 f1af5a00 34581
xL.ou1 e349e5c 37165
Q.ou0 e4592b85 28742
Q.ou1 ea0b344d 39572
makefile ebbea1e1 4191
makefile b77232c 4939

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
/* Test program for g_xfmt, strtoIx, strtopx, and strtorx.
*
@ -108,12 +102,12 @@ main(Void)
}
break; /* nan? */
case '#':
sscanf(s+1, "%hx %hx %hx %hx hx", &u.bits[_0],
sscanf(s+1, "%hx %hx %hx %hx %hx", &u.bits[_0],
&u.bits[_1], &u.bits[_2], &u.bits[_3],
&u.bits[_4]);
printf("\nInput: %s", ibuf);
printf(" --> f = #%x %x %x %x %x\n", u.bits[_0],
u.bits[_1], u.bits[_2], u.bits[_3], u.bits[4]);
u.bits[_1], u.bits[_2], u.bits[_3], u.bits[_4]);
goto fmt_test;
}
dItry = 1;
@ -159,8 +153,8 @@ main(Void)
printf("= %.21Lg\n", v[0].d);
printf("fI[1] = #%x %x %x %x %x\n",
v[1].bits[_0], v[1].bits[_1],
v[1].bits[_2], v[0].bits[_3],
v[0].bits[_4]);
v[1].bits[_2], v[1].bits[_3],
v[1].bits[_4]);
if (sizeof(long double) == 12)
printf("= %.21Lg\n", v[1].d);
if (!memcmp(v[0].bits, u.bits, 10))

View file

@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
/* Please send bug reports to
David M. Gay
Bell Laboratories, Room 2C-463
600 Mountain Avenue
Murray Hill, NJ 07974-0636
U.S.A.
dmg@bell-labs.com
*/
/* Please send bug reports to David M. Gay (dmg at acm dot org,
* with " at " changed at "@" and " dot " changed to "."). */
#include "gdtoaimp.h"

View file

@ -1,46 +1,48 @@
README c9c34c1 13153
arithchk.c e37b8a75 4070
dmisc.c e8d262b6 4712
dtoa.c f3c132b3 16905
g_Qfmt.c e5847e9 2870
g__fmt.c ee5f9be0 2439
g_ddfmt.c fcf94527 3790
g_dfmt.c f30e55a9 2533
g_ffmt.c 7c4ea96 2459
g_xLfmt.c 36ee116 2716
g_xfmt.c c20a5e4 2795
gdtoa.c 364a0d2 17017
gdtoa.h 1eb440de 4810
gdtoaimp.h 6a955ba 19106
gethex.c 1c586a03 5075
gmisc.c e1a268ea 2114
hd_init.c cf9a94e 1827
hexnan.c f53be1da 2988
makefile e84d078f 2802
misc.c ea539bdb 14168
smisc.c f659f036 3685
strtoIQ.c 13ac9f44 1969
strtoId.c d05a7a6 1961
strtoIdd.c fa36260d 2135
strtoIf.c eb75ac99 1905
strtoIg.c ec59c2fa 3484
strtoIx.c 8f8c9d 1990
strtoIxL.c 1313ff7f 1961
strtod.c fd6556c8 19985
strtodI.c e58338e0 4062
strtodg.c e04b9254 19458
strtof.c 1e7a787a 2202
strtopQ.c e232c542 2685
strtopd.c e865dc64 1701
strtopdd.c 1c240126 4540
strtopf.c 1c762782 2196
strtopx.c 17c3fafb 2665
strtopxL.c ed474cdb 2505
strtorQ.c 126cc92b 2898
strtord.c 1fce44b9 2528
strtordd.c c32bca0 4979
strtorf.c fe6a2687 2430
strtorx.c 18389f0c 2888
strtorxL.c f63fc249 2730
sum.c dc07b9b 2524
ulp.c f6db0b4d 1894
README f2477cff 14190
arithchk.c ebbe5bc7 4075
dmisc.c c8daa18 4682
dtoa.c 6a7b6fe 16876
g_Qfmt.c f791d807 2839
g__fmt.c 14dca85 2504
g_ddfmt.c 10eae12a 3695
g_dfmt.c f36c1014 2503
g_ffmt.c fb83cfb5 2429
g_xLfmt.c f216a096 2686
g_xfmt.c ed824bf3 2775
gdtoa.c e29409a6 16988
gdtoa.h f208c204 4780
gdtoaimp.h e3c2a970 19441
gethex.c dba1616 5201
gmisc.c 1859d016 2084
hd_init.c efdbe921 1797
hexnan.c f7ea38f9 2958
makefile f890b12 2932
misc.c 1757f7fc 14252
qnan.c efd33d64 3417
smisc.c e282e715 3655
strtoIQ.c 1809dfcf 1939
strtoId.c f41ddac2 1931
strtoIdd.c f13e3bc3 2105
strtoIf.c f12c6af4 1875
strtoIg.c ef30d392 3454
strtoIx.c e50f716d 1960
strtoIxL.c ea0b821b 1931
strtod.c eec1df60 20532
strtodI.c 1c2440ce 3915
strtodg.c f6c3dd52 19911
strtodnrp.c af895e9 2538
strtof.c 1c5192d3 2073
strtopQ.c f116d4f0 2563
strtopd.c f7681c7a 1671
strtopdd.c 9864fba 4497
strtopf.c eb15b627 2067
strtopx.c 1cafe482 2618
strtopxL.c 1e4b77e9 2373
strtorQ.c 9360a0b 2885
strtord.c af5c50e 2491
strtordd.c 1b266865 4936
strtorf.c f0d86e2b 2396
strtorx.c f19a56af 2947
strtorxL.c 167fe87c 2704
sum.c f525bad9 2494
ulp.c 1e2e148f 1864