summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--numeric.c7
2 files changed, 7 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 68bdfc76b2..e12e6138c3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Tue Mar 22 09:38:19 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * numeric.c (flo_round): use pow instead of while-loop. fixes #4510
+ patched by Alex Young [ruby-core:35526]
+
Tue Mar 22 06:47:46 2011 NARUSE, Yui <naruse@ruby-lang.org>
* ext/date/date_strftime.c (date_strftime_wo_timespec):
diff --git a/numeric.c b/numeric.c
index a2fab9b31b..0f316fad93 100644
--- a/numeric.c
+++ b/numeric.c
@@ -1479,17 +1479,14 @@ flo_round(int argc, VALUE *argv, VALUE num)
{
VALUE nd;
double number, f;
- int ndigits = 0, i;
+ int ndigits = 0;
long val;
if (argc > 0 && rb_scan_args(argc, argv, "01", &nd) == 1) {
ndigits = NUM2INT(nd);
}
number = RFLOAT_VALUE(num);
- f = 1.0;
- i = abs(ndigits);
- while (--i >= 0)
- f = f*10.0;
+ f = pow(10, abs(ndigits));
if (isinf(f)) {
if (ndigits < 0) number = 0;