Como posso comparar o desempenho da divisão log () e fp em C ++?
Estou usando uma classe baseada em log em C ++ para armazenar valores muito pequenos de ponto flutuante (pois, caso contrário, os valores vão além do escopo dedouble
) Como estou realizando um grande número de multiplicações, isso tem o benefício adicional de converter as multiplicações em somas.
No entanto, em um certo ponto do meu algoritmo, preciso dividir um padrãodouble
valor por uminteger
valor e que fazer um*=
para um valor baseado em log. Eu sobrecarreguei o*=
operador para minha classe baseada em log e o valor do lado direito é primeiro convertido em um valor baseado em log executandolog()
e depois adicionado ao valor do lado esquerdo. Assim, as operações realmente executadas são divisão de ponto flutuante,log()
e soma de ponto flutuante.
Minha pergunta é se seria mais rápido converter primeiro o denominador em um valor baseado em log, que substituiria a divisão de ponto flutuante por subtração de ponto flutuante, produzindo a seguinte cadeia de operações: duas vezeslog()
, subtração de ponto flutuante, soma de ponto flutuante.
No final, isso se resume a se a divisão de ponto flutuante é mais rápida ou mais lenta do quelog()
. Eu suspeito que uma resposta comum seria que isso depende do compilador e da arquitetura; portanto, direi que uso o gcc 4.2 da Apple no darwin 10.3.0. Ainda assim, espero obter uma resposta com uma observação geral sobre a velocidade desses dois operadores e / ou uma idéia de como medir a diferença pessoalmente, pois pode haver mais coisas acontecendo aqui, por exemplo. executando os construtores que fazem a conversão de tipo etc.
Felicidades!