【发布时间】:2015-04-07 04:01:10
【问题描述】:
来自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";
}
这会将输出显示为“bye 4.12”
为什么?
因为默认情况下 4.12 是双精度数(例如在 if 语句中或 在对我们变量的赋值中),但是将它存储在一个浮点数中它会丢失 一些精度,所以比较然后比较一个双精度和浮点数 导致数字精度的微观变化——记住 浮动和双打并不精确。
这里有两个教训:一个是大多数时候不应该直接比较浮点数,另一个是硬编码浮点数的默认大小和类型是 double。
问题是'你不应该比较浮点变量和双常量'。
所以我的问题是比较浮点变量和浮点常量后跟“f”可以吗?
类似的东西。
if(a == 4.12f)
【问题讨论】:
-
呃你有什么问题?
-
您是否在询问将浮点常量与使用双常量初始化的浮点变量(除 f 外与浮点常量相同)进行比较是否总是等于?如果是这样,我认为这是一个合理的问题。
-
@samgak 是的,完全正确。对不起我的英语不好。
标签: c++ double equals-operator