c ++我可以用double初始化float类型的变量吗?

时间:2016-11-24 17:47:48

标签: c++ types floating-point initialization double

还没有真正找到这个。虽然当我使用Caused by: org.hibernate.MappingException: Could not determine type for: model.Box, at table: Stuff, for columns: [org.hibernate.mapping.Column(box)] 初始化float类型的变量时编译器似乎没有抱怨。

double

它工作正常,但我仍然很好奇是否可以这样做,和/或它是否安全?

(我在运行Windows的32位系统上)

3 个答案:

答案 0 :(得分:2)

  

4.8浮点转换

     

1 浮点类型的prvalue可以转换为另一个浮点类型的prvalue。如果   源值可以在目标类型中准确表示,转换的结果就是精确的   表示。如果源值在两个相邻目标值之间,则为转换结果   是这些值中任何一个的实现定义选择。否则,行为未定义。

答案 1 :(得分:1)

创建的变量的大小不同。 " float = 4字节"和" double = 8字节"。因此,重要的是两种类型的值范围都不同。如果您将小值用作1.0,则不应影响工作流程。

答案 2 :(得分:1)

顾名思义,double的精度为float [1]的2倍。通常,double有15个十进制数字的精度,而float有7个。

以下是计算位数的方式:

double has 52 mantissa bits + 1 hidden bit: log(253)÷log(10) = 15.95 digits

float has 23 mantissa bits + 1 hidden bit: log(224)÷log(10) = 7.22 digits

也许你会失去精确度。