1

GeographicLib の F# への移植を続けていますが、エラーのない合計の使用について疑問に思っています。C++ コードベースでは、次のように定義されています。

/**
 * The error-free sum of two numbers.
 *
 * @tparam T the type of the argument and the returned value.
 * @param[in] u
 * @param[in] v
 * @param[out] t the exact error given by (\e u + \e v) - \e s.
 * @return \e s = round(\e u + \e v).
 *
 * See D. E. Knuth, TAOCP, Vol 2, 4.2.2, Theorem B.  (Note that \e t can be
 * the same as one of the first two arguments.)
 **********************************************************************/
template<typename T> static inline T sum(T u, T v, T& t) {
  GEOGRAPHICLIB_VOLATILE T s = u + v;
  GEOGRAPHICLIB_VOLATILE T up = s - v;
  GEOGRAPHICLIB_VOLATILE T vpp = s - up;
  up -= u;
  vpp -= v;
  t = -(up + vpp);
  // u + v =       s      + t
  //       = round(u + v) + t
  return s;
}

参考までに、GEOGRAPHICLIB_VOLATILE 定数をvolatile使用すると、アーキテクチャと精度に応じて、キーワードを使用するかどうかを選択できます。

正直に言うと、私はクヌースの本を読んでおらず、コピーも手元にないため、定理 B を読むことはできませんが、説明は十分に明確です。関数は合計と合計の浮動小数点エラー。

私の質問は、これを直接実装する前に知っておくべき .NET Framework の最適化はありますか? F# は C++ と同じ方法で浮動小数点数を操作しますか?

4

0 に答える 0