wurzel programm problem



  • hallo habe ein Programm geschrieben, welches wurzeln zieht. Nun schmiert mir aber bei manchen zahlen mein Programm ab.

    #include <stdio.h>
    
    /*Wurzel*/
    double wurzel(double zahl)
    {
     double b,summe,c,quadrat;
     int count=1;
    
     b=zahl;
    
     while(1)
     {
    
    	c=zahl;
        summe=0.5*(c+b/c);
    	quadrat=summe*summe;
    	if(quadrat<=b)
    	{
    
    	  return summe;
    
    	}
    
    	count++;
    	zahl=summe;
     } 
    }
    
    int main()
    {
    
     double sqrt,zahl;
    
     printf("Bitte geben Sie die Zahl ein, von der Sie ie Wurzel wissen wollen: ");
     scanf("%lf",&zahl);
    
     sqrt=wurzel(zahl);
     printf("%0.5lf\n",sqrt);
    
    }
    

    gebe ich 7 oder 5 ein schmiert es mir ab bei anderen zahlen funktioniert es hingegen blendend 😞



  • Was heißt "schmiert ab"? Fehlermeldung? An welcher Stelle?



  • Bei mir geht es.

    Wie äußert sich das abschmieren?

    Dein main() muss noch einen Wert zurückgeben. Am besten 0.



  • er zeigt keine fehler hängt sich einfach auf wenn ich bestimmte Zahlen eingebe. Bei anderen gecht er weiter und gibt das printf, also dementsprechend das ergebniss aus



  • Vermutlich Rechenungenauigkeit von double. Veruschs mal mit

    if (quadrat <= b + 0.0005)
      return ..
    

    Edit:
    Oder versuchs mit long double.



  • mit:

    cooky451 schrieb:

    Vermutlich Rechenungenauigkeit von double. Veruschs mal mit

    if (quadrat <= b + 0.0005)
      return ..
    

    klappts nun perfekt, danke 😃



  • - '==' '<=' '>=' mit Fließkommazahlen sind immer ziemlich diffizil
    - verwende keine Variablennamen, für die es gleichnamige Standard Bibliothekfunktionen gibt ( sqrt ! ) auch wenn du math.h nicht einbindest


Anmelden zum Antworten