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";
だと、問題なく正解を出しますね。 剰余演算 に固有の問題のようです。
環境を教えてください。
私は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で書き込んだ者です。
プログラムの間違いではなかったのですね。
(ってこんな短くて間違いようがないですが)
アドバイスされたように書き換えてみます!