ruby-changes:2423
From: ko1@a...
Date: 14 Nov 2007 01:35:07 +0900
Subject: [ruby-changes:2423] nobu - Ruby:r13914 (trunk, ruby_1_8): * numeric.c (round): fallback definition.
nobu 2007-11-14 01:34:45 +0900 (Wed, 14 Nov 2007) New Revision: 13914 Modified files: branches/ruby_1_8/ChangeLog branches/ruby_1_8/numeric.c branches/ruby_1_8/version.h trunk/ChangeLog trunk/numeric.c Log: * numeric.c (round): fallback definition. * numeric.c (flo_divmod, flo_round): use round() always. [ruby-dev:32269] http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/numeric.c?r1=13914&r2=13913 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/ChangeLog?r1=13914&r2=13913 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13914&r2=13913 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/numeric.c?r1=13914&r2=13913 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/version.h?r1=13914&r2=13913 Index: ChangeLog =================================================================== --- ChangeLog (revision 13913) +++ ChangeLog (revision 13914) @@ -1,3 +1,10 @@ +Wed Nov 14 01:34:42 2007 Nobuyoshi Nakada <nobu@r...> + + * numeric.c (round): fallback definition. + + * numeric.c (flo_divmod, flo_round): use round() always. + [ruby-dev:32269] + Wed Nov 14 00:33:49 2007 Koichi Sasada <ko1@a...> * include/ruby/ruby.h: introduce 2 macros: Index: numeric.c =================================================================== --- numeric.c (revision 13913) +++ numeric.c (revision 13914) @@ -63,6 +63,24 @@ #define DBL_EPSILON 2.2204460492503131e-16 #endif +#ifndef HAVE_ROUND +double +round(double x) +{ + double f; + + if (x > 0.0) { + f = floor(x); + x = f + (x - f >= 0.5); + } + else if (x < 0.0) { + f = ceil(x); + x = f - (f - x >= 0.5); + } + return x; +} +#endif + static ID id_coerce, id_to_i, id_eq; VALUE rb_cNumeric; @@ -718,11 +736,7 @@ } flodivmod(RFLOAT_VALUE(x), fy, &div, &mod); if (FIXABLE(div)) { -#ifdef HVAE_ROUND val = round(div); -#else - val = (div < 0) ? ceil(x - 0.5) : floor(x + 0.5); -#endif a = LONG2FIX(val); } else if (isnan(div) || isinf(div)) { @@ -1261,8 +1275,7 @@ if (ndigits < 0) number /= f; else number *= f; - if (number > 0.0) number = floor(number+0.5); - if (number < 0.0) number = ceil(number-0.5); + number = round(number); if (ndigits < 0) number *= f; else number /= f; Index: ruby_1_8/numeric.c =================================================================== --- ruby_1_8/numeric.c (revision 13913) +++ ruby_1_8/numeric.c (revision 13914) @@ -63,6 +63,25 @@ #define DBL_EPSILON 2.2204460492503131e-16 #endif +#ifndef HAVE_ROUND +double +round(x) + double x; +{ + double f; + + if (x > 0.0) { + f = floor(x); + x = f + (x - f >= 0.5); + } + else if (x < 0.0) { + f = ceil(x); + x = f - (f - x >= 0.5); + } + return x; +} +#endif + static ID id_coerce, id_to_i, id_eq; VALUE rb_cNumeric; @@ -739,11 +758,7 @@ } flodivmod(RFLOAT(x)->value, fy, &div, &mod); if (FIXABLE(div)) { -#ifdef HVAE_ROUND val = round(div); -#else - val = (div < 0) ? ceil(x - 0.5) : floor(x + 0.5); -#endif a = LONG2FIX(val); } else if (isnan(div) || isinf(div)) { @@ -1302,8 +1317,7 @@ double f = RFLOAT(num)->value; long val; - if (f > 0.0) f = floor(f+0.5); - if (f < 0.0) f = ceil(f-0.5); + f = round(f); if (!FIXABLE(f)) { return rb_dbl2big(f); @@ -1541,7 +1555,7 @@ char *s; sprintf(buf, "%-.10g", RFLOAT(val)->value); - if (s = strchr(buf, ' ')) *s = '\0'; + if ((s = strchr(buf, ' ')) != 0) *s = '\0'; rb_raise(rb_eRangeError, "float %s out of range of integer", buf); } @@ -1692,7 +1706,7 @@ char *s; sprintf(buf, "%-.10g", RFLOAT(val)->value); - if (s = strchr(buf, ' ')) *s = '\0'; + if ((s = strchr(buf, ' ')) != 0) *s = '\0'; rb_raise(rb_eRangeError, "float %s out of range of long long", buf); } Index: ruby_1_8/ChangeLog =================================================================== --- ruby_1_8/ChangeLog (revision 13913) +++ ruby_1_8/ChangeLog (revision 13914) @@ -1,3 +1,10 @@ +Wed Nov 14 01:34:42 2007 Nobuyoshi Nakada <nobu@r...> + + * numeric.c (round): fallback definition. + + * numeric.c (flo_divmod, flo_round): use round() always. + [ruby-dev:32269] + Tue Nov 13 22:02:23 2007 Masatoshi SEKI <m_seki@m...> * lib/drb/drb.rb: remove Thread.exclusive. Index: ruby_1_8/version.h =================================================================== --- ruby_1_8/version.h (revision 13913) +++ ruby_1_8/version.h (revision 13914) @@ -1,7 +1,7 @@ #define RUBY_VERSION "1.8.6" -#define RUBY_RELEASE_DATE "2007-11-13" +#define RUBY_RELEASE_DATE "2007-11-14" #define RUBY_VERSION_CODE 186 -#define RUBY_RELEASE_CODE 20071113 +#define RUBY_RELEASE_CODE 20071114 #define RUBY_PATCHLEVEL 5000 #define RUBY_VERSION_MAJOR 1 @@ -9,7 +9,7 @@ #define RUBY_VERSION_TEENY 6 #define RUBY_RELEASE_YEAR 2007 #define RUBY_RELEASE_MONTH 11 -#define RUBY_RELEASE_DAY 13 +#define RUBY_RELEASE_DAY 14 #ifdef RUBY_EXTERN RUBY_EXTERN const char ruby_version[]; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml