2

大規模なシミュレーションの一部として、次の関数を 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 に収束します。この違いは、シミュレーションの目的では実際には無視できますが、異なる結果が得られる理由を知りたいです。

4

1 に答える 1

3

Python の浮動小数点値は、ほとんどの場合、C または C++ に対応するIEEE-754倍精度doubleです。さらに精度が必要な場合は、decimal モジュールをチェックしてください。

于 2013-03-23T12:54:52.343 に答える