gpt4 book ai didi

c++ - 为什么浮点提升也不能用于算术?

转载 作者:行者123 更新时间:2023-11-28 02:02:21 25 4
gpt4 key购买 nike

我读过一些关于浮点提升的内容。我知道它不适用于二进制算术运算,仅适用于例如过载决议。但是为什么?

C++ 标准保证 double 必须至少与 float 一样精确 [basic.fundamental.8] 并且需要进行浮点提升以保持值不变 [conv.fpprom]。然而this question非常清楚地表明它不会发生。 Stroustrup,第 4 版甚至对主题进行了勘误(here,第 10 章,第 267 页)。

但是,我看不出有任何理由不能在通常的算术转换 [expr.10] 中完成提升,即使满足所有先决条件也是如此。有吗?

可以找到最新的 C++14 工作草案 here , 最终版本仅供购买。

最佳答案

float 转换为 double 需要一些成本,而且它可能比将 short 转换为 int 更昂贵转换(它需要几次移位和位组合操作)。不像例如shortfloat 类型被认为是处理器可以直接操作的类型(就像它可以在 int 上操作一样)。

鉴于上述事实,为什么应该在没有必要的情况下进行浮点提升?也就是说,如果您要添加两个 float,为什么要将它们转换为 double,添加它们,然后再将它们转换回 float(1)

请注意,根据 C++14 [expr] 中的规定,当您添加混合参数(例如 float + double)时,确实会发生浮点提升引用。

  • (10.3) Otherwise, if either operand is double, the other shall be converted to double.

根据 [conv.fpprom],这种从 floatdouble 的转换是通过浮点提升来执行的。


(1) 当然,如果处理器不能直接对 float 进行操作,并且 [expr].12 明确允许,这完全有可能在内部发生.但是那段话说

the types are not changed thereby.

关于c++ - 为什么浮点提升也不能用于算术?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38952864/

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