MPYM测试兵团论坛 开坛3月喜报

MPYM测试兵团自10年12月成立以来,坚持独特的定位:专注于测试的组织及管理、测试与软件工程及项目管理。作为不同于主流测试论坛的选择,测试兵团成功获得了认可。

MPYM测试兵团论坛 http://bbs.mypm.cc 10年12月开坛到现在,按预期发展,证明了我们的定位得到了认可。测试兵团的定位是:测试的组织及管理,测试与软件工程,项目管理。当前好多测试论坛, 都是山寨51testing,只有我们测试兵团剑走偏峰,不走寻常路!...

如何将以下代码改为sin的泰勒展开式 ; ;================================================================= ; 函数: _cosine_basic ; 功能: 泰勒展开计算cos(x), 输入Q14, 输出Q15 ; 优化: 保留原始逻辑,增强注释和错误处理 ; 范围:0x0000(0.0)到 0x7FFF(≈1.999939)对应 浮点范围 [0, π/2] ; 值计算:x_float = (int16_t)x_Q14 / 16384.0 (例如 0x6487 对应 π/2 ≈ 1.5708)。 ; 若输入超出 [0, π/2],跳转到 error_basic 返回 1.0(Q15 的 32767)。 ; 泰勒展开式: 1.0 - (x²/2!) + (x⁴/4!) - (x⁶/6!) ;================================================================= .mmregs .data _icosCoef_basic: .word 32767, -16383, 1365, -45 ; 泰勒系数 [1, -1/2!, 1/4!, -1/6!] .sect ".text" .def start start: MOV #0x4305, T0 ; 加载x 60度 #0x4305到 T0 ;--- 输入验证 --- MOV #0x6487, T1 ; 加载 π/2 的 Q14 值到 T1 CMP T0 > T1, TC1 ; 检查 T0 > π/2 BCC error_basic, TC1 MOV #0, T1 ; 加载 0 到 T1 CMP T0 < T1, TC1 ; 检查 T0 < 0 BCC error_basic, TC1 ;--- 主计算逻辑 --- AMOV #(_icosCoef_basic+3), XAR3 ; 系数从高阶项开始 MOV T0, HI(AC0) SQR AC0, AC0 ; AC0 = x² (Q28) SFTS AC0, #-15 ; x²转为Q13 MOV AC0, T0 ; T0 = x² ; 计算高阶项: (-1/6! x² + 1/4!) x² MPYM *AR3-, T0, AC0 ; AC0 = -45 * x² (Q15*Q13=Q28) SFTS AC0, #-13 ; Q28→Q15 ADD *AR3-, AC0 ; AC0 += 1365 MOV AC0, *AR1 MPYM *AR1, T0, AC0 ; AC0 *= x² SFTS AC0, #-13 ; 计算低阶项: (-1/2! + AC0) x² + 1.0 ADD *AR3-, AC0 ; AC0 += -16383 MOV AC0, *AR1 MPYM *AR1, T0, AC0 SFTS AC0, #-13 || MOV *AR3, T0 ; 并行加载1.0 ADD AC0, T0 ; T0 = 结果 Q15 RET error_basic: MOV #32767, T0 ; 返回cos(0)=1.0 RET
03-28
如何将以下代码改为sin的泰勒展开式 ;================================================================= ; 函数: _cosine_basic ; 功能: 泰勒展开计算cos(x), 输入Q14, 输出Q15 ; 优化: 保留原始逻辑,增强注释和错误处理 ; 范围:0x0000(0.0)到 0x7FFF(≈1.999939)对应 浮点范围 [0, π/2] ; 值计算:x_float = (int16_t)x_Q14 / 16384.0 (例如 0x6487 对应 π/2 ≈ 1.5708)。 ; 若输入超出 [0, π/2],跳转到 error_basic 返回 1.0(Q15 的 32767)。 ; 泰勒展开式: 1.0 - (x²/2!) + (x⁴/4!) - (x⁶/6!) ;================================================================= .mmregs .data _icosCoef_basic: .word 32767, -16383, 1365, -45 ; 泰勒系数 [1, -1/2!, 1/4!, -1/6!] .sect ".text" .def start start: MOV #0x4305, T0 ; 加载x 60度 #0x4305到 T0 ;--- 输入验证 --- MOV #0x6487, T1 ; 加载 π/2 的 Q14 值到 T1 CMP T0 > T1, TC1 ; 检查 T0 > π/2 BCC error_basic, TC1 MOV #0, T1 ; 加载 0 到 T1 CMP T0 < T1, TC1 ; 检查 T0 < 0 BCC error_basic, TC1 ;--- 主计算逻辑 --- AMOV #(_icosCoef_basic+3), XAR3 ; 系数从高阶项开始 MOV T0, HI(AC0) SQR AC0, AC0 ; AC0 = x² (Q28) SFTS AC0, #-15 ; x²转为Q13 MOV AC0, T0 ; T0 = x² ; 计算高阶项: (-1/6! x² + 1/4!) x² MPYM *AR3-, T0, AC0 ; AC0 = -45 * x² (Q15*Q13=Q28) SFTS AC0, #-13 ; Q28→Q15 ADD *AR3-, AC0 ; AC0 += 1365 MOV AC0, *AR1 MPYM *AR1, T0, AC0 ; AC0 *= x² SFTS AC0, #-13 ; 计算低阶项: (-1/2! + AC0) x² + 1.0 ADD *AR3-, AC0 ; AC0 += -16383 MOV AC0, *AR1 MPYM *AR1, T0, AC0 SFTS AC0, #-13 || MOV *AR3, T0 ; 并行加载1.0 ADD AC0, T0 ; T0 = 结果 Q15 RET error_basic: MOV #32767, T0 ; 返回cos(0)=1.0 RET
03-28
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值