我们的老师要求我们搜索这个以及我从网上得到的内容是解释说明双重和浮动意味着什么。
你能否告诉我是否可能,并解释原因或原因?
答案 0 :(得分:4)
简单回答:是的,但只有double
不是太大。
float
是单精度浮点数,意味着它们使用23位尾数和8位指数,对应于~6 / 7 s.f.精度和~10 ^ 38范围。
double
是双精度 - 具有52位尾数和11位指数,对应于~14 / 15 s.f.精度和~10 ^ 308范围。
由于double的范围大于浮点数,因此向非常大的double添加浮点数将使浮点数的效果无效(称为下溢)。当然,这也可能发生在两种双重类型中。
答案 1 :(得分:2)
您可以添加两个带有不同小数位的数字(例如432.54385789364 + 432.1
)吗?是的,你可以。
在Java中,它是一样的想法。
float:float数据类型是单精度32位IEEE 754浮点数。其值范围超出了本讨论的范围,但在Java语言规范的浮点类型,格式和值部分中指定。与byte和short的建议一样,如果需要在大型浮点数数组中保存内存,请使用float(而不是double)。绝不应将此数据类型用于精确值,例如货币。为此,您需要使用java.math.BigDecimal类。 Numbers和Strings涵盖了Java平台提供的BigDecimal和其他有用的类。
double:double数据类型是双精度64位IEEE 754浮点。其值范围超出了本讨论的范围,但在Java语言规范的浮点类型,格式和值部分中指定。对于十进制值,此数据类型通常是默认选择。如上所述,此数据类型不应用于精确值,例如货币。
基本上,他们都是小数的持有者。它们的不同之处在于它们的精确程度。 float
的大小只能为32
位,而double
的大小为64
位。 float
最多可以有5或6个浮点数,而double
最多可以有10个浮点数。
基本上...... double
可以比float
更好地存储小数...但占用更多空间。
要回答您的问题,您可以将float
添加到double
,反之亦然。通常,结果将变为double
,如果这是您想要的,则必须将其强制转换为float
。
答案 2 :(得分:1)
如果你想深入了解它,你应该说是的,由于价值强制,它是可能的,但它为更严重的精确错误打开了大门,以便无形地积累到编译器。 float 具有比 double 更高的精度,并且非常遗憾地是Java源代码中默认的文字浮点数类型。在实践中,确保在文字上使用 d 后缀,以确保如果必须使用浮点,则加倍。
这些精确错误可能导致敏感系统的严重伤害甚至生命损失。
浮点很难正确使用,如果可能应该避免使用。一个非常显而易见的事情就是通常错误地将货币表示为浮动或双重。这可能会导致真正的钱被有效地送给或偷走。
浮点(偏好 double )适用于近似计算和某些高性能科学计算应用。但是,了解精度损失特性仍然非常重要,特别是当将得到的浮点值输入到进一步的浮点计算中时。
这在数值计算方面更为普遍,现在我已经真正走到了这里:)
SAS有一篇很好的论文: http://support.sas.com/resources/papers/proceedings11/275-2011.pdf