我遇到了一些示例代码问题,我从Boulanger和Lazzarini的“The Audio Programming Book”中获得了一些示例代码。它应该为正弦波生成值,但是当我运行它时,我只能得到-0.0000000和0.0000000的值,而不是-1.0和+1.0之间的预期值。我已经看到了使用断点运行的值,并且它看起来不错,但是当它运行时(无论是在调试模式还是释放模式下)都会给我带来不好的价值。fprintf()打印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;
}
谢谢! :)
你总是增加2 PI,你还期望什么? – 2012-07-12 16:42:46
不是你的问题,但这也是一个非常糟糕的方法来做数学。随着角度的增加,精度将越来越低,最终达到零。你应该保留一个不被'M_PI'缩放的变量,在每次循环迭代之后减去整数部分,并且在将它传递给'sin'之前做最后一件事情时将它缩放为'2 * M_PI'。 – 2012-07-12 17:16:42