Sid*_*Bob 10 c++ floating-point casting
如果我试试这个
float f = (float)numeric_limits<double>::infinity();
Run Code Online (Sandbox Code Playgroud)
或者实际上,尝试将比浮动最大值更大的东西投射到浮点数上,我保证最终得到无穷大?
它适用于GCC,但它是一个标准吗?
float f = (float)numeric_limits<double>::infinity();
f如果您的编译平台为浮点计算提供IEEE 754算法(通常会这样),则可以保证设置为无穷大.
或者实际上,尝试将比浮动最大值更大的东西投射到浮点数上,我保证最终得到无穷大?
在默认的IEEE 754舍入到最近模式中,double高于最大有限值float(即FLT_MAX)的几个值将转换为FLT_MAX.确切的限制是中间的数字FLT_MAX(0x1.fffffep127在C99十六进制表示中)和下一个float数字,如果单精度格式中的指数具有更大的范围,则可以表示0x2.0p127.因此,限制为0x1.ffffffp127或大约为3.4028235677973366e + 38.
从C++ 11标准,§4.8.1:
浮点类型的prvalue可以转换为另一个浮点类型的prvalue.如果源值可以在目标类型中准确表示,则转换的结果就是精确表示.如果源值在两个相邻目标值之间,则转换结果是这些值中任一个的实现定义选择.否则,行为未定义.
这意味着
如果你将双无穷大投射浮动,你会浮动无穷大.
如果你抛出一个double值,它位于float max和infinity之间,浮动,那么你得到float max或float infinity.