【发布时间】:2014-07-30 20:32:19
【问题描述】:
我想比较两个带有负值的双精度值。如果它们都是正值,我没有问题。但是,我无法确定其中一个值是否为负。这是我已经完成的。
#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;
}
【问题讨论】:
-
我认为您可能希望在您的
isEqual定义中使用pow(10.0, -decimals)。 -
epsilon = pow(10.0, decimals);和decimals == 10。所以根据你的功能,每对差异小于10000000000的数字都是相等的:) -
请澄清。你的实际问题是什么?如前所述,使用
decimals = 10,这些测试都不会通过,您将看不到任何打印内容。这是你想要的吗?如果没有,你想做什么? -
您希望对
isEqual()的两个调用都在main()中返回TRUE?还是只有第二个调用应该返回 true? -
@MarkDickinson,谢谢它成功了。我接受它作为第一个答案,但是由于它是一个评论,我会考虑另一个答案,以便关闭这篇文章作为一个已解决的问题。
标签: c++ floating-point equality negative-number