Alltså...
Ni är helt ute och cyklar och verkar inte alls förstå "fixed point".
Vilken kompilator är använd för kodexemplen i de senaste inläggen ?
Är det testat ?
En typdeklaration "fixed" vore komplett meningslös utan att ange
den "fixa" positionen för kommat !!
Vad skulle annars skillnaden vara på "int fix" och "fixed fix" ???
"Fixed point" är inget som *processorn* vet vad det är. Jag känner inte
till någon processor arkitektur, modern eller historisk, där det ingår
något som skulle motsvara "fixed point". Det är enbart något som vi
som programmerare föreställer oss och som finns i våra huvuden.
Det är ungefär som att räkna vikter i Kg men använda gram för
beräkningarna, d.v.s vi har en underförstådd "fixed point" efter
de 3 lägsta siffrorna. Det är inget som på något sätt påverkar själva
beräkningarna, de går alldeles utmärkt att göra i (hela) gram
representerat av vanliga heltal/integers. Vill vi räkna "kilon" med
bättre noggranhet, så kan vi räkna milligram istället. Fortfarande
är det inget annat än helt vanliga heltal/integers !
"Fixed point" har enbart med hur vi *tolkar* en (vanlig) integer.
Eller med andra ord, istället för att räkna med Kg i float så räknar
vi med gram som integers. Kommat, "the fixed decimal point",
finns aldrig med i beräkningarna, det läggs enbart till vid presentation.
Stoppa in ett komma i värdet i gram efter de 3 lägsta siffrorna, så
hokus-pokus, vi har ett värde i Kg ! Men kommat behövs inte förrens
värdet ska presenteras !
Som sagt, "fixed point" är ingenting som varken processorn eller språken
behöver kunna eller veta något om...
Jag känner inte till ett enda språk som har en "fixed point" datatyp.
Däremot finns det många exempel på språk där heltal/integers kan ha
en "edit-option" där det underförstådda decimalkommats position
anges. Dock ändrar detta inte alls hur värdet representeras i minnet,
det är fortfarande en helt vanlig int. Som i COBOL t.ex.
Kod: Markera allt
float f = 1.2345;
fixed fix = (fixed)f*262144.0f; // 2^18 = 262144
borde vara något i stil med
Kod: Markera allt
float f = 1.2345;
int fix = f * 262144; // 2^18 = 262144
Eventuellt om konstanten behöver castas till float för att undvika
att "f" castas till en int innan multiplikationen. Jag kan inte C...