NitroLr Skrevet 24. oktober 2004 Del Skrevet 24. oktober 2004 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
søppel Skrevet 24. oktober 2004 Del Skrevet 24. oktober 2004 (endret) 3.605551275463989293119221267470495946251296573845246212710453056227166948293010445204619082018490717673514182024063540376030678264697807705163017166892709757742690564274152633233830394962346944796273229996288003268856427213072112733169072205297501785558838444814653868921075395392482563310244682836638732528696810189263313049835539921621174410861805701512768903102881214399483179868380919132903435362062795122333651135820697957383623852657760689067926096031845006305615126401983807255522548804399950680639096091446317976289163564544719685392169068915669891846759739035394769849996224790964428901064444127667548164021298371596181489447281979381732144478464578113964970569524607368748070302795722116140488032881716595571961517619126745071133538732853360545103521380556650255549458707329208126034773439158299436739575142958774128717613148983284913674819822886706705008873572985645183208135957558374528748997770498225074491739486122149917346314129778530567936583385908492373554065107297529702358225215799 ..fikk jeg. heh Edit: "Hva er galt?" Kan du forklare meg det? Endret 24. oktober 2004 av søppel Lenke til kommentar
NitroLr Skrevet 24. oktober 2004 Forfatter Del Skrevet 24. oktober 2004 (endret) #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 24. oktober 2004 av NitroLr Lenke til kommentar
søppel Skrevet 24. oktober 2004 Del Skrevet 24. oktober 2004 (endret) 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 24. oktober 2004 av søppel Lenke til kommentar
NitroLr Skrevet 6. november 2004 Forfatter Del Skrevet 6. november 2004 Du kunne ikke tenke deg å hjelpe meg litt mer enn som så ? :!: Jeg skjønte ikke hva du mente -i det hele tatt- Lenke til kommentar
Legion Skrevet 6. november 2004 Del Skrevet 6. november 2004 ligger i begrensningene til datatypen. float er på 4 bytes. double på 8 bytes, long double 10 bytes resterende tall blir da 0 siden 0.20 = 0.2 Lenke til kommentar
NitroLr Skrevet 6. november 2004 Forfatter Del Skrevet 6. november 2004 Aha, det forklarer vel saken. Takk Lenke til kommentar
søppel Skrevet 6. november 2004 Del Skrevet 6. november 2004 (endret) 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 6. november 2004 av søppel Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå