Youtube ビデオNumberphile Infinity (6:09 から開始) では、ゲームの期待値が無限大であるという実験 (サンクトペテルブルクのパラドックス) が説明されています。
長期的な期待値(平均)を求めるJavaプログラムを書いてみました。理論上の期待値は無限ですが、得られるのは 10 前後の数値です。プログラムが間違っているためでしょうか? 実験の数が十分に多い場合、実験の平均は数学的な期待に非常に近くなると思います。これが私のプログラムです。
public class Main {
public static final int NUM_EXPERIMENT = 1000000;
public static void main(String[] args) {
int total = 0;
for (int i = 0; i < NUM_EXPERIMENT; i++) {
int counter = 1;
int subtotal = 1;
while ((int) (Math.random() * 2) == 0) {
subtotal *= 2;
counter++;
}
total += subtotal;
}
double expectation = total / (double) NUM_EXPERIMENT;
System.out.println("The expectation of this experiment is " + expectation);
}
}