Wurzel ziehen in C

Status
Für weitere Antworten geschlossen.
Ich denke, dass die Potenzreihenentwicklung der Wurzel die einfachste Methode waere. Ausserdem bekommt man damit die Fehlerabschaetzung gleich mit dazu.

Also: sqrt(x+1) = 1+1/2*x -1/8*x^2+3/48*x^3- \dots
 
Zuletzt bearbeitet von einem Moderator:
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.

y^0.5, nicht y*0.5

EDIT: SRY, hab übersehen, dass JoelH das bereits gepostet hat.
 
Zuletzt bearbeitet:
Ich würde vorschlagen einfach mal in den Sourcecode von einem Taschenrechner Programm reinschauen und sehen wie es dort gemacht wurde. Aber es wird doch bestimmt eine Bibiothek geben die Wurzeln ziehen kann oder?
 
Ich würde vorschlagen einfach mal in den Sourcecode von einem Taschenrechner Programm reinschauen und sehen wie es dort gemacht wurde. Aber es wird doch bestimmt eine Bibiothek geben die Wurzeln ziehen kann oder?

Meinst du math.h?
Nein, die gibt es nicht, sie ist komplett imaginär und alle,
die etwas anderes behaupten, leiden an Halluzinationen.

Ironie der Wurzel :))
 
das thema hat mich sehr weiter gebracht... hab mich nicht alles komplett angeschaut aber hier mal meine lösung.. getestet und komplett das programm ;)

mfg m0erk








/* 26.11.08 - Quadratwurzel ohne math.h - JR */

#include <stdio.h>
// #include <math.h>

double lese_f(void);
int lese_i(void);

main()
{
int key;
int p=0;
double i;
double wrzl;
int count=0;
while(p < 1)
{
switch(p)
{
case 0:

printf("\nBitte Zahl eingeben, deren Wurzel gesucht ist.\n");
wrzl=lese_f();
i=wrzl;
while( count < 5000 )
{
i = ((i*i)+wrzl)/(2*i);
count++;
}
printf("\nDie Wurzel aus %lf ist %lf.\n",wrzl,i);
getchar();
printf("\nNochmal?! (1=j/2=n)\n");
key=lese_i();
if( (key == 2) )
p++;
}
}
}
double lese_f( void )
{
double zahl;
char zeile[80];

gets( zeile );
sscanf( zeile, "%lf", & zahl );
return( zahl );
}
int lese_i( void )
{
int zahl;
char zeile[80];

gets( zeile );
sscanf( zeile, "%d", & zahl );
return( zahl );
}
 
Boah das kann ja keine Sau lesen.
1. Code TAGS
2. Einrücken
3. Die Variablennamen sind eh nach dem Kompilieren weg, dann kann man sie vorher auch sprechend schreiben
 
ich habe zur berechnung folgenden algorythmus verwendet:
while(i!=st&&end!=1){
while(((*a)*(*a))<w&&end!=1){

(*a)+=*add;
if((*a)*(*a)==w){
end=1;
}
}
i++;
if(end!=1){
(*a)-=*add;
}
*add=*add/10;

}
wobei die variable st die anzahl der gewünschten stellen und w die zahl von der die wurzel erechnet werden soll ist
 
Hab noch des Heron'sche Iterationsverfahren im Angebot :P (In der Version der Musterlösung... war zu faul, meine Version nochmal abzutippen....)
Code:
#include <stdio.h>
#define epsilon 0.000001
double fabs(double x)
{
    /* berechnet den Absolutbetrag einer Fliesskommazahl */
    if(x<0)
        return -x;
    else
        return x;
}

double heron(double y)
{
    double x_old=0.0, x_new = 1.0;

/* Initialisierung des Verfahrens */

    while(fabs(x_new-x_old)>epsilon)
    {
        /* solange das Ergebnis noch nicht genau genug ist:
        eine weitere Iteration gem¨aß Heron-Verfahren */
        x_old=x_new;
        x_new=0.5*(x_old+y/x_old);
    }

    return x_new;
}

int main()
{
    double y;
    printf("Geben Sie y ein: ");

    /* Wir wollen m¨oglichst genau rechnen, deshalb nehmen wir
    eine Fliesskommazahl doppelter Genauigkeit (double) f¨ur y.
    Eine Variable vom typ double kann man mit %lf ausgeben
    (printf) bzw. einlesen (scanf).*/

    if(scanf("%lf", &y)!=1)
    {
        printf("Sie m¨ussen eine reelle Zahl eingeben. \n");
        return -1;
    }

    if(y<0)
    {
        printf("Die Wurzel einer negativen Zahl ist nicht definiert. \n");
        return -2;
    }
}
 
Zuletzt bearbeitet:
so jetz haben wir sehr viele bsps aba gibt es auch eine möglickeit wurzeln auf n steillige genauigkeit ausrechnen??
 
Ja, meine. Die Genauigkeit wird im
Code:
#define epsilon
festgelegt.
 
ja aba auch bei double is nach (ich glaub) 14 stellen aus bei long double nach 19 wie berechne ich z.b die 1. 100 stellen
 
Irgendwie verstehst du des mit n-stellen nich auch long kann nich unendlich stellen speichern. Ich brauche ienen algorythmus der die stellen nacheinander berechnet.
 
Oh entschuldige erwürdiger Meister das man nicht alles Wissen kann..... *scnr
 
Status
Für weitere Antworten geschlossen.

Ähnliche Themen

Python checkbox in der Kommandozeile

Ausführbare C-Datei von Mac OS auf Embedded Linux ausführen

Samba4 Freigabe erstellen

Luks keyfile over ssh

FreeBSD oder Linux?

Zurück
Oben