C11标准中常用算术转换的第二部分是什么意思?

What does the second part in usual arithmetic conversions in C11 standard mean?

在 C11 标准中

6.3.1.8 Usual arithmetic conversions

1 Many operators that expect operands of arithmetic type cause conversions and yield result types in a similar way. The purpose is to determine a common real type for the operands and result. For the speci?ed operands, each operand is converted, without change of type domain, to a type whose corresponding real type is the common real type. Unless explicitly stated otherwise, the common real type is also the corresponding real type of the result, whose type domain is the type domain of the operands if they are the same, and complex otherwise. This pattern is called the usual arithmetic conversions: ...

2 The values of floating operands and of the results of floating expressions may be represented in greater range and precision than that required by the type; the types are not changed thereby.

能否举一些例子,以及文字说明?

这是指相关表达式的类型。

如果您要将两个 float 类型的值相乘,则操作数保留其类型并且结果为 float 类型。但是,实现可能会选择在内部使用较大的类型来执行操作并将结果转换为较小的类型。

一些处理器对浮点运算有特定的“自然”大小,优化后 运行 更快。因此,如果 float 恰好小于该自然类型,则编译代码可能首先将操作数转换为该大小,以便代码 运行 更快。

浮点中间计算可能会使用“更高”类型进行。

float a,b,c;
...
float d = a*b + c;

产品 a*b 可能 使用 doublelong double 数学以及以下加法。

这可能会导致 d 的值与仅使用 float 的值不同。

方法体现在FLT_EVAL_METHOD.

The use of evaluation formats is characterized by the implementation-defined value of FLT_EVAL_METHOD C17dr § 5.2.4.2.2 9.

-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.