gpt4 book ai didi

java - Java如何计算三角函数

转载 作者:行者123 更新时间:2023-12-01 08:01:13 24 4
gpt4 key购买 nike

我想知道Java如何找到sin(x)。我查看了 Math.sin,它并没有真正给出答案。请不要只说这是泰勒级数,我学数学,所以我知道它没那么简单。 :)

我还检查了 Strict Math 类,由于所有这些 JVM 都有不同的算法,有人可以举一个例子吗?

到目前为止,这是我基于泰勒级数的算法:

if( (i%4) == 0)
suma = suma + Math.sin(x0) * Math.pow(x-x0, i) / faktorijal(i);
if( (i%4) == 1)
suma = suma - Math.cos(x0) * Math.pow(x-x0, i) / faktorijal(i);
if( (i%4) == 2)
suma = suma - Math.sin(x0) * Math.pow(x-x0, i) / faktorijal(i);
if( (i%4) == 3)
suma = suma + Math.cos(x0) * Math.pow(x-x0, i) / faktorijal(i);

其中 x0 是我寻找 sin(x) 的点,faktorijal 是 !i;

最佳答案

这取决于 JVM 实现,但在 OpenJDK 中, Math.sin 只是调用 StrictMath.sin,它是通过调用 fdlibm 提供的正弦函数的 native 方法实现的。图书馆。

以下是 OpenJDK 8 中 fdlibm 正弦函数的 C 源代码:

  • s_sin.c (sin 函数本身)
  • k_sin.c (__kernel_sin 函数用于实现sin)

后一个文件包含描述算法的注释。关键点似乎是“sin(x) 由 13 次多项式近似”。看起来 sinx 参数转换为 (-pi/4, +pi/4) 范围内的等效值,并且 __kernel_sin执行在该范围内足够准确的多项式近似。

<小时/>

请注意,虽然 Math.sin 方法的实际 Java 字节码只是调用 StrictMath.sin,但 JVM 可能会执行 Math.sin除了实际调用该方法之外,还使用其他方式进行调用。特别是,它可能会将 Math.sin 调用转换为相应的 native CPU 指令(例如 x86 FSIN)。但对 StrictMath.sin 的调用将始终使用 fdlibm 实现。

关于java - Java如何计算三角函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25150660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com