From: Yusuke ENDOH Date: 2007-07-18T21:54:26+09:00 Subject: [ruby-dev:31254] Re: p(65536**(1<<29)) stalls 遠藤です。 07/07/18 に U.Nakamura さんは書きました: > こんにちは、なかむら(う)です。 > > In message "[ruby-dev:31250] Re: p(65536**(1<<29)) stalls" > on Jul.18,2007 20:57:30, wrote: > | > > 1024*1024 が即値で埋め込まれているのが気持ち悪いんですが、 > | > > bignum の最大値ってちゃんと決まってないんでしょうか。 > | > > | > とくに決まってないです。今のところ「メモリの許す限り」という制 > | > 限だけなんですが、どこかに明示的な線引きをしたほうがいいでしょ > | > うかねぇ。 > | > | 私も「メモリの許す限り」だと思っていたので、大きすぎる Bignum が > | Float になると知って驚きました。どこかに書いてましたっけ。 > > 大きすぎるBignumがFloatになる、わけじゃなくて、Bignum#**の挙 > 動として結果がFloatになることもあるよ、ということだと思います。 なるほど、一般的なポリシーではなく Bignum#** 固有の仕様なんですね。 > 結果がFloatになりうることはrdocに書いてありますね。 http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Integer の self ** other のとこだけ見てました。 http://ruby-doc.org/core/classes/Bignum.html#M001127 > The result may be a Fixnum, Bignum, or Float のことでしょうか。確かに書いてあるっちゃありますが、例をあわせ見て、 「Bignum ** Bignum でも Float になりうる」と見抜くのは厳しいかも。 せめて、 123456789 ** 123456789 #=> Infinity を追加してもらえれば…… (かえって混乱しそう) 。 -- Yusuke ENDOH