他の2つの値v1とv2がゼロからどれだけ離れているかに基づいて、 2つの値w1とw2のある種の加重平均を実行したい状況があります...例:
- v1がゼロの場合、重み付けはまったく行われないため、w2を返します。
- v2がゼロの場合、重み付けはまったく行われないため、w1を返します。
- 両方の値がゼロから等しく遠い場合、平均を実行して(w1 + w2)/2を返します。
私は次のようなコードを継承しました:
float calcWeightedAverage(v1,v2,w1,w2)
{
v1=fabs(v1);
v2=fabs(v2);
return (v1/(v1+v2))*w1 + (v2/(v1+v2)*w2);
}
少し背景として、v1とv2は、2つの異なるノブをどれだけ回したかを表します。個々の結果のエフェクトの重みは、どちらの方向ではなく、どれだけ回したかにのみ依存します。
明らかに、これには問題があります。これは、v1==v2==0
最終的にはreturn (0/0)*w1 + (0/0)*w2
実行できなくなるためです 0/0
。v1==v2==0
浮動小数点数を使用するのは悪い習慣ではなかったとしても、数学的に恐ろしい音に対して特別なテストを行うこと。
だから私は疑問に思いました
- これを処理するための標準ライブラリ関数がありました
- きちんとした数学的表現があります