[前][次][番号順一覧][スレッド一覧]

ruby-changes:2416

From: ko1@a...
Date: 13 Nov 2007 16:33:28 +0900
Subject: [ruby-changes:2416] nobu - Ruby:r13907 (trunk, ruby_1_8): * numeric.c (flodivmod): work around for inifinity.

nobu	2007-11-13 16:33:09 +0900 (Tue, 13 Nov 2007)

  New Revision: 13907

  Modified files:
    branches/ruby_1_8/ChangeLog
    branches/ruby_1_8/configure.in
    branches/ruby_1_8/numeric.c
    trunk/ChangeLog
    trunk/configure.in
    trunk/numeric.c

  Log:
    * numeric.c (flodivmod): work around for inifinity.
    
    * numeric.c (flo_divmod): work around for platforms have no round().
      [ruby-dev:32247]


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/numeric.c?r1=13907&r2=13906
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/configure.in?r1=13907&r2=13906
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/ChangeLog?r1=13907&r2=13906
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13907&r2=13906
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/numeric.c?r1=13907&r2=13906
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/configure.in?r1=13907&r2=13906

Index: configure.in
===================================================================
--- configure.in	(revision 13906)
+++ configure.in	(revision 13907)
@@ -598,7 +598,7 @@
 	      getpgrp setpgrp getpgid setpgid initgroups getgroups setgroups\
 	      getpriority getrlimit setrlimit sysconf group_member\
 	      dlopen sigprocmask sigaction _setjmp vsnprintf snprintf\
-	      setsid telldir seekdir fchmod mktime timegm cosh sinh tanh log2\
+	      setsid telldir seekdir fchmod mktime timegm cosh sinh tanh log2 round\
 	      setuid setgid daemon select_large_fdset setenv unsetenv)
 AC_ARG_ENABLE(setreuid,
        [  --enable-setreuid       use setreuid()/setregid() according to need even if obsolete.],
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 13906)
+++ ChangeLog	(revision 13907)
@@ -1,3 +1,10 @@
+Tue Nov 13 16:33:07 2007  Nobuyoshi Nakada  <nobu@r...>
+
+	* numeric.c (flodivmod): work around for inifinity.
+
+	* numeric.c (flo_divmod): work around for platforms have no round().
+	  [ruby-dev:32247]
+
 Tue Nov 13 15:26:33 2007  Tanaka Akira  <akr@f...>
 
 	* lex.c.blt: moved from lex.c.
Index: numeric.c
===================================================================
--- numeric.c	(revision 13906)
+++ numeric.c	(revision 13907)
@@ -644,7 +644,10 @@
 	mod = x - z * y;
     }
 #endif
-    div = (x - mod) / y;
+    if (isinf(x) && !isinf(y) && !isnan(y))
+	div = x;
+    else
+	div = (x - mod) / y;
     if (y*mod < 0) {
 	mod += y;
 	div -= 1.0;
@@ -715,9 +718,16 @@
     }
     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)) {
+	a = rb_float_new(div);
+    }
     else {
 	a = rb_dbl2big(div);
     }
Index: ruby_1_8/numeric.c
===================================================================
--- ruby_1_8/numeric.c	(revision 13906)
+++ ruby_1_8/numeric.c	(revision 13907)
@@ -663,7 +663,10 @@
 	mod = x - z * y;
     }
 #endif
-    div = (x - mod) / y;
+    if (isinf(x) && !isinf(y) && !isnan(y))
+	div = x;
+    else
+	div = (x - mod) / y;
     if (y*mod < 0) {
 	mod += y;
 	div -= 1.0;
@@ -736,11 +739,18 @@
     }
     flodivmod(RFLOAT(x)->value, fy, &div, &mod);
     if (FIXABLE(div)) {
+#ifdef HVAE_ROUND
         val = round(div);
-        a = LONG2FIX(val);
+#else
+	val = (div < 0) ? ceil(x - 0.5) : floor(x + 0.5);
+#endif
+	a = LONG2FIX(val);
     }
+    else if (isnan(div) || isinf(div)) {
+	a = rb_float_new(div);
+    }
     else {
-        a = rb_dbl2big(div);
+	a = rb_dbl2big(div);
     }
     b = rb_float_new(mod);
     return rb_assoc_new(a, b);
Index: ruby_1_8/configure.in
===================================================================
--- ruby_1_8/configure.in	(revision 13906)
+++ ruby_1_8/configure.in	(revision 13907)
@@ -545,7 +545,7 @@
 	      getgroups setgroups getpriority getrlimit setrlimit sysconf\
 	      group_member dlopen sigprocmask\
 	      sigaction _setjmp setsid telldir seekdir fchmod mktime timegm\
-	      cosh sinh tanh setuid setgid setenv unsetenv)
+	      cosh sinh tanh round setuid setgid setenv unsetenv)
 AC_ARG_ENABLE(setreuid,
        [  --enable-setreuid       use setreuid()/setregid() according to need even if obsolete.],
        [use_setreuid=$enableval])
Index: ruby_1_8/ChangeLog
===================================================================
--- ruby_1_8/ChangeLog	(revision 13906)
+++ ruby_1_8/ChangeLog	(revision 13907)
@@ -1,3 +1,10 @@
+Tue Nov 13 16:33:07 2007  Nobuyoshi Nakada  <nobu@r...>
+
+	* numeric.c (flodivmod): work around for inifinity.
+
+	* numeric.c (flo_divmod): work around for platforms have no round().
+	  [ruby-dev:32247]
+
 Tue Nov 13 13:58:51 2007  Tanaka Akira  <akr@f...>
 
 	* numeric.c (numeric.c): Integer#ord implemented.  [ruby-dev:32206]

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧]