A。)在Java中将float转换为double时是否会发生精度损失?
B。)如果我将浮点数转换为浮点数会导致任何精度损失,或者Java是否只是智能地忽略/跳过这种类型转换?
答案 0 :(得分:1)
假设double
是64-bit
个存储桶和float
个32-bit
存储桶。如果您将float
的内容清空到双桶中,它肯定会有更多空间。但是,从double
转换为float
的情况并不相同,因为浮点数太小而无法容纳double
的更大内容。在float
到float
的情况下,它们的大小都相同,所以你肯定不会失去任何东西,并且完全适合彼此的桶。
答案 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与非严格问题。