大規模なシミュレーションの一部として、次の関数を Python で記述しました。
#!/usr/bin/python
counter = 1
while (counter < 10000):
oldpa = .5
t = 1
while (t < counter):
newpa = ((oldpa * t) + 1) / (t + 1)
t = t + 1
oldpa = newpa
counter = counter + 1
print str(counter) + "\t" + str(oldpa)
次に、シミュレーションを C で書き直して、より高速に実行できるようにしました (また、C の学習に時間を費やす口実を自分に与えるためでもありました)。上記の関数の私の C バージョンは次のとおりです。
#include <stdio.h>
main()
{
int counter, t;
float oldpa, newpa;
counter = 1;
while ( counter < 10000 )
{
oldpa = .5;
t = 1;
while ( t < counter )
{
newpa = ((oldpa * t) + 1) / (t + 1);
t = t + 1;
oldpa = newpa;
}
counter = counter + 1;
printf("%d\t%f\n", counter, oldpa);
}
}
さて、ここで面白いことがあります。Python 関数を実行すると結果は 0.999950 に収束しますが、C 関数を実行すると 0.999883 に収束します。この違いは、シミュレーションの目的では実際には無視できますが、異なる結果が得られる理由を知りたいです。