在爪哇的Typecasting Float

时间:2014-05-01 03:37:45

标签: java types floating-point

A。)在Java中将float转换为double时是否会发生精度损失?

B。)如果我将浮点数转换为浮点数会导致任何精度损失,或者Java是否只是智能地忽略/跳过这种类型转换?

2 个答案:

答案 0 :(得分:1)

假设double64-bit个存储桶和float32-bit存储桶。如果您将float的内容清空到双桶中,它肯定会有更多空间。但是,从double转换为float的情况并不相同,因为浮点数太小而无法容纳double的更大内容。在floatfloat的情况下,它们的大小都相同,所以你肯定不会失去任何东西,并且完全适合彼此的桶。

答案 1 :(得分:1)

问题A由Java语言规范Widening Primitive Conversion涵盖。

"在strictfp表达式中从float扩展到double的转换也完全保留了数值;但是,这种不严格的转换可能会丢失有关转换值总体幅度的信息。"

非严格问题涉及具有极端指数值的数字。该问题在FP-strict Expressions中讨论。

"在FP-strict表达式中,所有中间值必须是浮点值集或双值集的元素,这意味着所有FP严格表达式的结果必须是IEEE 754算法预测的结果。使用单格式和双格式表示的操作数。在不是FP-strict的表达式中,为实现授予了一些余地,以使用扩展指数范围来表示中间结果;粗略地说,净效应是计算可能产生正确答案"在独占使用浮点值集或双值集可能导致上溢或下溢的情况下。"

如果您想确保从float到double的转换是准确的,请使用strictfp。

问题B是关于Identity Conversions的问题。我不确定身份转换是否可以触发值集的更改,涉及与问题A相同的strictfp与非严格问题。