0

Boulanger と Lazzarini の「The Audio Programming Book」から入手したサンプル コードに問題があります。正弦波の値を生成するはずですが、実行すると、-1.0 と +1.0 の間の期待値ではなく、-0.0000000 と 0.0000000 の値が得られます。ブレークポイントを使用して実行されている値を確認しましたが、すべて問題ないように見えますが、(デバッグ モードまたはリリース モードで) 実行すると、悪い値が返されます。

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

そのはず

angleincr = twopi / nsamps;

Audio Programming Book の 159 ページによると。

于 2016-02-13T16:08:52.617 に答える
0

"%lf"の有効な書式指定子ではありませんprintf。お使いのシステムで double 引数を として解釈しようとしている可能性がありlong doubleますか?

于 2012-07-12T17:56:26.047 に答える