发布于 2006-06-21 12:03:53
0楼
公式是死的,人是活的
不知道公式就直接从 正弦 函数着手,加一个二分查找算法,自己就能做一个反正弦的函数了
试试下面了子程序
注意:多次调用此程序可能导致看门狗超超错误。本程序当然不是最好的方法,处理反正弦最好是用公式。这里只是展示一种解决问题的思路
===============================================
SUBROUTINE_BLOCK A_SIN:SBR0
TITLE=
VAR_INPUT
x:REAL;
END_VAR
VAR_OUTPUT
rad:REAL;
END_VAR
VAR
rad0:REAL;
rad1:REAL;
tmp_R:REAL;
y:REAL;
fSign:BOOL;
END_VAR
BEGIN
Network 1 // 非法参数
LDR> LD0, 1.0
OR< LD0, -1.0
MOVR 0.0, LD4
CRET
Network 2 // 符号处理
// 全部换算成 0-90°处理
LDR< LD0, 0.0
*R -1.0, LD0
= L24.0
Network 3 // 查找范围
// 全部变换到 [0,π/4] 内处理
LD SM0.0
MOVR 0.0, LD8
MOVR 0.7853981, LD12
Network 4 // 喂狗
LD SM0.0
WDR
Network 5
LBL 1
Network 6 // 开始两分查找
LD SM0.0
MOVR LD8, LD4
+R LD12, LD4
/R 2.0, LD4
SIN LD4, LD20
-R LD0, LD20
Network 7 // 偏大循环
// 1E-005 为比较精度,精度越高,耗时越长,容易导致看门狗超时
LDR> LD20, 1E-005
MOVR LD4, LD12
JMP 1
Network 8 // 偏小循环
LDR< LD20, -1E-005
MOVR LD4, LD8
JMP 1
Network 9 // 负值时偏移 π
LD L24.0
+R 3.141593, LD4
Network 10 // 换算成角度输出
LD SM0.0
/R 3.151592, LD4
*R 180.0, LD4
END_SUBROUTINE_BLOCK
生命存在的方式只有两种:腐烂或燃烧