gla*_*des 16 c++ floating-point rounding static-cast floating-point-conversion
简单的问题:从 int(例如 100)转换为双精度数“向上或向下舍入”到下一个双精度数,还是总是舍入到最接近的一个(最小增量)?
例如static_cast<double>(100):
如果 d2 < d1 会向哪个方向投射?
额外问题:我可以以某种方式强制处理器使用特殊函数向下或向上“舍入”到双精度吗?据我所知,没有floor<double>或者ceil<double>不幸的是。
Ala*_*les 14
请注意,32 位int可以由 64 位 IEEE 754 精确表示double(它实际上最多可以精确表示 53 位整数)。
如果您使用的整数大于浮点类型可以表示的整数,则适用实数浮点整数转换中的规则:
- 如果该值可以表示,但不能准确表示,则结果是最接近的较高值或最接近的较低值(换句话说,舍入方向是实现定义的),但如果支持 IEEE 算术,则舍入到最接近的值。未指定在这种情况下是否引发 FE_INEXACT。
- 如果无法表示该值,则行为未定义,但如果支持 IEEE 算术,则会引发 FE_INVALID 并且结果值未指定。
没有 C++ 标准函数来控制舍入模式,大多数实现将使用 IEEE 舍入到最接近的值。