JavaRush /Java blogi /Random-UZ /Java matematika sinfi va uning usullari

Java matematika sinfi va uning usullari

Guruhda nashr etilgan
Ushbu maqolada biz Java tilidagi matematika sinfi haqida qisqacha ma'lumot beramiz. Keling, ushbu sinfning usullari va ulardan qanday foydalanish haqida gapiraylik. Math sinfi java.lang paketida joylashgan bo'lib, turli xil matematik hisoblarni bajarish uchun statik usullar to'plamini taqdim etadi. Quyida matematika sinfi foydali bo'lishi mumkin bo'lgan hisob-kitoblarga misollar keltirilgan:
  • Mutlaq qiymatlarni hisoblash (modul qiymatlari)
  • Trigonometrik funktsiyalarning qiymatlarini hisoblash (sinuslar, kosinuslar va boshqalar).
  • Turli darajalarga ko'tarilish
  • Turli darajadagi ildizlarni ajratib olish
  • Tasodifiy raqamlarni yaratish
  • Yaxlitlash
  • Va boshqalar.
Quyida biz Java Math klassi yuqorida sanab o'tilgan muammolarni hal qilishda qanday yordam berishini ko'rib chiqishga harakat qilamiz. Java Math sinfi va uning usullari - 1Keling, qiymat modulini hisoblash imkonini beruvchi usullar bilan sinfni tahlil qilishni boshlaylik. Buning uchun abs usuli javobgardir. Bu usul haddan tashqari yuklangan va Math sinfida quyidagi farqlar mavjud:
  • statik juft abs (ikki marta a)
  • statik float abs (float a)
  • statik int abs(int a)
  • statik uzun abs (uzun a)
Foydalanish misoli:
public static void main(String[] args) {
        System.out.println(Math.abs(-1));      // 1
        System.out.println(Math.abs(-21.8d));  // 21.8
        System.out.println(Math.abs(4532L));   // 4532
        System.out.println(Math.abs(5.341f));  // 5.341
    }

Trigonometrik funktsiyalarning qiymatlarini hisoblash

Matematik klassi sizga turli trigonometrik funktsiyalarni hisoblash imkonini beradi - sinuslar, kosinuslar, tangenslar va boshqalar. Usullarning to'liq ro'yxatini rasmiy hujjatlar veb-saytida topishingiz mumkin . Quyida ushbu usullarning ro'yxati keltirilgan:
  • statik ikki tomonlama gunoh (ikki marta a)
  • statik ikki tomonlama cos (ikki marta a)
  • statik ikki marta tan (ikki marta a)
  • statik juft asin (double a)
  • statik juft akos (ikki marta a)
  • statik juft atan (ikki marta a)
Hisoblash usullari: sinus, kosinus, tangens, arksinus, arkkosinus, arktangens. Har bir usul “a” burchagi qiymatini hisoblab chiqadi. Ushbu parametr har bir usulga o'tkaziladi va har bir holatda radyanlarda o'lchanadi (biz o'rganib qolganimizdek, darajalarda emas). Bu yerda ikkita yangilik bor, yaxshi va yomon. Yaxshisidan boshlaylik. Matematik sinfida radianlarni darajaga va darajalarni radianga aylantirish usullari mavjud:
  • statik ikki darajali daraja (ikki marta angrad)
  • statik ikki baravar radian (ikki angdeg)
Bu erda toDegrees usuli radianlarda o'lchangan angrad burchagini darajaga aylantiradi. ToRadians usuli, aksincha, gradus bilan o'lchangan angdeg burchagini radianga aylantiradi. Yomon xabar shundaki, bu qandaydir xato bilan sodir bo'ladi. Sinuslar va kosinuslarni hisoblash misoli:
public static void main(String[] args) {
        System.out.println(Math.sin(Math.toRadians(0)));
        System.out.println(Math.sin(Math.toRadians(30)));
        System.out.println(Math.sin(Math.toRadians(90)));

        System.out.println(Math.cos(Math.toRadians(0)));
        System.out.println(Math.cos(Math.toRadians(30)));
        System.out.println(Math.cos(Math.toRadians(90)));
    }
Dastur chiqadi:

0.0
0.49999999999999994
1.0

1.0
0.8660254037844387
6.123233995736766E-17
Bu qisman darajadan radianga o'tkazishdagi xatolar tufayli sinuslar va kosinuslar jadvallariga to'liq mos kelmaydi.

Eksponentsiya

Raqamni bir darajaga ko'tarish uchun Math klassi quyidagi imzoga ega bo'lgan pow usulini taqdim etadi:
static double pow(double a, double b)
Ushbu usul "a" parametrini "b" quvvatiga oshiradi. Misollar:
public static void main(String[] args) {
        System.out.println(Math.pow(1,2)); // 1.0
        System.out.println(Math.pow(2,2)); // 4.0
        System.out.println(Math.pow(3,2)); // 9.0
        System.out.println(Math.pow(4,2)); // 16.0
        System.out.println(Math.pow(5,2)); // 25.0

        System.out.println(Math.pow(1,3)); // 1.0
        System.out.println(Math.pow(2,3)); // 8.0
        System.out.println(Math.pow(3,3)); // 27.0
        System.out.println(Math.pow(4,3)); // 64.0
        System.out.println(Math.pow(5,3)); // 125.0
    }

Ildiz qazib olish

Matematika sinfi kvadrat va kub ildizlarini olish usullarini taqdim etadi. Ushbu protsedura uchun quyidagi usullar javobgardir:
  • statik ikki sqrt (ikki marta a)
  • statik ikki tomonlama cbrt (double a)
sqrt usuli kvadrat ildizni, cbrt usuli esa kub ildizini oladi. Misollar:
public static void main(String[] args) {
        System.out.println(Math.sqrt(4));   // 2.0
        System.out.println(Math.sqrt(9));   // 3.0
        System.out.println(Math.sqrt(16));  // 4.0

        System.out.println(Math.cbrt(8));   // 2.0
        System.out.println(Math.cbrt(27));  // 3.0
        System.out.println(Math.cbrt(125)); // 5.0
    }

Tasodifiy raqamlarni yaratish

Tasodifiy sonlarni yaratish uchun Math sinfi tasodifiy usulni taqdim etadi. Ushbu usul 0,0 dan 1,0 gacha bo'lgan oraliqda tasodifiy musbat haqiqiy (ikki marta) sonni hosil qiladi. Usul imzosi quyidagicha ko'rinadi:
public static double random()
Keling, misollarni ko'rib chiqaylik:
public static void main(String[] args) {
    for (int i = 0; i < 5; i++) {
        System.out.println(Math.random());
    }
}
Asosiy usulni bajargandan so'ng, konsolda quyidagilar ko'rsatiladi:

0.37057465028778513
0.2516253742011597
0.9315649439611121
0.6346725713527239
0.7442959932755443
Bir oz manipulyatsiya bilan siz ma'lum bir diapazonda joylashgan butun tasodifiy sonlarni olish uchun Math sinfining tasodifiy usulidan foydalanishingiz mumkin. Mana, min va max ikkita argumentni oladigan va min (shu jumladan) dan maksimal (shu jumladan) oralig‘ida joylashgan tasodifiy butun sonni qaytaradigan funksiyaga misol:
static int randomInARange(int min, int max) {
    return  (int) (Math.random() * ((max - min) + 1)) + min;
}
RandomInARange usulini sinab ko'radigan asosiy usulni yozamiz:
public class MathExample {


    public static void main(String[] args) {
        // Карта, в которой мы будем хранить количество выпадений Howого-то числа
        Map<Integer, Integer> map = new TreeMap<>();

        // За 10000 операций
        for (int i = 0; i < 10000; i++) {

            // Сгенерируем рандомное число от -10 включительно до 10 включительно
            final Integer randomNumber = randomInARange(-10, 10);


            if (!map.containsKey(randomNumber)) {
                // Если карта еще не содержит "выпавшего случайного числа"
                // Положим его в карту с кол-вом выпадений = 1
                map.put(randomNumber, 1);
            } else {
                // Иначе, увеличим количество выпадений данного числа на 1
                map.put(randomNumber, map.get(randomNumber) + 1);
            }
        }

        // Выведем на экран содержимое карты в формате ключ=[meaning]
        for (Map.Entry<Integer, Integer> entry : map.entrySet()){
            System.out.println(String.format("%d=[%d]", entry.getKey(), entry.getValue()));
        }
    }

    static int randomInARange(int min, int max) {
        return  (int) (Math.random() * ((max - min) + 1)) + min;
    }
}
Asosiy usulni ishga tushirgandan so'ng, chiqish quyidagicha ko'rinishi mumkin:

-10=[482]
-9=[495]
-8=[472]
-7=[514]
-6=[457]
-5=[465]
-4=[486]
-3=[500]
-2=[490]
-1=[466]
0=[458]
1=[488]
2=[461]
3=[470]
4=[464]
5=[463]
6=[484]
7=[479]
8=[459]
9=[503]
10=[444]

Process finished with exit code 0

Yaxlitlash

Java-da raqamlarni yaxlitlash uchun vositalardan biri Math sinfining usullari hisoblanadi. Aniqrog'i, dumaloq, shift va zamin usullari:
  • statik uzun dumaloq (ikki marta a)
  • statik int round(float a)
  • statik ikki qavatli (ikki qavatli a)
  • statik ikki qavatli shift (er-xotin a)
Dumaloq usul - odatdagidek o'rtacha odamga dumaloq. Agar sonning kasr qismi 0,5 dan katta yoki teng bo'lsa, son yuqoriga yaxlitlanadi, aks holda pastga yaxlitlanadi. Qavat usuli har doim, kasr qismining qiymatlaridan qat'i nazar, raqamni pastga (salbiy cheksizlik tomon) yaxlitlaydi. Shift usuli, aksincha, kasr qismining qiymatlaridan qat'i nazar, raqamlarni yuqoriga yaxlitlaydi (musbat cheksizlik tomon). Keling, misollarni ko'rib chiqaylik:
public static void main(String[] args) {
    System.out.println(Math.round(1.3)); // 1
    System.out.println(Math.round(1.4)); // 1
    System.out.println(Math.round(1.5)); // 2
    System.out.println(Math.round(1.6)); // 2

    System.out.println(Math.floor(1.3)); // 1.0
    System.out.println(Math.floor(1.4)); // 1.0
    System.out.println(Math.floor(1.5)); // 1.0
    System.out.println(Math.floor(1.6)); // 1.0

    System.out.println(Math.ceil(1.3)); // 2.0
    System.out.println(Math.ceil(1.4)); // 2.0
    System.out.println(Math.ceil(1.5)); // 2.0
    System.out.println(Math.ceil(1.6)); // 2.0
}

Xulosa

Ushbu maqolada biz matematika darsiga yuzaki nazar tashladik. Biz ushbu sinfdan qanday foydalanishni ko'rib chiqdik:
  • Modul qiymatlarini hisoblash;
  • Trigonometrik funktsiyalarning qiymatlarini hisoblash;
  • Raqamlarni kuchga ko'tarish;
  • Kvadrat va kub ildizlarini ajratib oling;
  • Tasodifiy raqamlarni yaratish;
  • Dumaloq raqamlar.
Ushbu sinfda boshqa ko'plab qiziqarli usullar mavjud. Qaysi hujjatlar rasmiy veb-saytida topish mumkin . Xo'sh, birinchi tanishish uchun yuqorida sanab o'tilgan usullar juda etarli.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION