这是C99:标准(6.3.1.5.2实际浮动类型(的相关部分
当双精度被降级为浮点时,长双精度被降为双精度或浮点值,或以比其所需的更高精度和范围表示的值如果值被转换的可以在新类型中准确地表示,它是不变的。如果值正在转换的值在可以表示但不能表示的值范围内精确地表示,结果是最接近的较高或最接近的较低可表示值,以实现定义的方式选择。如果要转换的值为在可以表示的值范围之外,行为是未定义的。
为了避免未定义的行为,每次我想将double
转换为float
时,我都必须手动检查double的值是否可以在float的范围内表示,对吗?
简短回答:是。
如果您正在将double
转换为float
,并且不知道值可能是什么,那么对于定义良好的行为,您将希望首先检查每个值的范围,如果值太大而不适合类型float
,则需要采取适当的操作。
即使溢出情况下的结果没有定义,您也会希望这样做,因为无论溢出结果是什么,都不一定是您想要的。(根据应用程序的不同,您可能希望向用户/呼叫者报告错误。(