【发布时间】:2023-03-22 04:53:02
【问题描述】:
cfenv 提供 API 来控制 C 中浮点运算的舍入模式。具体而言,可能的控制标志包括 FE_DOWNWARD 和 FE_UPWARD,它们分别负责向更小或更大的值舍入。
但是,如果这些标志会影响单个浮点运算或整个表达式,我会感到困惑。例如让:
fesetround(FE_UPWARD);
double res = c - a * tanh(b);
如果标志FE_UPWARD 影响整个表达式,那么res 将包含c - a * tanh(b) 的合理上限。但是,如果它影响单个浮点运算,则将首先评估(并最大化)a * tanh(b),并且不再保证 res 包含上限。
标志FE_UPWARD 是给出整个浮点表达式的上限还是只给出单个浮点运算的上限?
【问题讨论】:
-
你为什么不检查一下生成的汇编代码做了什么?
-
cfenv是浮点环境设施标头的 C++ 名称。 C 名称是fenv.h。
标签: c floating-point rounding