[C] message d erreur a la compilation (linking)

message d erreur a la compilation (linking) [C] - C++ - Programmation

Marsh Posté le 30-01-2003 à 17:30:33    


mon 1er pb est resolu mais j en ai un autre (voir sous les deux premiers messages avec code source)
je laisse le meme sujet pour les codes ;)
 
_____________________________________________

 
j avais un prog qui marchait, g change qq printf et ca marche plus  :??:  
 
je pense que l erreur vient des variable qui ont pour la plupart kom valeurs (qd je les affiche)
-1.#IND00 et 1.#QNAN0
 
ca veux dire koi ???
c du a koi ???
comment reparer ???
 
 
 
merci


Message édité par TiTan91 le 30-01-2003 à 22:16:47
Reply

Marsh Posté le 30-01-2003 à 17:30:33   

Reply

Marsh Posté le 30-01-2003 à 17:32:55    

poste le code qui foire stp


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 30-01-2003 à 17:44:57    

le pb c ke g pas mis bcp de commentaire et k il y a 6 fichiers avec des formules assez lourdes...
 
je peux tjs mettre qq fich seulement (le pb semble deja etre presnt la)
 
deuxieme.c

Code :
  1. #include<math.h>
  2. #define delta b*b-4*a*c
  3. #define epsilon 1e-6
  4. static double rDbl, rRe1, rRe2, rIm1, rIm2;
  5. int deuxieme(double a, double b, double c)
  6. {
  7. if (fabs(delta)<=epsilon)
  8. {
  9.  rDbl=-b/(2*a);
  10.  return 3;
  11. }
  12. else if (delta>epsilon)
  13. {
  14.  rRe1=(-b+sqrt(delta))/(2*a);
  15.  rRe2=(-b-sqrt(delta))/(2*a);
  16.  return 2;
  17. }
  18. else if (delta<-epsilon)
  19. {
  20.  if (fabs(b)<=epsilon)
  21.  {
  22.   rIm1=sqrt(-c/a);
  23.   rIm2=-sqrt(-c/a);
  24.   return 4;
  25.  }
  26.  else
  27.  {
  28.   rRe1=-b/(2*a);
  29.   rIm1=sqrt(delta)/(2*a);
  30.   rRe2=-b/(2*a);
  31.   rIm2=-sqrt(delta)/(2*a);
  32.   return 6;
  33.  }
  34. }
  35. else
  36. {
  37.  return -1;
  38. }
  39. }
  40. // fonctions de retour des solutions
  41. double getDbl()
  42. {
  43. return rDbl;
  44. }
  45. double getRe1()
  46. {
  47. return rRe1;
  48. }
  49. double getIm1()
  50. {
  51. return rIm1;
  52. }
  53. double getRe2()
  54. {
  55. return rRe2;
  56. }
  57. double getIm2()
  58. {
  59. return rIm2;
  60. }


 
