Ainda sobre o computador do exercício anterior:
Qual o maior número menor que 20, nele representável?
Qual o maior número menor que 20, nele representável?
Passo 1
Beleza, aqui a ideia é: “Num computador que usa ponto flutuante padrão IEEE 754 de precisão simples (32 bits), qual é o maior número que ele pode representar e que ainda seja menor que 20?”
Matéria: representação em ponto flutuante.
O que precisamos:
Matéria: representação em ponto flutuante.
O que precisamos:
- Saber como o 20 é codificado em IEEE 754 (sinal, expoente com bias, mantissa).
- Entender o “espaçamento” (ulp) na vizinhança de 20.
- Subtrair esse espaçamento pra achar o maior valor abaixo de 20.
Passo 2
Antes de tudo, lembra do formato IEEE 754 simples (32 bits):
- 1 bit de sinal (0 = positivo).
- 8 bits de expoente, com bias = 127.
- 23 bits de fração (mantissa), mas a mantissa real é 1.fração (porque é “normalizada”).
Pra representar 20 em decimal:
20₁₀ = 10100₂ = 1.01₂ × 2⁴
Logo:
– Sinal = 0
– Expoente = 4 + 127 = 131 → em binário: 10000011
– Mantissa (a parte após o “1.”) = .01 0000…0 (23 bits)
20₁₀ = 10100₂ = 1.01₂ × 2⁴
Logo:
– Sinal = 0
– Expoente = 4 + 127 = 131 → em binário: 10000011
– Mantissa (a parte após o “1.”) = .01 0000…0 (23 bits)
Passo 3
Agora precisamos achar o “ulp” (unit in last place), ou seja, o menor passo entre dois floats próximos de 20.
Fórmula geral do espaçamento numa faixa 2ᵉ ≤ |x| < 2ᵉ⁺¹ é
ulp = 2ᵉ⁻²³ (porque temos 23 bits na fração)
Fórmula geral do espaçamento numa faixa 2ᵉ ≤ |x| < 2ᵉ⁺¹ é
ulp = 2ᵉ⁻²³ (porque temos 23 bits na fração)
Aqui e = 4, então
ulp = 2^(4 − 23) = 2^(−19)
ulp = 2^(4 − 23) = 2^(−19)
Em decimal
2^(−19) ≈ 1,9073486328125 × 10⁻⁶
2^(−19) ≈ 1,9073486328125 × 10⁻⁶
Passo 4
Para achar o maior número < 20, a gente pega exatamente 20 e subtrai esse ulp:
20 – 2^(−19)
20 – 2^(−19)
Em LaTeX:
Resposta
O maior número representável e ainda menor que 20 (em IEEE 754 simples) é