summaryrefslogtreecommitdiff
path: root/numeric.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-09-08 14:17:53 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-09-08 14:17:53 +0000
commit67245eec7192abdc1dd0dc2510c1f6c77df89bd0 (patch)
treefacd3ae86d8ea6fbb70c362cc9a1e22fbaf54b56 /numeric.c
parent1bcc5eb9223fae41acd88ecacef0aee0d2087e56 (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.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/numeric.c b/numeric.c
index 51ff88d7a6..74e5654b64 100644
--- a/numeric.c
+++ b/numeric.c
@@ -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";