From: EGUCHI Osamu Date: 1999-12-21T11:17:09+09:00 Subject: [ruby-list:19771] Re: build on alpha えぐち@エスアンドイー です。 >>> In message [ruby-list:19764] Re: build on alpha On Tue, 21 Dec 1999 03:36:23 +0900, tokoma@sco.bekkoame.ne.jp (中川 誠) said: 中川> 中川です。 中川> 中川> In message "[ruby-list:19696] Re: build on alpha" 中川> on 99/12/20, EGUCHI Osamu wrote: 中川> 中川> > どうやら 中川> > int ee; 中川> > (3箇所)が問題の様です。 中川> > long ee; 中川> > が要求されます。 中川> 中川> さらに症状が悪化しました。0 除算でコアダンプします。 中川> 中川> fact(4) はまともな値になりますが、fact(40) は 0 になってしまいます。 fact(40) が 0 になるのは、こちらでも再現しました。 [ruby-list:19696] でバグいれてました。すみません。 中川> 会社から出したメールがうまくプロバイダまで届いていなかったので 中川> バックトレースを添付できません。明日までお待ちください。 中川> 中川> # 1日に1通のペースで齒痒いとは思いますが、ruby-list にまで会社から手を出 中川> # すと収集がつかなくなりそうなので、ご勘弁ください。 私も、出先では ruby-list はチェックしてないです。(仕事しなくなっちゃう) このペースも、考える時間がたくさんあっていいです。 #だったらつまらないバグだすな!>わたし ^^;; あと、ちょっと気になったんですが、 int += short + short は short が自動昇格されますが、 long += int + int は自動昇格されないので、 long = long + int + int と書く必要がありそうです。 #手元に long = int の処理系しかないので未確認です。 alpha で、 #include #include long func(int a) { return a * 2; } main() { printf ("%ld\n", func(INT_MAX) / 2); } は何を表示しますか? えぐち --- bignum.c-bug Mon Dec 20 22:08:44 1999 +++ bignum.c Tue Dec 21 09:54:34 1999 @@ -681,8 +681,8 @@ for (j = 0; j < RBIGNUM(y)->len; j++) { long ee = n + dd * BDIGITS(y)[j]; if (ee) { - zds[i + j] = BIGLO(n); n = zds[i + j] + ee; + zds[i + j] = BIGLO(n); } n = BIGDN(n); }