Calcule em MatLab/Octave o maior n ! até causar overflow (resultado Inf) nas precisão simples e dupla. Imprime n e n ! (o padrão em MatLab é a precisão dupla, para trabalhar com a precisão simples usem o comando single (n)).

Passo 1

O enunciado pede para descobrir, em MATLAB/Octave, o maior inteiro n tal que n! ainda cabe na memória antes de estourar para Inf (overflow), nas duas precisões padrão do MATLAB:
– precisão simples (IEEE- 754 single)
– precisão dupla (IEEE- 754 double)
Para isso vamos usar um laço que calcula n! incrementalmente e testa com a função isfinite até o resultado virar Inf.

Passo 2

Lembrando os limites das duas precisões:
bul<=t single armazena valores até cerca de
maxsing<=approx 3,4028235times10^38
bul<=t double armazena valores até cerca de
maxdoub<=approx 1,7976931348623157times10^308
Quando o fatorial passar desses limites, o MATLAB retorna Inf.

Passo 3

Montamos dois laços em Octave/Matlab. A versão em precisão dupla (padrão) é:
n \(=1\);
f \(=1\);                 % começa com \(1\)! \(=1\)
while isfinite(f)
    n \(=\) n \(+1\);
    f \(=\) f * n;
end
\(n_max_double =\) n - \(1\);  % último n válido
\(f_double =\) f / n;      % f ficou em Inf, voltamos um passo
Para a precisão simples, convertendo cada fator para single, fazemos:
n \(=1\);
f \(=\) single(\(1\));         % single precision
while isfinite(f)
    n \(=\) n \(+1\);
    f \(=\) f * single(n);
end
\(n_max_single =\) n - \(1\);
\(f_single =\) f / single(n);

Passo 4

Executando esses scripts em Octave/Matlab obtemos:
– na precisão simples, o laço pára em n=35 produzindo Inf, logo o maior fatorial válido é para n=34.
– na precisão dupla, o laço pára em n=171 produzindo Inf, logo o maior fatorial válido é para n=170.

Resposta

Precisão simples:
nmax=34, 34!approx 2,952327993times10^38
Precisão dupla:
nmax=170, 170!approx 7,257415615307994times10^306

Exercícios relacionados