为什么那个类型是 double 而不是 float?

Why is that type double instead of float?

问题: 在作业问题中(需要用笔在纸上完成,因此无需编码)我必须确定在 C++ 中执行的加法的类型和值。

1 + 0.5

我回答的是:

解决方案说:

我的问题: 为什么 0.5 是双精度而不是浮点数?如何区分浮点数和双数?我的意思是,0.5 在我看来就像一个浮点数和一个双精度数。

在 C++ 中,没有类型后缀的浮点文字默认为 double。如果要float,需要指定f后缀,如0.5f.

首先,是的。 integer + float = float。你说得对。

问题不在于此,而在于您假设 0.5float。它不是。在 C++ 中,float literals are followed by an f 意味着 0.5f 是一个浮点数。然而,0.5实际上是一个double。这意味着你的等式现在是:

integer + double = double

如您所见,这个结果是双倍的。这就是为什么您的问题的正确答案是结果类型是双精度类型。


顺便说一下,为了清除记录,从技术上讲这里发生的事情不是 integer + double = double。正在发生的事情是 1 受制于 implicit conversion。本质上,1 被转换为 double,因为操作的另一端也是 double。这样,计算机将添加相同的类型而不是不同的类型。这意味着这里发生的实际加法更像是:

double + double = double