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