[#31166] is_ruby_native_thread() — Masahiro Sakai (酒井政裕) <masahiro.sakai@...>

酒井です。

16 messages 2007/07/08
[#31269] Re: is_ruby_native_thread() — Nobuyoshi Nakada <nobu@...> 2007/07/21

なかだです。

[#31270] Re: is_ruby_native_thread() — Hidetoshi NAGAI <nagai@...> 2007/07/22

永井@知能.九工大です.

[#31298] retryの使い方 — eklerni <eklerni@...>

松尾といいます。

52 messages 2007/07/25
[#31299] Re: retryの使い方 — SASADA Koichi <ko1@...> 2007/07/26

 ささだです。

[#31300] Re: retryの使い方 — eklerni <eklerni@...> 2007/07/26

松尾です、返信ありがとうございます。

[#31303] Re: retryの使い方 — Yugui <yugui@...> 2007/07/26

Yuguiといいます。

[#31306] Re: retryの使い方 — eklerni <eklerni@...> 2007/07/26

松尾といいます。

[#31308] Re: retryの使い方 — Tanaka Akira <akr@...> 2007/07/26

In article <46A909DD.1070405@for.mail-box.ne.jp>,

[#31310] Re: retryの使い方 — eklerni <eklerni@...> 2007/07/26

Tanaka Akira さんは書きました:

[#31314] Re: retryの使い方 — Tanaka Akira <akr@...> 2007/07/30

In article <46A92530.80507@for.mail-box.ne.jp>,

[#31315] Re: retryの使い方 — eklerni <eklerni@...> 2007/07/30

Tanaka Akira さんは書きました:

[#31316] Re: retryの使い方 — Tanaka Akira <akr@...> 2007/07/30

In article <46AD7A16.8080509@for.mail-box.ne.jp>,

[#31317] Re: retryの使い方 — eklerni <eklerni@...> 2007/07/31

松尾です。

[#31381] Re: retryの使い方 — SASADA Koichi <ko1@...> 2007/08/12

 ささだです。

[#31422] Re: retryの使い方 — Yukihiro Matsumoto <matz@...> 2007/08/15

まつもと ゆきひろです

[#31425] Re: retryの使い方 — Tanaka Akira <akr@...> 2007/08/15

In article <E1ILDTi-0005T6-Be@x31>,

[#31426] Re: retryの使い方 — Yukihiro Matsumoto <matz@...> 2007/08/15

まつもと ゆきひろです

[#31433] Re: retryの使い方 — Tanaka Akira <akr@...> 2007/08/16

In article <E1ILKn6-0003Nv-0f@x31>,

[#31435] Re: retryの使い方 — Yukihiro Matsumoto <matz@...> 2007/08/16

まつもと ゆきひろです

[#31447] Re: retryの使い方 — Tanaka Akira <akr@...> 2007/08/16

In article <E1ILVN9-0006xJ-7I@x31>,

[#31450] Re: retryの使い方 — Tanaka Akira <akr@...> 2007/08/17

In article <E1ILq4x-0002Bs-Lg@x31>,

[#31451] Re: retryの使い方 — Yukihiro Matsumoto <matz@...> 2007/08/17

まつもと ゆきひろです

[ruby-dev:31230] Re: ~big_zero after big_zero % big_neg

From: Nobuyoshi Nakada <nobu@...>
Date: 2007-07-15 04:26:12 UTC
List: ruby-dev #31230
なかだです。

At Sun, 15 Jul 2007 09:47:44 +0900,
Tanaka Akira wrote in [ruby-dev:31229]:
> 以下のように、Bignum の 0 をビット演算の否定したときに 0 に
> なることがあります。

> が、上記から p big_zero % big_neg を省くと、挙動が変わってそ
> うはならなくなります。

Bignumの0は(%経由で)bigtrunc()を通るとlen=0になるんですが、
rb_big_neg()がlen==0の場合を考慮していないためですね。

bigtrunc()で0にしないようにするか、rb_big_neg()でlen==0の場合を
考慮するか、どっちがいいでしょう。後者だけだと、他でもちゃんと
考慮しているか全部チェックしないといけないから、防衛的に両方で
すかねぇ。


Index: trunk/bignum.c
===================================================================
--- trunk/bignum.c	(revision 12794)
+++ trunk/bignum.c	(working copy)
@@ -98,5 +98,5 @@ bigtrunc(VALUE x)
     BDIGIT *ds = BDIGITS(x);
 
-    while (len-- && !ds[len]);
+    while (--len && !ds[len]);
     RBIGNUM(x)->len = ++len;
     return x;
@@ -1038,4 +1038,5 @@ rb_big_neg(VALUE x)
     ds = BDIGITS(z);
     i = RBIGNUM(x)->len;
+    if (!i) return INT2FIX(~(SIGNED_VALUE)0);
     while (i--) {
 	ds[i] = ~ds[i];
Index: stable/bignum.c
===================================================================
--- stable/bignum.c	(revision 12794)
+++ stable/bignum.c	(working copy)
@@ -105,5 +105,5 @@ bigtrunc(x)
     BDIGIT *ds = BDIGITS(x);
 
-    while (len-- && !ds[len]);
+    while (--len && !ds[len]);
     RBIGNUM(x)->len = ++len;
     return x;
@@ -1100,4 +1100,5 @@ rb_big_neg(x)
     ds = BDIGITS(z);
     i = RBIGNUM(x)->len;
+    if (!i) return INT2FIX(~(SIGNED_VALUE)0);
     while (i--) ds[i] = ~ds[i];
     RBIGNUM(z)->sign = !RBIGNUM(z)->sign;


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread