Usuari:Rbuj/Precisió simple

De la Viquipèdia, l'enciclopèdia lliure

En informàtica, un nombre de precisió simple és un format numèric de computador que ocupa una posició de memòria en un computador, definit bàsicament per la longitud de bits del registre d'operacions del processador i per tant calculat en una operació simple (d'un cicle de processador), Per tant ha variat segons l'arquitectura del Maquinari en funció dels processadors de 8, 16, 32 i 64 bits). Un nombre de precisió simple, molts cops simplificat a simple, pot ser definit com a enter, de punt fix, o amb punt flotant.

Un dels primers llenguatges de programació que van incloure els nombres de simple i doble precisió va ser el Fortran (1957). Abans de la generalització feta a l'estandard IEEE 754-1985, la representació i propietats d'aquests nombres depenia del fabricant i el model del computador. Els nombres de precisió simple s'anomenen "floats" en C, C++, C#, Java i Haskell, i "single" en el Pascal i el MATLAB. Tot i això, els floats (en Python) i els singles (en versions d'Octave anteriors a la versió 3.2) es refereixen a nombres de precisió doble.

Els computadors moderns amb una paraula de 32 bits (precisió simple) proporcionen precisió doble de 64 bits. Punt flotant de precisió simple és un estàndard IEEE 754 per codificar nombres decimals o binaris en punt flotant en 4 bytes.

Format binari de coma flotant de precisió simple[modifica]

El format és escrit amb el primer bit significatiu amb valor 1, a menys que l'exponent sigui tot zeros. Així doncs, només 23 bits de la fracció de la mantissa apareixen en el format però la precisió total és de 24 bits (millor que 7 dígits decimals, ).

Format de precisió simple de coma flotant

Codificació de l'exponent[modifica]

L'exponent de precisió simple amb coma flotant es codificat usant la representació ajust binari, a on el zero es ajustat al valor 127 binari; també conegut coma Ajust d'exponent (Exponent bias) a l'estandar IEEE754.

El verdader exponent = exponent escrit - exponent bias

  • 0x00 i 0xff estan reservats a exponents:
  • 0x00 és utilitzat per representar el zero i denormals
  • 0xff és utilitzat per representar l'infinit i NaNs

Tots els patrons de codificació de bits són vàlids.

Exemples de precisió simple en hexadecimal[modifica]

3f80 0000 = 1
c000 0000 = -2
7f7f ffff ~ 3.4028234 x 1038 (Màx Simple)
3eaa aaab ~ 1/3

Per defecte, 1/3 rounds up instead of down like double precision, because of the even number of bits in the significant. So the bits beyond the rounding point are 1010... which is more than 1/2 of a unit in the last place.

0000 0000 = 0
8000 0000 = -0
7f80 0000 = Infinit
ff80 0000 = -Infinit

Convertint un binari de precisió simple a format inteligible pels humans[modifica]

Començarem amb la representació hexadecimal de nombre, 41c80000, en aquest exemple, i el convertim a binari

41c8 000016 = 0100 0001 1100 1000 0000 0000 0000 00002

Després el descompondrem en tes parts; bit de signe, exponent i mantissa.

Bit de signe: 0
Exponent: 1000 00112 = 8316 = 131
Mantissa: 100 1000 0000 0000 0000 00002 = 48000016

Afegirem el 24é bit implícit a la mantissa

Mantissa: 1100 1000 0000 0000 0000 00002 = C8000016

i calculem el valor de l'exponent tot restant 127

Raw exponent: 8316 = 131
Exponent decodificat: 131 - 127 = 4

Per cada un dels 24 bits de la mantissa, des del bit 23 al bit 0, representem el valor, començant per 1 i dividint per dos l'anterior, com es mostra

bit 23 = 1
bit 22 = 0.5
bit 21 = 0.25
bit 20 = 0.125
bit 19 = 0.0625
.
.

La mantissa en aquest exemple té tres bits a 1, bit 23, bit 22 i bit 19. Ara ja podem decodificar la mantissa tot sumant els valors dels respectius valors d'aquests bits.

Mantissa: 1 + 0.5 + 0.0625 = 1.5625

Després hem de multiplicar el resultat per 2 elevat a la potència de l'exponent per obtenir el resultat final

1.5625 * 24 = 25

Aleshores

41c8 0000 = 25

Vegeu també[modifica]