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

ruby-changes:30673

From: akr <ko1@a...>
Date: Sun, 1 Sep 2013 10:31:22 +0900 (JST)
Subject: [ruby-changes:30673] akr:r42752 (trunk): * numeric.c (rb_fix_bit_length): Moved from bignum.c.

akr	2013-09-01 10:31:16 +0900 (Sun, 01 Sep 2013)

  New Revision: 42752

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

  Log:
    * numeric.c (rb_fix_bit_length): Moved from bignum.c.

  Modified files:
    trunk/ChangeLog
    trunk/bignum.c
    trunk/numeric.c
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 42751)
+++ ChangeLog	(revision 42752)
@@ -1,3 +1,7 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Sun Sep  1 10:30:42 2013  Tanaka Akira  <akr@f...>
+
+	* numeric.c (rb_fix_bit_length): Moved from bignum.c.
+
 Sun Sep  1 09:55:45 2013  Tanaka Akira  <akr@f...>
 
 	* internal.h (bit_length): Moved from bignum.c.
Index: numeric.c
===================================================================
--- numeric.c	(revision 42751)
+++ numeric.c	(revision 42752)
@@ -3493,6 +3493,45 @@ fix_size(VALUE fix) https://github.com/ruby/ruby/blob/trunk/numeric.c#L3493
     return INT2FIX(sizeof(long));
 }
 
+/*
+ *  call-seq:
+ *     int.bit_length -> integer
+ *
+ *  Returns the number of bits of the value of <i>int</i>.
+ *
+ *  "the number of bits" means that
+ *  the bit position of the highest bit which is different to the sign bit.
+ *  (The bit position of the bit 2**n is n+1.)
+ *  If there is no such bit (zero or minus one), zero is returned.
+ *
+ *  I.e. This method returns ceil(log2(int < 0 ? -int : int+1)).
+ *
+ *     (-2**12-1).bit_length     #=> 13
+ *     (-2**12).bit_length       #=> 12
+ *     (-2**12+1).bit_length     #=> 12
+ *     -0x101.bit_length         #=> 9
+ *     -0x100.bit_length         #=> 8
+ *     -0xff.bit_length          #=> 8
+ *     -2.bit_length             #=> 1
+ *     -1.bit_length             #=> 0
+ *     0.bit_length              #=> 0
+ *     1.bit_length              #=> 1
+ *     0xff.bit_length           #=> 8
+ *     0x100.bit_length          #=> 9
+ *     (2**12-1).bit_length      #=> 12
+ *     (2**12).bit_length        #=> 13
+ *     (2**12+1).bit_length      #=> 13
+ */
+
+static VALUE
+rb_fix_bit_length(VALUE fix)
+{
+    long v = FIX2LONG(fix);
+    if (v < 0)
+        v = ~v;
+    return LONG2FIX(bit_length(v));
+}
+
 static VALUE
 int_upto_size(VALUE from, VALUE args, VALUE eobj)
 {
@@ -3864,6 +3903,7 @@ Init_Numeric(void) https://github.com/ruby/ruby/blob/trunk/numeric.c#L3903
 
     rb_define_method(rb_cFixnum, "to_f", fix_to_f, 0);
     rb_define_method(rb_cFixnum, "size", fix_size, 0);
+    rb_define_method(rb_cFixnum, "bit_length", rb_fix_bit_length, 0);
     rb_define_method(rb_cFixnum, "zero?", fix_zero_p, 0);
     rb_define_method(rb_cFixnum, "odd?", fix_odd_p, 0);
     rb_define_method(rb_cFixnum, "even?", fix_even_p, 0);
Index: bignum.c
===================================================================
--- bignum.c	(revision 42751)
+++ bignum.c	(revision 42752)
@@ -6608,45 +6608,6 @@ rb_big_bit_length(VALUE big) https://github.com/ruby/ruby/blob/trunk/bignum.c#L6608
 
 /*
  *  call-seq:
- *     int.bit_length -> integer
- *
- *  Returns the number of bits of the value of <i>int</i>.
- *
- *  "the number of bits" means that
- *  the bit position of the highest bit which is different to the sign bit.
- *  (The bit position of the bit 2**n is n+1.)
- *  If there is no such bit (zero or minus one), zero is returned.
- *
- *  I.e. This method returns ceil(log2(int < 0 ? -int : int+1)).
- *
- *     (-2**12-1).bit_length     #=> 13
- *     (-2**12).bit_length       #=> 12
- *     (-2**12+1).bit_length     #=> 12
- *     -0x101.bit_length         #=> 9
- *     -0x100.bit_length         #=> 8
- *     -0xff.bit_length          #=> 8
- *     -2.bit_length             #=> 1
- *     -1.bit_length             #=> 0
- *     0.bit_length              #=> 0
- *     1.bit_length              #=> 1
- *     0xff.bit_length           #=> 8
- *     0x100.bit_length          #=> 9
- *     (2**12-1).bit_length      #=> 12
- *     (2**12).bit_length        #=> 13
- *     (2**12+1).bit_length      #=> 13
- */
-
-static VALUE
-rb_fix_bit_length(VALUE fix)
-{
-    long v = FIX2LONG(fix);
-    if (v < 0)
-        v = ~v;
-    return LONG2FIX(bit_length(v));
-}
-
-/*
- *  call-seq:
  *     big.odd? -> true or false
  *
  *  Returns <code>true</code> if <i>big</i> is an odd number.
@@ -6740,7 +6701,5 @@ Init_Bignum(void) https://github.com/ruby/ruby/blob/trunk/bignum.c#L6701
     rb_define_method(rb_cBignum, "odd?", rb_big_odd_p, 0);
     rb_define_method(rb_cBignum, "even?", rb_big_even_p, 0);
 
-    rb_define_method(rb_cFixnum, "bit_length", rb_fix_bit_length, 0);
-
     power_cache_init();
 }

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

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