三角法是如何處理二元角度的?如何用二進制角度計算正弦?
假設我的360°或2pi角度從0到給定無符號整數類型的最大值,如何用這種表示法計算sin和所有其他函數?
什麼是通用算法?
編輯
我的觀點是將降大任浮點運算或浮點型,我想只有無符號整數來實現這一點。
三角法是如何處理二元角度的?如何用二進制角度計算正弦?
假設我的360°或2pi角度從0到給定無符號整數類型的最大值,如何用這種表示法計算sin和所有其他函數?
什麼是通用算法?
編輯
我的觀點是將降大任浮點運算或浮點型,我想只有無符號整數來實現這一點。
我打算假設您的無符號類型上升到UINT_MAX
,您的意思是360°代表兩個UINTMAX + 1
的冪。
在這種情況下,它是很簡單的:使用標準的肥胖型三角函數sinpi()
其中,當施加到x
,計算SIN(πx)。具有32位unsigned int
一個例子:
sinpi((double)n * 0x1.0p-31)
請注意,轉換到double
和乘法都是精確的,這意味着最終結果是一樣精確sinpi()
是。您可以在CRlibm內找到最準確的雙精度sinpi
。
你能擴展算法多一點嗎?可以用無符號整數來保存所有內容嗎?這就是我想要做的。例如,只需使用'uint32_t'作爲角度和任何相關的操作。 – user2485710
@ user2485710哦,你在問如何實現你自己的正弦函數。你的問題沒有說清楚。好消息是,隨着你的選擇,減少論證將變得簡單。你甚至可以將接近π/ 2的正弦實現問題替換成接近0的餘弦問題。壞消息是你的問題仍然缺乏很多必要的信息來指導一個有用的答案。你在尋找什麼樣的準確性?您是否已經使用某種系統來幫助您進行定點計算,或者您希望我們爲您解決這個問題嗎? ... –
@ user2485710當我說「有了你的選擇」時,我的意思是「當我決定在我的回答中做出的可能選擇」。您的問題實際上並未說明將UINTMAX + 1用於360°。 –
問題不明確 – MBo
@MBo哪部分不清楚? – user2485710
你是什麼意思「二元角」?什麼值的整數必須匹配到2Pi?罪(i * Pi * coeff)等有什麼問題? – MBo