我们有一种情况,我们想要对两个值w1和w2进行加权平均,基于其他两个值v1和v2离零的距离......例如:
- 如果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 表示两个不同的旋钮转动了多远,它们各自合成效果的权重仅取决于它们转动了多少,而不是朝哪个方向转动。
显然,这在 时会出现问题v1==v2==0
,因为我们最终return (0/0)*w1 + (0/0)*w2
会遇到而您不能这样做 0/0
。进行特殊测试在v1==v2==0
数学上听起来很可怕,即使浮点数的做法也不错。
所以我想知道如果
- 有一个标准库函数来处理这个
- 有一个更简洁的数学表示