logo       

[ruby-list:43012] Bignum * Float: msg#00073

lang.ruby.japanese

Subject: [ruby-list:43012] Bignum * Float

伊東と申します。

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);


よろしくお願いします。




<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise