1. Fungsi trigonometri di Jawa

Ketika kami mempelajari angka pembulatan sebelumnya, kami berkenalan dengan Mathkelas dan beberapa metodenya. Sekarang kita akan melihat kelas ini secara lebih rinci.

Sesuai dengan namanya, Mathkelas berisi metode untuk operasi matematika yang paling sering digunakan oleh pemrogram. Inilah yang paling menarik:

metode Keterangan
double sin(double d)
Mengembalikan sinus sudut d, dalam radian
double cos(double d)
Mengembalikan kosinus sudut d, dalam radian
double tan(double d)
Mengembalikan tangen sudut d, dalam radian
double asin(double d)
Mengembalikan arcsine
double acos(double d)
Mengembalikan arccosine
double atan(double d)
Mengembalikan arctangen
double sinh(double d)
Mengembalikan sinus hiperbolik
double cosh(double d)
Mengembalikan kosinus hiperbolik
double tanh(double d)
Mengembalikan tangen hiperbolik

Metode , dan mengambil sudut yang dinyatakan dalam radian. Untuk mengonversi sudut dari derajat ke radian dan sebaliknya, kelas menawarkan dua metode khusus:Math.sin()Math.cos()Math.tan()Math

metode Keterangan
double toRadians(double angdeg)
Mengonversi sudut dari derajat ke radian
double toDegrees(double angrad)
Mengonversi sudut dari radian ke derajat

Omong-omong, selain metode, Mathkelas juga memiliki dua variabel konstan (bidang statis kelas):

Konstan Keterangan
double Math.PI
Konstanta "Pi" sama dengan3.141592653589793
double Math.E
Konstanta "E" sama dengan2.718281828459045

Semua fungsi ini bisa sangat berguna bagi Anda jika Anda memutuskan untuk membuat game sendiri, bekerja dengan grafik, atau sekadar menghitung panjang jalur di peta.

Misalnya, jika Anda ingin menghitung sin(45°), berikut cara melakukannya:

Math.sin( Math.toRadians(45) )

Berikut contohnya:

public class Main
{
   public static int N = 10;

   public static void drawValue(double y)
   {
     int value = (int) (y * N) + N;
     for (int i = 0; i < 2 * N; i++)
     {
       char c = i == N ? '|': '.';
       if (i == value)
         c = '*';
       System.out.print(c);
     }
     System.out.println();
   }

   public static void main(String[] args)
   {
     for (int i = 0; i < 10 * N; i++)
     {
       double x = i * 1.0 / N;
       double y = Math.sin(x);
       drawValue(y);
     }
   }
}


2. Fungsi aljabar di Jawa

Dalam kebanyakan kasus, matematika sekolah menengah sudah cukup untuk seorang programmer: bahkan sinus dan cosinus sangat jarang ditemukan dalam kode. Paling sering mereka dibutuhkan saat bekerja dengan game, peta, atau mesin game. 90% programmer tidak pernah menemukan ini.

Namun selain geometri, programmer terkadang harus menggunakan fungsi aljabar. Dan, tentu saja, Mathkelas berisi yang paling umum:

metode Keterangan
double sqrt(double a)
akar kuadrat daria
double cbrt(double a)
akar kubik daria
double pow(double a, double b)
eksponensial:ab
double exp(double a)
eksponensial (bilangan Euler dipangkatkan):ea
double log(double a)
logaritma natural dari a:ln(a)
double log10(double a)
logaritma basis-10 dari a:log10(a)
double log1p(double x)
logaritma natural dari x + 1:ln(x + 1)
double expm1(double x)
ex-1

Jika Anda menginginkan akar kuadrat atau pangkat tiga dari sebuah angka, metode sqrt(a)dan cbrt(a)siap melayani Anda.

Akar kuadrat dapat dihitung sebagai berikut:

Math.sqrt(2)

Jika Anda ingin mendapatkan akar pangkat yang lebih tinggi, gunakan metode eksponensial: apangkat dari ¼adalah akar keempat, dll.

