JavaのMathクラスのまとめ

#JavaのMathクラス
プログラミングでコードを読んでいるとMathクラスがたびたび出てくるので備忘録として。。。
**結構抜粋して書いてあります。網羅している訳ではありません。**

#フィールド（変数）

##E
自然対数の底(ネイピア数、オイラー数)`e`に最も近いdouble値、`2.718281828459045`です。

##PI
円周率`π`に最も近いdouble値、`3.141592653589793`です。

#メソッド（関数）

##abs
|引数|戻り値|
|:------:|:------:|
|double|double|
|float|float|
|int|int|
|long|long|
絶対値を求めるメソッド。
`Math.abs(-5)`は`5`です。

##max
|1番目の引数|2番目の引数|戻り値|
|:------:|:------:|:------:|
|double|double|double|
|float|float|float|
|int|int|int|
|long|long|long|
引数に設定した2つの数字の大きいほうを返します。
`Math.max(2, 7)`は`7`です。

##min
|1番目の引数|2番目の引数|戻り値|
|:------:|:------:|:------:|
|double|double|double|
|float|float|float|
|int|int|int|
|long|long|long|
maxの逆で、引数に設定した2つの数字の小さいほうを返します。
`Math.max(10, 4)`は`4`です。

##pow
|1番目の引数|2番目の引数|戻り値|
|:------:|:------:|:------:|
|double|double|double|
累乗を求めます。
`Math.pow(a, b)`は`a^b`を返します。
つまり、`Math.pow(3.0, 4.0)`は`81.0`です。

##sqrt
|引数|戻り値|
|:------:|:------:|
|double|double|
丸められた正の平方根を求めます。
要するにルートっちゅうやつです。
引数を`a`とすると、`x^2 = a`となるような数`x`を求めます。
`Math.sqrt(9.0)`は`3.0`です。
`3^2 = 9`ですね！

##cbrt
|引数|戻り値|
|:------:|:------:|
|double|double|
立方根を求めるものです。
引数を`a`とすると、`x^3 = a`となるような数`x`を求めます。
`Math.cbrt(8.0)`は`2.0`です。
`2^3 = 8`ですね！

##ceil
|引数|戻り値|
|:------:|:------:|
|double|double|
引数を切り上げます。
厳密にいうと、「引数以上の数で計算上の整数と等しい、負の無限大に最も近い数」を返します。
`Math.ceil(1.34)`は`2.0`です。
`Math.ceil(-3.89)`は`-3.0`です。

##floor
|引数|戻り値|
|:------:|:------:|
|double|double|
引数を切り捨てます。
厳密にいうと、「引数以下の数で計算上の整数と等しい、正の無限大に最も近い数」を返します。
`Math.floor(1.34)`は`1.0`です。
`Math.floor(-3.89)`は`-4.0`です。

##round
|引数|戻り値|
|:------:|:------:|
|double|long|
|float|int|
引数を四捨五入した数を返します。
実際、内部では何かビット演算をやってますが、**四捨五入**です！
`Math.round(1.34)`は`1`です。
`Math.round(-3.89)`は`-4`です。

##rint
|引数|戻り値|
|:------:|:------:|
|double|double|
引数を四捨五入した数を返します。
`round`との違いは引数と戻り値の型のみです。

##toRadians
|引数|戻り値|
|:------:|:------:|
|double|double|
度数法(単位：`°`, `度`)で表された引数を弧度法(単位：`ラジアン`)に変換します。
※一般的に、度数法と弧度法の変換は正確ではありません。
ちなみに、以下の式でも変換できます。

```
ラジアン = 度 * π / 180
```

##toDegrees
|引数|戻り値|
|:------:|:------:|
|double|double|
`toRadians`の逆で、弧度法で表された引数を度数法に変換します。
※こちらも`toRadians`と同じく正確ではありません。
ちなみに、以下の式でも変換できます。

```
度 = ラジアン * 180 / π
```

##sin
|引数|戻り値|
|:------:|:------:|
|double|double|
指定された角度の正弦(サイン)を返します。
引数は弧度法で表す必要があります。
つまり、`sin30°`は`Math.sin(Math.toRadians(30.0))`で表されます。
しかし、少なくとも私の環境では`Math.sin(Math.toRadians(30.0))`を実行すると`0.49999999999999994`が返ってきたので、適切な丸め処理が必要だと考えます。

##cos
|引数|戻り値|
|:------:|:------:|
|double|double|
指定された角度の余弦(コサイン)を返します。
引数は弧度法で表す必要があります。
つまり、`cos60°`は`Math.cos(Math.toRadians(60.0))`で表されます。
こちらも`0.5000000000000001`が返ってきました。丸めましょう。

##tan
|引数|戻り値|
|:------:|:------:|
|double|double|
指定された角度の正接(タンジェント)を返します。
引数は弧度法で表す必要があります。
つまり、`tan45°`は`Math.tan(Math.toRadians(45.0))`で表されます。
こちらも`0.9999999999999999`が返ってきました。

##asin
|引数|戻り値|
|:------:|:------:|
|double|double|
指定された値の逆正弦(アーク・サイン)を返します。
返される角度の範囲は、`-π/2 ≦ x ≦ π/2`です。
例えば引数を`a`とすると、`sinx = a`となるような、弧度法で表された角の大きさ`x`を求めます。
`Math.asin(0.5)`は`0.5235987755982989`(≒`π/6`)です。

##acos
|引数|戻り値|
|:------:|:------:|
|double|double|
指定された値の逆余弦(アーク・コサイン)を返します。
返される角度の範囲は、`0.0 ≦ x ≦ π`です。
例えば引数を`a`とすると、`cosx = a`となるような、弧度法で表された角の大きさ`x`を求めます。
`Math.acos(0.5)`は`1.0471975511965979`(≒`π/3`)です。

