将“ float”转换为“ double”时,我应该使用“ strictfp”修饰符吗?

时间:2018-10-13 14:56:39

标签: java floating-point strictfp

如果我想编写从float转换为double的方法。

在任何情况下,两者都会给出不同的结果吗?

如果我不关心平台一致性,应该使用哪个版本?

如果我需要它在不同平台上保持一致状态怎么办?

  double f2d(float x) {
    return (double) x;
  }

或:

  strictfp double f2d(float x) {
    return (double) x;
  }

JLS 5.1.2:

  

从float扩展为double的原始转换(不是严格的fp)可能会丢失有关转换值整体大小的信息。

此转换为什么会丢失信息?

2 个答案:

答案 0 :(得分:1)

strictfp对于floatdouble的转换没有影响。原因是在Java语言规范中, 4.2.3. Floating-Point Types, Formats, and Values。特别是:

  

请注意,表4.2.3-A中的约束条件是为了使每个   浮点值集的元素也必定是   float-extended-exponent值集,double值集和   双重扩展指数值集。

由于float值集的每个元素也都是double值集的元素,因此无论floatdouble的转换都将是精确的-严格与否。

答案 1 :(得分:-1)

您可以使用包装器类。 浮点数x = 5/2; double y = Double.parseDouble(x);

有关更多详细信息,

https://www.google.lk/amp/s/www.geeksforgeeks.org/wrapper-classes-java/amp/