Sida 4 av 4

Re: Fixed point-problem

Postat: 9 maj 2011, 13:19:44
av jesse
>Det är lite samma sak som att 0.25 x 0.25 = 0.0625.

Ja, det är väl ganska typiskt att man behöver dubbelt så många bitar när man jobbar med multiplikation (vare sig det gäller heltal eller fixtal), men när man väl kommit fram till resultatet går det ofta att stoppa in i samma antal bitar som de ingående termerna låg i. Fast ibland med decimalpunkten på en annan plats.

Man får ju inte använda fixtal på det viset att man begränsar sig till dess omfång bara för att man vill ha alla fixtal likadana. När en operation kräver flera bitar eller punkten på ett annat ställe får man ju skapa ett annan typ av fixtal som passar bättre.

antag att du vill repsresentera ström mellan 0 och 1000 mA.

fixtalet f10_6_milliampere ; funkar ju, men att göra så här är ju förkastligt: f10_6_ampere = f10_6_milliampere / 1000; för då får ju Ampere bara 6 bitars noggrannhet!

t.ex. 700mA = 1010111100.000000 mA blir 0000000000.101011 ampere.

Det hade ju varit förstås varit vettigare att t.ex. skriva:
f1_15_ampere = f10_6_milliampere*512 / 1000; eller
f0_16_ampere = f10_6_milliampere*1024 / 1000;

både f10_6_milliampere och f1.15_ampere förutsätter givetvis att värdet inte överstiger 1023.984 respektive 1.99997. Alla tal har en övre gräns, och den anpassas till sammanhanget.

Sunt förnuft i varje situation, med lite ordning (så man vet vad talet innehåller) brukar väl lösa de flesta problemen i sådana här lägen.

(EDIT:ändrat lite felaktiga siffror :vissla: )

Re: Fixed point-problem

Postat: 9 maj 2011, 14:19:48
av Nerre
Visst kan man skapa den där taltypen 2.30 som tillägg till sin 1.15 bara för att kunna multiplicera två 1.15-tal. Men om nu alla variabler man räknar med är 1.15 så är det ju ett onödigt steg.

Visst, man kommer rakt av kunna köra 1.15 x 1.15 och få ett 2.30-tal. Men om det direkt ska stoppas in i en 1.15-variabel så måste man ju skifta det...

Så istället för att använda vanlig multiplikation och skifta resultatet så använder man en fixed point-multiplikation där man får ut ett redan skiftat resultat.

Re: Fixed point-problem

Postat: 9 maj 2011, 19:00:18
av monstrum
Sen är det även otroligt lätt att skjuta sig i foten och göra massa smarta grejer med fixpunkt, för att att senare insé att man i princip har implementerat ett långsamt flyttalssystem istället. Att använda flyttal är faktiskt inte så fasligt långsamt som många vill hävda.

Re: Fixed point-problem

Postat: 9 maj 2011, 19:48:17
av sodjan
Så sant. Det är mycket viktigare att tänka över det man håller på med så
att man använder värden och speciellt *enheter* som blir snabba. T.ex så
är det sällan som det är effektivt att konvertera ett värde från en temp/volt
till ett korrekt värde i (t.ex) Celcius direkt när man läser. Det kan lika gärna
vara en intern hitte-på-enhet (som passar beräkningarna bättre) genom hela
processen fram till att det ska presenteras på LCD eller liknande, först då
omvandlar man till Celsius (eller vad det nu ska vara). Sannolikt blir det
även enklare att konvertera hela applikationen till Farenheit, det är bara
presentation i sista steget som behöver justeras, allt annat är samma.