summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorshyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-02-11 14:36:59 +0000
committershyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-02-11 14:36:59 +0000
commitd8cf7990456ab1d1b96f44b42b6da97b56ec9bc9 (patch)
tree01c5aada10d2c991c87d5006b878ee8f97c53b7f /ext
parent75841340b29c7abcdc1b728ae5fd2ee20104eac4 (diff)
merge revision(s) 20228:
* ext/bigdecimal/bigdecimal.c (VpMidRound): Round method bug pointed by Ryan Platte fixed(Patch to the patch from "NATORI Shin"). [ruby-talk:273360] back ported from 1.9. fix [ruby-core:19791] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_6@22241 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
-rw-r--r--ext/bigdecimal/bigdecimal.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/ext/bigdecimal/bigdecimal.c b/ext/bigdecimal/bigdecimal.c
index 636c0907d6..7400b313a4 100644
--- a/ext/bigdecimal/bigdecimal.c
+++ b/ext/bigdecimal/bigdecimal.c
@@ -4345,6 +4345,11 @@ VpMidRound(Real *y, int f, int nf)
nf += y->exponent*((int)BASE_FIG);
exptoadd=0;
if (nf < 0) {
+ /* rounding position too left(large). */
+ if((f!=VP_ROUND_CEIL) && (f!=VP_ROUND_FLOOR)) {
+ VpSetZero(y,VpGetSign(y)); /* truncate everything */
+ return 0;
+ }
exptoadd = -nf;
nf = 0;
}