2018年4月21日土曜日

kotlin.math を使う

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

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

試しに全部使ってみました。基本 Float を使ってますが Double も用意されています。
  1. package net.yanzm.sample  
  2.   
  3. import kotlin.math.*  
  4.   
  5. fun main(args: Array<string>) {  
  6.   
  7.     println(E)  // 2.718281828459045  
  8.     println(PI) // 3.141592653589793  
  9.   
  10.     // unit in the last place  
  11.     println(PI.ulp) // 4.440892098500626E-16  
  12.   
  13.     // the remainder of division  
  14.     println(10f.IEEErem(3f)) // 1.0  
  15.   
  16.     //  
  17.     // sign and absolute value  
  18.     //  
  19.   
  20.     println(10.sign)    // 1  
  21.     println((-10).sign) // -1  
  22.   
  23.     println(sign(10f))  // 1.0  
  24.     println(sign(-10f)) // -1.0  
  25.   
  26.     println((1.1f).withSign(-2f))  // -1.1  
  27.     println((1.1f).withSign(2f))   // 1.1  
  28.     println((-1.1f).withSign(-2f)) // -1.1  
  29.     println((-1.1f).withSign(2f))  // 1.1  
  30.   
  31.     println(10.absoluteValue)     // 10  
  32.     println((-10).absoluteValue)  // 10  
  33.   
  34.     println(abs(10))   // 10  
  35.     println(abs(-10))  // 10  
  36.   
  37.     //  
  38.     // rounding  
  39.     //  
  40.   
  41.     println(ceil(1.1f))  // 2.0  
  42.     println(ceil(1.5f))  // 2.0  
  43.     println(ceil(-1.1f)) // -1.0  
  44.     println(ceil(-1.5f)) // -1.0  
  45.   
  46.     println(floor(1.1f))  // 1.0  
  47.     println(floor(1.5f))  // 1.0  
  48.     println(floor(-1.1f)) // -2.0  
  49.     println(floor(-1.5f)) // -2.0  
  50.   
  51.     println(truncate(1.1f))  // 1.0  
  52.     println(truncate(1.5f))  // 1.0  
  53.     println(truncate(-1.1f)) // -1.0  
  54.     println(truncate(-1.5f)) // -1.0  
  55.   
  56.     println(round(1.1f))  // 1.0  
  57.     println(round(1.5f))  // 2.0  
  58.     println(round(-1.1f)) // -1.0  
  59.     println(round(-1.5f)) // -2.0  
  60.   
  61.     println((1.1f).roundToInt())  // 1  
  62.     println((1.5f).roundToInt())  // 2  
  63.     println((-1.1f).roundToInt()) // -1  
  64.     println((-1.5f).roundToInt()) // -2  
  65.   
  66.     println((1.1f).roundToLong())  // 1L  
  67.     println((1.5f).roundToLong())  // 2L  
  68.     println((-1.1f).roundToLong()) // -1L  
  69.     println((-1.5f).roundToLong()) // -2L  
  70.   
  71.     //  
  72.     // trigonometric  
  73.     //  
  74.   
  75.     println(sin(PI / 2))  // 1.0  
  76.     println(asin(1f))  // 1.5707964  
  77.   
  78.     println(cos(PI))     // -1.0  
  79.     println(acos(-1f)) // 3.1415927  
  80.   
  81.     println(tan(PI / 4))      // 0.9999999999999999  
  82.     println(atan(1f))         // 0.7853982  
  83.     println(atan2(5f, 5f)) // 0.7853982  
  84.   
  85.     //  
  86.     // hyperbolic  
  87.     //  
  88.   
  89.     println(sinh(0.8813736f)) // 1.0  
  90.     println(asinh(1f)) // 0.8813736  
  91.   
  92.     println(cosh(0f))  // 1.0  
  93.     println(acosh(1f)) // 0.0  
  94.   
  95.     println(tanh(0.54930615f))  // 0.5  
  96.     println(atanh(0.5f))        // 0.54930615  
  97.   
  98.     //  
  99.     // exponentiation and power  
  100.     //  
  101.   
  102.     println(exp(0f)) // 1.0  
  103.     println(exp(1f)) // 2.7182817  
  104.   
  105.     println(expm1(0f)) // 0.0  
  106.     println(expm1(1f)) // 1.7182817  
  107.   
  108.     println(2f.pow(2)) // 4.0  
  109.   
  110.     println(sqrt(4f))  // 2.0  
  111.   
  112.     // sqrt(x^2 + y^2)  
  113.     println(hypot(3f, 4f)) // 5.0  
  114.   
  115.     //  
  116.     // logarithmic  
  117.     //  
  118.   
  119.     println(ln(E))   // 1.0  
  120.     println(ln(1f)) // 0.0  
  121.   
  122.     // ln(x + 1)  
  123.     println(ln1p(E - 1)) // 1.0  
  124.     println(ln1p(0f))    // 0.0  
  125.   
  126.     println(log(10f, 10f)) // 1.0  
  127.     println(log(1f, 10f))  // 0.0  
  128.   
  129.     println(log(2f, 2f))  // 1.0  
  130.     println(log(1f, 2f))  // 0.0  
  131.   
  132.     // log(x, 10)  
  133.     println(log10(10f)) // 1.0  
  134.     println(log10(1f))  // 0.0  
  135.   
  136.     // log(x, 2)  
  137.     println(log2(2f))  // 1.0  
  138.     println(log2(1f))  // 0.0  
  139.   
  140.     //  
  141.     // max, min  
  142.     //  
  143.   
  144.     println(max(12))   // 2  
  145.     println(max(1f, 2f)) // 2.0  
  146.   
  147.     println(min(12))   // 1  
  148.     println(min(1f, 2f)) // 1.0  
  149.   
  150.     //  
  151.     // nearest  
  152.     //  
  153.   
  154.     println((1.1f).nextDown())  // 1.0999999  
  155.     println((-1.1f).nextDown()) // -1.1000001  
  156.   
  157.     println((1.1f).nextUp())    // 1.1000001  
  158.     println((-1.1f).nextUp())   // -1.0999999  
  159.   
  160.     println((1.1f).nextTowards(0f))  // 1.0999999  
  161.     println((-1.1f).nextTowards(0f)) // -1.0999999  
  162.   
  163. }  
  164. </string>  



0 件のコメント:

コメントを投稿