0

float FFT、特に cos 関数と sin 関数の精度が悪いと聞きました - double と比較すると数値がまったく異なります。

Cooley-Tukey FFT アルゴリズムの一部のコードを書き直したので質問します。と結果が異なります。元のプロジェクトは double を使用し、新しいプロジェクトは float です。それは私の間違いですか?そして、私はこのコードをmatlabとc ++から書きます...そして、matlabのdoubleがjavaとc + doubleのように同じであることをほとんど尋ねませんか??

float  PI=3.141592;
// Make sure n is a power of 2
// if (n != (1 << m))
//    throw new RuntimeException("FFT length must be power of 2");

// precompute tables

 for (int i = 0; i < n / 2; i++) {
     cosa[i] = cos (-2 * PI * i / n);
     sina[i] =sin (-2 * PI * i / n);
 }
4

1 に答える 1

3

ほとんどの FFT アルゴリズムでは、「非精度」は、入力要素の大きさに応じて O(NlogN) で大きくなります。KCS/IEEE754 float は約 24 ビットの精度を持ちます。そのため、それほど長くない FFT の場合、データのノイズ、不完全なアンチエイリアシング、および入力の量子化は通常、算術誤差よりも大きくなります。

float と double の間の結果は、小数点以下 6 桁目以降の有効で正確なデータを本当に気にする場合にのみ、「まったく異なる」ものになります。

于 2013-02-25T20:18:32.140 に答える