我一直在寻找tan(x)的Java Math库源代码。 它不在我的JDK 1.8_60文件夹中。
我现在问这里,因为我对Math.tan(x)方法中使用的算法/系列感到好奇。
使用MacLaurin系列进行tan(x)需要很多奇怪的术语才能获得高达60度的精确度。使用MacLaurin系列'对于Sin(x)和Cos(x),然后在接近90度时划分精度。
答案 0 :(得分:1)
Math.tan()
只需调用StrictMath.tan()
,这是原生方法。
Java的源代码可以在http://hg.openjdk.java.net/
找到Math.tan()
StrictMath.tan()
StrictMath
methods的C来源
答案 1 :(得分:1)
通常,实现会使用像
这样的三角标识将参数减少到零tan(a+b)= ( tan(a)+tan(b) ) / (1-tan(a)*tan(b) )
b=45°
给出
tan(a+45°) = ( 1+tan(a) ) / ( 1-tan(a) )
如果将切线值硬编码为30°或15°,则可以通过这种方式进一步减少。
也可以将此身份用于半角关系,
tan(a) = 2*tan(a/2) / ( 1-tan(a/2)^2 )
也允许减小角度。
首先限制为[-45°,45°]然后3个角度减半,将达到[-6°,6°]范围,其中较低度泰勒多项式将给出足够好的近似值。