Format de coma flotant de precisió simple

De la Viquipèdia, l'enciclopèdia lliure
Representació binària d'un nombre de coma flotant de 32 bits. El valor representat, 0,15625, ocupa 4 bytes de memòria: 00111110 00100000 00000000 00000000.

El format de coma flotant de precisió simple (de vegades anomenat FP32 o float32) és un format de nombre d'ordinador, que sol ocupar 32 bits a la memòria de l'ordinador; representa un ampli rang dinàmic de valors numèrics utilitzant un punt radix flotant.[1]

Una variable de coma flotant pot representar un rang de nombres més ampli que una variable de coma fix de la mateixa amplada de bits a costa de la precisió. Una variable entera de 32 bits amb signe té un valor màxim de 231 − 1 = 2.147.483.647, mentre que una variable de coma flotant de base 2 de 32 bits IEEE 754 té un valor màxim de (2 − 2−23) × 2127 ≈ 2823. × 1038. Tots els nombres enters amb 7 dígits decimals o menys, i qualsevol 2n per a un nombre sencer −149 ≤ n ≤ 127, es poden convertir exactament en un valor de coma flotant de precisió única IEEE 754.

A l'estàndard IEEE 754-2008, el format base-2 de 32 bits es coneix oficialment com a binary32; s'anomenava single en IEEE 754-1985. IEEE 754 especifica tipus de coma flotant addicionals, com ara representacions de doble precisió base 2 de 64 bits i, més recentment, representacions de base 10.

Un dels primers llenguatges de programació que va proporcionar tipus de dades de punt flotant de precisió única i doble va ser Fortran. Abans de l'adopció generalitzada de IEEE 754-1985, la representació i les propietats dels tipus de dades de coma flotant depenien del fabricant de l'ordinador i del model d'ordinador, i de les decisions preses pels dissenyadors de llenguatge de programació. Per exemple, el tipus de dades de precisió única de GW-BASIC era el format de coma flotant MBF de 32 bits.

La precisió única s'anomena REAL a Fortran,[2] SINGLE-FLOAT a Common Lisp,[3] float a C, C++, C#, Java,[4] Float a Haskell [5] i Swift,[6] i Single a Object Pascal (Delphi), Visual Basic i MATLAB. Tanmateix, float a Python, Ruby, PHP i OCaml i single a les versions d'Octave anteriors a 3.2 fan referència a números de doble precisió. A la majoria de les implementacions de PostScript i alguns sistemes incrustats, la precisió simple és l'única admesa.

Estàndard IEEE 754: binary32[modifica]

L'estàndard IEEE 754 especifica un binari32 que té:

Això dóna una precisió de 6 a 9 dígits decimals significatius. Si una cadena decimal amb un màxim de 6 dígits significatius es converteix al format de precisió única IEEE 754, donant un nombre normal, i després es torna a convertir en una cadena decimal amb el mateix nombre de dígits, el resultat final hauria de coincidir amb la cadena original. Si un nombre de precisió única IEEE 754 es converteix en una cadena decimal amb almenys 9 dígits significatius i després es torna a convertir a una representació de precisió única, el resultat final ha de coincidir amb el nombre original.[7]

El bit de signe determina el signe del nombre, que també és el signe del significat. L'exponent és un nombre enter sense signe de 8 bits de 0 a 255, en forma esbiaixada: un valor d'exponent de 127 representa el zero real. Els exponents oscil·len entre -126 i +127 perquè els exponents de -127 (tots els 0) i +128 (tots els 1) estan reservats per a nombres especials.

El significat real inclou 23 bits de fracció a la dreta del punt binari i un bit inicial implícit (a l'esquerra del punt binari) amb el valor 1, tret que l'exponent s'emmagatzemi amb tots els zeros. Així, només apareixen 23 bits de fracció del significat en el format de memòria, però la precisió total és de 24 bits (equivalent a un registre 10 (224) ≈ 7,225 dígits decimals).

Referències[modifica]

  1. «Floating Point Representation - Basics» (en anglès). https://www.geeksforgeeks.org,+29-01-2011.+[Consulta: 9 maig 2023].
  2. «REAL Statement» (en anglès). scc.ustc.edu.cn. Arxivat de l'original el 2021-02-24. [Consulta: 28 febrer 2013].
  3. «CLHS: Type SHORT-FLOAT, SINGLE-FLOAT, DOUBLE-FLOAT...» (en anglès).
  4. «Primitive Data Types» (en anglès). Java Documentation.
  5. «6 Predefined Types and Classes» (en anglès). haskell.org, 20-07-2010.
  6. «Float» (en anglès). Apple Developer Documentation.
  7. William Kahan. «Lecture Notes on the Status of IEEE Standard 754 for Binary Floating-Point Arithmetic» (en anglès), 01-10-1997.