Math.pow(2, 0.25)

Untuk logaritma dan eksponen, ada metode log(a)(logaritma natural) dan exp(x)(eksponensial). Untuk menghitung logaritma basis-10, kita memiliki log10(a).

Jika Anda ingin logaritma angka bmenjadi base a, gunakan rumus sederhana ini:loga(b) = ln(b) / ln(a)

Metode yang berguna

Jika Anda melakukan perhitungan yang melibatkan nilai yang sangat kecil dari x, maka dua fungsi terakhir — log1p()dan expm1()— mungkin berguna bagi Anda.

Saat menambahkan variabel yang sangat kecil dan sangat besar double, Anda akan sering menemukan bahwa nilai yang sangat kecil diabaikan begitu saja (dibuang) sebagai tidak signifikan. Sebenarnya, ini akan terjadi jika Anda menggunakan metode log()and exp(). Untuk mengatasi ini, pemrogram membuat fungsi yang hanya mengembalikan "bagian penting kecil"

Contoh:

Misalkan Anda ingin menghitung logaritma natural dari 1 + x, xDimana . Anda tidak bisa begitu saja meneruskan nomor ini ke metode, karena jika Anda menambahkan dan , Anda mendapatkan . adalah angka yang sangat kecil sehingga akan dibuang sama sekali saat angka ditambahkan.10-20log()110-20110-20

Karena matematika sering melibatkan penghitungan log()angka yang mendekati 1, pemrogram menemukan cara untuk mengatasi masalah ini: alih-alih meneruskan angka itu sendiri ke metode, hanya meneruskan selisihnya dari 1.



3. Minimal dan maksimal

Dua fungsi yang lebih berguna adalah min(a, b)dan max(a, b). Seperti yang mungkin sudah Anda duga, yang pertama mengembalikan minimal dua angka:

Math.min(a, b)

Dan yang kedua mengembalikan maksimal dua angka:

Math.max(a, b)

Mengapa kita memerlukan fungsi-fungsi ini ketika Anda selalu dapat menulis ifatau bahkan menggunakan operator ternary (a < b ? a: b)?

Ini semua tentang keterbacaan kode. Terkadang kode Anda dipenuhi dengan ifpernyataan dan Anda ingin menggunakan notasi yang lebih ringkas. Mari kita bandingkan:

Kode Keterangan
int x = 0;
if (x-5+y*20 < x*x+y*y)
   x = x-5+y*20;
else
   x = x*x+y*y;
Menggunakan if-elsepernyataan (cara terpanjang untuk menulisnya)
int x = x-5+y*20 < x*x+y*y ? x-5+y*20 : x*x+y*y;
Menggunakan operator ternary Cons:
- kode besar
- perhitungan dilakukan dua kali
int a = x-5+y*20;
int b = x*x+y*y;
int x = a < b ? a : b;
Ini adalah cara yang bagus untuk menulisnya, tetapi sedikit berlebihan
int x = Math.min(x-5+y*20, x*x+y*y);
Tepat 🙂

4. Minimal dan maksimal beberapa angka

Ada cara hebat lainnya untuk menggunakan metode min()and max().

Untuk menghitung minimum (atau maksimum) dari beberapa angka atau variabel. Sangat nyaman untuk membuat panggilan bersarang ke metode ini.

Berikut cara mencari minimal 3 angka:

Math.min(a, Math.min(b, c))

Terus? Ini sangat mudah: hitung minimal dua angka, lalu kembalikan minimal angka ini dan angka ketiga.

Minimal empat angka diperoleh dengan cara yang sama:

Math.min(a, Math.min(b, Math.min(с, d)))

Yang mengatakan, kita dapat menulis rumus ini sedikit lebih jelas:

Math.min(Math.min(a, b), Math.min(c, d))

Semuanya bekerja sama untuk max()metode ini.

Menggunakan if-elseoperator atau operator ternary akan membuat cuplikan kode ini sedikit lebih rumit. Tetapi menggunakan metode min()dan max()itu sempurna.