Flydende punktnummer: hvad er det? Enkelt forklaret med eksempler
I dette praktiske tip viser vi dig, hvad et flydende tal er, og hvordan det adskiller sig fra et fast punkt.
Flydende punktnummer: hvad er det?
I computervidenskab bruges ofte det flydende punktnummer til måleenheder, der formodes at arbejde med en bestemt nøjagtighed.
- Et flydende punktnummer (eller "flydende punktnummer") er en repræsentation af et nummer ved hjælp af eksponentiel notation. I exceptionelle tilfælde fungerer dette kun ca. Du kan også repræsentere nummeret 1230000 med tallet 1.23 ⋅ 10⁶.
- 1.23 kaldes "Mantissa". 10 er "basen" og 6 er "eksponenten". I øvrigt kan et tegn også tilføjes mantissen. Du kan dog også anvende det hele på det dobbelte system. Du kan også repræsentere nummeret 10101100 med tallet 1.0101100 ⋅ 2⁷. Computeren gemmer kun skiltet, mantissa og eksponenten.
- Computere flytter normalt kommaet frem og tilbage, indtil der kun er en 1 foran komma. Derefter behøver pc'en kun at gemme decimaler for mantissen og eksponenten.
- Så eksponenten kan gemmes som et positivt tal, tilføjes et fast tal, den såkaldte bias. Den mindste mulige eksponent for stedet før decimalpunktet (- bias) gemmes som 0.
- I modsætning til det faste punktnummer er komma ikke på et fast punkt i et flydende tal.
Half, Float & Double - Almindelig kodning af antal af flydende punkter
Du har bestemt snublet over disse tre termer, især når du programmerer med Arduino. Dette er standardiserede repræsentationer.
- Datatypen "halvdel" er et 16-bit nummer. Den venstre bit er ansvarlig for skiltet. Eksponenten har 5 bit og mantissa 10. Den anvendte bias er 15. Da den første bit af mantissen er (næsten) altid 1, gemmes dette ikke.
- Datatypen "float" (eller "single") er et 32-bit nummer. Også her bruges en smule til skiltet. Eksponenten har dog 8 bit (bias = 127) og mantissen 23.
- Datatypen "dobbelt" bruger også lidt til tegnet. Her har eksponenten imidlertid 11 bit (bias = 1023) og mantissen endda 52 bit. I alt er dette 64 bit, dvs. 8 byte.
- Ud over disse tre almindelige datatyper er der mange flere. Disse bruges dog mest ikke, fordi nøjagtigheden af halvdelen, flyderen og den dobbelte allerede er god nok.
Konverter decimaler til flydende punktnumre - hvordan det fungerer
Endelig vil vi gerne vise dig, hvordan du kan konvertere et normalt decimaltal til et flydende punktnummer.
- I dette eksempel bruger vi decimaltallet 18.4. Tallet før decimalpunktet overføres først til det dobbelte system. Som et resultat skal du få (10010) ₂.
- Derefter skal du konvertere 0.4. Multiplicer først 0, 4 med 2. Du får 0, 8 som resultat. Skriv en note over nummeret før komma. I dette tilfælde er det en 0. Multipliser derefter 0, 8 med 2. Denne gang får du 1, 6 som resultat. Noter 1 og fortsæt med at beregne med 0, 6. Efter et stykke tid vil du bemærke, at mønsteret gentager sig selv (i dette eksempel). Til sidst skriv alle numrene fra top til bund: 011001100110 ...
- Tilføj derefter tallene sammen: Tilføj også (⋅ 2⁰), så du får 10010.01100110 ... ⋅ 2⁰. Flyt derefter kommaet, indtil der kun er en 1 foran decimalpunktet, og skift også strømmen korrekt. Som et resultat skal du få 1.001001100110 ... ⋅ 2⁴, da du har flyttet decimalpunktet 4 steder til venstre. Dette trin kaldes også "normalisering".
- I dette eksempel bruger vi datatypen "float". Så tilføj den relevante biasværdi til din eksponent. Du skal også konvertere resultatet af beregningen 4 + 127 = 131 til et binært tal. Tallet 131 er tallet 10000011 i det dobbelte system.
- Nu kan du skrive det færdige nummer på det flydende punkt ned. Skriv først bit til tegnet. Da det er et positivt tal, er den første bit en 0. Derefter skal du skrive 131. Det hele passer perfekt i dette tilfælde, da dette antal kræver 8 bits og 8 bits er tilgængelige for en svømmer. Endelig skal du nedskrive de første 23 bit af mantissen, da mantissen har 23 bits til rådighed for en flyder.
- Dit færdige flydepunktnummer skal derfor være nummeret 01000001100100110011001100110011. Lidt klarere er tallet 0 | 10000011 | 00100110011001100110011.
Konverter flydende punktnummer til decimalantal - Sådan gør du
Endelig vil vi gerne vise dig, hvordan du kan konvertere et flydende punktnummer til et decimaltal igen. For dette tager vi nummeret 1000001100100110011001100110011.
- Fyld først nummeret (foran) med nuller, indtil du får et 16, 32 eller 64 bit nummer. I dette tilfælde er det 01000001100100110011001100110011.
- Det første ciffer står for skiltet. Så vores antal er positive.
- Skriv derefter de næste (i dette tilfælde) 8 cifre, og træk biasen fra. (10000011) ₂ = 131 → 131 - 127 = 4 → Så der er "⋅ 2⁴" bagpå.
- Skriv nu en "1", og derefter alle de resterende tal samt "⋅ 2⁴": 1.00100110011001100110011 ⋅ 2⋅
- Flyt derefter komma 4 steder til højre, så du kan udelade "⋅ 2⁴": 10010.0110011001100110011
- Derefter konverteres 10010 til et heltal som sædvanligt. Du får 18.
- Nu skal du konvertere decimaler. Det første ciffer efter komma har værdien 1: 2¹, det andet ciffer 1: 2² og så videre. Tilføj værdierne, og tallet før komma giver dig nummeret 18.3999996185302734375.
I det næste praktiske tip viser vi dig, hvordan du kan konvertere ASCII-bogstaver til binære tal.