首页 > 解决方案 > 在 C 中添加 2 个浮点数

问题描述

如果我有 2 个浮点数并将它们加在一起,结果是浮点数吗?还是双标?还是编译器定义的行为?

9.0f + 8.0f <--- 结果是浮点数、双精度还是编译器定义的行为?

如果可能的话,在 C 规范中引用正确位置会很有帮助。

标签: cfloating-pointtype-conversiondoubletype-promotion

解决方案


9.0f + 8.0f 

结果是 afloat吗?

是的,类型float.

首先,如果任一操作数的对应实类型为long double,则将另一个操作数转换为对应实类型为 的类型,而不改变类型域long double

否则,如果任一操作数的对应实类型为double,则将另一个操作数转换为对应实类型为 的类型,而不改变类型域double

否则,如果任一操作数的对应实类型为float,则将另一个操作数转换为对应实类型为 的类型,而不改变类型域float

C23x 博士 § 6.3.1.8 1


虽然类型float,但取决于FLT_EVAL_METHOD,总和可能是使用或数学计算float的。这可能会对更大/不同值的表达式产生算术影响。这部分是“编译器实现定义的行为”。doublelong double


推荐阅读