Perlは結構使えるっぽいけどどうよ?

このエントリーをはてなブックマークに追加
505デフォルトの名無しさん
あの〜perlが計算間違えるんだけど・・・。
あきらかに違ってるんだけど。プログラムが計算間違える事ってあるの?
$g=25425425124%241;
print "$g\n";
で0を返してくる
506デフォルトの名無しさん:01/10/24 04:30
$g=25425425124%241;
print "$g\n";
__END__
75

環境は?
507デフォルトの名無しさん:01/10/24 04:31
Apache@win98です。
mod_perl ?
つーか単に変数名を間違えているだけに 1000 ラリー。
509デフォルトの名無しさん:01/10/24 04:36
別のサーバーにおいたら14って返ってきた・・・意味不明・・
510デフォルトの名無しさん:01/10/24 04:38
#!/usr/local/bin/perl
print "content-type: text/html\n\n";

$g=25425425124%241;
print "$g\n";

単にこれだけしか書いてません。
75が正解
問題を簡単にしましょう。 $g= 5 % 3; にしてみたらどうなりますか?
513無限多倍長整数演算パッケージ:01/10/24 10:55
これはあれだ。サイズの問題です。
25425425124 がintの大きさを越えているんだと思います。
単純な四則演算ではこんな問題は起こさないのにね…。

use Math::BigInt;
$g = Math::BigInt->new(25425425124) % 241;
print "$g\n";

ってやってみて下さい。
514バグか仕様か?:01/10/24 11:17
$h = 25425425124 - 241 * int 25425425124 / 241;
print "$h\n";

だと、問題なく正解を出しますね。 剰余演算 に固有の問題のようです。
環境を教えてください。
516514:01/10/24 12:26
私は505 ではないのですが、OSはlinux(Vine2.0)で、
perl-5.00503_jp-5
glibc-2.1.2-17vl2
です。
sizeof(int)は4 sizeof(long int)も4です。
517デフォルトの名無しさん:01/10/24 12:55
>>516
Perl5.6.1のperldeltaに情報見つけ。"Numeric conversions"のとこ。
やはりバグだったようです。
518デフォルトの名無しさん:01/10/24 15:26
version 5.004_04
version 5.005_03
あたりは 14が帰ってくるね。
>>517
が見つけた通り
version 5.6.0, 5.6.1では正しく75

っちゅーかstableなのを使えって気もする。
505で書き込んだ者です。

プログラムの間違いではなかったのですね。
(ってこんな短くて間違いようがないですが)

アドバイスされたように書き換えてみます!