【问题标题】:Adding 2 floats in C在 C 中添加 2 个浮点数
【发布时间】:2021-11-21 22:37:07
【问题描述】:

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

9.0f + 8.0f

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

【问题讨论】:

  • 链接的重复问题是 C++,而不是 C,因此它引用 C++ 标准,而不是 C 标准。 C11标准中对应的地方是§6.5.6 ¶4,指的是§6.3.1.8 ¶1中定义的“常用算术转换”。这解释得更好here。
  • B. Nadolson,为了进一步了解,对您而言,为什么类型很重要?

标签: c floating-point type-conversion double type-promotion


【解决方案1】:
9.0f + 8.0f 

结果是float吗?

是的,类型是float。

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

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

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

C23x 博士 § 6.3.1.8 1


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多