Java Math 反正弦asin反餘弦acos函數使用注意事項

  大家都知道,函數sin和cos的值的範圍爲[-1,1]。

  在計算機中,由於計算位數有限,導致運算產生誤差。對於32位計算機,該誤差已經降低到非常非常小了,而64位和128就更小了。然,不管怎樣,即使是1/(2^32)甚至1/(2^128),那也是事實存在可以被計算機識別的。

  當採用Java Math的反正弦和反餘弦函數時,如果參數存在那樣的誤差,那就悲劇了。

  所以,如果參與反正弦和反餘弦計算的參量param是通過某一運算得到的,那麼在對其進行反正弦和反餘弦計算之前,一定要先進行處理

  if(param<-1.0)

    param=-1.0;

  else if(param>1.0)

    param=1.0;

否則,就會出現NaN的數據了。

  如果說計算中的param會出現2.0、100或者其他更大參數的,那另當處理,這裏只是確保param在-1到1之間,只是由於計算精度問題產生的<-1.0和>1.0的情況可通過此方法進行屏蔽。

發佈了100 篇原創文章 · 獲贊 55 · 訪問量 55萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章