int 到 double 的转换是否会向上舍入、向下舍入或到最接近的双精度?

gla*_*des 16 c++ floating-point rounding static-cast floating-point-conversion

简单的问题:从 int(例如 100)转换为双精度数“向上或向下舍入”到下一个双精度数,还是总是舍入到最接近的一个(最小增量)?

例如static_cast<double>(100)

从 int 转换为 double

如果 d2 < d1 会向哪个方向投射?

额外问题:我可以以某种方式强制处理器使用特殊函数向下或向上“舍入”到双精度吗?据我所知,没有floor<double>或者ceil<double>不幸的是。

Ala*_*les 14

请注意,32 位int可以由 64 位 IEEE 754 精确表示double(它实际上最多可以精确表示 53 位整数)。

如果您使用的整数大于浮点类型可以表示的整数,则适用实数浮点整数转换中的规则:

  • 如果该值可以表示,但不能准确表示,则结果是最接近的较高值或最接近的较低值(换句话说,舍入方向是实现定义的),但如果支持 IEEE 算术,则舍入到最接近的值。未指定在这种情况下是否引发 FE_INEXACT。
  • 如果无法表示该值,则行为未定义,但如果支持 IEEE 算术,则会引发 FE_INVALID 并且结果值未指定。

没有 C++ 标准函数来控制舍入模式,大多数实现将使用 IEEE 舍入到最接近的值。