C#でfrac関数を実装したいのですが(ここではhslの関数のようにhttp://msdn.microsoft.com/en-us/library/bb509603%28VS.85%29.aspx)、非常にプロセッサを集中的に使用するアプリケーション私は可能な限り最高のバージョンが欲しいです。私は次のようなものを使用していました
public float Frac(float value)
{
return value - (float)Math.Truncate(value);
}
しかし、精度の問題があります。たとえば、2.6fの場合、単体テストで返されます。
期待値:0.600000024fしかしだった:0.599999905f
値を10進数に変換し、最後にfloatに変換して、次のような正しい結果を取得できることを知っています。
public float Frac(float value)
{
return (float)((decimal)value - Decimal.Truncate((decimal)value));
}
しかし、小数に頼らずにもっと良い方法があるのだろうか...