mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* 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
This commit is contained in:
parent
1bcc5eb922
commit
67245eec71
16 changed files with 143 additions and 69 deletions
14
numeric.c
14
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";
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue