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

标签 c double precision flags printf

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

我在 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;
}

谢谢! :)

最佳答案

samp = sin(angleincr*i);

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

关于c - fprintf() 打印 0 而不是完整的浮点值(转换问题?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11456540/

相关文章:

c - C中的数字精度错误

c++ - 在 C++ 中设置默认浮点打印精度

c - 在 C 程序中处理 Sqlite3 CORRUPT 错误 (11) 的更好方法是什么?

java - 在 Java 中,两个 double 相乘为零?

c++ - 如何给struct成员中的双指针赋值?

postgresql - 如何在 ALTER TABLE 中设置精度和比例

c - 是否可以将命令行参数传递给 GNU LD 以创建一个部分、定义大小并将其放置在特定内存中?

c - 使用套接字选项的路径MTU发现-IP_MTU和IP_MTU_DISCOVER

c - 如何控制互斥量的加锁和解锁?

java - 如何打印不带逗号的 Double