正面和负面两个双打的比较

时间:2014-07-30 20:32:19

标签: c++ floating-point equality negative-number

我想将两个双打与负值进行比较。如果它们都是正数,我没有问题。但是,我无法弄清楚其中一个值是否为负数。这是我做的。

#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;
} 

1 个答案:

答案 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()
  • 获得epsilon
  • 有关浮点数比较的详细信息,请参阅this other post