c++ int到double的转换是向上舍入、向下舍入还是舍入到最接近的double?

vjrehmav  于 2023-03-09  发布在  其他
关注(0)|答案(1)|浏览(225)

简单的问题:从int型(比如100)到double型的转换是向上或向下“舍入”到下一个double型,还是总是舍入到最近的一个(最小的delta)?
例如,对于static_cast<double>(100)

如果d2〈d1,它会投哪一边?
附加问题:我能用特殊的函数强制处理器向下或向上“舍入”到close double吗?在我看来,不幸的是没有floor<double>ceil<double>

osh3o9ms

osh3o9ms1#

请注意,32位int可以由64位IEEE 754 double精确表示(实际上它可以精确表示多达53位整数)。
如果使用的整数大于浮点类型所能表示的整数,则Real floating-integer conversions中的规则适用:

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

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

相关问题