Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
10.09.2001, 16:14
Son-Goten



hi leutz!
ich wüsste gerne, wie man folgende mathematische formel in c++ schreiben kann:
x=WURZEL(A*B)

würde mich freuen, wenn jemand einem kleinen, unterbelichteten c++-newb helfen könnte ;)

mfg
goten

danke im voraus!!!

--

zum Seitenanfang zum Seitenende Profil || Suche
001
10.09.2001, 17:18
Sccar



moinsen

zwei möglichkeiten:

schreib die funktion WURZEL, die mit hilfe von interval rechnung (solltest du in mathe gelernt haben) die wurzel eingrenzt (nicht ganz einfach).

oder du bindest einfach die bibliothek "math.h" ein, in denen andere menschen möglichkeit 1 in der funktion sqrt() umgesetzt haben.

sccar

--

...das is zwar der uebelst gehackteste kleine bastard, den ich je gesehen habe, aber dafuer sauschnell. {Tron}

zum Seitenanfang zum Seitenende Profil || Suche
002
10.09.2001, 17:49
Prefect



Übrigens haben da andere Menschen nicht Möglichkeit 1 umgesetzt. sqrt() greift nunmal auf die FPU (also Hardware) zurück. Dennoch wäre es irgendwie interessant, zu wissen, wie die FPU denn nun die Wurzel eigentlich berechnet.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
003
10.09.2001, 19:43
tommsch



nie wurzel rechnen gelernt?
habs jetzt nimmer im kopf, is aber nicht sehr schwierig
wenns irgendwen interessiert, dann such ich vielleicht amoi

--

"Wenn schon Sklave, dann überzeugter Sklave" - Steindl über techn. Zeichner

zum Seitenanfang zum Seitenende Profil || Suche
004
10.09.2001, 22:11
terrorgen



nimm den windows taschenrechner und quadrier solang zahlen bis das ergebnis einigermaßen passt der rest ist rundungsfehler ;-)

wie gesagt bisl schwund is immer !!!

--

- alle Angaben sind wie immer ohne Gewähr

zum Seitenanfang zum Seitenende Profil || Suche
005
12.09.2001, 14:27
Crack-Tom



So lernen wir es bis jetzt in der Schule, immer in Intervallen eingrenzen bis der Kasten klein genug ist und man ein vernünftiges Ergebnis hat.
Wie das in c++ geht weiß ich nicht, würde mich aber interessieren.

--

Diese freeware-compilernamen verwirren mich; MingW32, DEVCPP, JPEG.....
Meine Schule: www.laurentianum.de

zum Seitenanfang zum Seitenende Profil || Suche
006
12.09.2001, 16:34
Son-Goten



steht doch oben: sqrt(A*B) ;)

hmm.... ich werd aber mal zur übung selbst ne funktion schreiben ;)

achso.. dann noch was: ich kann pi jetzt berechnen lassen, allerdings ergibt sich dabei aufgrund des zu geringen speichers, den float reserviert (nehme ich zumindest mal an...), auch bei "printf("fuer Bn %.30f .\n",Bn);" nach 16 stellen eine reihe von nullen ( x.xxxxxxxxxxxxxxxx00000000000000 <------ wobei x für irgendwelche zahlen steht ;) )... desweiteren wüsste ich gerne, ob ich nicht die .30 weglassen und dafür sorgen kann, dass er pi immer so viel speicher, wie benötigt, reserviert.

danke im voraus (mir würde auch ein link o.ä. (hoffe ich) reichen)

goten

--


Dieser Beitrag wurde am 12.09.2001 um 16:34 von Son-Goten bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
007
12.09.2001, 18:07
Sccar



moinsen

@prefect

rein theoretisch kann auch die fpu das net anders machen, nur vielleicht etwas optimierter. oder gibt es eine andere möglichkeit (mathematisch) an eine wurzel zu kommen (sagt bloss net taschenrechner:)

@Crack-Tom

mach einfach eine endlos schleife, die immer wieder eine intervall schachtelung durchführt und das ergebniss bei der gewünschten genauigkeit zurückgibt.

cu

sccar

--

...das is zwar der uebelst gehackteste kleine bastard, den ich je gesehen habe, aber dafuer sauschnell. {Tron}

zum Seitenanfang zum Seitenende Profil || Suche
008
12.09.2001, 18:48
Prefect



@Sccar: Natürlich sag ich nicht Taschenrechner *g* allerdings wäre tumbes Eingrenzen glaube ich viel zu ineffizient. Ich habe mir mal da so Annäherungsformeln hergeleitet, die ich jetzt leider nicht mehr im Kopf habe. Man könnte aber wohl z.B. mit so ner Art Lookuptable die Wurzelschleife beschleunigen.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
009
12.09.2001, 18:52
Sccar



ne erläuterung wäre net schlecht. (vielleciht mit zeichnung *sabber*)

--

...das is zwar der uebelst gehackteste kleine bastard, den ich je gesehen habe, aber dafuer sauschnell. {Tron}

zum Seitenanfang zum Seitenende Profil || Suche
010
12.09.2001, 18:55
Son-Goten



@sscar und jetzt auf deutsch ;)
nee, im ernst... ich hab´s jetzt mit meinen beschränkten mitteln geschafft, ne kleine intervallrechnung zu basteln, die erst solange +1 rechnet, bis die wurzel quadriert in das quadrat hineinpasst (... ähhhhh........) und dann noch einmal +0.1 rechnet, um die genauigkeit wenigstens auf eine stelle hinterm komma zu rehöhen ;)

while(Wurzel*Wurzel<Quadrat)
{
Wurzel=Wurzel+1;
};

if(Wurzel*Wurzel>Quadrat)
{
Wurzel=Wurzel-1;
}; //das hier musste ich einfügen, weil ich keine andere möglichkeit sah, den fehler, den die while-schleife zum beispiel bei der wurzel von 15 ausgibt (4), zu beheben

while(Wurzel*Wurzel<Quadrat)
{
Wurzel=Wurzel+(0.1);
};

(hier muss dann natürlich auch nochmal son if() wie oben rein ;) )

ich weiß, ich weiß: dem experten oder halb-profi gefällt sowas sicher gar nicht, aber ich weiß nun mal nicht, wie ich deinen vorschlag in die tat umsetzen kann ;)

--

zum Seitenanfang zum Seitenende Profil || Suche
011
12.09.2001, 19:35
Sccar



moinsen

so sieht eine mögliche wurzel funktion aus:

double wurzel(float no)
{
double reVal = 0;
bool higher = false;
int i;

if(no < 0)
{
return 0;
}

for(i=0;i<16;i++)
{
while(!higher)
{
reVal = reVal + pow(10, (-1 * i));

if(reVal * reVal > no)
{
higher = !higher;
reVal = reVal - pow(10, (-1 * i));
}

}
higher = !higher;
};

return reVal;
};

funktioniert auch richtig

sccar

--

...das is zwar der uebelst gehackteste kleine bastard, den ich je gesehen habe, aber dafuer sauschnell. {Tron}

zum Seitenanfang zum Seitenende Profil || Suche