O formato é de acordo com o IEEE:
byte_MSB(byte1) byte2 byte3 byte_LSB (byte4)
byte_MSB(byte1) = exp
byte2 = mantissa
byte3 = mantissa
byte_LSB(byte4) = mantissa
Tomemos com exemplo: 41 F1 01 10 => 30.1255 , onde convertendo para binário, temos:
01000001 11110001 00000001 1000000
Entaão, o valore em float, será f = (-1)^bitsignal*[2^(exp-127)*[1+mantissa]]
onde:
- bitsignal é o bit msb bit do byte_MSB(byte1),
- Se este bit é 0, o número é positivo e se for 1, é negativo.
- No exemplo, o número é positivo.
exp é a soma dos outros bits do byte_MSB(byte1) e do bit msb do byte2.
Exemplo:
1*2^7+0*2^6+0*2^5+0*2^4+0*2^3+0*2^2+1*2^1+1*2^0 = 2^7+2^1+2^0
mantissa: segue a mesma regra do exp desde o byte2 até o byte_LSB(byte4), até o fator exponencial –23:
1*2^(-1)+1*2^(-2)+1*2^(-3)+1*2^(-7)+1*2^(-15)+1*2^(-10)
Então,
float = (1)*[2^(129-127)]*1.8828125 = 30.1255
Alguns sistemas trabalham com os bytes do float invertidos, ou mesmo com os nibbles invertidos.
Colaboração de César Cassiolato, Smar Equipamentos Industriais.