java - 将 `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 可能会丢失有关转换值的整体大小的信息。
为什么此转换会丢失信息?
解决方案
strictfp
float
对double
转换没有任何影响。原因在于 Java 语言规范
4.2.3。浮点类型、格式和值。尤其是:
请注意,表 4.2.3-A 中的约束被设计为浮点值集的每个元素都必然也是浮点扩展指数值集、双精度值集和双精度扩展指数值的元素放。
因为值集的每个元素也是值集float
的一个元素,所以无论它是否是 FP-strict,转换将是精确的。double
float
double
推荐阅读
- java - DecimalFormatSymbols.getInstance().getDecimalSeparator() 返回输出为 ','44 而不是 ','
- python - 如何使用 pandas 进行单元格合并
- angular - Angular 6,d3 v5 鼠标事件,错误类型错误:this.setAttribute 不是函数
- azure-devops - 为什么 Azure DevOps PAT 过期这么快?
- pdf - DOCX Apache POI - 内部带有文本的形状/图像/艺术字未转换为 PDF
- excel - CountIFS 和 ImportRange
- r - 如何从 R 中的距离矩阵或层次聚类中删除异常值?
- react-native - 如何在本机反应中显示获取的数据
- laravel - 如何通过输入序列号从某个产品的数据库中获取成本?
- tensorflow - 良好的训练准确性,但糟糕的评估