Avatar billede psyco Nybegynder
09. april 2000 - 00:16 Der er 5 kommentarer og
1 løsning

Kvadratrod

Hejsa ...
Jeg har gået og spekuleret lidt over hvordan man egentlig laver en sqrt() funktion (kvadratrod) helt fra bunden...
Men jeg har ingen anelse om hvordan man gør ... nogen der kan hjælpe???
Avatar billede sjensen Nybegynder
09. april 2000 - 00:32 #1
tja..

Reelt handler det jo om at finde et tal der gange med sig selv giver det tal du har. Altså den omvendte vej. Da pc'ere (eller rettere processorer) er bygget til at addere og subtrahere tal, benyttes disse metoder til at gange og dividere, ved at udføre hhv. sammenlægning og fratrækning det antal gange der skal ganges/divideres med.

For at finde kvadratroden af et tal skal man altså finde et tal der gange med sig selv giver det tal man vil finde kvadratroden af.

Til at hjælpe har man så nogle principper:

f.eks.

Hvis tallet er under 100 er det et enkelt tal
Hvis det er større end 100 men mindre end 10000 er det et 2 cifret tal o.s.v.

Avatar billede stigc Nybegynder
09. april 2000 - 15:34 #2
include <iostream.h>
include <math.h>

void main {
conxt double tolerance = 0.00005;
double x=2.0;

while (fabs(x*x -2.0) > tolerance
  x=(x+2.0/x)/2.0;

cout << x;
}
Avatar billede roadkill Nybegynder
18. april 2000 - 14:41 #3
sqrt(x) = x^0.5 = exp(0.5*log(x))

Simpel matematik...

Husk bare, at exp og log skal have samme grundtal, men grundtallet er vist det samme for exp og log i C/C++


Avatar billede soepro Nybegynder
08. maj 2000 - 09:48 #4
roadkill >> ved du så også hvordan man når frem til sin (sinus) og cos (cosinus) - er det også ren matematik. (Jeg har en lommeregner som ikke kan - men godt kan exp og log.)
Avatar billede roadkill Nybegynder
08. maj 2000 - 10:35 #5
soepro >> der findes en række, som udregner cos og sin, noget i retningen af 1/x+2/x^2-3/x^3.... osv, hvor nøjagtigheden afgøres af, hvor mange led, du tager med. Jeg kan ikke huske disse rækker, men de er at finde i enhver matematikbog af en hvis karat (>gymnasieniveau :-)
Avatar billede stigc Nybegynder
08. maj 2000 - 12:54 #6
Jeg har skrevet min lidt mere om (uden fejl og mere brugervenlig (er kompileret))

#include <iostream.h>
#include <math.h>
#include <conio.h>

void main () {

const double tolerance = 0.00005;
double x;
cout << "Indtast tal: ";
cin >> x;
double x2=x;

while (fabs(x*x -x2) > tolerance)
{  x=(x+x2/x)/2.0; tal++;}

cout << "kvadratroden er " << x;
getch();
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester