C 标准指定了有限浮点值在存储为整数类型时如何转换,但似乎没有指定非有限值的行为:
6.3.1.4 实数浮点数和整数
1 当标准浮点类型的有限值转换为
以外的整数类型时,小数部分将被丢弃(即,该值被截断为零)。如果整数部分的值不能用整数类型表示,则行为未定义。bool
2 当小数浮点数类型的有限值转换为
以外的整数类型时,小数部分将被丢弃(即,该值被截断为零)。如果整数部分的值不能用整数类型表示,则应引发“无效”浮点异常,并且转换结果未指定。bool
3 当整数类型的值转换为标准浮点类型时,如果转换后的值可以在新类型中精确表示,则该值不变。如果要转换的值在可以表示但无法精确表示的值范围内,则结果是最接近的较高或最接近的较低可表示值,以实现定义的方式选择。如果正在转换的值超出了可以表示的值范围,则行为未定义。某些隐式转换的结果可能会以比新类型所需的范围和精度更大的范围和精度表示(请参阅 6.3.1.8 和 6.8.6.4)。
4 当整数类型的值转换为十进制浮点数类型时,如果转换后的值可以在新类型中精确表示,则该值不变。如果无法准确表示正在转换的值,则应正确舍入结果,并按照 IEC 60559 中的规定引发异常。
C 标准中的其他地方是否指定或未定义该行为?