是否有任何定义如何在编译时求值的浮点值进行舍入?

Bon*_*ero 9 c c++ floating-point ieee-754

是否有任何定义如何在编译时计算的浮点值在 C 或 C++ 中舍入?Fe 当我有double d = 1.0 / 3.0;? 即在编译时进行什么样的舍入。

是否定义了运行时线程的默认舍入模式(C99's / C++11's fegetround()/ fesetround())?

后面的配置参数中是否也包含四舍五入到整数值?我知道nearbyint(),但这被指定为绑定到可以通过设置的舍入参数fesetround()。我担心的是直接转换为整数。

120*_*arm 6

在这两个规范(C17 和 C++20)中,编译时间舍入是实现定义的。

在 C++ 规范中,这是在lex.fcon中指定的,其中表示

如果缩放值不在其类型的可表示值范围内,则程序格式错误。否则,浮点文字的值是缩放值(如果可表示),否则是最接近缩放值的较大或较小的可表示值,以实现定义的方式选择。

C 规范有类似的语言(引用自 N2176,C17 最终草案):

结果要么是最接近的可表示值,要么是紧邻最近可表示值的较大或较小的可表示值,以实现定义的方式选择。

它还建议翻译时间转换应与库函数(如strtod)的执行时间转换相匹配,但这不是必需的。请参阅可表示值的描述。

两者都指定将浮点值转换为整数以进行截断(通过丢弃小数部分向 0 舍入)。