回复:反正弦函数

醉书生

  • 帖子

    718
  • 精华

    25
  • 被关注

    18

论坛等级:侠士

注册时间:2004-06-13

普通 普通 如何晋级?

发布于 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
生命存在的方式只有两种:腐烂或燃烧
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33303条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。