Gollum
NuB
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 !


Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.


int zahl;
int wurzel ;
cin >> zahl
for (int c = 1; c < zahl; c++) {
if( zahl % c == 0) {
if(c*c == zahl)
wurzel = c ; }
}
cout << wurzel ;
}

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;
}

aber ich habe versucht zu helfen und das zählt-neeee mein Beispiel ist scheisseandres beispiel ist dann auch ineffizient.
bei mir hat man halt mehr kontrolle
genauaber ich habe versucht zu helfen und das zählt-

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 

#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;
}

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.

4 * 4 = 16 1
2 * 2 = 4 2
3 * 3 = 9 3
2 * 2 = 4 4
2.5 * 2.5 = 6.25 5
3 * 3 = 9 6
2.5 * 2.5 = 6.25 7
2.75 * 2.75 = 7.5625 8
3 * 3 = 9 9
2.75 * 2.75 = 7.5625 10
2.875 * 2.875 = 8.26562 11
2.75 * 2.75 = 7.5625 12
2.8125 * 2.8125 = 7.91016 13
2.875 * 2.875 = 8.26562 14
2.8125 * 2.8125 = 7.91016 15
2.84375 * 2.84375 = 8.08691 16
2.8125 * 2.8125 = 7.91016 17
2.82812 * 2.82812 = 7.99829 18
2.84375 * 2.84375 = 8.08691 19
2.82812 * 2.82812 = 7.99829 20
2.83594 * 2.83594 = 8.04254 21
2.82812 * 2.82812 = 7.99829 22
2.83203 * 2.83203 = 8.0204 23
2.82812 * 2.82812 = 7.99829 24
2.83008 * 2.83008 = 8.00934 25
2.82812 * 2.82812 = 7.99829 26
2.8291 * 2.8291 = 8.00382 27
2.82812 * 2.82812 = 7.99829 28
2.82861 * 2.82861 = 8.00105 29
2.82812 * 2.82812 = 7.99829 30
2.82837 * 2.82837 = 7.99967 31
2.82861 * 2.82861 = 8.00105 32
2.82837 * 2.82837 = 7.99967 33
2.82849 * 2.82849 = 8.00036 34
2.82837 * 2.82837 = 7.99967 35
2.82843 * 2.82843 = 8.00002 36
2.82837 * 2.82837 = 7.99967 37
2.8284 * 2.8284 = 7.99984 38
2.82843 * 2.82843 = 8.00002 39
2.8284 * 2.8284 = 7.99984 40
2.82841 * 2.82841 = 7.99993 41
2.82843 * 2.82843 = 8.00002 42
2.82841 * 2.82841 = 7.99993 43
2.82842 * 2.82842 = 7.99997 44
2.82843 * 2.82843 = 8.00002 45
2.82842 * 2.82842 = 7.99997 46
2.82843 * 2.82843 = 8 47

$x = pow($y,0.5);

Das wollte er aber nicht !!Original geschrieben von FUSEL
denkfehler 0 punkte setzten 6.

