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!

questionAnswers(4)

yourAnswerToTheQuestion