05. november 2004 - 11:03Der er
25 kommentarer og 1 løsning
mærklig float svar
jeg har fundet en mærklig fejl jeg ikke kan forklare
koden se således ud: #include <stdio.h> #include <conio.h>
void main() { float var;
var = 32000.2; printf("%f",var); getch(); } meget simpel det skulle jo gerne skrive 32000.2 på skærmen men det jeg får er 32000.199219 er der nogen der kan forklare det ?
..jo flere bytes din variabel er på desto bedre er præcisionen. en float fylder 4 bytes, en double fylder f.eks 8. (der er derfor også tilsvarende hastighedsforskel, når de benyttes)
til (sovsekoder 05/11-2004 11:08:39) - en tommelfinger regl er derfor: float til mindre præcise ting, double til mere præcise :)
hvis du er typen der gerne vil vide detaljerne om hvordan komma-tal kan repræsenteres, kan jeg anbefale at søge på nettet efter "floating point programming" ell. lign. hvis du vil vide mere indgående, hvorfor tingene er som de er. Problemet er det som erikj. siger: "det efter kommaet kan ikke altid repræsenteres præcist"
mange tak for jeres svar har dog prøvet med double og få også en fejl der ligner dog længer ude ca 32000.0000000100000 eller noget i den stil... fik det forklarede men kan bare ikke helt forstå hvorfor et tal som lige har defineret bliver til noget andet
tror jeg har fangede den nu... jeg troede der var 24bit til værdien (så kunne man jo repræsentere værdien ved at sige HEX "7d002 X 10^-3" altså 7d00.2) men der er kun 23. Så det er derfor den ikke kan skrive precis det tal men et tilnænmet ... Har jeg ret eller er jeg helt ved siden af ?????
Om det er 23 eller 24 bit gør ingen synderlig forskel ;) Selvfølgelig bliver det lidt mere præcist hvis der var 24 bit. Hemmeligheden er 2-fold 1) Det er baseret på 2-talssystemet (en halv, en fjerdedel, en ottendedel ..) 2) Der er kun et endeligt antal bits.
kan i give mig den binær værdi for de 32000.2 eller 32000.199219 (som det bliver) tror det vil hjælpe mig med at forstå.
Det eneste jeg er sikker på er at en float består af 32 bit det første bit fortæller om det er + eller - de næste 8 er exponenten de sidste 23 er significand... hvordan den så kommer frem til et tal og om det er 10^4 eller om det er 2^4 der bliver ganget med forstår jeg stadig ikke helt tak for jeres toldmodighed :)
ok... det jeg så kommer frem til er at det første 0 viser det er positiv de næste 8bit er exponenten 10001101 og de sidste 23bit 11110100000000001100110 er significanden
men hvordan får jeg det skrevet om... ekponenten er 141 skal man så sige 2^141 * significanden eller significanden^141 eller significanden^8D
kan ikke få noget af det til at give 32000.199219 hvordan bruger man eksponenten på significanten håber ikke jeg giver dig grå hår :)
er det sådan du mener for det giver kun 31232,39844 prøvede at køre det gennem excel :( kan også være jeg har skrevet forkert et sted men har kigget efter :(
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.