Wurzel ziehen in C

Dieses Thema im Forum "C/C++" wurde erstellt von Gollum, 05.12.2002.

  1. Gollum

    Gollum NuB

    Dabei seit:
    05.12.2002
    Beiträge:
    131
    Zustimmungen:
    0
    Ort:
    Ludwigshafen
    Hi wollt fragen ob jemand von euch ahnung hat wie ich nen algorithmus schreibe um eine wurzel zu ziehen ? also kein standartbefehl aus c sonder über mathematisches näheren !
    ?(
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. cmk

    cmk Benutzertitel:

    Dabei seit:
    01.10.2002
    Beiträge:
    209
    Zustimmungen:
    0
    also ich kann dir leider nur sagen wie du es theorethisch machen kannst, weil ich im syntax von c noch nicht so fit bin.

    also:

    wenn du eine wurzel ² nimmst (also die wurzel mit sich selbst mulitplizierst) bekommst du die zahl, von der man immer ausgeht.

    Man sagt ja - "wie ist die wurzel aus 25" - also

    wenn du die wurzel aus 25 haben willst musst du folgendes machen (natürlich dynamisch)

    du durchläufst eine for schleife solange, bis die zahl, die beim durchlaf erhöht wird mit sich selbst multipliziert die ausgangszahl ergibt.

    zb.
    float i = 0.00000000001;
    for(i*i != 25)
    {
    i = i + 0.00000000001;
    }

    also:

    i ist die variable, die bei jedem durchgang um 0.00000000001 erhöht wird. und solange 0.00000000001² nicht 25 ist wird 0.00000000001 immer wieder im 0.00000000001 erhöht.

    ist zwar sehr systemlastig aber müsste funzen wenn du keine andren funktionen nutzen willst ;)

    hehe hoffe ich habe geholfen!
     
  4. Andre

    Andre Foren Gott
    Moderator

    Dabei seit:
    01.04.2002
    Beiträge:
    3.876
    Zustimmungen:
    0
    sollte so bei integers funktiorieren...
    aber hab nicht getestet
    PHP:
    int zahl
    int wurzel ;   
     
    cin >> zahl 
    for (int c 1zahlc++)  {
     if( 
    zahl == 0)  {
            if(
    c*== zahl)  
                 
    wurzel ;   } 
                             }     
                      
    cout << wurzel  ;  
         }
    ###########edit###########
    ups..war zu langsam ;)
     
  5. JoelH

    JoelH I love Ruby

    Dabei seit:
    13.04.2002
    Beiträge:
    653
    Zustimmungen:
    0
    Ort:
    Frankenstein/Pfalz
    Code:
    include <iostream>
    using namespace std;
    
    double sqrt(double habenwill)
    {
    	    int counter = 0;
    		double spanne = habenwill;
    		double grenze = spanne/2;
    		double istes  = spanne*spanne;
    		while (istes != habenwill)
    		{
    			if (istes < habenwill)
    			{
    				spanne = spanne + grenze;
    			}
    			else 
    			{
    				spanne = spanne - grenze;
    				grenze /= 2;
    			}
    			counter++;
    			istes = spanne*spanne;
    			cout << spanne << " * " << spanne << " = " << istes << "              " << counter << endl;
    		}
    		return spanne;
    }
    
    int main (void)
    {
    	double suche;
    	cin >> suche;
    	cout << endl << sqrt(suche) << endl;
    	return 0;
    }
    so sollte das gehen, leider bricht er nicht ab, ist auch C++ (Stream) aber das ist ja sekundär. Probier es einfach mal aus. Wie kann man eigentlich nur die ersten x Ziffern miteinander vergleichen ?
     
  6. JoelH

    JoelH I love Ruby

    Dabei seit:
    13.04.2002
    Beiträge:
    653
    Zustimmungen:
    0
    Ort:
    Frankenstein/Pfalz
    hmm,

    @FUSEL
    Das ist äusserst ineffiziert !
     
  7. cmk

    cmk Benutzertitel:

    Dabei seit:
    01.10.2002
    Beiträge:
    209
    Zustimmungen:
    0
    hmmmmmmm

    andres beispiel ist dann auch ineffizient. ich habe es halt nur genauer gemacht. man kann den float ja auch auf 1.0 setzen dann isses genauso wie andres beispiel auch.

    bei mir hat man halt mehr kontrolle ;)

    klar is meines keine gute lösung ;) aber ich habe versucht zu helfen und das zählt-
     
  8. Andre

    Andre Foren Gott
    Moderator

    Dabei seit:
    01.04.2002
    Beiträge:
    3.876
    Zustimmungen:
    0
    neeee mein Beispiel ist scheisse :D

    da hasste recht!

    genau ;)

    glaub nich da joelH das böse gemeint hat...
    ist doch gut wenn einer konstruktiv kritisieren kann..da lern man wenigstens was...
     
  9. cmk

    cmk Benutzertitel:

    Dabei seit:
    01.10.2002
    Beiträge:
    209
    Zustimmungen:
    0
    ja klar - kritik is gut ;) ich weiß dass joehl das net böse gemeint hat aber ich wollte nur darauf hinweise dass ich nicht alleine ein ineffizientes beispiel gebracht habe ;) ich habe das auch nicht böse gemeint ;):O
     
  10. JoelH

    JoelH I love Ruby

    Dabei seit:
    13.04.2002
    Beiträge:
    653
    Zustimmungen:
    0
    Ort:
    Frankenstein/Pfalz
    Code:
    #include <iostream>
    using namespace std;
    
    
    const double epsilon = 1e-5;
    
    bool isEqual(double a, double b)
    {
       return abs(a - b) < epsilon;
    }
    
    double sqrt(double habenwill)
    {
    	    int counter = 0;
    		double spanne = habenwill;
    		double grenze = spanne/2;
    		double istes  = spanne*spanne;
    		while (!isEqual(istes,habenwill))
    		{
    			if (istes < habenwill)
    			{
    				spanne = spanne + grenze;
    			}
    			else 
    			{
    				spanne = spanne - grenze;
    				grenze /= 2;
    			}
    			counter++;
    			istes = spanne*spanne;
    			cout << spanne << " * " << spanne << " = " << istes << "              " << counter << endl;
    		}
    		return spanne;
    }
    
    int main (void)
    {
    	double suche;
    	cin >> suche;
    	cout << endl << sqrt(suche) << endl;
    	return 0;
    }
    So jetzt geht auch die Abbruchbedingung :D

    @FUSEL
    Das war nicht böse gemeint, nur ein Tip ;) Nehmen wir mal meinen Code der löst die Wurzel aus 8 in 48 Interationen, wieviele braucht wohl deiner ? Wenn man davon ausgeht dass du auf 5 Stellen testest und bei 0 anfangst und bis 2.8xxx zählst sind das 28000 iterationen , also ca. 28000 mehr als meine Funktion braucht, das meinte ich eigentlich.
     
  11. cmk

    cmk Benutzertitel:

    Dabei seit:
    01.10.2002
    Beiträge:
    209
    Zustimmungen:
    0
    ja ;)

    du kannst jetzt gift drauf nehmen, dass ich mir sobald mein linxu wieder komplett läuft ich versuche das zu verstehen was du da an code geschrieben hast ;)

    also ich sage auch danke und wäre froh wenn du es noch auskommentieren würdest (muss nicht heut sein da mein pc noch net läuft )
     
  12. JoelH

    JoelH I love Ruby

    Dabei seit:
    13.04.2002
    Beiträge:
    653
    Zustimmungen:
    0
    Ort:
    Frankenstein/Pfalz
    hmm,

    ist ganz einfach, ich nehme einfach an das x * x = y ist , wobei y gesucht wird.

    ist x * x < y addiere ich einfach einen kleinen Betrag zu x dazu, das ist die Variable grenze. Diese setze ich zu beginn auf einen beliebigen Wert < x . Wenn jetzt aber x * x > y ist dann ziehe ich die grenze wieder ab und verkleinere die grenze um die hälfte um sie dann wieder zu x dazu zu zählen. So tendiert grenze gegen 0 und der Wert x wird immer genauer bis er trifft. natürlich nur so genau wie der Computer das berechenen kann.
    zB. hier die Iterationen wbis er auf die Qurzel von acht kommt, da sieht man es glaub ich recht gut :
     
  13. cmk

    cmk Benutzertitel:

    Dabei seit:
    01.10.2002
    Beiträge:
    209
    Zustimmungen:
    0
    danke joehl ;)
     
  14. JoelH

    JoelH I love Ruby

    Dabei seit:
    13.04.2002
    Beiträge:
    653
    Zustimmungen:
    0
    Ort:
    Frankenstein/Pfalz
    hmm,

    kein Problem, der Algo ist auch garnicht von mir, der ist schon so alt wie die alten Griechen, frag mich aber nicht von wem er ist, dass weiss ich auch nicht, aber das ist so der klassische Näherungsalgo. Wird sehr oft benutzt da er sehr schnell ist. zB. auch bei suchalgos in sortierten Arrays oder Quicksort arbeitet auch irgendwie in dieser Art usw.
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 saintjoe, 06.12.2002
    saintjoe

    saintjoe Guest

    Warum so kompliziert?
    Eine Wurzel zu ziehen ist doch nix anderes als:
    x=y^0.5
    In PHP ginge das wurzel ziehen z.B. mit:
    Code:
    $x = pow($y,0.5);
    In C sollte das denke ich auch recht einfach zu realisieren sein...

    MfG
     
  17. cmk

    cmk Benutzertitel:

    Dabei seit:
    01.10.2002
    Beiträge:
    209
    Zustimmungen:
    0
    stimmt nicht.

    x = y * 0.5

    angenommen

    y = 16

    jeder weiß dass die wurzel aus 16 4 ist.

    aber

    16 * 0.5 = 8

    und 8 * 8 = 64 ;)

    denkfehler 0 punkte setzten 6.

    außerdem wollte er keine spezielle funktion anwenden.
     
