Tôi muốn tính toán y(n)=32677Sin(45/1024•n)
, y
số nguyên ở đâu và n
nằm trong khoảng từ 0 đến 2048. Làm cách nào tôi có thể thực hiện quy trình này nhanh hơn và chính xác hơn? Bây giờ tôi muốn cho bạn thấy một câu trả lời tham khảo: Kể từ Sin(a+b)=Sin(a)Cos(b)+Cos(a)Sin(b)
Và Cos(a+b)=Cos(a)Cos(b)-Sin(a)Cos(b)
. Vì vậy, tôi có thể lưu trữ Sin(45/1024•1)
và chỉ Cos(45/1024•1)
. Sau đó sử dụng công thức này:
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)
, Cách này có thể nhanh hơn mà không cần lưu trữ mảng lớn.
sin(x)
nơi x
có độ. Nếu đó là trường hợp, bạn cần lưu ý rằng đối số cho các hàm trig thường là bằng radian. Đối số là radian trong C ++, đó là cách câu hỏi này được gắn thẻ.