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()。我担心的是直接转换为整数。
在这两个规范(C17 和 C++20)中,编译时间舍入是实现定义的。
在 C++ 规范中,这是在lex.fcon中指定的,其中表示
如果缩放值不在其类型的可表示值范围内,则程序格式错误。否则,浮点文字的值是缩放值(如果可表示),否则是最接近缩放值的较大或较小的可表示值,以实现定义的方式选择。
C 规范有类似的语言(引用自 N2176,C17 最终草案):
结果要么是最接近的可表示值,要么是紧邻最近可表示值的较大或较小的可表示值,以实现定义的方式选择。
它还建议翻译时间转换应与库函数(如strtod)的执行时间转换相匹配,但这不是必需的。请参阅可表示值的描述。
两者都指定将浮点值转换为整数以进行截断(通过丢弃小数部分向 0 舍入)。
| 归档时间: |
|
| 查看次数: |
266 次 |
| 最近记录: |