2016-04-25 4 views
1

浮動小数点数は浮動小数点数になります。スカラーを正規化するためのエレガントな方法が必要です(並べ替え)

floatが1より小さいか-1より大きく、0以外の場合は、1または-1に丸める必要があります。

私はトリックを行う機能を持っていますが、これを行うエレガントなインラインmathyの方法があると感じていますが、私はちょうど1つを思いついていません。

[MethodImpl(MethodImplOptions.AggressiveInlining)] 
public static float NormalizeScalar(float input) 
{ 
    if ((input > -1) && (input < 1)) 
     return (input == 0) ? 0 : (input < 0) ? -1 : 1; 
    return input; 
} 

答えて

3

Math.Sign(input)を使用してください。

あなたの入力が0.78である場合 - >それは0なら1

を返します - それは-0.78だ場合>は0

を返す - > -1を返します。

+0

完璧でエレガントです。車輪を再発明しないといいですね。 –

+1

これは本当に「スカラーを完全に正規化する」でしょう。私の解決策として、**(Math.Abs​​(input)> 1?input:Math.Sign(input))**を使うことができます。私が実行したベンチマークに興味のある人は、[ここ](http://pastebin.com/v8Wstvu3)を見つけることができます。結果:1:** 350 **、2:** 400 **、3:** 400 **よりエレガントなアプローチを使用するのが部分的に遅いことを示す。ありがとうございました! – WHol

関連する問題