C ++でログベースのクラスを使用して、非常に小さな浮動小数点値を格納しています(値が範囲を超えているためdouble
)。多数の乗算を実行しているので、これには乗算を合計に変換するという追加の利点があります。
ただし、アルゴリズムの特定の時点で、標準double
値を値で除算する必要があり、ログベースのinteger
値*=
に除算する必要があります。ログベースのクラスの演算子をオーバーロードしまし*=
た。右側の値は、実行によって最初にログベースの値に変換されてlog()
から、左側の値に追加されます。したがって、実際に実行される演算は、浮動小数点除算log()
と浮動小数点加算です。
最初に分母をログベースの値に変換する方が速いかどうかという私の質問です。これにより、浮動小数点除算が浮動小数点減算に置き換えられ、次の一連の演算が生成されます:2回log()
、浮動小数点減算、浮動小数点合計。
結局、これは、浮動小数点除算が。より速いか遅いかに要約されますlog()
。一般的な答えは、これはコンパイラとアーキテクチャに依存していると思われるので、ダーウィン10.3.0でAppleのgcc4.2を使用していると言います。それでも、型変換を行うコンストラクターを実行するなど、ここでさらに多くのことが行われる可能性があるため、これら2つの演算子の速度に関する一般的な意見や、違いを自分で測定する方法についてのアイデアを得たいと思います。等
乾杯!