gpt4 book ai didi

java - Strictfp 在不同系统上返回不同结果

转载 作者:行者123 更新时间:2023-12-01 10:03:38 26 4
gpt4 key购买 nike

我在 Windows 8 (Intel Atom Z3775) 上使用以下方法:

public static strictfp void main(String args[])
{
float a = 0.000000002f;
float b = 90000300000000004f;
float c = a * b;
System.out.println(c);
}

这给了我:1.80000592E8

运行时

public strictfp void calculate()
{
float a = 0.000000002f;
float b = 90000300000000004f;
float c = a * b;
Toast.makeText(getApplicationContext(), c + "", Toast.LENGTH_LONG).show();
}

我得到:1.8000059E8

它们为什么不同?我使用 strictfp 是否错误?

最佳答案

您已确认打印 float 的十六进制表示形式显示值是相同的:

String.format("%08x", Float.floatToIntBits(c))

这意味着 float 转换为 String 的实现方式存在差异。

请注意 OpenJDK implementation of java.lang.Float.toString(float)调用 sun.misc.FloatingDecimal 中的方法 - 即它是 JDK 特定的实现。

您需要:

  • 确保您始终使用相同的实现来运行代码
  • 提供您自己的实现,始终产生相同的结果
  • 指定较短的格式,以便字符串的小数位数相同。

关于java - Strictfp 在不同系统上返回不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36622850/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com