나는이 DFT에서 벽에 머리를 때려왔다. 그것은 출력해야합니다 : 8,0000000하지만 대신 8 매우 작은 숫자를 얻을. 이러한 반올림 오류가 있습니까? 내가 할 수 있는게 있습니까? Radix2 FFT를 사용하면 정확한 결과를 얻을 수 있습니다. DFT가 작동하지 않을 수 있습니다.DFT에서 부정확 한 결과를 나타내는 반올림 오류가 있습니까?
나는 복잡한 비트로 시작 했으므로 좋은 비트가 누락되었음을 알고 있으므로 문제를 설명하기 위해 스트립을 제거하려고했습니다. 적은 산술 작전은 일반적으로 축적 산술 양자화 오류에 대한 더 적은 기회를 허용하는
#include <cstdlib>
#include <math.h>
#include <iostream>
#include <complex>
#include <cassert>
#define SIZE 8
#define M_PI 3.14159265358979323846
void fft(const double src[], double dst[], const unsigned int n)
{
for(int i=0; i < SIZE; i++)
{
const double ph = -(2*M_PI)/n;
const int gid = i;
double res = 0.0f;
for (int k = 0; k < n; k++) {
double t = src[k];
const double val = ph * k * gid;
double cs = cos(val);
double sn = sin(val);
res += ((t * cs) - (t * sn));
int a = 1;
}
dst[i] = res;
std::cout << dst[i] << std::endl;
}
}
int main(void)
{
double array1[SIZE];
double array2[SIZE];
for(int i=0; i < SIZE; i++){
array1[i] = 1;
array2[i] = 0;
}
fft(array1, array2, SIZE);
return 666;
}
얼마나 작은 숫자입니까? –
@PaulR 1e-16의 순서로 – molbdnilo
오른쪽으로 소리가 들린다 - 소수점 이하 16 자리 또는 17 자리는 배정도 한계 근처에있다. 참고로 실제로는에서 M_PI를 사용해야하지만이 경우에는 별다른 차이가 없다고 생각합니다. –