http://www.cprogramming.com/tips/tip/difference-between-float-and-double来自:浮点和双精度恒定比较
在C++等任何4.12值被视为双默认情况下。 比较花车和双打可能是一个棘手的业务,因为精度差异导致微小的错误。例如:
float a = 4.12;
if(a == 4.12)
{
cout << "hello";
}
else
{
cout << "bye";
}
这将显示您的输出为 “再见4.12”
为什么?
因为默认情况下4.12是双精度(例如在if语句中,或者在赋值给我们的变量时是 ),但是将其存储在浮点中会损失一些精度,因此比较double和float 导致数字精确度的微观变化 - 记住 漂浮和双打不准确。
这里有两个教训:一个是大部分时间不应该直接比较浮点数,另一个是硬编码浮点数的默认大小和类型是双精度浮点数的两倍。
事情是'你不应该做比较浮点变量和双常数'。
所以我的问题是,比较浮动变量和浮动常量,然后'f'是好的?
就是这样。
if(a == 4.12f)
呃你的问题是什么? – Turtle
你问是否将一个浮点型常量与一个用双常量初始化的浮点型变量(除了f之外的浮点型常量相同)总是计算为相等?如果是这样,我认为这是一个合理的问题。 – samgak
@samgak是的,确切地说。对不起,我英文很差。 –