2016-04-11 23 views
1

タイトなループでは、2つの浮動小数点値の間で線形補間を行っています。ただし、結果の唯一の必要な部分は、符号(結果が負か正かにかかわらず)です。私はaとbの間のfの方法、今すぐlerpの典型的な操作をしています。符号のための線形補間最適化

a + f * (b - a); 

私は結果の符号を知る必要があると考えて、実際のlerped値ではないと考えると、より効率的なものがありますか?

編集: 'f'は、事前に知られている補間に沿った固定距離のセットです。

+2

親指の一般的な規則として、分岐は分岐より高速です(例: 'if'ステートメント)。あなたのlerpコードは最適なimhoです。 –

+1

定数a、b、fのいずれかが定数ですか? –

+0

Q&Dハックとして、IEEE表現のMSbとして符号ビットを得ることができます。これにより、テストはできません。とにかく、ifの本体が本当に軽量でない限り、ここで行うことができるマイクロ最適化は気づかれなくなります。 –

答えて

2

あなたは補間値の変化が所定の範囲に署名するかどうかを計算することができる:、aと同じ符号を有するlerp小さな値についてlerp = 0

a + f0 * (b - a) = 0 
f0 = a/(a+b) 

fパラメータを見つけるこの場合

if Sign(a) <> Sign(b) then //don't forget about zero sign 
    change occurs 

大きい場合 - bと同じ記号なので、lerpの値を計算する必要はありません - ちょうどfとを比較してください

+1

あなたは分裂のために倍数を取引しています。これは良い考えではありません。 –

+0

@ Yves Daoust私は、あらかじめ決められた 'a、b'の典型的なシナリオといくつかの点でlerpの評価を考えます。だから根本所見は一度の操作です。それから、必要な 'f'が' f0'と比較されます。 – MBo

+0

OPが 'f'が一定であると言っていない限り、あなたはそれを引き受けることはできません。 –

関連する問題