testDeuxieme.c

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>   // contient la fonction "rand()"
  3. #include <math.h>
  4. #include "deuxieme.h"
  5. #define epsilon 1e-6
  6. static double a, b, c, rDbl, rRe1, rRe2, rIm1, rIm2;
  7. static int i;
  8. // fonction de definition des coefficients pour les tests
  9. void test2()
  10. {
  11. // test d une racine double
  12. a=1;
  13. b=2;
  14. c=1;
  15. testDeuxieme();
  16. // test de 2 racines reelles
  17. a=1;
  18. b=4;
  19. c=1;
  20. testDeuxieme();
  21. // test de 2 racines imaginaires
  22. a=1;
  23. b=0;
  24. c=2;
  25. testDeuxieme();
  26. // test de 2 racines complexes
  27. a=2;
  28. b=-1;
  29. c=2;
  30. testDeuxieme();
  31. // 10000 tests aleatoires
  32. for (i=0 ; i<10000 ; i++)
  33. {
  34.  a=rand()%2000-1000;
  35.  b=rand()%2000-1000;
  36.  c=rand()%2000-1000;
  37.  testDeuxieme();
  38. }
  39. printf("Programme de test du deuxieme degre termine\n" );
  40. }
  41. // fonction de test des valeurs retournees
  42. int testDeuxieme()
  43. {
  44. if (3==deuxieme(a,b,c))
  45. {
  46.  rDbl=getDbl();
  47.  if (fabs(a*rDbl*rDbl+b*rDbl+c) > epsilon)
  48.  {
  49.   printf("test racine double echoue\n a=%lf\n b=%lf\n c=%lf\n", a, b, c);
  50.  }
  51. }
  52. else if (2==deuxieme(a,b,c))
  53. {
  54.  rRe1=getRe1();
  55.  rRe2=getRe2();
  56.  if (fabs(a*rRe1*rRe1+b*rRe1+c) > epsilon ||
  57.   fabs(a*rRe2*rRe2+b*rRe2+c) > epsilon)
  58.  {
  59.   printf("test racines reelles echoue\n a=%lf\n b=%lf\n c=%lf\n", a, b, c);
  60.  }
  61. }
  62. else if (4==deuxieme(a,b,c))
  63. {
  64.  rIm1=getIm1();
  65.  rIm2=getIm2();
  66.  if (fabs(-a*rIm1*rIm1+c) > epsilon ||
  67.   fabs(b*rIm1) > epsilon ||
  68.   fabs(-a*rIm2*rIm2+c) > epsilon ||
  69.   fabs(b*rIm2) > epsilon)
  70.  {
  71.   printf("test racines imaginaires echoue\n a=%lf\n b=%lf\n c=%lf\n", a, b, c);
  72.  }
  73. }
  74. else if(6==deuxieme(a,b,c))
  75. {
  76.  rRe1=getRe1();
  77.  rRe2=getRe2();
  78.  rIm1=getIm1();
  79.  rIm2=getIm2();
  80.  if (fabs(a*rRe1*rRe1-a*rIm1*rIm1+b*rRe1+c) > epsilon ||
  81.   fabs(2*a*rRe1*rIm1+b*rIm1) > epsilon ||
  82.   fabs(a*rRe2*rRe2-a*rIm2*rIm2+b*rRe2+c) > epsilon ||
  83.   fabs(2*a*rRe2*rIm2+b*rIm2) > epsilon)
  84.  {
  85.   printf("test racines complexes echoue\n a=%lf\n b=%lf\n c=%lf\n", a, b, c);
  86.  }
  87. }
  88. else
  89. {
  90.  printf("erreur d'execution du deuxieme degre" );
  91. }
  92. return 0;
  93. }


Message édité par TiTan91 le 30-01-2003 à 17:48:31
Reply

Marsh Posté le 30-01-2003 à 18:40:23    

titan91 a écrit :

ca veux dire koi ???
c du a koi ???
comment reparer ???

NaN = Not a Number
IND = indéfini (je pense)
 
bref, tu divises qq part par zéro, tu essayes de calculer une racine négative, bref tu fais des trucs pas catholiques. -> debuggues !

Reply

Marsh Posté le 30-01-2003 à 20:48:00    

vi en fait ca m avance pas...
y a avais bien un cas d erreur dans le deuxieme.c (a=0)
mais le pb c dans le fichier pour le degre suivant...
 
