fprintf()打印0而不是完整浮点值(转换问题?)

时间:2012-07-12 16:39:11

标签: c double precision flags printf

我遇到了一些问题,我从Boulanger和Lazzarini的“音频编程书”中得到了一些示例代码。它应该为正弦波生成值,但是当我运行它时,我只得到-0.0000000和0.0000000的值,而不是-1.0和+1.0之间的预期值。我已经看过使用断点运行的值,它看起来都很好,但是当它运行时(在调试或发布模式下)它给我带来了不好的值。

我在MacOSX 10.6.8上使用Xcode 3.2.6。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#ifndef M_PI
#define M_PI (3.141592654)
#endif

int main(int argc, char** argv) { 

  int i, nsamps;
  double samp;
  double twopi = 2.0 * M_PI;
  double angleincr;

  nsamps = 50;
  angleincr = twopi * nsamps;

  for (i=0; i < nsamps; i++) {
    samp = sin(angleincr*i);
    fprintf(stdout, "%lf\n", samp);
  }

  fprintf(stderr, "done\n");
  return 0;
}

谢谢! :)

3 个答案:

答案 0 :(得分:5)

samp = sin(angleincr*i);

在你的代码中angleincr*i总是2π的倍数,所以结果确实是0。

答案 1 :(得分:0)

"%lf"不是printf的有效格式说明符。可能是在您的系统上,这会尝试将double参数解释为long double

答案 2 :(得分:0)

应该是

angleincr = twopi / nsamps;

根据音频编程手册第159页。