例如,
float a = 1.0;
float b = 1.2;
puts(a == b? "equal": "not equal");
编译器是按位还是通过其他方法处理它?</ p>
(我知道&#34; ==&#34;决定浮点数的相等性不是一个好的选择,我只是想知道编译器如何处理这种情况。)
答案 0 :(得分:5)
一般的,完整的答案是根据IEEE 754规范比较浮点数。
要具体回答您的问题,大多数情况下,两个浮点数按位进行比较,只有少数例外情况:
答案 1 :(得分:3)
答案 2 :(得分:1)
我假设你的意思是在程序编译之后,它如何比较两个浮点数。存储浮动的方式非常独特。它由符号,指数和分数存储,如here所示。因此,除非它绝对平等,否则程序甚至会看到1和1.000000000001不同。要检查它们是否几乎相等,您可以使用以下内容:
bool AlmostEqualRelativeOrAbsolute(float A, float B,
float maxRelativeError, float maxAbsoluteError)
{
if (fabs(A - B) < maxAbsoluteError)
return true;
float relativeError;
if (fabs(B) > fabs(A))
relativeError = fabs((A - B) / B);
else
relativeError = fabs((A - B) / A);
if (relativeError <= maxRelativeError)
return true;
return false;
}
代码来自here,您可能希望在网站上阅读更多内容。