Ruby Forum Ruby-dev > Bignum $B$N%a%=%C%I$+$i$N(B bigzero_p

Posted by wanabe (Guest)
on 11.05.2008 08:15
(Received via mailing list)
$B%o%J%Y$H?=$7$^$9!#(B

Ruby $B$+$i(B Bignum $B%$%s%9%?%s%9$N%a%=%C%I$,8F$P$l$?>l9g$K$O(B
bigzero_p $B$G$9$Y$F$N%S%C%H$r8+$kI,MW$O$"$^$jL5$$$h$&$K;W$$$^$9!#(B

$B$=$3$G!"3N<B$K(B Fixnum 
$B$NHO0O$K$J$$$3$H$r<($9%U%i%0$GJ,4t$9$k%Q%C%A$r=q$-$^$7$?!#(B
$B;n83E*$K(B to_s $B$,8F$P$l$?$H$-$K$@$1IU2C$7$F$$$^$9!#(B

Index: include/ruby/ruby.h
===================================================================
--- include/ruby/ruby.h  (revision 16344)
+++ include/ruby/ruby.h  (working copy)
@@ -610,9 +610,11 @@
 #define RBIGNUM_POSITIVE_P(b) RBIGNUM_SIGN(b)
 #define RBIGNUM_NEGATIVE_P(b) (!RBIGNUM_SIGN(b))

-#define RBIGNUM_EMBED_FLAG FL_USER2
-#define RBIGNUM_EMBED_LEN_MASK (FL_USER5|FL_USER4|FL_USER3)
-#define RBIGNUM_EMBED_LEN_SHIFT (FL_USHIFT+3)
+#define RBIGNUM_UNFIXABLE_FLAG FL_USER2
+
+#define RBIGNUM_EMBED_FLAG FL_USER3
+#define RBIGNUM_EMBED_LEN_MASK (FL_USER6|FL_USER5|FL_USER4)
+#define RBIGNUM_EMBED_LEN_SHIFT (FL_USHIFT+4)
 #define RBIGNUM_LEN(b) \
     ((RBASIC(b)->flags & RBIGNUM_EMBED_FLAG) ? \
      (long)((RBASIC(b)->flags >> RBIGNUM_EMBED_LEN_SHIFT) & \
Index: bignum.c
===================================================================
--- bignum.c  (revision 16344)
+++ bignum.c  (working copy)
@@ -44,6 +44,10 @@
 bigzero_p(VALUE x)
 {
     long i;
+
+    if (FL_TEST(x, RBIGNUM_UNFIXABLE_FLAG)) {
+  return 0;
+    }
     for (i = 0; i < RBIGNUM_LEN(x); ++i) {
   if (BDIGITS(x)[i]) return 0;
     }
@@ -1000,6 +1004,7 @@
 {
     int base;

+    FL_SET(x, RBIGNUM_UNFIXABLE_FLAG);
     if (argc == 0) base = 10;
     else {
   VALUE b;
Posted by Tanaka Akira (Guest)
on 11.05.2008 08:56
(Received via mailing list)
In article <8964790c0805102315v7b8abd11u18adcde60cbb509@mail.gmail.com>,
  wanabe <s.wanabe@gmail.com> writes:

> Ruby $B$+$i(B Bignum $B%$%s%9%?%s%9$N%a%=%C%I$,8F$P$l$?>l9g$K$O(B
> bigzero_p $B$G$9$Y$F$N%S%C%H$r8+$kI,MW$O$"$^$jL5$$$h$&$K;W$$$^$9!#(B

$B;W$C$?$s$G$9$,!":G>e0L%S%C%H$+$i8!::$9$k$"$?$j$G<j$rBG$D$N$O(B
$B$I$&$G$9$+$M!#(B
Posted by Nobuyoshi Nakada (nobu)
on 11.05.2008 16:45
(Received via mailing list)
$B$J$+$@$G$9!#(B

At Sun, 11 May 2008 15:55:26 +0900,
Tanaka Akira wrote in [ruby-dev:34649]:
> > Ruby $B$+$i(B Bignum $B%$%s%9%?%s%9$N%a%=%C%I$,8F$P$l$?>l9g$K$O(B
> > bigzero_p $B$G$9$Y$F$N%S%C%H$r8+$kI,MW$O$"$^$jL5$$$h$&$K;W$$$^$9!#(B
> 
> $B;W$C$?$s$G$9$,!":G>e0L%S%C%H$+$i8!::$9$k$"$?$j$G<j$rBG$D$N$O(B
> $B$I$&$G$9$+$M!#(B

$B$[$H$s$I$N%1!<%9$G$O(BRBIGNUM_LEN$B$O(B0$B$+(B1$B!"$^$l$J%1!<%9$G$b(B2$B;_$^$j$@(B
$B$m$&$H;W$C$F$$$?$N$G$9$,!"$=$s$J$KBg$-$J(BBignum 
0$B$,BgNL$K$G$-$k%1!<(B
$B%9$,$"$j$^$7$?$+!#(B
Posted by Yukihiro Matsumoto (Guest)
on 12.05.2008 05:39
(Received via mailing list)
$B$^$D$b$H(B $B$f$-$R$m$G$9(B

In message "Re: [ruby-dev:34651] Re: Bignum $B$N%a%=%C%I$+$i$N(B 
bigzero_p"
    on Sun, 11 May 2008 23:44:49 +0900, Nobuyoshi Nakada 
<nobu@ruby-lang.org> writes:

|At Sun, 11 May 2008 15:55:26 +0900,
|Tanaka Akira wrote in [ruby-dev:34649]:
|> > Ruby $B$+$i(B Bignum $B%$%s%9%?%s%9$N%a%=%C%I$,8F$P$l$?>l9g$K$O(B
|> > bigzero_p $B$G$9$Y$F$N%S%C%H$r8+$kI,MW$O$"$^$jL5$$$h$&$K;W$$$^$9!#(B
|> 
|> $B;W$C$?$s$G$9$,!":G>e0L%S%C%H$+$i8!::$9$k$"$?$j$G<j$rBG$D$N$O(B
|> $B$I$&$G$9$+$M!#(B
|
|$B$[$H$s$I$N%1!<%9$G$O(BRBIGNUM_LEN$B$O(B0$B$+(B1$B!"$^$l$J%1!<%9$G$b(B2$B;_$^$j$@(B
|$B$m$&$H;W$C$F$$$?$N$G$9$,!"$=$s$J$KBg$-$J(BBignum 0$B$,BgNL$K$G$-$k%1!<(B
|$B%9$,$"$j$^$7$?$+!#(B

$B$h$C$]$I$N$3$H$,$J$$$H:9$O=P$J$$$@$m$&$H$$$&$3$H$G!"$"$^$jI,(B
$BMW@-$O46$8$^$;$s!#$+$J$jBg$-$J?t$G2<$NJ}$N%S%C%H$,$<$s$V%<%m$C(B
$B$F%1!<%9$@$H$A$g$C$H$O:9$,=P$k$N$+$J!#$G$b!"$=$l$J$i(Bakr$B$5$s(B
$B$N$*$C$7$c$k$h$&$K>e0L$+$i%A%'%C%/$7$F$$$/$N$,$h$5$=$&$G$9$M!#(B

$B2>$K85$N%Q%C%A$NJ}8~$G9T$/$H$9$k$H!"(Bbigzero_p$B$G??$rJV$9D>A0$K(B
$B$b%U%i%0$r%;%C%H$7$?J}$,$h$$$G$7$g$&$M!#(B
Posted by wanabe (Guest)
on 12.05.2008 12:45
(Received via mailing list)
$B%o%J%Y$G$9!#(B

2008/05/11 23:44 Nobuyoshi Nakada <nobu@ruby-lang.org>:
>  At Sun, 11 May 2008 15:55:26 +0900,
>  Tanaka Akira wrote in [ruby-dev:34649]:
>
>  > $B;W$C$?$s$G$9$,!":G>e0L%S%C%H$+$i8!::$9$k$"$?$j$G<j$rBG$D$N$O(B
>  > $B$I$&$G$9$+$M!#(B
>
>  $B$[$H$s$I$N%1!<%9$G$O(BRBIGNUM_LEN$B$O(B0$B$+(B1$B!"$^$l$J%1!<%9$G$b(B2$B;_$^$j$@(B
>  $B$m$&$H;W$C$F$$$?$N$G$9$,!"$=$s$J$KBg$-$J(BBignum 0$B$,BgNL$K$G$-$k%1!<(B
>  $B%9$,$"$j$^$7$?$+!#(B

test/ruby/test_bignum.rb $B$N(B test_too_big_to_s 
$B$N%\%H%k%M%C%/$rC5$7$?7k2L(B
bigzero_p $B$K9T$-Ce$-$^$7$?!#(B
$B$G$9$,M>J,$J%U%i%0$r?7@_$9$k$h$j(B akr 
$B$5$s$N0F$N$[$&$,$h$C$]$I$h$5$=$&$K;W$$$^$9!#(B
Posted by Yukihiro Matsumoto (Guest)
on 12.05.2008 16:34
(Received via mailing list)
$B$^$D$b$H(B $B$f$-$R$m$G$9(B

In message "Re: [ruby-dev:34657] Re: Bignum $B$N%a%=%C%I$+$i$N(B 
bigzero_p"
    on Mon, 12 May 2008 19:44:59 +0900, wanabe <s.wanabe@gmail.com> 
writes:

|>  $B$[$H$s$I$N%1!<%9$G$O(BRBIGNUM_LEN$B$O(B0$B$+(B1$B!"$^$l$J%1!<%9$G$b(B2$B;_$^$j$@(B
|>  $B$m$&$H;W$C$F$$$?$N$G$9$,!"$=$s$J$KBg$-$J(BBignum 0$B$,BgNL$K$G$-$k%1!<(B
|>  $B%9$,$"$j$^$7$?$+!#(B
|
|test/ruby/test_bignum.rb $B$N(B test_too_big_to_s $B$N%\%H%k%M%C%/$rC5$7$?7k2L(B
|bigzero_p $B$K9T$-Ce$-$^$7$?!#(B
|$B$G$9$,M>J,$J%U%i%0$r?7@_$9$k$h$j(B akr $B$5$s$N0F$N$[$&$,$h$C$]$I$h$5$=$&$K;W$$$^$9!#(B

$B$=$&$G$7$?$+!#:#F|(Bakr$B$5$s$,%3%_%C%H$5$l$^$7$?$N$G$=$l$K$h$j(B
$B%\%H%k%M%C%/$,$I$&$J$C$?$+4X?4$,$"$j$^$9!#(B
Posted by wanabe (Guest)
on 19.05.2008 11:32
(Received via mailing list)
$B%o%J%Y$G$9!#(B

2008/05/12 23:33 Yukihiro Matsumoto <matz@ruby-lang.org>:
> |test/ruby/test_bignum.rb $B$N(B test_too_big_to_s $B$N%\%H%k%M%C%/$rC5$7$?7k2L(B
> |bigzero_p $B$K9T$-Ce$-$^$7$?!#(B
> |$B$G$9$,M>J,$J%U%i%0$r?7@_$9$k$h$j(B akr $B$5$s$N0F$N$[$&$,$h$C$]$I$h$5$=$&$K;W$$$^$9!#(B
>
> $B$=$&$G$7$?$+!#:#F|(Bakr$B$5$s$,%3%_%C%H$5$l$^$7$?$N$G$=$l$K$h$j(B
> $B%\%H%k%M%C%/$,$I$&$J$C$?$+4X?4$,$"$j$^$9!#(B

to_s $B$,8F$S=P$5$l$F$+$i(B RangeError 
$B$^$G?t==IC$+$+$C$F$$$?$H$3$m$,(B
$B0l=V$G$9$`$h$&$K$J$j$^$7$?!#(B
$B$*IU$-9g$$$$$?$@$$$?3'$5$s!JFC$K(B akr 
$B$5$s!K$"$j$,$H$&$4$6$$$^$7$?!#(B