gpt4 book ai didi

c - C 可以用多种浮点格式求值吗?

转载 作者:太空狗 更新时间:2023-10-29 16:55:58 25 4
gpt4 key购买 nike

C 2011 [N1570] 5.2.4.2.2 9 说:

Except for assignment and cast …, the values yielded by operators with floating operands and values subject to the usual arithmetic conversions and of floating constants are evaluated to a format whose range and precision may be greater than required by the type.

这是否意味着实现中的所有浮点运算可以用一个格式评估,或者每个操作可以用一个格式评估具有更大的范围和精度?

后者将允许 A*B == A*B 评估为 false,如果 A*B 以额外的精度评估不同于 A*B 以标称精度评估。

最佳答案

值得一读the interpretation of Joseph S. Myers of the relevant parts of the standard对于 GCC 的 C 编译器,以及 definition C11 5.2.4.2.2:9 中的 FLT_EVAL_METHOD:

The use of evaluation formats is characterized by the implementation-defined value of FLT_EVAL_METHOD:

-1 indeterminable;

0 evaluate all operations and constants just to the range and precision of the type;

1 evaluate operations and constants of type float and double to the range and precision of the double type, evaluate long double operations and constants to the range and precision of the long double type;

2 evaluate all operations and constants to the range and precision of the long double type.

FLT_EVAL_METHOD 定义为 -1 的 C 编译器不需要针对浮点计算的精度做任何具体的事情,但根据上述,一个定义它到 1 应该只计算 double 精度的 float 表达式,而将它定义为 2 的表达式应该只计算floatdouble 表达式,long double 精度。

该标准没有明确允许其他精度,也没有明确允许在编译器方便时四舍五入到标称精度。 (在 Joseph S. Myers 的补丁之前,GCC 正在做后者,而 x86 上的 clang -mno-sse2 -std=c99 正在做同样的事情 the last time I tried it ,同时错误地定义FLT_EVAL_METHOD 为 0)。

按照这个对FLT_EVAL_METHOD含义的严格解释,a * b应该只有一个值,如果这个值不是NaN,a * b == a * b 应始终保存在使用将 FLT_EVAL_METHOD 定义为 0、1 或 2 的编译器编译的 C 程序中。

关于c - C 可以用多种浮点格式求值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49246014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com