C++获取两个值的差距比

今天写一个小程序,得到两个值的差距比。比如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的结果,它比任何值都大。

原文地址:https://www.cnblogs.com/demon90s/p/15676985.html