[#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:31242] p(65536**(1<<29)) stalls

From: "Yusuke ENDOH" <mame@...>
Date: 2007-07-17 13:30:38 UTC
List: ruby-dev #31242
遠藤と申します。

以下のようにすると反応がなくなります。Ctrl+C でも止められません。


$ ./ruby -ve 'p(65536**(1<<29))'
ruby 1.8.6 (2007-07-17 patchlevel 5000) [i686-linux]


$ ./ruby -ve 'p(65536**(1<<29))'
ruby 1.9.0 (2007-07-17 patchlevel 0) [i686-linux]


bignum の大きさのチェックで integer overflow しているのが原因のようです。
1.8 での応急措置です。


Index: bignum.c
===================================================================
--- bignum.c    (revision 12809)
+++ bignum.c    (working copy)
@@ -1755,8 +1755,13 @@
        if (yy > 0) {
            VALUE z = 0;
            long mask;
+           VALUE f = 1, t1 = RBIGNUM(x)->len * SIZEOF_BDIGITS;
+           if (t1 / SIZEOF_BDIGITS == RBIGNUM(x)->len && t1 %
SIZEOF_BDIGITS == 0) {
+               VALUE t2 = t1 * yy;
+               if (t2 / yy == t1 && t2 % yy == 0 && t2 <= 1024*1024) f = 0;
+           }

-           if (RBIGNUM(x)->len * SIZEOF_BDIGITS * yy > 1024*1024) {
+           if (f) {
                rb_warn("in a**b, b may be too big");
                d = (double)yy;
                break;


1024*1024 が即値で埋め込まれているのが気持ち悪いんですが、
bignum の最大値ってちゃんと決まってないんでしょうか。


ついでに、重箱の隅ですが、以下の仕様変更は意図されたものでしょうか。

$ ./ruby -ve 'p(0**(1<<30))'
ruby 1.8.6 (2007-06-07 patchlevel 36) [i686-linux]
-e:1: warning: in a**b, b may be too big
0.0

$ ./ruby -ve 'p(0**(1<<30))'
ruby 1.8.6 (2007-07-17 patchlevel 5000) [i686-linux]
0

-- 
Yusuke ENDOH <mame@tsg.ne.jp>

In This Thread

Prev Next