为什么该类型为double而不是float?

时间:2019-07-14 19:47:18

标签: c++ floating-point language-lawyer implicit-conversion

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

1 + 0.5

我回答的是:

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

解决方案:

  • 类型:double
  • 值:1.5

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

2 个答案:

答案 0 :(得分:7)

在C ++中,默认情况下不带类型后缀的浮点文字为<Grid Margin="0,100,0,0"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition /> </Grid.ColumnDefinitions> <TextBlock Text="In auto" Grid.Column="0" /> <Border Background="Pink" Height="50" HorizontalAlignment="Stretch" VerticalAlignment="Top" Grid.Column="1"/> </Grid> 。如果希望它为double,则需要指定float后缀,例如f

答案 1 :(得分:5)

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

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

integer + double = double

如您所见,此结果是两倍。这就是为什么对您的问题的正确答案是结果类型为double。


顺便说一句,为了清除记录,从技术上讲,这里发生的不是integer + double = double。发生的情况是1受到implicit conversion的约束。本质上,1会转换为double,因为操作的另一面也是double。这样,计算机将添加相同类型而不是不同类型。这意味着此处实际发生的添加更像是:

double + double = double