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
です。
まとめ
イミワカラン