易语言 如何求反余弦 如 己知sin的值0.5 如何用易语言转化成30度

易语言 如何求反余弦 如 己知sin的值0.5 如何用易语言转化成30度,第1张

这个是不用模块的方法,要是想省事,那自己找个模块就可以了。 .版本 2

.支持库 spec.子程序 _按钮1_被单击调试输出 (求反正弦 (0.5))

.子程序 求反正弦, 小数

.参数 正弦值, 小数型

.局部变量 正切值, 小数型' tanθ=sinθ/cosθ

' tanθ=sinθ/根号(1-sinθ^2)

正切值 = 正弦值 ÷ 求平方根 (1 - 求次方 (正弦值, 2))

' 角度=弧度*180/π

返回 (求反正切 (正切值) × 180 ÷ #pi)

计算反正切函数(使用欧拉变换公式,精度很高),反正切函数的级数展开公式:

f(x) = x - x^3/3 + x^5/5 +...+ (-1)^k * x^(2k+1)/(2k + 1)+...

当|x| > 1时,级数绝对值发散,无法直接使用欧拉公式计算。因此可以通过下面的公式

进行等价转换之后再进行计算。

等价转换公式:

a) ATan(1/x) = Pi/2 - ATan(x)

b) ATan(-x) = - ATan(x)

特殊情况

0 = ArcTan(0)

Pi/2 = ArcTan(无穷大)

//

// 欧拉公式

//

// sum是和,term是通项值,jterm初始为1,以后按1递增。wrksp是工作单元,视jterm的

// 最大值而定。

//

void eulsum(int& nterm,double *sum,double term,int jterm,double wrksp[])

{

double tmp,dum

if(jterm == 1)

{

nterm = 1

wrksp[1] = term

*sum = 0.5 * term

}

else

{

tmp = wrksp[1]

wrksp[1] = term

for(int j=1 j <= nterm j++)

{

dum = wrksp[j+1]

wrksp[j+1] = 0.5 * (wrksp[j] + tmp)

tmp = dum

}

if(fabs(wrksp[nterm + 1]) <= fabs(wrksp[nterm]))

{

*sum = *sum + 0.5 * wrksp[nterm + 1]

nterm = nterm + 1

}

else

{

*sum = *sum + wrksp[nterm + 1]

}

}

}

级数计算就不用我给代码了吧。

子程序:arcsine

返回值类型:双精度小数型

参数:num 数据类型:双精度小数型

如果 (num > -1 且 num < 1)

返回 (求反正切 (num ÷ 求平方根 (1 - 求次方 (num, 2))))

否则

如果 (num = 1 或 num = -1)

判断 (num = 1)

返回 (#pi ÷ 2)

判断 (num = -1)

返回 (-(#pi ÷ 2))

默认

判断结束

否则

设置错误 (真)

返回 (0)

如果结束

如果结束

------------------------------

子程序:arccosine

返回值类型:双精度小数型

参数:num 数据类型:双精度小数型

如果 (num ≥ -1 且 num ≤ 1)

如果 (num = 0)

返回 (#pi ÷ 2)

否则

返回 (求反正切 (求平方根 (1 - 求次方 (num, 2)) ÷ num))

如果结束

否则

设置错误 (真)

返回 (0)

如果结束

------------------------------

子程序:arctangent

返回值类型:双精度小数型

参数:num 数据类型:双精度小数型

返回 (求反正切 (num))


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12060415.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存