我想将两个双打与负值进行比较。如果它们都是正数,我没有问题。但是,我无法弄清楚其中一个值是否为负数。这是我做的。
#include <iostream>
const double PI = 3.14159265358979323846;
bool isEqual(double a, double b, int decimals)
{
double epsilon = pow(10.0, decimals);
if( fabs( a - b) < epsilon)
return true;
return false;
}
int main()
{
double Theta;
Theta = 3.1415;
if ( isEqual(Theta, -PI, 10) )
{
std::cout << "Theta == -PI " << Theta << " == " << -PI << std::endl;
}
Theta = -3.1415;
if ( isEqual(Theta, -PI, 10) )
{
std::cout << "Theta == -PI " << Theta << " == " << -PI << std::endl;
}
std::cin.get();
return 0;
}
答案 0 :(得分:3)
我猜你在isEqual
中有一个拼写错误,你想要:
double epsilon = 1 / pow(10.0, decimals);
或者
double epsilon = pow(10.0, -decimals);
所以你的espilon将是10^-(digits)
如评论所示,当前函数对于差值小于10^digits
的任何数字都返回true ...
注意:
std::numeric_limits<double>::epsilon()