katinka
10-02-2004, 18:43
Hm? Bin gerade dabei mein erstes größeres Programm zu schreiben und beginne gerade an künstliche Intelligenz zu glauben. Nämlich dass mein Rechner mich ärgern will.
double funktion(int number, double *gp) {
double ret;
switch (number) {
case 0:
ret = -0.25*(1 - gp[1]);
break;
case 1:
ret = 0.25*(1 - gp[0]);
break;
case 2:
ret = 0.25*(1 + gp[1]);
break;
case 3:
ret = -0.25*(1 + gp[0]);
break;
}
return ret;
}
Wenn ich jetzt im übergeordneten Programm
double (*ff)(int, double *);
ff = funktion;
und später an verschiedenen Stellen
wert = (*ff)(i, gp);
aufrufe, stehen in wert in 90% der Fälle der richtig berechnete Wert. Für die Restlichen 10% kriege ich wert = nan. Die Argumente werden einwandfrei übergeben, die Schleifen richtig angesprochen. --> mittels ganz viel printf überprüft. Also zum Beispiel:
case 0:
printf("number=%d - gp1=%lf - ", number, gp[1]);
ret = -0.25*(1 - gp[1]);
printf("ergebnis=%lf\n", ret);
break;
Dann sieht meine Ausgabe beim Schleifendurchlauf im übergeordneten Programm so aus:
number=0 - gp1=2 - ergebnis=-0.2500
number=0 - gp1=2 - ergebnis=-0.2500
number=0 - gp1=2 - ergebnis=nan
number=0 - gp1=2 - ergebnis=-0.2500
Kann mir das irgendjemand erklären? Mein Latein ist gerade völlig am Ende!!!
double funktion(int number, double *gp) {
double ret;
switch (number) {
case 0:
ret = -0.25*(1 - gp[1]);
break;
case 1:
ret = 0.25*(1 - gp[0]);
break;
case 2:
ret = 0.25*(1 + gp[1]);
break;
case 3:
ret = -0.25*(1 + gp[0]);
break;
}
return ret;
}
Wenn ich jetzt im übergeordneten Programm
double (*ff)(int, double *);
ff = funktion;
und später an verschiedenen Stellen
wert = (*ff)(i, gp);
aufrufe, stehen in wert in 90% der Fälle der richtig berechnete Wert. Für die Restlichen 10% kriege ich wert = nan. Die Argumente werden einwandfrei übergeben, die Schleifen richtig angesprochen. --> mittels ganz viel printf überprüft. Also zum Beispiel:
case 0:
printf("number=%d - gp1=%lf - ", number, gp[1]);
ret = -0.25*(1 - gp[1]);
printf("ergebnis=%lf\n", ret);
break;
Dann sieht meine Ausgabe beim Schleifendurchlauf im übergeordneten Programm so aus:
number=0 - gp1=2 - ergebnis=-0.2500
number=0 - gp1=2 - ergebnis=-0.2500
number=0 - gp1=2 - ergebnis=nan
number=0 - gp1=2 - ergebnis=-0.2500
Kann mir das irgendjemand erklären? Mein Latein ist gerade völlig am Ende!!!