Instructions non effectué à partir de 43

Fermé
giovedy - Modifié par giovedy le 25/11/2011 à 22:16
Bonjour,

j'ai un petit problème que j'ai repéré avec gdb mais je ne sais pas le résoudre. Pour vous expliquer, le programme marche correctement jusqu'à l'itération k=42 (incluse). Mais lorsque k passe à 43, les boucles sont effectuées mais aucunes instructions n'est réalisée.

Avez vous une raison ?
Merci !


Voila le code gdb :

260    x[k+1][i]=x[k][i]+a[k]*r[k][i]; 
(gdb)  
261    printf("x [%d] [%d] :%f\n",k,i,x[k][i]); 
(gdb)  
x [43] [0] :0.989438 
242   for (i=0;i<=n-1;i++) 
(gdb)  
265    printf("\n"); 
(gdb)  

266   k++; 
(gdb)  
267   nbiter++; 
(gdb)  
268  }while((k<=itermax-1)/*&&(norme2(r,k-1,n)/norme2(b,0,n)>e)*/); 
(gdb)  
232   for (i=0;i<=n-1;i++) 
(gdb)  
242   for (i=0;i<=n-1;i++) 
(gdb)  
265    printf("\n"); 
(gdb)  

266   k++; 
(gdb) 


Voila le programme principale :


void main (void) 
{ 
 double x[Max][Maxdim]; 
 double r[Max][Maxdim]; 
 double A[Maxdim][Maxdim]; 
 double b [1][Maxdim]; 
 double a [Maxdim]; 
 int i,n,w,z,k=0,nbiter=0,itermax,itermax2; 
 double e; 
 double Ar[Max][Maxdim]; 
  
  
 e=0.0000001; 
 n=3; 
 itermax=44; 
 hilbert(A,b,n);             // hilbert dordre n avec sa fonction 
  for(w=0;w<n;w++) 
  { 
   for(z=0;z<n;z++) 
   { 
    x[w][z]=0; 
   }  
  } 
  

  do 
 { 
  for (i=0;i<=n-1;i++) 
  { 
   b[0][0]=11.0/6; 
   b[0][1]=13.0/12; 
   b[0][2]=47.0/60; 
   r[k][i]=b[0][i]-indice_i_du_produit_matrice_vecteur(A,x,k,n,i); 
   printf("b[0][%d] : %f\n",i,b[0][i]); 
   printf("r[%d][%d] : %f\n",k,i,r[k][i]); 
  } 
  for (i=0;i<=n-1;i++) 
  { 
   produit_matrice_vecteur_2(A,r, Ar, k, n); 
    
   printf("Ar[%d][%d] : %f\n",k,i,Ar[k][i]); 
    
    
   a[k]=prodscal(r,r,k,n)/prodscal(r,Ar,k,n); 
   printf("prodscal(r,r,%d,n): %.10f\n",k,prodscal(r,r,k,n)); 
   printf("prodscal(r,Ar,%d,n): %.10f\n",k,prodscal(r,Ar,k,n)); 
   printf("a[%d]: %f\n",k,a[k]); 
   x[k+1][i]=x[k][i]+a[k]*r[k][i]; 
   printf("x [%d] [%d] :%f\n",k,i,x[k][i]); 
    
    
  } 
   printf("\n"); 
  k++; 
  nbiter++; 
 }while((k<=itermax-1)&&(norme2(r,k-1,n)/norme2(b,0,n)>e));