Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

beliebige Wurzel berechnen

4 views
Skip to first unread message

Christian Eyrich

unread,
May 10, 1998, 3:00:00 AM5/10/98
to

Hi!

Leider fehlt in der math.h eine wichtige Funktion. Und zwar eine zum Berechnen
der nten Wurzel einer Zahl. Wer hat eine Implementation einer solchen Funktion,
bzw. weiß wo es eine gibt?

Grüße,
Christian

Jochen Schoof

unread,
May 11, 1998, 3:00:00 AM5/11/98
to

On Sun, 10 May 1998 18:48:00 +0200, Christian Eyrich wrote:
:
: Leider fehlt in der math.h eine wichtige Funktion. Und zwar eine zum Berechnen

: der nten Wurzel einer Zahl. Wer hat eine Implementation einer solchen Funktion,
: bzw. weiß wo es eine gibt?

Die Mathebibliothek enthaelt die Funktion pow() zur Berechnung von
Potenzen. Wie wir noch aus dem Mathematik-Unterricht wissen, ist
eine n-te Wurzel nichts anderes als die 1/n-te Potenz einer Zahl.
Nach Einbinden von <math.h> kann man also etwa vierte Wurzeln ein-
fach mit

y = pow(x, 0.25);

ziehen. Ich nehme an, dass loest Dein Problem... =8^)

Gruss

- Jochen

--
Jochen Schoof (http://www-info2.informatik.uni-wuerzburg.de/staff/joscho)
___________________________________________________________________________
\_Address __/ Informatik II, Uni Wuerzburg, Am Hubland, D-97074 Wuerzburg
\_Email ___/ mailto:sch...@informatik.uni-wuerzburg.de

Siegmund Schreiber

unread,
May 11, 1998, 3:00:00 AM5/11/98
to

CE>Leider fehlt in der math.h eine wichtige Funktion.
Denkst Du :-).


CE>Und zwar eine zum Berechnen der nten Wurzel einer Zahl. Wer hat eine
CE>Implementation einer solchen Funktion, bzw. weiß wo es eine gibt?
Kleiner Tip:
Die Quadratwurzel einer Zahl ist die Zahl potenziert mit 0.5

Siegmund

Thomas Weidenfeller

unread,
May 11, 1998, 3:00:00 AM5/11/98
to

CE>Leider fehlt in der math.h eine wichtige Funktion. Und zwar eine zum
CE>Berechnen der nten Wurzel einer Zahl.

Nein, fehlt nicht. Wo's allerdings fehlt ist bei deinen Mathe-Kenntnissen.

#define ROOT(x, y) pow((x), 1.0/(y))


/Thomas

Christophe Saout

unread,
May 11, 1998, 3:00:00 AM5/11/98
to

Hallo Christian!

CE> Leider fehlt in der math.h eine wichtige Funktion. Und zwar eine zum

Berechnen der nten Wurzel einer Zahl. Wer hat eine Implementation einer solchen


Funktion, bzw. weiß wo es eine gibt?

Mathe, 10. Klasse: pow(unter_wurzel,1/links_oben_auf_wurzel) ;-)

Auf Wiedermailen, Christophe!
[Newton 0.29ß]

Heiko Kretschmer

unread,
May 11, 1998, 3:00:00 AM5/11/98
to

<^>< Christian!

CE> Leider fehlt in der math.h eine wichtige Funktion. Und zwar eine zum
Berechnen der nten Wurzel einer Zahl. Wer hat eine Implementation einer solchen
Funktion, bzw. weiß wo es eine gibt?

Machs doch mit pow...musst halt den exponent anpassen. zB
pow(wertunterderwurzel, 1/n)

Tschö, Heiko (mit Mac Philipp)

Klaus Tenter

unread,
May 11, 1998, 3:00:00 AM5/11/98
to

Mach doch folgendes:

double wurzel(double x, double n)
{
return pow(x,1.0/n);
}

Oder sowas:

#define wurzel(x,n) pow((x),1.0/(n))

Christian Schmidt

unread,
May 11, 1998, 3:00:00 AM5/11/98
to

Helau Christian,

CE>Leider fehlt in der math.h eine wichtige Funktion. Und zwar eine zum

CE>Berechnen der nten Wurzel einer Zahl. Wer hat eine Implementation einer
CE>solchen Funktion, bzw. weiß wo es eine gibt?
Wenn mich meine Mathekenntnisse nicht verlassen haben, kann man eine
Wurzel auch als Potenz schreiben:

nûx = x^(1/n)
(n-te Wurzel aus x = x hoch (1/n))

Somit kannst Du die einfache, wenn auch langsame POW-Fkt. verwenden.

