re PR libfortran/47567 (Wrong output for small absolute values with F editing)
2011-02-05 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libgfortran/47567 * io/write_float.def (output_float): Eliminate some redundant code. Adjust width for case of F0.X for values of zero and all other values. Expand cases where '*' is set to give cleaner results. From-SVN: r169853
This commit is contained in:
parent
02b177518d
commit
9e7628863b
@ -1,3 +1,10 @@
|
||||
2011-02-05 Jerry DeLisle <jvdelisle@gcc.gnu.org>
|
||||
|
||||
PR libgfortran/47567
|
||||
* io/write_float.def (output_float): Eliminate some redundant code.
|
||||
Adjust width for case of F0.X for values of zero and all other values.
|
||||
Expand cases where '*' is set to give cleaner results.
|
||||
|
||||
2011-02-05 Janne Blomqvist <jb@gcc.gnu.org>
|
||||
|
||||
PR libfortran/47571
|
||||
|
@ -111,14 +111,12 @@ output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size,
|
||||
if (zero_flag)
|
||||
{
|
||||
e = 0;
|
||||
if (compile_options.sign_zero == 1)
|
||||
sign = calculate_sign (dtp, sign_bit);
|
||||
else
|
||||
if (compile_options.sign_zero != 1)
|
||||
sign = calculate_sign (dtp, 0);
|
||||
|
||||
/* Handle special cases. */
|
||||
if (w == 0)
|
||||
w = d + 2;
|
||||
w = d + 1;
|
||||
|
||||
/* For this one we choose to not output a decimal point.
|
||||
F95 10.5.1.2.1 */
|
||||
@ -138,7 +136,6 @@ output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size,
|
||||
*out = '0';
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* Normalize the fractional component. */
|
||||
@ -417,7 +414,10 @@ output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size,
|
||||
|
||||
/* Pick a field size if none was specified. */
|
||||
if (w <= 0)
|
||||
w = nbefore + nzero + nafter + (sign != S_NONE ? 2 : 1);
|
||||
{
|
||||
w = nbefore + nzero + nafter + (sign != S_NONE ? 2 : 1);
|
||||
w = w == 1 ? 2 : w;
|
||||
}
|
||||
|
||||
/* Work out how much padding is needed. */
|
||||
nblanks = w - (nbefore + nzero + nafter + edigits + 1);
|
||||
@ -436,7 +436,7 @@ output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size,
|
||||
return FAILURE;
|
||||
|
||||
/* Check the value fits in the specified field width. */
|
||||
if (nblanks < 0 || edigits == -1)
|
||||
if (nblanks < 0 || edigits == -1 || w == 1 || (w == 2 && sign != S_NONE))
|
||||
{
|
||||
if (unlikely (is_char4_unit (dtp)))
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user