首页 > 解决方案 > 将 `float` 转换为 `double` 时我应该使用 `strictfp` 修饰符吗?

问题描述

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

有没有任何情况下两者会给出不同的结果?

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

如果我需要它在不同平台上表现一致怎么办?

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

或者:

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

JLS 5.1.2:

从 float 到 double 的扩展原始转换不是 strictfp 可能会丢失有关转换值的整体大小的信息。

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

标签: javafloating-pointstrictfp

解决方案


strictfpfloatdouble转换没有任何影响。原因在于 Java 语言规范 4.2.3。浮点类型、格式和值。尤其是:

请注意,表 4.2.3-A 中的约束被设计为浮点值集的每个元素都必然也是浮点扩展指数值集、双精度值集和双精度扩展指数值的元素放。

因为值集的每个元素也是值集float的一个元素,所以无论它是否是 FP-strict,转换将是精确的。doublefloatdouble


推荐阅读