为什么使用类型双精度而不是浮点数?

3

问题: 在一道作业题中(需用纸笔完成,无需编程),我需要确定C++中进行的加法类型和值。

1 + 0.5

我的回答是:

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

解决方案如下:

  • 类型:double
  • 数值:1.5

我的问题: 为什么0.5是double而不是float? 我怎样区分float和double? 我的意思是,对我来说,0.5看起来像float和double。


9
0.5f 是一个浮点字面量。0.5 是一个双精度浮点字面量。 - Eljay
2个回答

7

C++中,没有类型后缀的浮点字面值默认为double类型。如果想要使用float类型,需要在数字后面加上f后缀,例如0.5f


谢谢你的详细解释。如果一个数字没有小数点,比如说7,但是后面跟着一个f:7f,那么7f也是浮点数,对吗? :-) - limonade
1
不,你必须在f前面加一个点,所以7.f是正确的。 - serkan.tuerker

7
首先,是的。整数 + 浮点数 = 浮点数。你对这一部分是正确的。
问题不在于此,而是你假设0.5是一个浮点数,但实际上它不是。在C++中,浮点字面量后面要跟f,这意味着0.5f是一个浮点数。然而,0.5实际上是一个双精度浮点数。这意味着你的方程现在变成了:
integer + double = double

正如您所看到的,此结果是一个双精度浮点数。因此,您问题的正确答案就是该结果类型是双精度浮点数。
顺便说一下,为了澄清事实,从技术上讲,这里发生的不是“整数+双精度=双精度”。所发生的是,数字1受到隐式转换的影响。基本上,数字1被转换为一个双精度,因为操作的另一侧也是一个双精度。这样,计算机就会添加相同类型而不是不同类型。这意味着在这里实际进行的加法更像是:
double + double = double

哇,谢谢你的精彩解释!所以当一个数字X.X后面跟着f:X.Xf时,那个数字才是浮点数,如果一个数字没有跟着f,那么它就是双精度浮点数,对吗? - limonade
不用客气。如果您想要表达感激之情,您可以给我的回答点赞,或者接受它,如果您认为它比其他回答更好的话(我承认其他回答也很好)。 - user10957435
另外,是的。你是正确的。如果它后面没有跟任何东西(实际上也可以跟一个 L,表示长双精度),那么默认情况下它是一个双精度浮点数。 - user10957435
那是一个被接受的答案,但没关系。我现在会接受它。如果需要的话,随时可以更改已接受的答案,不要害怕。 - user10957435

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接