Mudanças entre as edições de "Ponto Flutuante"
De WikiLICC
m |
m |
||
Linha 13: | Linha 13: | ||
| <code>a = 1.23D0 </code> | | <code>a = 1.23D0 </code> | ||
| 15 μs | | 15 μs | ||
+ | | fld ptr[1.23d0]; fstp ptr,[a] | ||
|- | |- | ||
| <code>a = b</code> | | <code>a = b</code> |
Edição das 22h07min de 20 de agosto de 2009
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] | fld ptr[1.23d0]; 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 | ||
end do
|
16 μs | inc ptr[i]; mov eax,ptr[i]; cmp eax,[1]; jle INICIO_LOOP |