我在 C++ 中使用基于日志的类来存储非常小的浮点值(否则这些值超出了 的范围double
)。当我执行大量乘法时,这具有将乘法转换为总和的额外好处。
但是,在我的算法中的某个时刻,我需要将标准double
值除以一个integer
值,而不是对*=
基于对数的值执行 a。我已经*=
为基于日志的类重载了运算符,并且首先通过运行将右侧的值转换为基于日志的值,log()
然后将其添加到左侧的值中。因此实际执行的操作是浮点除法log()
和浮点求和。
我的问题是首先将分母转换为基于对数的值是否会更快,这将用浮点减法代替浮点除法,产生以下操作链:两次log()
,浮点减法,浮点总和。
最后,这归结为浮点除法是比 快还是慢log()
。我怀疑一个常见的答案是这取决于编译器和架构,所以我会说我在 darwin 10.3.0 上使用 Apple 的 gcc 4.2。尽管如此,我还是希望得到一个关于这两个运算符的速度的一般评论和/或关于如何自己衡量差异的想法的答案,因为这里可能会有更多事情发生,例如执行执行类型转换的构造函数等等
干杯!