【问题标题】:Which Algorithms are used in java.lang.Math?java.lang.Math 中使用了哪些算法?
【发布时间】:2011-03-02 13:23:58
【问题描述】:

我想知道使用哪些算法来实现 java.lang.Math 类中的数学函数?

例如,sin(x)(或 log(x)) 是作为泰勒级数或任何其他算法的元素之和实现的吗?

【问题讨论】:

标签: java math


【解决方案1】:

他们是本地人。这意味着它可能只是调用 FPU 来完成工作的 C 代码。

见: http://www.docjar.com/html/api/java/lang/Math.java.html

上帝保佑

【讨论】:

    【解决方案2】:

    对于不支持这些方法的系统,您可以获得一个 java 库,但是大多数 JVM 使用底层机器代码指令来执行这些操作。

    【讨论】:

      【解决方案3】:

      请参阅 Jean-Michel Muller 的“基本函数:算法和实现”。

      【讨论】:

        【解决方案4】:

        答案是它取决于供应商和平台。以下是 Math 类 javadoc 关于该主题的内容:

        “与 StrictMath 类的一些数值方法不同,Math 类的等效函数的所有实现都没有定义为返回逐位相同的结果。这种放宽允许在严格再现性的情况下执行更好的实现不需要。”

        "(默认情况下,许多数学方法只是简单地调用 StrictMath 中的等效方法来实现它们。)鼓励代码生成器使用特定于平台的本机库或微处理器指令(如果可用)以提供更高的性能数学方法的实现。这种更高性能的实现仍然必须符合数学规范。"

        典型的 JVM 有可能将这些操作实现为对 C 库的调用,而这些库又在可用的情况下使用 FPU 指令。但你不能一概而论...

        如果您想要对算法进行严格指定的数学运算,您需要使用StrictMath 而不是MathStrictMath 版本的操作(我理解)保证在任何 Java 平台上给出相同的答案。缺点是它们很可能速度较慢。

        【讨论】:

          猜你喜欢
          • 2010-11-04
          • 2011-06-14
          • 2017-02-02
          • 2015-05-22
          • 2011-02-26
          • 2014-05-01
          • 1970-01-01
          • 2016-06-07
          • 2016-10-19
          相关资源
          最近更新 更多