mais la y a tt un pb mathematique avant... :(

Reply

Marsh Posté le 30-01-2003 à 21:13:42    

voial le code de mon troisieme.c
 
le pb c que la variable yIm1 (parmis d autres) prend pour valeur l un des  exemple ci dessus
yIm1=zIm1 et zIm1 est defini vers la fin de ce code
 

Code :
  1. #include <math.h>
  2. #include "deuxieme.h"
  3. #define epsilon 1e-6
  4. #define Pi 3.14159265
  5. static int cas0, cas1, cas2;
  6. static double zDbl, zRe, zRe1, zRe2, zIm1, zIm2, yDbl, yRe, yRe1, yRe2, yIm1, yIm2;
  7. // fonction pour l equation en y
  8. int troisieme1(double b3, double b2, double b1, double b0)
  9. {
  10. cas0=troisieme2( b1/b3 - (b2*b2)/(3*b3*b3) , b0/b3 + 2*pow(b2/(3*b3),3) - (b2*b1)/(3*b3*b3) );
  11. if (cas0==24)
  12. {
  13.  yRe = zRe - b2/(3*b3);
  14.  yRe1 = zRe1 - b2/(3*b3);
  15.  yIm1 = zIm1;
  16.  yRe2 = zRe2 - b2/(3*b3);
  17.  yIm2 = zIm2;
  18.  if (fabs(yRe1) < epsilon && fabs(yRe2) < epsilon)
  19.  {
  20.   return 16;
  21.  }
  22.  else
  23.  {
  24.   return 24;
  25.  }
  26. }
  27. if (cas0==16)
  28. {
  29.  yRe = zRe - b2/(3*b3);
  30.  yRe1 = -b2/(3*b3);
  31.  yIm1 = zIm1;
  32.  yRe2 = -b2/(3*b3);
  33.  yIm2 = zIm2;
  34.  if (fabs(yRe1) < epsilon && fabs(yRe2) < epsilon)
  35.  {
  36.   return 16;
  37.  }
  38.  else
  39.  {
  40.   return 24;
  41.  }
  42. }
  43. if (cas0==9)
  44. {
  45.  yRe = zRe - b2/(3*b3);
  46.  yDbl = zDbl - b2/(3*b3);
  47.  return 9;
  48. }
  49. if (cas0==8)
  50. {
  51.  yRe = zRe - b2/(3*b3);
  52.  yRe1 = zRe1 - b2/(3*b3);
  53.  yRe2 = zRe2 - b2/(3*b3);
  54.  return 8;
  55. }
  56. return -1;
  57. }
  58. // fonction pour l equation en z
  59. int troisieme2(double p, double q)
  60. {
  61. // definition du cas a appliquer grace a la fonction du second degre
  62. if (p>=0)
  63. {
  64.  cas1=deuxieme(1, q, -pow(p/3, 3));
  65. }
  66. else
  67. {
  68.  cas1=deuxieme(1, q, pow(-p/3, 3));
  69. }
  70. if (cas1==2)  // 1er cas : 1 racine reelle et 2 racines complexes
  71. {
  72.  if (getRe1()>=0 && getRe2()>=0)
  73.  {
  74.   zRe = pow(getRe1(), 1./3.) + pow(getRe2(), 1./3.);
  75.  }
  76.  else if (getRe1()>=0 && getRe2()<0)
  77.  {
  78.   zRe = pow(getRe1(), 1./3.) - pow(-getRe2(), 1./3.);
  79.  }
  80.  else if (getRe1()<0 && getRe2()>=0)
  81.  {
  82.   zRe = -pow(-getRe1(), 1./3.) + pow(getRe2(), 1./3.);
  83.  }
  84.  else
  85.  {
  86.   zRe = -pow(-getRe1(), 1./3.) - pow(-getRe2(), 1./3.);
  87.  }
  88.  cas2=deuxieme(1, zRe, p+zRe*zRe);
  89.  if (cas2==6)
  90.  {
  91.   zRe1=getRe1();
  92.   zIm1=getIm1();
  93.   zRe2=getRe2();
  94.   zIm2=getIm2();
  95.   return 24;
  96.  }
  97.  else if (cas2==4)
  98.  {
  99.   zIm1=getIm1();
  100.   zIm2=getIm2();
  101.   return 16;
  102.  }
  103.  else
  104.  {
  105.   return -1;
  106.  }
  107. }
  108. else if (cas1==3)  // 2eme cas : 1 racine reelle et 1 racine double
  109. {
  110.  if (q>=0)
  111.  {
  112.   zDbl = pow(q/2, 1./3.);
  113.   zRe = -2*pow(q/2, 1./3.);
  114.  }
  115.  else
  116.  {
  117.   zDbl = -pow(-q/2, 1./3.);
  118.   zRe = 2*pow(-q/2, 1./3.);
  119.  }
  120.  return 9;
  121. }
  122. else if (cas1==6)  // 3eme cas : 3 racines reelles
  123. {
  124.  zRe = 2 * sqrt(-p/3)
  125.    * cos(atan(fabs(getIm1())/getRe1())/3);
  126.  zRe1 = 2 * sqrt(-p/3)
  127.     * cos((atan(fabs(getIm1())/getRe1())+2*Pi)/3);
  128.  zRe2 = 2 * sqrt(-p/3)
  129.     * cos((atan(fabs(getIm1())/getRe1())+4*Pi)/3);
  130.  return 8;
  131. }
  132. else if (cas1==4)  // 3eme cas (avec partie reelle nulle pour la solution du 2e degre) : 3 racines reelles
  133. {
  134.  zRe = 2 * sqrt(-p/3) * cos(Pi/6);
  135.  zRe1 = 2 * sqrt(-p/3) * cos(Pi/6 + 2*Pi/3);
  136.  zRe2 = 2 * sqrt(-p/3) * cos(Pi/6 + 4*Pi/3);
  137.  return 8;
  138. }
  139. else
  140. {
  141.  return -1;
  142. }
  143. }
  144. // fonctions de retour des solutions
  145. double getyDbl()
  146. {
  147.  return yDbl;
  148. }
  149. double getyRe()
  150. {
  151.  return yRe;
  152. }
  153. double getyRe1()
  154. {
  155.  return yRe1;
  156. }
  157. double getyRe2()
  158. {
  159.  return yRe2;
  160. }
  161. double getyIm1()
  162. {
  163.  return yIm1;
  164. }
  165. double getyIm2()
  166. {
  167.  return yIm2;
  168. }


Message édité par TiTan91 le 30-01-2003 à 21:16:59
Reply

Marsh Posté le 30-01-2003 à 22:14:23    

g trouve d ou ca vient  :D  
 
mais g un autre pb
 
quand je remplace ca :

Code :
  1. if (fabs(b3*Re*Re*Re+b2*Re*Re+b1*Re+b0) > epsilon ||
  2.   fabs(b3*Re1*Re1*Re1-3*b3*Re1*Im1*Im1+b2*Re1*Re1-b2*Im1*Im1+b3*Re1+b0) > epsilon ||
  3.   fabs(3*b3*Re1*Re1*Im1-b3*Im1*Im1*Im1+2*b2*Re1*Im1+b1*Im1) > epsilon ||
  4.   fabs(b3*Re2*Re2*Re2-3*b3*Re2*Im2*Im2+b2*Re2*Re2-b2*Im2*Im2+b3*Re2+b0) > epsilon ||
  5.   fabs(3*b3*Re2*Re2*Im2-b3*Im2*Im2*Im2+2*b2*Re2*Im2+b1*Im2) > epsilon)
  6.  {
  7.   printf("test troisieme degre echoue avec 1 racine reelle et 2 racines complexes retournees\n" );
  8.   printf("coefficients testes :\n b3=%lf\n b2=%lf\n b1=%lf\n b0=%lf\n", b3, b2, b1, b0);
  9.   printf("racines retournees :\n %lf\n %lf + %lfj\n %lf + %lfj\n\n", Re, Re1, Im1, Re2, Im2);
  10.  }


 
par ca :

Code :
  1. if (fabs(b3*Re*Re*Re+b2*Re*Re+b1*Re+b0) > epsilon)
  2.  {
  3.   printf("Re %lf\n", Re);
  4.  }


 
ca me met ces erreurs :
Linking...
premier.obj : error LNK2005: _premier already defined in deuxieme.obj
premier.obj : error LNK2005: _getSol already defined in deuxieme.obj
Debug/resolution d equation.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.

 
ca veux dire quoi ?


Message édité par TiTan91 le 30-01-2003 à 22:17:39
Reply

Marsh Posté le 31-01-2003 à 04:18:55    

Code :
  1. printf("%f" //afficher un double
  2. printf("%lf" //afficher un long double, si ce type existe

Le piège, c'est que c'est pas les mêmes pour scanf.
 
Cela dit, je ne vois pas le rapport avec tes messages d'erreur.
Le dernier signifie que tu défnis deux fois ces fonctions ou variables globales, probablement en les mettant dans un header inclus deux fois.
Les 'const' globales ne sont pas partageables par header en C.
 
Conseils:
-Une modification à la fois.
-Compiler à chaque fois.
-N'ignorer aucune alerte.
-Augmenter le niveau d'alerte.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed