我想要计算y(n)=32677Sin(45/1024•n)
,其中y
是一个整数,n
范围从0到2048。怎样才能使这个过程更快、更准确?现在,我想给大家一个参考答案:因为Sin(a+b)=Sin(a)Cos(b)+Cos(a)Sin(b)
和Cos(a+b)=Cos(a)Cos(b)-Sin(a)Cos(b)
。所以我可以存储Sin(45/1024•1)
和Cos(45/1024•1)
only.Then,使用以下公式:
Sin(45/1024•2)=Sin(45/1024•1+45/1024•1)
,Cos(45/1024•2)=Cos(45/1024•1+45/1024•1)
,Sin(45/1024•n)=Sin(45/1024•(n-1)+45/1024•1)
,Cos(45/1024•n)=Cos(45/1024•(n-1)+45/1024•1)
,这种方式在不存储大数组的情况下可能会更快。
发布于 2012-10-08 13:17:05
如果n
范围从0到2048,您可以预先计算值,然后存储在数组中。y(n)
将成为values[n]
。
发布于 2012-10-08 16:52:01
在编译时而不是运行时计算表。
您正在执行一个由16位缩放整数值组成的2048元素表。
编写一个便宜的Matlab脚本,打印出适合你最终编程语言的数据线。将结果剪切并粘贴到源代码中,作为常量数据表,并在运行时进行表查找。这会将初始计算时间推入构建周期,而不是程序启动时间。
发布于 2012-10-10 16:46:00
给定函数的形式,自然的答案是CORDIC算法。这是一个比问题中的问题更清晰的方法。另一方面,它所需要的表格比其他人所建议的要小得多。
https://softwareengineering.stackexchange.com/questions/167954
复制相似问题