strictfp非访问修饰符有什么用?

我知道这是一个重复的问题。但我想通过一个例子来了解它。所以任何人都可以用一个例子解释它吗? 链接到重复的帖子:我什么时候应该使用“strictfp” java中的关键字?     
已邀请:
好吧,girinie的答案总结得很好,但如果你正在寻找一个例子.. 假设您制作了一个允许高分提交的游戏,但只有在服务器验证分数后才能进行。验证分数的一种方法是让客户端将密钥(及其时间戳)发送到服务器。理想情况下,服务器将通过完全相同的游戏进行游戏并获得相同的分数。 现在,让我们说你的游戏有一些物理可以改变游戏的结果(例如爆炸投掷随机碎片,可能会伤害你,如果它击中)。 该游戏的物理特性可能在服务器上有所不同(即使它只是略微)而不是客户端(例如,如果转换为整数进行碰撞检测,则向下舍入而不是向上)。在这样的边缘情况下,你可能会遇到这样的情况,即客户端游戏没有被爆炸产生的碎片击中,但是服务器游戏是 - 现在你的分数有所不同,这可能会错误地使高分数提交无效 虽然
strictfp
肯定不是一个灵丹妙药,但它在很大程度上强调了不同平台上“重播”指令的一致性。     
这是java语言规范所说的:   在FP-strict表达式中,全部   中间值必须是元素   浮点值集或双精度值   价值集,暗示结果   必须是所有FP严格表达式   IEEE 754算法预测的那些   在使用单个表示的操作数上   和双重格式。在一个   一些不是FP严格的表达式   余地被授予   实现使用扩展   要表示的指数范围   中间结果;净效应,   粗略地说,是一个   计算可能会产生“正确的   回答“在独家的情况下   使用float值set或double   值集可能导致溢出或   下溢。 这意味着:Java中的浮点运算(即涉及
float
double
类型的计算)被指定为符合IEEE 754标准,该标准确切地说明了如何表示FP数。问题是现代CPU内部使用的FP算法不符合中间结果的标准 - 这通常不是问题,因为它实际上更快并且产生更精确的结果。但这可能意味着程序产生的结果会略有不同,具体取决于它运行的硬件 - 这违背了Java平台独立性的基本承诺。
strictfp
关键字允许您确保保留此承诺,并且程序将具有完全相同的结果,无论它在何处运行 - 但这是以降低硬件性能为代价的,其中必须花费额外的精力来进行FP计算在所有中间结果上都遵循IEEE 754。 大多数情况下,你会发现性能更好而不是保证跨平台的相同结果,这就是为什么
strictfp
行为是可选的。实际上,在JVM实现者意识到他们必须让CPU做额外的工作以遵守规范时,它在大多数情况下这样的严格遵守没有任何优势。     
strictfp非常特别。 让我们看一个空间局的例子。 编写的代码使用非常具体的科学数字,现在这个数字是多位小数。 这些小数值会影响太空船路径的轨迹,这受到我的常数影响,例如摩擦力,重力,热量,湿度,接收到的太阳光线,发电量,多重力体,速度,烟道效率等。 重点是当数据被发送用于评估以跟踪船舶时,它应返回对于不同平台相同的值,否则我们将接收十进制值略有不同的数据。 但这并不算是小差异,因为它会导致船舶偏离其轨迹,记住恭敬的微积分,每个小点都会产生轨迹,所以我们的计算必须非常具体和一致,即使是不同的平台,它也必须有标准和准确度。 对于这个要求,我们在java中有strictfp。 你想要一个程序来演示它,很难用一个小程序准确地显示它。     
在方法或类上使用strictfp修饰符时,编译器会生成严格遵守Java规范的代码,以便在所有平台上获得相同的结果。如果没有strictfp,它是否稍微有些松懈,但不会太宽松,以至于使用Pentium中的保护位来提供80位精度。使用JET,可以选择在计算中使用完整的80位。     

要回复问题请先登录注册