flyttal enligt IEEE 754. Hur får man så stora värden?
flyttal enligt IEEE 754. Hur får man så stora värden?
Har börjat experimentera lite med flyttal. Läste lite om IEEE 754 standarden men förstår inte hur de kan ha så hög precition men samtidigt kunna representera så höga värden. Om man tex kollar på en vanlig float (32-bit) så används 8bit till heltalen och sedan 23 till decimalerna och en bit används för att visa om det är negativt eller positivt. På något konstigt sätt kan man alltså representera tal på flera miljoner med en vanlig float, men i mitt huvud borde gränsen gå vid 255 eftersom heltalen representeras med endast 8bit. Hur fungerar detta egentligen?
> Hur fungerar detta egentligen?
http://en.wikipedia.org/wiki/IEEE_754
http://en.wikipedia.org/wiki/Floating_point
Jämför även med :
http://en.wikipedia.org/wiki/Fixed-point_arithmetic
http://en.wikipedia.org/wiki/IEEE_754
http://en.wikipedia.org/wiki/Floating_point
Jämför även med :
http://en.wikipedia.org/wiki/Fixed-point_arithmetic
säg att jag har ett väldigt stort tal och lägga till något, säg 1, då måste hela grejen först vecklas ut genom att multiplicera decimaltalet (0-2) med 2^exponenten. sedan kan man lägga till 1 och sedan dividera med 2^2 tills man är tillbaka där man började. Jättetidskrävande måste jag säga.
Om man ska göra detta i en vanlig 8-bitars PIC så måste man ha något temporärt ställe att spara flyttalet när det inte är sparat i IEEE standarden för att kunna arbeta med det, eller? Detta temporära ställe måste ju vara väldigt stort för att rymma så stora tal.
Om man ska göra detta i en vanlig 8-bitars PIC så måste man ha något temporärt ställe att spara flyttalet när det inte är sparat i IEEE standarden för att kunna arbeta med det, eller? Detta temporära ställe måste ju vara väldigt stort för att rymma så stora tal.
Man brukar inte göra riktigt så, utan man gör en normalisering av flyttalen så att mantissorna kan summeras direkt. Problemet om man har ett väldigt stort tal och ska lägga till 1 så gör den begränsade precisionen att resultatet blir oförändrat.
Samma sak gäller om man har ett väldigt litet tal tex 0.00000001 och lägger till 1 så borde resultatet bli 1.00000001 men om man bara har ett begränsat antal decimaler så blir det avrundat till 1.0 istället.
Samma sak gäller om man har ett väldigt litet tal tex 0.00000001 och lägger till 1 så borde resultatet bli 1.00000001 men om man bara har ett begränsat antal decimaler så blir det avrundat till 1.0 istället.
Det här är ett icke-problem, erfersom alla miljöer som stöder floating-point
alltid har rutiner i sin runtime för all möjlig hantering.
Vill du bara helt teoretiskt veta hur det fungerar ?
För ingen i dag skriver egan rutiner p.g.a att man måste...
> Jättetidskrävande måste jag säga.
Och ?
Ingen påstår något annat.
alltid har rutiner i sin runtime för all möjlig hantering.
Vill du bara helt teoretiskt veta hur det fungerar ?
För ingen i dag skriver egan rutiner p.g.a att man måste...
> Jättetidskrävande måste jag säga.
Och ?
Ingen påstår något annat.