2018年4月21日土曜日

kotlin.math を使う

PI などの定数や sin などの計算をするとき Java の Math クラスを使うことが多いと思いますが、Kotlin 1.2 から数学関数と定数を提供する kotlin.math パッケージが追加されています。

この中には E や PI などの定数、三角関数、双曲線関数、べき乗、対数、丸め、符号と絶対値が含まれています。

試しに全部使ってみました。基本 Float を使ってますが Double も用意されています。 package net.yanzm.sample import kotlin.math.* fun main(args: Array) { println(E) // 2.718281828459045 println(PI) // 3.141592653589793 // unit in the last place println(PI.ulp) // 4.440892098500626E-16 // the remainder of division println(10f.IEEErem(3f)) // 1.0 // // sign and absolute value // println(10.sign) // 1 println((-10).sign) // -1 println(sign(10f)) // 1.0 println(sign(-10f)) // -1.0 println((1.1f).withSign(-2f)) // -1.1 println((1.1f).withSign(2f)) // 1.1 println((-1.1f).withSign(-2f)) // -1.1 println((-1.1f).withSign(2f)) // 1.1 println(10.absoluteValue) // 10 println((-10).absoluteValue) // 10 println(abs(10)) // 10 println(abs(-10)) // 10 // // rounding // println(ceil(1.1f)) // 2.0 println(ceil(1.5f)) // 2.0 println(ceil(-1.1f)) // -1.0 println(ceil(-1.5f)) // -1.0 println(floor(1.1f)) // 1.0 println(floor(1.5f)) // 1.0 println(floor(-1.1f)) // -2.0 println(floor(-1.5f)) // -2.0 println(truncate(1.1f)) // 1.0 println(truncate(1.5f)) // 1.0 println(truncate(-1.1f)) // -1.0 println(truncate(-1.5f)) // -1.0 println(round(1.1f)) // 1.0 println(round(1.5f)) // 2.0 println(round(-1.1f)) // -1.0 println(round(-1.5f)) // -2.0 println((1.1f).roundToInt()) // 1 println((1.5f).roundToInt()) // 2 println((-1.1f).roundToInt()) // -1 println((-1.5f).roundToInt()) // -2 println((1.1f).roundToLong()) // 1L println((1.5f).roundToLong()) // 2L println((-1.1f).roundToLong()) // -1L println((-1.5f).roundToLong()) // -2L // // trigonometric // println(sin(PI / 2)) // 1.0 println(asin(1f)) // 1.5707964 println(cos(PI)) // -1.0 println(acos(-1f)) // 3.1415927 println(tan(PI / 4)) // 0.9999999999999999 println(atan(1f)) // 0.7853982 println(atan2(5f, 5f)) // 0.7853982 // // hyperbolic // println(sinh(0.8813736f)) // 1.0 println(asinh(1f)) // 0.8813736 println(cosh(0f)) // 1.0 println(acosh(1f)) // 0.0 println(tanh(0.54930615f)) // 0.5 println(atanh(0.5f)) // 0.54930615 // // exponentiation and power // println(exp(0f)) // 1.0 println(exp(1f)) // 2.7182817 println(expm1(0f)) // 0.0 println(expm1(1f)) // 1.7182817 println(2f.pow(2)) // 4.0 println(sqrt(4f)) // 2.0 // sqrt(x^2 + y^2) println(hypot(3f, 4f)) // 5.0 // // logarithmic // println(ln(E)) // 1.0 println(ln(1f)) // 0.0 // ln(x + 1) println(ln1p(E - 1)) // 1.0 println(ln1p(0f)) // 0.0 println(log(10f, 10f)) // 1.0 println(log(1f, 10f)) // 0.0 println(log(2f, 2f)) // 1.0 println(log(1f, 2f)) // 0.0 // log(x, 10) println(log10(10f)) // 1.0 println(log10(1f)) // 0.0 // log(x, 2) println(log2(2f)) // 1.0 println(log2(1f)) // 0.0 // // max, min // println(max(1, 2)) // 2 println(max(1f, 2f)) // 2.0 println(min(1, 2)) // 1 println(min(1f, 2f)) // 1.0 // // nearest // println((1.1f).nextDown()) // 1.0999999 println((-1.1f).nextDown()) // -1.1000001 println((1.1f).nextUp()) // 1.1000001 println((-1.1f).nextUp()) // -1.0999999 println((1.1f).nextTowards(0f)) // 1.0999999 println((-1.1f).nextTowards(0f)) // -1.0999999 }


0 件のコメント:

コメントを投稿