首页 > 解决方案 > 为什么这种类型是 double 而不是 float?

问题描述

问题:在一个家庭作业问题中(它是用笔在纸上完成,所以没有编码)我必须确定在 C++ 中执行的加法的类型和值。

1 + 0.5

我的回答是:

解决方案说:

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

标签: c++floating-pointlanguage-lawyerimplicit-conversion

解决方案


首先,是的。integer+ float= float。你对那部分是正确的。

问题不在于那个,而是你的假设0.5float. 它不是。在 C++ 中,float 字面量后跟一个 f,意思0.5f是 float。然而,0.5实际上是一个double. 这意味着您的方程式现在是:

integer + double = double

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


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

double + double = double

推荐阅读