----------------------------------------------------------------------
double sqrt_n(double x) {
return(pow(x,(1/n));
}
-----------------------------------------------------------------------


Also, bis dann denn
Chris Chaos

+--------------------------------------------------+
| http://www.informatik.uni-rostock.de/~cschmidt |
| email: csch...@informatik.uni-rostock.de |
+--------------------------------------------------+
"... Kopieren geht über Studieren ..."

Gerhard Bahr

unread,
May 12, 1998, 3:00:00 AM5/12/98
to

Hallo Siegmund,

SS>Die Quadratwurzel einer Zahl ist die Zahl potenziert mit 0.5

"Potenz" heißt auf Englisch: "power"; daher das pow().
"x potenzieren mit a" heißt auf Englisch: "raise x to the power of a".

Wie schön, wenn man sich noch an Mathe und Englisch erinnert - die Schule war
doch zu etwas nütze.

Shubhashayam
*** Gerhard

Dimitri Junker

unread,
May 12, 1998, 3:00:00 AM5/12/98
to

Hi Christian!

CE>Leider fehlt in der math.h eine wichtige Funktion.

Bestimmt
CE>Und zwar eine zum Berechnen der nten Wurzel einer Zahl.
Die gerade nicht. Denn die nte Wurzel von x ist nichts anderes als x^(1/n). Und
lt Kernighan/Ritchie gehört
pow(x,y)
zur Standard Mathelib
Mein Compiler sagt dazu folgendes:
Name ¯power® - berechnet die y. Potenz von x, also x^y.

Definition double pow( double x, double y );

Prototyp in math.h

Beschreibung pow liefert das Ergebnis der Berechnung x^y.

Ergebnis Falls sich das Argument x kleiner Null ist und y
keine ganze Zahl, so wird errno auf EDOM gesetzt.
Wenn beide Argumente Null sind, erhält man als
Resultat 1. Bei einem Überlauf liefert pow HUGE_VAL
und setzt errno auf den Wert ERANGE.
Die Behandlung von Fehlern kann über die Routine
setmatherr modifiziert werden.

Gruppe Mathematische Routinen Gleitkomma-Befehle

Querverweis exp sqrt

also berechnest Du die Wurzel wie folgt:
n_te_wurzel_x=pow(x,1./(double)n);
Wenn Du das häufiger machst definier Dir ein Makro:

#define N_Wurzel(x,n) = (pow((double)(x),1./(double)(n)))

oder so ähnlich.


Bye
Dimitri

Gerhard Bahr

unread,
May 12, 1998, 3:00:00 AM5/12/98
to

Hallo Christian,

CE>Leider fehlt in der math.h eine wichtige Funktion. Und zwar eine zum
Berechnen
CE>der nten Wurzel einer Zahl. Wer hat eine Implementation einer solchen
Funktion,
CE>bzw. weiß wo es eine gibt?

Im Mathe-Unterricht:

z.B.


x^a = exp(ln(x)*a) für alle x>0

Die Wurzel von x ist exp(ln(x)/a)
das gilt hier sowieso nur bei x>0
oder wollen wir in die komplexen Zahle einsteigen?

Jetzt könnte man z.B. eine Funktion double root (double x, int a) schreiben
oder besser eine int root (double* xptr, int a). Der return code gibt an, ob
etwas schiefgelaufen ist, xptr ist die Adresse der Variablen, der die Wurzel
gezogen wird (warum habe ich plötzlich Zahnschmerzen?). Oder, ...

Bei all dem arithmetischen Kram finde ich wichtig, sich Gedanken über
Wertebereiche und Definitionsbereiche zu machen! Soll's schnell gehen? Kommen
nur ganze Zahlen vor? Was ist mit negativen? Reicht mir die Genauigkeit von
exp() und ln()?
Man kann sich hier verkünsteln und/oder schöne Fehler bauen.
Ich bin gespannt auf die vielen Vorschläge.

Und jetzt bitte auch:
sinus und co, arcus, sinus hyperbolicus, logarithmus mit beliebiger Basis.




Shubhashayam
*** Gerhard

Christian Eyrich

unread,
May 14, 1998, 3:00:00 AM5/14/98
to

Hi Christian,

CS>Wurzel auch als Potenz schreiben:

Danke, Du bist zwar nicht der erste, aber trotzdem danke.

CS>Somit kannst Du die einfache, wenn auch langsame POW-Fkt. verwenden.

Geht's auch schneller (als mit pow(), ich meine weil du "langsam" extra
betonst)? Bzw. wie ist die pow() in den Libs realisiert?

Christian

0 new messages