diff --git a/libinterp/corefcn/pr-output.cc b/libinterp/corefcn/pr-output.cc --- a/libinterp/corefcn/pr-output.cc +++ b/libinterp/corefcn/pr-output.cc @@ -721,7 +721,7 @@ make_format (const FloatMatrix& m) template static inline float_display_format make_complex_format (int x_max, int x_min, int r_x, - bool inf_or_nan, int int_only) + bool inf_or_nan, int int_or_inf_or_nan) { float_format r_fmt; float_format i_fmt; @@ -732,8 +732,8 @@ make_complex_format (int x_max, int x_mi if (rat_format) { - i_fw = 0; - r_fw = 0; + i_fw = 9; + r_fw = 9; rd = 0; } else if (bank_format) @@ -755,7 +755,7 @@ make_complex_format (int x_max, int x_mi i_fw = 8 * sizeof (T); rd = 0; } - else if (inf_or_nan || int_only) + else if (int_or_inf_or_nan) { int digits = (x_max > x_min ? x_max : x_min); i_fw = (digits <= 0 ? 1 : digits); @@ -765,12 +765,7 @@ make_complex_format (int x_max, int x_mi i_fw = 3; r_fw = 4; } - - if (int_only) - { - ld = digits; - rd = 0; - } + rd = r_fw; } else { @@ -819,6 +814,11 @@ make_complex_format (int x_max, int x_mi i_fw = ld + 1 + rd; r_fw = i_fw + 1; + if (inf_or_nan && i_fw < 3) + { + i_fw = 3; + r_fw = 4; + } } if (! (rat_format || bank_format || hex_format || bit_format) @@ -872,10 +872,10 @@ make_complex_format (int x_max, int x_mi i_fmt.uppercase (); } } - else if (! bank_format && (inf_or_nan || int_only)) + else if (! bank_format && int_or_inf_or_nan) { - r_fmt = float_format (r_fw, ld); - i_fmt = float_format (i_fw, ld); + r_fmt = float_format (r_fw, rd); + i_fmt = float_format (i_fw, rd); } else { @@ -898,17 +898,16 @@ make_complex_scalar_format (const std::c bool inf_or_nan = (octave::math::isinf (c) || octave::math::isnan (c)); - bool int_only = (octave::math::x_nint (rp) == rp - && octave::math::x_nint (ip) == ip); + bool int_or_inf_or_nan + = ((octave::math::x_nint (rp) == rp || octave::math::isinf (rp) || octave::math::isnan (rp)) + && (octave::math::x_nint (ip) == ip || octave::math::isinf (ip) || octave::math::isnan (ip))); T r_abs = (rp < 0 ? -rp : rp); T i_abs = (ip < 0 ? -ip : ip); - int r_x = (! octave::math::isfinite (rp) - || r_abs == 0) ? 0 : num_digits (r_abs); - - int i_x = (! octave::math::isfinite (ip) - || i_abs == 0) ? 0 : num_digits (i_abs); + int r_x = (r_abs == 0 ? 0 : num_digits (r_abs)); + + int i_x = (i_abs == 0 ? 0 : num_digits (i_abs)); int x_max, x_min; @@ -923,7 +922,7 @@ make_complex_scalar_format (const std::c x_min = r_x; } - return make_complex_format (x_max, x_min, r_x, inf_or_nan, int_only); + return make_complex_format (x_max, x_min, r_x, inf_or_nan, int_or_inf_or_nan); } template <>