Fixed point-problem

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Fixed point-problem

Inlägg 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: )
Nerre
Inlägg: 27237
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Fixed point-problem

Inlägg 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.
monstrum
Inlägg: 620
Blev medlem: 13 januari 2005, 05:38:32
Ort: Göteborg

Re: Fixed point-problem

Inlägg 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.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Fixed point-problem

Inlägg 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.
Skriv svar