Ponto Flutuante

De WikiLICC
Ir para: navegação, pesquisa

Qual o tempo necessário para realizar uma operação em ponto flutuante?

No compilador Intel Fortran 11, Windows XP SP 3, Pentium 4 HT 3.00GHz obtive o seguinte resultado (5 testes, desprezando o pior e melhor resultado, e média dos 3 restantes).

real   :: a,b,c


Fortran tempo Assembler
a = 1.23D0 15 μs fld ptr[1.23d0]; fstp ptr,[a]
a = b 15 μs fld ptr[b]; fstp ptr[a]
a = a+b 98 μs fld ptr[a]; fld ptr[b]; faddp st(1),st; fstp ptr[a]
a = b+c 20 μs fld ptr[b]; fld ptr[c]; faddp st(1),st; fstp ptr[a]
a = b-c 20 μs fld ptr[b]; fld ptr[c]; fsubp st(1),st; fstp ptr[a]
a = b*c 20 μs fld ptr[b]; fld ptr[c]; fmulp st(1),st; fstp ptr[a]
a = b/c 20 μs fld ptr[b]; fld ptr[c]; fdivp st(1),st; fstp ptr[a]
a = sqrt(b) 121 μs push edi; fld ptr[b]; call _sqrtf; pop ecx; fstp ptr[a] (26 instrucoes)
if(b==0.d0)then 15 μs fld ptr[b]; fldz; fucompp; fnstsw ax; sahf; jne ENDIF
end do 16 μs inc ptr[i]; mov eax,ptr[i]; cmp eax,[1]; jle INICIO_LOOP

Dados

O valor de +2.0 (1.0 x 21) seria:

0 10000000 00000000000000000000000b (ou 40000000h em notação hexadecimal)
S   7Fh+1    fraction bits

e o valor de -2.0 seria:

1 10000000 00000000000000000000000b (ou C0000000h em notação hexadecimal


Ligações externas