gpt4 book ai didi

java - 为什么 strictfp 会出现?

转载 作者:行者123 更新时间:2023-12-01 09:08:47 28 4
gpt4 key购买 nike

我一直读过strictfp将浮点计算限制为IEEE-754标准,但从未读过为什么需要根据该标准限制计算结果?

最佳答案

当 james gosling 和他的团队开发 java 时,平台独立性是首要任务。他们希望让 Oak(Java) 变得更好,使其在任何具有不同指令集的机器上运行完全相同,甚至运行不同的操作系统。但他们的问题是浮点运算,即当计算floatdouble值时,运算结果在不同的机器上是不同的(32/64位处理器架构) )由于精度。由于某些处理器是像当时的奔腾处理器一样以效率(快速计算)为目标而构建的,而其他处理器则像当时的旧处理器一样以准确性(准确的结果)为目标。

由于处理器努力实现快速计算,对精度值进行四舍五入,但其他处理器却没有,因此结果略有不同。而这种差异与java的口号WORA背道而驰。因此Java人们带来了修饰符strictfp,它将浮点运算的结果限制为IEEE-754标准。

Strictfp 确保我们在每个平台上从浮点计算中获得完全相同的结果。如果我们不使用 strictfp,JVM 实现可以在可用的情况下自由使用额外的精度。这意味着,如果我们不指定 strictfp,那么 JVMJIT 编译器就有权计算我们的浮点计算,但是它们想。为了提高速度,他们很可能会将计算委托(delegate)给我们的处理器。但是使用 strictfp on 时,计算必须符合 IEEE 754 算术标准,这在实践中可能意味着 JVM 将进行计算,从而可以得到在任何机器上浮点运算的结果相同。

关于java - 为什么 strictfp 会出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41057761/

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