java.lang.Math中使用了哪些算法?

时间:2011-02-08 23:24:19

标签: java math

我想知道哪些算法用于从java.lang.Math类实现数学函数?

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

4 个答案:

答案 0 :(得分:5)

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

请参阅: http://www.docjar.com/html/api/java/lang/Math.java.html

上帝保佑

答案 1 :(得分:0)

您可以为没有这些方法的本机支持的系统获取Java库,但是大多数JVM使用底层机器代码指令来执行这些操作。

答案 2 :(得分:0)

见Jean-Michel Muller的“基本功能:算法和实现”。

答案 3 :(得分:0)

答案是它依赖于供应商和平台。以下是Math类javadoc在这个主题上所说的内容:

  

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

     

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

典型的JVM可能会将操作实现为对C库的调用,而C库又在可用的情况下使用FPU指令。但你无法概括......

如果您想要严格指定算法的数学运算,则需要使用StrictMath而不是Math。这些操作的StrictMath版本(我理解)保证在任何Java平台上提供相同的答案。缺点是他们很可能会变慢。