diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-09-08 14:17:53 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-09-08 14:17:53 +0000 |
commit | 67245eec7192abdc1dd0dc2510c1f6c77df89bd0 (patch) | |
tree | facd3ae86d8ea6fbb70c362cc9a1e22fbaf54b56 /numeric.c | |
parent | 1bcc5eb9223fae41acd88ecacef0aee0d2087e56 (diff) |
* eval.c (rb_thread_restore_context): save current value of
lastline and lastmatch in the thread struct for later restore.
* eval.c (rb_thread_save_context): restore lastline and lastmatch.
* numeric.c (flo_to_s): should handle negative float value.
* class.c (rb_include_module): should check whole ancestors to
avoid duplicate module inclusion.
* string.c (trnext): should check backslash before updating "now"
position.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1746 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'numeric.c')
-rw-r--r-- | numeric.c | 14 |
1 files changed, 9 insertions, 5 deletions
@@ -216,21 +216,25 @@ flo_to_s(flt) char buf[24]; char *fmt = "%.10g"; double value = RFLOAT(flt)->value; - double d1, d2; + double avalue, d1, d2; if (isinf(value)) return rb_str_new2(value < 0 ? "-Infinity" : "Infinity"); else if(isnan(value)) return rb_str_new2("NaN"); - if (value < 1.0e-3) { - d1 = value; + avalue = fabs(value); + if (avalue == 0.0) { + fmt = "%.1f"; + } + else if (avalue < 1.0e-3) { + d1 = avalue; while (d1 < 1.0) d1 *= 10.0; d1 = modf(d1, &d2); if (d1 == 0) fmt = "%.1e"; } - else if (value >= 1.0e10) { - d1 = value; + else if (avalue >= 1.0e10) { + d1 = avalue; while (d1 > 10.0) d1 /= 10.0; d1 = modf(d1, &d2); if (d1 == 0) fmt = "%.1e"; |