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

ruby-changes:12069

From: nobu <ko1@a...>
Date: Fri, 19 Jun 2009 08:14:27 +0900 (JST)
Subject: [ruby-changes:12069] Ruby:r23739 (trunk): * bignum.c (big_lshift, big_rshift): return Bignum always without

nobu	2009-06-19 08:14:08 +0900 (Fri, 19 Jun 2009)

  New Revision: 23739

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=23739

  Log:
    * bignum.c (big_lshift, big_rshift): return Bignum always without
      normalization.  [ruby-dev:38679]

  Modified files:
    trunk/ChangeLog
    trunk/bignum.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 23738)
+++ ChangeLog	(revision 23739)
@@ -1,3 +1,8 @@
+Fri Jun 19 08:14:07 2009  Nobuyoshi Nakada  <nobu@r...>
+
+	* bignum.c (big_lshift, big_rshift): return Bignum always withou
+	  normalization.  [ruby-dev:38679]
+
 Thu Jun 18 22:31:38 2009  Tadayoshi Funaba  <tadf@d...>
 
 	* rational.c (nurat_s_convert): calls to_r when the given argument
@@ -124,7 +129,7 @@
 Wed Jun 17 06:48:28 2009  Koichi Sasada  <ko1@a...>
 
 	* st.c, include/ruby/st.h (st_memsize): added.  This function returns
-	  the memory usage of st_talbe.
+	  the memory usage of st_table.
 
 Wed Jun 17 06:19:06 2009  Koichi Sasada  <ko1@a...>
 
Index: bignum.c
===================================================================
--- bignum.c	(revision 23738)
+++ bignum.c	(revision 23739)
@@ -2412,23 +2412,23 @@
       case T_FIXNUM:
 	y = rb_int2big(FIX2LONG(y));
       case T_BIGNUM: {
-	  bigtrunc(y);
-	  l = RBIGNUM_LEN(y) - 1;
-	  ey = l * BITSPERDIG;
-	  ey += bdigbitsize(BDIGITS(y)[l]);
-	  ey -= DBL_BIGDIG * BITSPERDIG;
-	  if (ey) y = big_shift(y, ey);
-	  bignum:
-	  bigdivrem(x, y, &z, 0);
-	  l = ex - ey;
+	bigtrunc(y);
+	l = RBIGNUM_LEN(y) - 1;
+	ey = l * BITSPERDIG;
+	ey += bdigbitsize(BDIGITS(y)[l]);
+	ey -= DBL_BIGDIG * BITSPERDIG;
+	if (ey) y = big_shift(y, ey);
+      bignum:
+	bigdivrem(x, y, &z, 0);
+	l = ex - ey;
 #if SIZEOF_LONG > SIZEOF_INT
-	  {
-	      /* Visual C++ can't be here */
-	      if (l > INT_MAX) return DBL2NUM(ruby_div0(1.0));
-	      if (l < INT_MIN) return DBL2NUM(0.0);
-	  }
+	{
+	    /* Visual C++ can't be here */
+	    if (l > INT_MAX) return DBL2NUM(ruby_div0(1.0));
+	    if (l < INT_MIN) return DBL2NUM(0.0);
+	}
 #endif
-	  return DBL2NUM(ldexp(big2dbl(z), (int)l));
+	return DBL2NUM(ldexp(big2dbl(z), (int)l));
       }
       case T_FLOAT:
 	y = dbl2big(ldexp(frexp(RFLOAT_VALUE(y), &i), DBL_MANT_DIG));
@@ -2896,8 +2896,8 @@
 	y = rb_to_int(y);
     }
 
-    if (neg) return big_rshift(x, shift);
-    return big_lshift(x, shift);
+    x = neg ? big_rshift(x, shift) : big_lshift(x, shift);
+    return bignorm(x);
 }
 
 static VALUE
@@ -2923,7 +2923,7 @@
 	num = BIGDN(num);
     }
     *zds = BIGLO(num);
-    return bignorm(z);
+    return z;
 }
 
 /*
@@ -2962,8 +2962,8 @@
 	y = rb_to_int(y);
     }
 
-    if (neg) return big_lshift(x, shift);
-    return big_rshift(x, shift);
+    x = neg ? big_lshift(x, shift) : big_rshift(x, shift);
+    return bignorm(x);
 }
 
 static VALUE
@@ -3006,7 +3006,7 @@
     if (!RBIGNUM_SIGN(x)) {
 	get2comp(z);
     }
-    return bignorm(z);
+    return z;
 }
 
 /*

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

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