Flytande punktnummer: vad är det? Enkelt förklarade med exempel
I detta praktiska tips visar vi dig vad ett flytande punktnummer är och hur det skiljer sig från ett fast punktnummer.
Flytande punktnummer: vad är det?
Inom datavetenskap används ofta det flytande punktnumret för mätanordningar som ska fungera med en viss noggrannhet.
- Ett flytande punktnummer (eller "flytande punktnummer") är en representation av ett nummer med hjälp av exponentiell notation. I undantagsfall fungerar det bara ungefär. Du kan också representera numret 1230000 med siffran 1, 23 ⋅ 10⁶.
- 1.23 kallas "Mantissa". 10 är "basen" och 6 är "exponenten". Förresten, ett tecken kan också läggas till mantissen. Men du kan också använda hela saken på det dubbla systemet. Du kan också representera numret 10101100 med siffran 1.0101100 ⋅ 2⁷. Datorn lagrar bara skylten, mantissa och exponenten.
- Datorer flyttar vanligtvis kommaet fram och tillbaka tills det bara finns en 1 framför komma. Då måste datorn bara spara decimalplatserna för mantisan och exponenten.
- Så att exponenten kan sparas som ett positivt nummer läggs ett fast nummer, den så kallade bias, till. Den minsta möjliga exponenten för platsen före decimalpunkten (- bias) sparas som 0.
- Till skillnad från fastpunktsnumret är kommat inte på en fast punkt i ett flytpunktsnummer.
Half, Float & Double - Vanlig kodning av flytande punktnummer
Du har verkligen snubblat över dessa tre termer, särskilt när du programmerar med Arduino. Dessa är standardiserade representationer.
- Datatypen "halv" är ett 16-bitarsnummer. Den vänstra biten är ansvarig för skylten. Exponenten har 5 bitar och mantissen 10. Den förspänning som används är 15. Eftersom den första biten av mantissen är (nästan) alltid 1, sparas detta inte.
- Datatypen "float" (eller "singel") är ett 32-bitarsnummer. Även här används lite för skylten. Men exponenten har 8 bitar (bias = 127) och mantissen 23.
- Datatypen "dubbel" använder också lite för tecknet. Här har emellertid exponenten 11 bitar (bias = 1023) och mantissen till och med 52 bitar. Totalt är detta 64 bitar, dvs 8 byte.
- Förutom dessa tre vanliga datatyper finns det många fler. Dessa används emellertid oftast inte eftersom noggrannheten för halva, flyta och dubbla redan är tillräckligt bra.
Konvertera decimaltal till flytande punktnummer - hur det fungerar
Slutligen vill vi visa dig hur du kan konvertera ett normalt decimaltal till ett flytande punktnummer.
- I det här exemplet använder vi decimaltalet 18.4. Sifret före decimalpunkten överförs först till det dubbla systemet. Som ett resultat bör du få (10010) ₂.
- Då måste du konvertera 0.4. Multiplicera först 0, 4 med 2. Du får 0, 8 som resultat. Skriv antalet före komma. I det här fallet är det en 0. Multiplicera sedan 0, 8 med 2. Den här gången får du 1, 6 som resultat. Notera 1 och fortsätt att beräkna med 0, 6. Efter ett tag kommer du att märka att mönstret upprepar sig (i det här exemplet). Slutligen, skriv ner alla siffror från topp till botten: 011001100110 ...
- Lägg sedan till siffrorna tillsammans: Lägg också till (⋅ 2⁰) så att du får 10010.01100110 ... ⋅ 2⁰. Flytta sedan komma tills det bara finns en 1 framför decimalpunkten och ändra också kraften på lämpligt sätt. Som ett resultat bör du få 1.001001100110 ... ⋅ 2⁴, eftersom du har flyttat decimalpunkten 4 till vänster. Detta steg kallas också "normalisering".
- I det här exemplet använder vi datatypen "float". Så lägg till lämpligt förspänningsvärde till din exponent. Du måste också konvertera resultatet av beräkningen 4 + 127 = 131 till ett binärt tal. Siffran 131 är numret 10000011 i det dubbla systemet.
- Nu kan du skriva ner det färdiga flytpunktsnumret. Skriv först biten för skylten. Eftersom det är ett positivt tal är den första biten en 0. Då måste du skriva 131. Det hela passar perfekt i det här fallet, eftersom detta antal kräver 8 bitar och 8 bitar är tillgängliga för en flottör. Slutligen måste du skriva ner de första 23 bitarna av mantisan, eftersom mantissen har 23 bitar tillgängliga för en flottör.
- Ditt färdiga flytpunktsnummer bör därför vara numret 01000001100100110011001100110011. Lite tydligare är numret 0 | 10000011 | 00100110011001100110011.
Konvertera flytande punktnummer till decimaltal - Så här gör du
Slutligen vill vi visa dig hur du kan konvertera ett flytande punktnummer till ett decimaltal igen. För detta tar vi numret 1000001100100110011001100110011.
- Fyll först numret (fram) med nollor tills du får ett 16, 32 eller 64 bitars nummer. I det här fallet är det 01000001100100110011001100110011.
- Den första siffran står för skylten. Så vårt antal är positivt.
- Skriv sedan de nästa (i det här fallet) 8 siffrorna och subtrahera förspänningen. (10000011) ₂ = 131 → 131 - 127 = 4 → Så det finns "⋅ 2⁴" på baksidan.
- Skriv nu en "1" och sedan alla återstående siffror samt "⋅ 2⁴": 1.00100110011001100110011 ⋅ 2⋅
- Flytta sedan komma 4 platser till höger så att du kan utelämna "⋅ 2⁴": 10010.0110011001100110011
- Därefter konverterar du 10010 till ett heltal som vanligt. Du blir 18.
- Nu måste du konvertera decimalerna. Den första siffran efter komma har värdet 1: 2¹, den andra siffran 1: 2² och så vidare. Lägg till värdena, och numret före komma ger dig numret 18.3999996185302734375.
I nästa praktiska tips visar vi hur du kan konvertera ASCII-bokstäver till binära siffror.