为什么那个类型是 double 而不是 float?
Why is that type double instead of float?
问题: 在作业问题中(需要用笔在纸上完成,因此无需编码)我必须确定在 C++ 中执行的加法的类型和值。
1 + 0.5
我回答的是:
- 输入float(因为我认为
integer + float = float
)
- 值 1.5(据我所知,当添加两种不同的数据类型时,
添加的结果将被转换为不丢失任何信息的数据类型。)
解决方案说:
- 类型:双
- 值:1.5
我的问题: 为什么 0.5 是双精度而不是浮点数?如何区分浮点数和双数?我的意思是,0.5 在我看来就像一个浮点数和一个双精度数。
在 C++ 中,没有类型后缀的浮点文字默认为 double
。如果要float
,需要指定f
后缀,如0.5f
.
首先,是的。 integer
+ float
= float
。你说得对。
问题不在于此,而在于您假设 0.5
是 float
。它不是。在 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
问题: 在作业问题中(需要用笔在纸上完成,因此无需编码)我必须确定在 C++ 中执行的加法的类型和值。
1 + 0.5
我回答的是:
- 输入float(因为我认为
integer + float = float
) - 值 1.5(据我所知,当添加两种不同的数据类型时, 添加的结果将被转换为不丢失任何信息的数据类型。)
解决方案说:
- 类型:双
- 值:1.5
我的问题: 为什么 0.5 是双精度而不是浮点数?如何区分浮点数和双数?我的意思是,0.5 在我看来就像一个浮点数和一个双精度数。
在 C++ 中,没有类型后缀的浮点文字默认为 double
。如果要float
,需要指定f
后缀,如0.5f
.
首先,是的。 integer
+ float
= float
。你说得对。
问题不在于此,而在于您假设 0.5
是 float
。它不是。在 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