Tuesday, September 16, 2014

JDK源碼分析&使用--Math.class篇(2)

內容預覽:
・atan(返回反正切)
・atan2(返回直角坐標轉換的角度)
・cbrt(返回立方根)
・ceil(回傳大於或等於參數的最小整數值)



atan(返回反正切)
照舊,先看api
螢幕快照 2014-07-03 下午03.53.14螢幕快照 2014-07-04 下午02.51.44
特殊情況:
如果參數為nan,那麼結果為nan。
如果參數為0,那麼結果是相同的符號作為參數為零。
再看源碼:
螢幕快照 2014-07-03 下午03.56.56
不難看出這也是個三角函數吧~
螢幕快照 2014-07-04 下午03.00.11
至於回傳的結果是0.0而不是0,就是因為這是double的啦[看看上面的源碼]
atan2(返回直角坐標轉換的角度)
api:
螢幕快照 2014-07-03 下午04.01.37
螢幕快照 2014-07-03 下午04.05.51
特殊情況:
  • 如果任一參數為NaN,那麼結果為NaN。
  • 如果第一個參數是正零,第二個參數是正的,或者第一個參數為正的有限值,第二個參數是正無窮大,那麼結果是正零。
  • 如果第一個參數是負零,並且第二個參數是正的,或者第一個參數是負的有限值,第二個參數是正無窮大,那麼結果是負零。
  • 如果第一個參數是正零,第二個參數為負,或者第一個參數為正的有限值,第二個參數是負無窮大,那麼結果是 最接近值PI
  • 如果第一個參數是負零,並且第二個參數為負,或者第一個參數是負的有限值,第二個參數是負無窮大,那麼結果是 值最接近- 圓周率
  • 如果第一個參數為正,第二個參數是正零或負零,或者第一個參數是正無窮大,第二個參數是有限的,那麼結果是 最接近值PI / 2。
  • 如果第一個參數為負,第二個參數是正零或負零,或者第一個參數為負無窮大,並且第二個參數是有限的,那麼結果是 最接近值- PI / 2。
  • 如果兩個參數都是正無窮大,那麼結果是 最接近值PI / 4。
  • 如果第一個參數是正無窮大,第二個參數是負無窮大,那麼結果是 最接近3 *值PI / 4。
  • 如果第一個參數為負無窮大,並且第二個參數是正無窮大,那麼結果是最接近值- PI / 4。
  • 如果兩個參數都是負無窮大,那麼結果是 最接近-3 *值PI / 4。
而 X : 橫坐標 , Y : 縱坐標
源碼:
螢幕快照 2014-07-03 下午04.12.09
這倒是和atan的源碼挺像的(注意double哦~)[笑]
Demo:
螢幕快照 2014-07-04 下午03.11.41
簡單吧?[微笑]
cbrt(返回立方根)
這個應該都知是啥吧⋯⋯
api:
螢幕快照 2014-07-04 下午03.15.49
看,簡單的一句說明一切[^.^]
螢幕快照 2014-07-04 下午03.17.19
這裡因為是立方,所以不需要擔心負數會變成正數(e.g. -2^2 = 4)喲
特殊情況:
如果參數為NaN,那麼結果為NaN。
如果參數為無窮大,那麼結果是相同的符號作為參數的無窮大。
如果參數是零,那麼結果是相同的符號作為參數為零。
(計算結果為1 ulp範圍內的精確結果。)
源碼:
螢幕快照 2014-07-04 下午03.24.41
嗯⋯⋯看來真的有必要為StrictMath.class開一篇了⋯⋯
Demo:
螢幕快照 2014-07-04 下午03.26.30

ceil(回傳大於或等於參數的最小整數值)
api:
螢幕快照 2014-07-04 下午03.28.36
螢幕快照 2014-07-04 下午03.29.54
特殊情況:
如果參數值已經等於某個整數,那麼結果是一樣。
如果參數是NaN或無窮大或正零或負零,那麼結果是一樣。
如果參數值小於零但大於-1.0,那麼結果是負零。
注意,Math.ceil(x)的值是-Math.floor(-x)的確切值。
說白了就是四捨五入⋯⋯
源碼:
螢幕快照 2014-07-04 下午03.31.55
沒啥好說的,就留在StrictMath.class裡說吧
Demo:
螢幕快照 2014-07-04 下午03.34.51

好吧,這章就到這裡了,本來這章的內容是在上一章的,不過電腦出了點事,沒了一半資料[哭],就放這章了[笑],下章見!

No comments:

Post a Comment