Precisió simple

De Viquipèdia
Dreceres ràpides: navegació, cerca

En informàtica, precisió simple és un format numèric de computador que ocupa una localització d'enmatzemament en una determinada adreça del computador. Un nombre de precisió simple, molts cops simplificat a simple, pot ser definit a ser un enter, punt fix, o punt flotant.

Un dels primers llenguatges de programació que van incloure els nombres de simple i doble precisió va ser el Fortran. 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'anomen "floats" en C, C++, C#, Java and Haskell, i "single" en el Pascal i el MATLAB. Tot i això, els floats (en Python) i els singles (en versions de 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 | modifica el codi]

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, \log_{10}(2^{24}) \approx 7.225).

Format de precisió simple de coma flotant

Codificació de l'exponent[modifica | modifica el codi]

  • Emin (0x01) = -126
  • Emax (0xfe) = 127
  • Exponent bias (0x7f) = 127

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 | modifica el codi]

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 enteligible pels humans[modifica | modifica el codi]

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

and decode the exponent value by subtracting 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 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 | modifica el codi]