为什么这种类型是双精度而不是浮点数

Why is that type double instead of float?

本文关键字:浮点数 双精度 为什么 种类 类型      更新时间:2023-10-16

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

1 + 0.5

我的回答是:

  • 类型浮点(因为我认为integer + float = float(
  • 值 1.5(据我所知,当添加两种不同的数据类型时,添加的结果将转换为不会丢失任何信息的数据类型。

解决方案 说:

  • 类型:双
  • 值:1.5

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

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

问题不在于此,而在于您假设0.5float。不是。在C++中,浮点数文本后跟一个 f,表示0.5f是浮点数。然而,0.5实际上是一个double。这意味着您的等式现在是:

integer + double = double

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


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

double + double = double

在C++中,默认情况下double没有类型后缀的浮点文本。如果要float,则需要指定f后缀,例如 0.5f