【问题标题】:Is there any difference of the floating point type between Java and C?Java和C之间的浮点类型有什么区别吗?
【发布时间】:2011-07-12 10:54:55
【问题描述】:

我正在将一个项目从 C 导入 Java,其中涉及大量浮点运算。

在将 C 浮点类型转换为 Java 时是否需要注意任何特殊规则?

【问题讨论】:

    标签: java c floating-point


    【解决方案1】:

    Java 有一些规则来管理浮点计算中的中间结果是否可以使用比最终结果更高的精度。您应该研究strictfp 关键字。

    【讨论】:

      【解决方案2】:

      如果您的应用程序旨在在多个平台上运行。我不确定C,但在java中,精度取决于平台,确切地说,在某些平台上,计算可能比其他平台更精确,因此导致比较是假的而不是真的。为了解决这个问题,有一个strictfp 修饰符可以应用于变量或方法,并且使精度保持不变,因此您在浮点数上的比较操作将在所有平台上产生相同的结果。

      【讨论】:

      • 换句话说,C 和 C 之间甚至 Java 和 Java 之间甚至可能存在差异,更不用说 C 和 Java。此外,由于浮点数的表示通常是近似值,因此您永远不应该像此答案中所暗示的那样,使用浮点数的直接比较来获得布尔结果。将两个浮点数之间的差异与某个小值进行比较通常是一种合理的技术。
      【解决方案3】:

      不用担心,不需要特别的规则。

      【讨论】:

        【解决方案4】:

        关于比较浮点数,下面的代码是它的常用方法:

        public boolean floatEquals(float a, float b, float epsilon) {
            return Math.abs(a-b) < epsilon;
        }
        

        Epsilon 是一个小数,例如 0.00001

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-13
          • 1970-01-01
          • 2013-11-24
          相关资源
          最近更新 更多