Как я могу сравнить производительность деления log () и fp в C ++?

Я использую основанный на журнале класс в C ++ для хранения очень маленьких значений с плавающей точкой (поскольку значения иначе выходят за рамкиdouble). Поскольку я выполняю большое количество умножений, это дает дополнительное преимущество преобразования умножений в суммы.

Однако в определенный момент в моем алгоритме мне нужно разделить стандартdouble значение поinteger ценность и чем заняться*= на основе журнала. Я перегружен*= оператор для моего класса на основе журнала и правое значение сначала преобразуется в значение на основе журнала, выполнивlog() и затем добавляется к левому значению. Таким образом, фактически выполняемые операции являются делением с плавающей точкой,log() и суммирование с плавающей точкой.

Мой вопрос, будет ли быстрее сначала преобразовать знаменатель в логическое значение, которое заменит деление с плавающей запятой на вычитание с плавающей запятой, приводя к следующей цепочке операций: дваждыlog(), вычитание с плавающей точкой, суммирование с плавающей точкой.

В конце концов, это сводится к тому, является ли деление с плавающей точкой быстрее или медленнее, чемlog(), Я подозреваю, что распространенным ответом будет то, что это зависит от компилятора и архитектуры, поэтому я скажу, что я использую gcc 4.2 от Apple на darwin 10.3.0. Тем не менее, я надеюсь получить ответ с общим замечанием о скорости этих двух операторов и / или идеей о том, как измерить разницу самостоятельно, поскольку здесь может быть что-то еще, например, выполнение конструкторов, которые выполняют преобразование типов и т. д.

Ура!

Ответы на вопрос(4)

Ваш ответ на вопрос