私は小さな問題を抱えています。与えられたデータセットから平均値を計算するコードがいくつかあります。これをいくつかの異なるコンピューター (Linux を使用するもの、Windows を使用するもの、32 ビットおよび 64 ビットを使用するもの) から実行しますが、データベースの結果を見て、等しいはずのいくつかの値がわずかに異なっています。
これは私のプログラムには何の違いもありませんが、なぜこのようになったのか疑問に思っていました.同じワード長の浮動小数点演算は同じ結果をもたらすはずであるという印象を受けました(明らかに間違っていました)。
これは、チェックするために私が書いた小さなサンプル コードです。
public class Test{
public static void main(String... args){
double counter = 0, value = 1./10;
for (int i = 0; i < 1000000; i++){
counter += value;
}
System.out.println(counter);
}
}
基本的には1000000 / 10を計算します。結果が正確ではないことはわかっていますが、一部のPCでは100000よりわずかに小さい数値を出力し、他の場合はわずかに大きい数値を出力します。