$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;
on 11.05.2008 08:15
on 11.05.2008 08:56
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
on 11.05.2008 16:45
$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
on 12.05.2008 05:39
$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
on 12.05.2008 12:45
$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
on 12.05.2008 16:34
$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
on 19.05.2008 11:32
$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