Python和C中的功能相同,结果不同

时间:2013-03-23 12:24:03

标签: python c

我使用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。对于我的模拟而言,这种差异实际上可以忽略不计,但我仍然想知道为什么我会得到不同的结果

1 个答案:

答案 0 :(得分:3)

Python中的浮点值几乎总是IEEE-754 double precision,对应于C或C ++ double。如果您想要更高精度,请查看decimal module