Thema: Wurzel ziehen in C
Besucher kamen mit folgenden Suchen
  1. c wurzel ziehen

    ,
  2. Wurzel Ziehen In C

    ,
  3. 3. wurzel ziehen bei c

    ,
  4. die wurzel c,
  5. quadratwurzel ziehen c,
  6. c wurzel,
  7. c wurzel ziehen wie,
  8. wurzel algorithmus in c,
  9. c befehl wurzel ziehen,
  10. grundlagen c programmierung wurzel,
  11. wurzel in c,
  12. wurzel rechnen in c,
  13. c programm wurzel berechnen,
  14. wurzelziehen in c,
  15. wurzel ziehen ohne sqrt c,
  16. algorithmus wurzel c,
  17. wurzel von 28000,
  18. wurzel berechnen alghoryt,
  19. wurzel in c programmierung,
  20. kubikwurzel von 28000,
  21. primitivwurzel programmieren in c,
  22. c programmieren wurzel ziehen,
  23. wurzelrechnung c programmierung,
  24. wurzel befehl C
Die Seite wird geladen...

Wurzel ziehen in C - Ähnliche Themen

  1. Zimbra will »Open-Source-Wurzeln« stärken

    Zimbra will »Open-Source-Wurzeln« stärken: Der Groupware-Anbieter Zimbra sieht sich mit seinem Modell der »kommerziellen Open Source« im Aufwind. Mit verschiedenen Maßnahmen will der...
  2. Mit Debian-Wurzeln: Neue Versionen von Snowlinux und Semplice

    Mit Debian-Wurzeln: Neue Versionen von Snowlinux und Semplice: Von den beiden auf Debian basierenden Distributionen Snowlinux und Semplice liegen neue Versionen (Snowlinux 4 und Semplice 3.0.0) vor....
  3. Primitivwurzel bei ElGamal

    Primitivwurzel bei ElGamal: Hallo! Ich halte bald in Mathe ein Referat über Kryptographie und Computersicherheit, und da will ich zum Thema Public-Key den...
  4. /Home ins Wurzelverzeichnis verlegen

    /Home ins Wurzelverzeichnis verlegen: Hallo, ich habe bei der Installation meines Systems etwas geschlampt, und hab jetzt das /home Verzeichnis auf einer eigenen Partition... was ich...
  5. Wurzel in LaTeX mit \sqrt[x]{y}!?

    Wurzel in LaTeX mit \sqrt[x]{y}!?: Hi, ich habe gestern angefangen, LaTeX zu benutzen. Ich bin jetzt auf das Problem gestoßen, dass ich keine Wurzeln anzeigen kann, die einen...