Si vous connaissez le site Numerical recipe, que pensez vous de leurs codes C++?
en terme de rigeur, rapidité...?
merci
Si vous connaissez le site Numerical recipe, que pensez vous de leurs codes C++?
en terme de rigeur, rapidité...?
merci
La qualité (en terme code pur, pas de performance) est à mon avis déplorable. C'est principalement du C sur lequel ils ont jeté deux ou trois fonctionalités du C++. Les variables sont toutes déclarées en début de fonction, ils mettent du using namespace std partout et ne font aucune utilisation de la bibliothèque standard.
Le code est par contre conforme à l'algorithme décrit dans le texte, que ce soit au niveau de la correction ou de la complexité.
La base du code est là, mais si tu veux le modifier un tant soit peu, mieux vaut commencer par le ré-écrire un peu plus proprement.
en fait, voila pourquoi je pose cette question. LE code ci dessous est tiré de NR.
Il permet de calculer la FFT d'un 2^n points .
Le problème est que j'arrive pas a l'utiliser. Alors si vous pouviez m'aider, ca serait bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 void four1(float data[],unsigned long nn,int isign) { unsigned long n,mmax,m,j,istep,i; double wtemp,wr,wpr,wpi,wi,theta; float tempr,tempi; n=nn<<1; j=1; for (i=1;i<n;i+=2){ if(j>i){ SWAP(data[j],data[i]); SWAP(data[j+1],data[i+1]); } m=nn; while (m>=2 && j>m){ j-=m; m>>=1; } j+=m; } mmax=2; while(n>mmax){ istep=mmax<<1;cout<<istep; theta=isign*(6.283185/mmax); wtemp=sin(0.5*theta); wpr=-2*wtemp*wtemp; wpi=sin(theta); wr=1; wi=0; for(m=1;m<mmax;m+=2){ for(i=m;i<=n;i+=istep){ j=i+mmax; tempr=wr*data[j]-wi*data[j+1]; tempi=wr*data[j+1]+wi*data[j]; data[j]=data[i]-tempr; data[j+1]=data[i+1]-tempi; data[i]+=tempr; data[i+1]+=tempi; } wr=(wtemp=wr)*wpr-wi*wpi+wr; wi=wi*wpr+wtemp*wpi+wi; } mmax=istep; } cout<<data[0]<<";"<<data[1]<<";"<<data[2]<<";" <<data[3]; <<";"<<data[4] ; }
Je ne sais pas comment appeller la fonction four1 et comment obtenir les outputs.
Normalement, on devrait faire comme ca:
La réponse serait normalement : ([14, -1., 0, -1.]) mais c'est pas ce que j'obtiens.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int main(){ float A[4]={3,2,4,5} four1(A,4,1) }
Je sais que c'est difficile de comprendre un code aussi long sans avoir lu auparavant un pseudo-algo, mais si vous pouvez jetter un coup d'oeil ca serait bien.
Bonjour,
Il faut aussi lire ce qui est précisé dans NC.
Charge ce fichier pdf:
http://www.ma.utexas.edu/documentati...cpdf/c12-2.pdf
four1 utilise des nombres complexes arrangés dans un tableau de float.
j'ai vu merci
mais je crois que leur code ne fonctionne pas.
La réponse n'est pas forcément celle que tu donnes... Avant de dire que ça ne marche pas, relis un cours sur la FFT. - Je n'ai pas fini mon tuto sur la FFT, mais regarde la partie 1-C http://miles.developpez.com/tutoriels/algo/fft/ -
Bonjour,
Peut-être que leur code ne fonctionne pas, je ne l'ai pas épluché.Envoyé par deubelte
MAIS, au moins, utilise des données au format attendu par la fonction pour tes tests, ce qui n'est pas du tout le cas avec l'exemple que tu nous as donné, ce qui, bien entendu, ne saurait donner un résultat cohérent.
Puisque tu avais vu ce qu'il fallait, pourquoi ne pas avoir utilisé des données correctes ?
Partager