今天写一个小程序,得到两个值的差距比。比如100和120之间差了0.2,120和100同样差了0.2。
这是一个简单的数学问题,通过数学公示能够得到:
min + min * diff_per = max;
从而
diff_per = (max - min) / min
由于C++中数值类型有很多,所以我使用了模板函数去实现这个方法:
template<typename T>
inline double GetDiffPer(T v1, T v2)
{
// min + min * diff_per = max -> diff_per = (max - min) / min
v1 > v2 ? std::swap(v1, v2) : 0;
return (v2 * 1.0 - v1) / v1;
}
测试代码如:
int main()
{
int v1 = 0, v2 = 0;
std::cout << "input v1 v2: ";
while (std::cin >> v1 >> v2)
{
double diff_per = GetDiffPer(v1, v2);
std::cout << "diff_per: " << diff_per << std::endl;
std::cout << "input v1 v2: ";
}
}
PS: GetDiffPer 的除法没有判断除数为0的情况,这里是因为被除数是double类型,所以不会导致崩溃,而是得到一个inf的结果,它比任何值都大。