[ruby-list:43012] Bignum * Float

From: Hiroyuki Ito <ZXB01226@...>
Date: 2006-11-23 02:44:20 UTC
List: ruby-list #43012
伊東と申します。

Ruby 1.8.5 で下記のように Bignum * Float の計算を行なうと Segmentation
fault で終了してしまいます。

$ ruby --version
ruby 1.8.5 (2006-08-25) [i486-linux]
$ ruby -e '2**30 * 1.0'
-e:1: [BUG] Segmentation fault
ruby 1.8.5 (2006-08-25) [i486-linux]

zsh: abort      ruby -e '2**30 * 1.0'


調べてみると[ruby-dev:28369]で修正されており、1.9 では正常に計算できま
すが、下記の安定版スナップショットには反映されていないようです。

 ftp://ftp.ruby-lang.org/pub/ruby/stable-snapshot.tar.gz

問題がなければ、安定版スナップショットや (リリースされる場合は) 1.8 の
次期バージョンでは修正していただけないでしょうか。


なお 1.9 のソースを参考にすると下記の修正で正常に計算できるようになります。

--- bignum.c~   2006-11-16 21:24:29.000000000 +0900
+++ bignum.c    2006-11-17 00:05:59.000000000 +0900
@@ -99,7 +99,10 @@
 bignorm(x)
     VALUE x;
 {
-    if (!FIXNUM_P(x)) {
+    if (FIXNUM_P(x)) {
+      return x;
+    }
+    else if (TYPE(x) == T_BIGNUM) {
        long len = RBIGNUM(x)->len;
        BDIGIT *ds = BDIGITS(x);


よろしくお願いします。

In This Thread

Prev Next