[1,0 ponto]
Para qual valor (ou qual faixa de valores) o resultado da operação abaixo será armazenado como NaN em um computador, utilizando precisão dupla?
Exiba as etapas necessarias para justificar sua resposta.
Passo 1
O que o enunciado pede:
- Determinar para quais valores (ou faixa de valores) de
a expressão
será armazenada como NaN (Not a Number) num computador usando precisão dupla (IEEE 754 double).
Informações dadas e consideradas:
- A expressão é
. - A aritmética é a de ponto flutuante em precisão dupla (padrão IEEE 754).
- Não há figuras nem outras restrições: vou assumir o comportamento padrão IEEE 754 para operações especiais (Inf, NaN, zeros com sinal, denormais).
Passo 2
Breve revisão didática (o que é NaN e quando aparece)
- NaN (Not a Number) é um valor especial do padrão IEEE 754 que representa resultados indefinidos/invalidos. Exemplos típicos que produzem NaN:
, , , raiz quadrada de número negativo (no domínio real), ou qualquer operação que envolva um NaN deve propagar NaN. - Divisão por zero com numerador não nulo (por exemplo
) não produz NaN; produz um infinito com sinal ( ou ), segundo IEEE 754. - Soma de um número finito com
ou dá (não dá salvo o caso de somar dois infinitos de sinais opostos). - Se uma das entradas da operação for NaN, o resultado normalmente é NaN (propagação de NaN).
Passo 3
Identificar casos potenciais que podem gerar NaN na expressão
- A expressão é
. Possíveis fontes de NaN: -
já for NaN — aí é NaN e é NaN (propagação). -
for uma expressão inválida que gere NaN (por exemplo ). Vou verificar se isso pode ocorrer com algum . - Outras operações especiais (underflow/overflow) não geram NaN por si só aqui: underflow gera subnormais ou zero, overflow pode gerar
, mas nenhum desses é NaN a menos que a operação seja inválida.
-
Passo 4
Analisar o caso
(divisão por zero)
- Se
, então o denominador é zero e a operação é . - Segundo IEEE 754,
com numerador positivo produz , não NaN. O sinal de infinito depende do sinal do zero do denominador: - Se o denominador for
então . - Se o denominador for
então .
- Se o denominador for
- Portanto o caso
(ou seja ) não gera NaN — gera infinito.
Observação útil:
é exatamente representável em binário e, portanto, se
for a constante de ponto flutuante igual a
, a soma
será exatamente zero na aritmética em ponto flutuante.
Passo 5
Analisar o caso
- Se
então e a divisão (zero assinado positivo). Não é NaN. - Se
então e . Também não é NaN. - O caso que geraria
(que produz NaN) exigiria somar dois infinitos de sinais opostos; aqui somamos um número finito com um infinito, então isso não ocorre.
Passo 6
Concluir quais valores de
resultam em NaN
- Das possibilidades, a única forma de
ser NaN é se já for NaN (ou se for resultado de alguma operação anterior que seja NaN). - Assim, a expressão só produzirá NaN quando
for NaN (qualquer NaN: quiet ou signaling — no caso de signaling NaN, o comportamento também é que o resultado será NaN, possivelmente com uma exceção sinalizada). - Todos os outros valores (qualquer
finito diferente de , , ) produzem um resultado que é um número finito, zero assinado, ou infinito, mas nunca NaN.