Java 在将'float'转换为'double'时,是否应该使用'strictfp'修饰符?

Java 在将'float'转换为'double'时,是否应该使用'strictfp'修饰符?,java,floating-point,strictfp,Java,Floating Point,Strictfp,如果我想写从float到double的转换方法 是否有任何情况下,这两个会返回不同的结果 如果我不关心平台一致性,我应该使用哪个版本 如果我需要它在不同的平台上保持一致,该怎么办 double f2d(float x) { return (double) x; } 或: JLS 5.1.2: 从float到double的非strictfp加宽原语转换可能会丢失有关转换值的总体大小的信息 为什么此转换会丢失信息?strictfp对浮点到双精度转换没有影响。原因是在Java语言规范

如果我想写从float到double的转换方法

是否有任何情况下,这两个会返回不同的结果

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

如果我需要它在不同的平台上保持一致,该怎么办

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

JLS 5.1.2:

从float到double的非strictfp加宽原语转换可能会丢失有关转换值的总体大小的信息

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

strictfp对浮点到双精度转换没有影响。原因是在Java语言规范中, . 特别是:

注意,表4.2.3-A中的约束条件的设计应确保 浮点值集的元素也必然是 浮点扩展指数值集、双值集和 双扩展指数值集


由于浮点值集的每个元素也是双值集的一个元素,所以无论浮点值到双值的转换是否严格,都是精确的。

您是否计划使用AS/400或大型机?很可能您不需要此功能。你能举一个如何使用它的例子吗
  strictfp double f2d(float x) {
    return (double) x;
  }