Gå til innhold

Umulig tall ved bruk av kvadratrot funksjon?


Anbefalte innlegg

For noen dager siden fikk vi en matte-oppgave på skolen, hvor svaret ble et irrasjonalt tall. Men siden vi bruker kalkulatorer som bare regner med 8 tall, kunne jeg ikke være sikker. Da jeg kom hjem satt jeg meg ned, fant ut hvordan man lagde en kalkulator som regnet ut kvadratrot med x antall desimaler.

Så prøvde jeg å finne kvadratroten til tallet (13, såvidt jeg husker )

med tusen desimaler. Og hva skjer? Jeg får svaret, men over 900 av desimalene er 0'tall. Noen som kan forklare det? :!:

Lenke til kommentar
Videoannonse
Annonse
3.605551275463989293119221267470495946251296573845246212710453056227166948293010445204619082018490717673514182024063540376030678264697807705163017166892709757742690564274152633233830394962346944796273229996288003268856427213072112733169072205297501785558838444814653868921075395392482563310244682836638732528696810189263313049835539921621174410861805701512768903102881214399483179868380919132903435362062795122333651135820697957383623852657760689067926096031845006305615126401983807255522548804399950680639096091446317976289163564544719685392169068915669891846759739035394769849996224790964428901064444127667548164021298371596181489447281979381732144478464578113964970569524607368748070302795722116140488032881716595571961517619126745071133538732853360545103521380556650255549458707329208126034773439158299436739575142958774128717613148983284913674819822886706705008873572985645183208135957558374528748997770498225074491739486122149917346314129778530567936583385908492373554065107297529702358225215799

 

..fikk jeg. heh

 

Edit:

"Hva er galt?" Kan du forklare meg det?

Endret av søppel
Lenke til kommentar


#include <iostream>
#include <cmath>
#include <cstdio>

using namespace std;

float regn_kvadratrot(float kvadratrot);
int main(int argc, char **argv)
{
float kvadratrot;

cout<<"Tall: ";
cin>>kvadratrot;
float svar;
svar=regn_kvadratrot(kvadratrot);
printf("%.1000f", svar);
cin.ignore();
cin.get();

}

float regn_kvadratrot(float kvadratrot)
{
float svar;
svar = sqrt(kvadratrot);

return svar;
}

Der. Bedre.

Endret av NitroLr
Lenke til kommentar

Hørt om ting som "flaskehals"?

 

Det her er jo en prosess - og ett eller annet sted må det jo være en flaskehals som "struper" svaret.

 

Hint: Utgangspunktet.

 

Edit:

Til neste gang; har du noen forslag om hvordan du kan søke etter slike "flaskehalser" o.l. i kode?

Endret av søppel
Lenke til kommentar
  • 2 uker senere...

Største nøyaktigheten du kan få er når du bruker sqrtl, om jeg ikke tar helt feil,

#include <iomanip>
...
cout << fixed << setprecision(1000) << sqrtl(13) << endl;
...

 

 

...

double sqrt(double x);

 

float sqrtf(float x);

 

long double sqrtl(long double x);

...

 

Finnes matte-biblioteker der man kan få større nøyaktighet. Blitz++ tror jeg, og kanskje Boost har noen.

Endret av søppel
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...