0

我从 Boulanger 和 Lazzarini 的“The Audio Programming Book”获得的一些示例代码遇到了问题。它应该为正弦波生成值,但是当我运行它时,我只得到 -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;
}

谢谢!:)

4

3 回答 3

5
samp = sin(angleincr*i);

在您的代码angleincr*i中始终是 2π 的倍数,因此结果确实为 0。

于 2012-07-12T16:42:01.237 回答
0

"%lf"不是 的有效格式说明符printf。可能是在您的系统上,这试图将双重参数解释为 along double吗?

于 2012-07-12T17:56:26.047 回答
0

它应该是

angleincr = twopi / nsamps;

according to page 159 of the Audio Programming Book.

于 2016-02-13T16:08:52.617 回答