##atan
|引数|戻り値|
|:------:|:------:|
|double|double|
指定された値の逆正接(アーク・タンジェント)を返します。
返される角度の範囲は、`-π/2 ≦ x ≦ π/2`です。
例えば引数を`a`とすると、`tanx = a`となるような、弧度法で表された角の大きさ`x`を求めます。
`Math.atan(1.0)`は`0.7853981633974483`(≒`π/4`)です。

##atan2
|1番目の引数|2番目の引数|戻り値|
|:------:|:------:|:------:|
|double|double|double|
直交座標から極座標へ変換したときの角を返します。
1番目の引数は`y`座標、2番目の引数は`x`座標です。(**順番注意**)
つまり、「直交座標において、『原点と点(x, y)を結ぶ線分』と『x軸の正の部分』がなす角」を弧度法で返します。
`Math.atan2(Math.sqrt(3.0), 1.0)`は`1.0471975511965976`(≒`π/3`)です。

##random
|引数|戻り値|
|:------:|:------:|
|---|double|
0.0以上で1.0より小さい、ランダムな正の値を返します。
`java.util.Random()`と全く同じです。

##addExtract
|1番目の引数|2番目の引数|戻り値|
|:------:|:------:|:------:|
|int|int|int|
|long|long|long|
引数の合計を返します。
結果がintまたはlongをオーバーフローする場合は例外をスローします。
`Math.addExact(1, 5)`は`6`です。

##subtractExtract
|1番目の引数|2番目の引数|戻り値|
|:------:|:------:|:------:|
|int|int|int|
|long|long|long|
引数の差分を返します。
結果がintまたはlongをオーバーフローした場合は例外をスローします。
`Math.subtractExact(1, 5)`は`-4`です。

##multiplyExact
|1番目の引数|2番目の引数|戻り値|
|:------:|:------:|:------:|
|int|int|int|
|long|long|long|
引数の積を返します。
結果がintまたはlongをオーバーフローした場合は例外をスローします。
`Math.multiplyExact(2, 5)`は`10`です。

##incrementExact
|引数|戻り値|
|:------:|:------:|
|int|int|
|long|long|
引数を1だけ増分して返します。
結果がintまたはlongをオーバーフローした場合は例外をスローします。
引数を`a`とすると`a++`とほぼ同じ処理です。

##decrementExact
|引数|戻り値|
|:------:|:------:|
|int|int|
|long|long|
引数を1だけ減分して返します。
結果がintまたはlongをオーバーフローした場合は例外をスローします。
引数を`a`とすると`a--`とほぼ同じ処理です。

##negateExact
|引数|戻り値|
|:------:|:------:|
|int|int|
|long|long|
引数の否定を返します。結果がintまたはlongをオーバーフローした場合は例外をスローします。
引数を`a`とすると`-a`が返ってくる処理とほぼ同じですが、引数に`Integer.MIN_VALUE`を入れると例外が発生します。(int型は`-2147483648`〜`2147483647`のため)

##toIntExact
|引数|戻り値|
|:------:|:------:|
|long|int|
long型の引数をintで返します。
その値がintに収まらない場合は例外をスローします。

##floorDiv
|1番目の引数|2番目の引数|戻り値|
|:------:|:------:|:------:|
|int|int|int|
|long|long|long|
商代数以下の最大(正の無限大にもっとも近い) 値を返します。
`Math.floorDiv(a, b)`は「`a`を`b`で割った商の`floor`」を返します。
例えば、`-5 ÷ 3`は`-1.6666...`なので、`Math.floorDiv(-5, 3)`は`-2`となります。

##floorMod
|1番目の引数|2番目の引数|戻り値|
|:------:|:------:|:------:|
|int|int|int|
|long|long|long|
引数のフロア・モジュラスを返します。
`Math.floorMod(a, b)`は「`a`を`b`で割り、その商を`floorDiv(a, b)`としたときのあまり」を返します。
例えば、`Math.floorDiv(-5, 3)`は`-2`なので、`Math.floorMod(-5, 3)`は`1`となります。
つまり、以下の式が成り立ちます。

```
b = Math.floorDiv(a, b) * b + Math.floorMod(a, b)
```

##exp
|引数|戻り値|
|:------:|:------:|
|double|double|
ネイピア数(オイラー数)`e`をdouble値で累乗した値を返します。
引数を`a`とすると、`e^a`が返されます。

##signum
|引数|戻り値|
|:------:|:------:|
|double|double|
|float|float|
引数をaとすると、
　`a<0` のとき、`-1.0`を、
　`a=0` のとき、`0.0`を、
　`a>0` のとき、`1.0`を返します。

##hypot
|1番目の引数|2番目の引数|戻り値|
|:------:|:------:|:------:|
|double|double|double|
`sqrt(x＾2 +y＾2)`を返します。
途中でオーバーフローやアンダーフローは発生しません。
つまり、`Math.hypot(x, y)`は「座標平面上で原点から点(x, y)までの距離」を返します。

##log
|引数|戻り値|
|:------:|:------:|
|double|double|
引数の自然対数値（底はe）を返します。
つまり、引数を`a`とすると、`e^x = a`となる値`x`を返します。

##log10
|引数|戻り値|
|:------:|:------:|
|double|double|
引数の常用対数値を返します。
つまり、引数を`a`とすると、`10^x = a`となる値`x`を返します。
`Math.log10(1000.0)`は`3.0`です。

#まとめ
　**ｲﾐﾜｶﾗﾝ**