当前位置: 首页 > 面试题库 >

在JVM上进行浮点运算是否会在所有平台上产生相同的结果?

巴星华
2023-03-14
问题内容

我在运行于多台计算机上的应用程序中使用Java,并且所有计算机都需要获得相同的数学运算结果。使用Java的浮点原语是否安全?还是应该只使用定点数学库?


问题答案:

一般而言,不。但是,您可以使用strictfp表达式:

在FP-strict表达式中,所有中间值都必须是浮点值集或double值集的元素,这意味着所有FP-strict表达式的结果必须是IEEE
754算法对使用单格式和双格式表示的操作数预测的结果。

在不受FP限制的表达式中,为实现留出一定的余地,可以使用扩展的指数范围来表示中间结果。粗略地说,最终结果是,在独占使用浮点值集或双精度值集可能导致上溢或下溢的情况下,计算可能会产生“正确答案”。



 类似资料:
  • 问题内容: 我需要在Java中执行一些浮点运算,如下面的代码所示: 这是为了模拟Betfair Spinner小部件作为输出给出的值的范围。 Java中的浮点算术似乎引入了一些意外错误。例如,我得到2.180000000000001而不是2.18。浮点数有什么用,您不相信对它们执行的算术结果吗?我该如何解决这个问题? 问题答案: 如果您需要精确的十进制值,则应使用java.math.BigDeci

  • 问题内容: 假设我在同一台计算机上同时运行两个Java程序。这些程序将在单个JVM实例中运行还是在两个不同的JVM实例中运行? 问题答案: 如果您使用命令(从命令行)开始每个命令,它们将作为完全独立的JVM运行。 “程序”可以作为在一个JVM中运行的单独线程启动。

  • 问题内容: 我有一大堆具有相同标签的节点。我希望能够在Jenkins中运行一个作业,该作业在具有相同标签的 所有 节点上执行并同时执行。 我看到了在詹金斯中使用矩阵配置选项的建议,但我只能想到一个轴(标签组)。当我尝试运行该作业时,似乎它只执行一次而不是300次(该标签组中的每个节点1次)。 我的另一条轴应该是什么?还是…有一些插件可以做到这一点?我曾经尝试过NodeLabel参数插件,然后选择“

  • 我试过什么? 如果我使用Cipher.GetInstance(“des”)解密“12345”.GetBytes(),将引发异常。 这是否意味着使用RSA时,类密码可以自动检测是否应该使用encrypt或decrypt(忽略我在初始化Cipher类时指定的模式参数)?

  • 我被要求连接到公司大型机上的Db2数据库。我得到了主机名、端口号和数据库。我能够使用Java和IBM JDK版本1.8以及Db2 Universal JDBC驱动程序成功地连接到它。现在我已经连接到它,我如何找出什么是下面躺着的大型机平台。哪里是z/OS、OS/400还是VSE?是否有任何SQL查询可以获得该平台信息?另外,如何找出DB2的版本?

  • 但是,我已经看到使用Java访问api 是否有任何实现可以在GPU中运行整个JVM(可能使用CUDA API)? 或者,会有这样做的计划吗? 如果是,性能是否足以同时运行客户端或服务器应用程序? 最重要的是,会导致JVM无法在GPU中运行的问题是什么? 我在这里看到的好处是,我可以买一个像样的NVidia GPU,并能够运行Java应用程序,而不需要在CPU上进行太多的处理,从而节省CPU用于其他