Java中的类型转换浮动

Java中的类型转换浮动,java,types,floating-point,Java,Types,Floating Point,在Java中,将浮点转换为双精度时是否会发生精度损失 B.)如果我将浮点类型转换为浮点类型,是否会导致精度损失,或者Java是否只是智能地忽略/跳过此类类型转换?假设一个double是一个64位桶和一个float32位桶。如果您将float中的内容清空到双桶中,它肯定会有更多的空闲空间。但是,从double到float的转换将不一样,因为float bucket太小,无法容纳double的较大内容。在float到float的情况下,它们的大小都是相同的,因此您肯定不会丢失任何东西,并且可以完美地

在Java中,将浮点转换为双精度时是否会发生精度损失


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

假设一个
double
是一个
64位
桶和一个
float
32位
桶。如果您将
float
中的内容清空到双桶中,它肯定会有更多的空闲空间。但是,从
double
float
的转换将不一样,因为float bucket太小,无法容纳
double
的较大内容。在
float
float
的情况下,它们的大小都是相同的,因此您肯定不会丢失任何东西,并且可以完美地融入彼此的存储桶中。

Java语言规范涵盖了问题A

strictfp表达式中从浮点扩展到双精度的转换也会精确保留数值;但是,这种非strictfp的转换可能会丢失有关转换值的总体大小的信息

非严格FP问题涉及具有极端指数值的数字。这一问题将在中讨论

“在FP严格表达式中,所有中间值必须是浮点值集或双值集的元素,这意味着所有FP严格表达式的结果必须是IEEE 754算术对使用单格式和双格式表示的操作数所预测的结果。在非FP严格的表达式中,允许实现使用扩展的指数范围来表示中间结果;粗略地说,净效果是,在独占使用浮点值集或双值集可能导致溢出或下溢的情况下,计算可能会产生“正确答案”

如果要确保从float到double的转换是精确的,请使用strictfp


问题B是一个关于的问题。我不确定身份转换是否会触发值集的更改,涉及与问题a相同的strictfp与非strict问题。

每个可以用
浮点数
精确表示的数字也可以用
双精度
精确表示。这就是你要问的吗?是的这是我问题的一部分。第二部分是,如果我将浮点型转换为浮点型,是否会导致精度损失,或者Java是否会忽略对同一类型的任何此类类型的转换?哈,好吧,我假设这是一个输入错误。是的,将
float
转换为
float
没有任何作用。请注意更精确的十进制表示法但是用
double
比用
float
更有效。例如
1.1!=(double)1.1F
。Java语言规范是此类问题的规范性参考。