Jag är fortfarande intresserad av vad det är för skillnad...
> ...men man måste ju skifta resultatet också
Ja, som vid all multiplikation.
Ett par exempel. Vanlig binär integer multiplikation :
101 x 101 = 11001 (5 x 5 = 25 decimalt)
Om vi antar ett 2.1 fixed point format så blir multiplikationen ovan
exakt likadan men *tolkningen* av resultatet blir lite annorlunda :
10.1 x 10.1 = 110.01 (2.5 x 2.5 = 6.25 decimalt).
Eller ett 1.2 format :
1.01 x 1.01 = 1.1001 (1.25 x 1.25 = 1,5625 decimalt (1 + 1/2 + 1/16).
Så det jag menar är att det inte i grunden är någon skillnad. Det jag var
nyfiken kring är om det enbart är hanteringen av kommat som skiljer ?
Å andra sidan så finns det ju inget kommat annat än vid presentation av
värdet på LCD, skärm eller liknande. Kommat är aldrig lagrat tillsammans
med värdet i alla fall (eller borde inte vara det i alla fall, i så fall har man
nog tänkt lite fel).
> 16.16 * 16.16 blir ju 32.32
Det är samma *multiplikation* som 32 x 32 = 64. Att man har tänkta decimalkomman
ändrar inget, de ingår inte i *multiplikationen* som sådan. Och även vid ren integer 32x32
mult så måsta man bestämma vad man ska göra med 64 bitars resultatet, ingen skillnad.
Hur menar du att man skall "skifta" 32.32 resultatet så att det blir 16.16 (om det
är det som du menar med "samma format") ? Om man vill ha ett 32 bit resultat så
är en 32 bit integer den ända tänkbara. D.v.s alla decimaler trunkeras (eller avrundas).
Eller så vet man i förväg något om de ingåenda värderna som gör att man vet att man
inte kommer att nå max-värdet, då kan man även trunkera en eller flera av de
höga bitarna och behålla mostsvarande antal av decimalbitarna, men som sagt, det
kräver lite specifik kunskap om de ingånde värderna. Om man t.ex vet att heltalsdelen
aldrig går över 16 bitar, så kan man ta "mittenbitarna" av 16+16.16+16 och göra det
till det nya 16.16 resultatet av multiplikationen. D.v.s kasta de högsta 16 bitarna
av heltalsdelen och de *lägsta* 16 bitarna av decimaldelen.
Det är samma "problem" som att multiplicera två 2-siffriga decimal tal och
säga att det aldrig får bli > 99 (eftersom det ska vara "samma format").
Eller för att jämföra med ett par decimala exempel :
123 x 456 = 56088
12.3 x 45.6 = 560.88
1.23 x 4.56 = 5.6088
Fortfarande är det i grunden exakt samma multiplikation, det är bara placeringen
av decimalkommat (som inte ingår i multiplikationen som sådan) som skiljer. Det
fixar men i efterhand. Om man ställer upp det med papper och penna så är det
ingen skillnad mer än i slutet då kommat ska sättas rätt, men det är, som sagt,
inte del i själva multiplikationen som sådan.
Aja, som sagt, bara lite nyfiken, och generellt intesserad av matte...
