summaryrefslogtreecommitdiff
path: root/stdio-common/printf_fphex.c
diff options
context:
space:
mode:
Diffstat (limited to 'stdio-common/printf_fphex.c')
-rw-r--r--stdio-common/printf_fphex.c50
1 files changed, 35 insertions, 15 deletions
diff --git a/stdio-common/printf_fphex.c b/stdio-common/printf_fphex.c
index 76084a8de5..4099bf2dd1 100644
--- a/stdio-common/printf_fphex.c
+++ b/stdio-common/printf_fphex.c
@@ -1,6 +1,6 @@
/* Print floating point number in hexadecimal notation according to
ISO C 9X.
- Copyright (C) 1997 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1998 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -244,16 +244,26 @@ __printf_fphex (FILE *fp,
exponent = fpnum.dbl.ieee.exponent;
- if (exponent == 0 ? !zero_mantissa : exponent < IEEE754_DOUBLE_BIAS)
+ if (exponent == 0)
{
- expnegative = 1;
- exponent = -(exponent - IEEE754_DOUBLE_BIAS);
+ if (zero_mantissa)
+ expnegative = 0;
+ else
+ {
+ /* This is a denormalized number. */
+ expnegative = 1;
+ exponent = -(1 - IEEE754_DOUBLE_BIAS);
+ }
}
- else
+ else if (exponent >= IEEE754_DOUBLE_BIAS)
{
expnegative = 0;
- if (exponent != 0)
- exponent -= IEEE754_DOUBLE_BIAS;
+ exponent -= IEEE754_DOUBLE_BIAS;
+ }
+ else
+ {
+ expnegative = 1;
+ exponent = -(exponent - IEEE754_DOUBLE_BIAS);
}
}
else
@@ -282,20 +292,30 @@ __printf_fphex (FILE *fp,
/* We use a full nibble for the leading digit. */
leading = *numstr++;
- /* We have 3 bits from the mantissa in the leading nibble. */
+ /* We have 3 bits from the mantissa in the leading nibble.
+ Therefore we are here using `IEEE854_LONG_DOUBLE_BIAS + 3'. */
exponent = fpnum.ldbl.ieee.exponent;
- if (exponent == 0 ? !zero_mantissa
- : exponent < IEEE854_LONG_DOUBLE_BIAS + 3)
+ if (exponent == 0)
{
- expnegative = 1;
- exponent = -(exponent - (IEEE854_LONG_DOUBLE_BIAS + 3));
+ if (zero_mantissa)
+ expnegative = 0;
+ else
+ {
+ /* This is a denormalized number. */
+ expnegative = 1;
+ exponent = -(1 - (IEEE854_LONG_DOUBLE_BIAS + 3));
+ }
}
- else
+ else if (exponent >= IEEE854_LONG_DOUBLE_BIAS + 3)
{
expnegative = 0;
- if (exponent != 0)
- exponent -= IEEE854_LONG_DOUBLE_BIAS + 3;
+ exponent -= IEEE854_LONG_DOUBLE_BIAS + 2;
+ }
+ else
+ {
+ expnegative = 1;
+ exponent = -(exponent - (IEEE854_LONG_DOUBLE_BIAS + 3));
}
}