From 631dde2572eb78cbf09d73d23a43852ccb199bd1 Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 25 Nov 2016 06:28:00 +0000 Subject: round-down * numeric.c (round_half_down, int_round_half_down): support round-down mode. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56897 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- rational.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'rational.c') diff --git a/rational.c b/rational.c index f7af5ca353..a78b347c08 100644 --- a/rational.c +++ b/rational.c @@ -1323,6 +1323,31 @@ nurat_round_half_up(VALUE self) return num; } +static VALUE +nurat_round_half_down(VALUE self) +{ + VALUE num, den, neg; + + get_dat1(self); + + num = dat->num; + den = dat->den; + neg = INT_NEGATIVE_P(num); + + if (neg) + num = rb_int_uminus(num); + + num = rb_int_plus(rb_int_mul(num, TWO), den); + num = rb_int_minus(num, ONE); + den = rb_int_mul(den, TWO); + num = rb_int_idiv(num, den); + + if (neg) + num = rb_int_uminus(num); + + return num; +} + static VALUE nurat_round_half_even(VALUE self) { -- cgit v1.2.3