JavaRush /จาวาบล็อก /Random-TH /คลาส Java Math และวิธีการของมัน

คลาส Java Math และวิธีการของมัน

เผยแพร่ในกลุ่ม
ในบทความนี้ เราจะให้ภาพรวมโดยย่อของคลาสคณิตศาสตร์ใน Java เรามาพูดถึงวิธีการของคลาสนี้และวิธีการใช้งานกันดีกว่า คลาส Math อยู่ในแพ็คเกจ java.lang และมีชุดวิธีการคงที่สำหรับการคำนวณทางคณิตศาสตร์ต่างๆ มากมาย ต่อไปนี้คือตัวอย่างการคำนวณที่อาจเป็นประโยชน์ในชั้นเรียนคณิตศาสตร์:
  • การคำนวณค่าสัมบูรณ์ (ค่าโมดูโล)
  • การคำนวณค่าของฟังก์ชันตรีโกณมิติ (ไซน์ โคไซน์ ฯลฯ)
  • การยกระดับความสูงต่างๆ
  • การสกัดรากระดับต่างๆ
  • การสร้างตัวเลขสุ่ม
  • การปัดเศษ
  • ฯลฯ
ด้านล่างนี้เราจะลองดูว่าคลาส Java Math ช่วยแก้ปัญหาที่กล่าวข้างต้นได้อย่างไร คลาส Java Math และวิธีการของมัน - 1มาเริ่มวิเคราะห์คลาสด้วยวิธีการที่ช่วยให้คุณสามารถคำนวณค่าโมดูโลได้ วิธีหน้าท้องมีส่วนรับผิดชอบในเรื่องนี้ วิธีการนี้มีการใช้งานมากเกินไป และคลาส Math มีความแตกต่างดังต่อไปนี้:
  • ดับเบิ้ลเอบีเอสแบบคงที่ (ดับเบิ้ลเอ)
  • ABS ลอยคงที่ (ลอย)
  • int abs แบบคงที่ (int a)
  • หน้าท้องยาวแบบคงที่ (ยาว a)
ตัวอย่างการใช้งาน:
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
    }

การคำนวณฟังก์ชันตรีโกณมิติ

ชั้นเรียนคณิตศาสตร์ช่วยให้คุณคำนวณฟังก์ชันตรีโกณมิติต่างๆ เช่น ไซน์ โคไซน์ แทนเจนต์ ฯลฯ ดูรายการวิธีการทั้งหมดได้จากเว็บไซต์เอกสารอย่างเป็นทางการ ด้านล่างนี้คือรายการวิธีการเหล่านี้:
  • บาปสองเท่าคงที่ (double a)
  • cos คู่แบบคงที่ (double a)
  • สแตติก ดับเบิ้ล แทน (ดับเบิ้ล เอ)
  • ดับเบิ้ลแอสซินแบบคงที่ (ดับเบิ้ลเอ)
  • acos คู่แบบคงที่ (double a)
  • ดับเบิ้ลอะตันแบบคงที่(ดับเบิ้ลเอ)
วิธีการคำนวณ: ไซน์, โคไซน์, แทนเจนต์, อาร์คไซน์, อาร์กโคไซน์, อาร์กแทนเจนต์ แต่ละวิธีจะคำนวณค่าของมุม `a` พารามิเตอร์นี้จะถูกส่งผ่านไปยังแต่ละวิธี และในแต่ละกรณีจะวัดเป็นเรเดียน (และไม่ใช่หน่วยองศาอย่างที่เราคุ้นเคย) มีสองข่าวที่นี่ดีและไม่ดี เริ่มจากสิ่งที่ดีกันก่อน ชั้นเรียนคณิตศาสตร์มีวิธีในการแปลงเรเดียนเป็นองศา และองศาเป็นเรเดียน:
  • คงที่สองเท่าถึงดีกรี (ดับเบิ้ลอังกราด)
  • คงที่สองเท่าถึงเรเดียน (angdeg สองเท่า)
ที่นี่เมธอด toDegrees จะแปลงมุมอังกราดที่วัดเป็นเรเดียนเป็นองศา ในทางกลับกัน วิธี toRadians จะแปลงมุม angdeg ซึ่งวัดเป็นองศาให้เป็นเรเดียน ข่าวร้ายก็คือว่าสิ่งนี้เกิดขึ้นโดยมีข้อผิดพลาดบางประการ นี่คือตัวอย่างการคำนวณไซน์และโคไซน์:
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)));
    }
โปรแกรมจะส่งออก:

0.0
0.49999999999999994
1.0

1.0
0.8660254037844387
6.123233995736766E-17
ซึ่งไม่ตรงกับตารางไซน์และโคไซน์มากนัก ส่วนหนึ่งเนื่องมาจากข้อผิดพลาดในการแปลงองศาเป็นเรเดียน

การยกกำลัง

หากต้องการเพิ่มจำนวนให้เป็นกำลัง คลาส Math จัดเตรียมวิธี pow ซึ่งมีลายเซ็นดังต่อไปนี้:
static double pow(double a, double b)
วิธีการนี้จะเพิ่มพารามิเตอร์ `a` ให้เป็นกำลัง `b` ตัวอย่าง:
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
    }

การสกัดราก

คลาส Math จัดเตรียมวิธีการในการหารากที่สองและรากที่สาม วิธีการต่อไปนี้มีหน้าที่รับผิดชอบสำหรับขั้นตอนนี้:
  • sqrt สองเท่าแบบคงที่ (สองเท่า a)
  • ดับเบิ้ล ซีบีอาร์ที (ดับเบิ้ล เอ)
วิธี sqrt รับค่ารากที่สอง และวิธี cbrt รับค่ารากที่สาม ตัวอย่าง:
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
    }

การสร้างตัวเลขสุ่ม

ในการสร้างตัวเลขสุ่ม คลาสคณิตศาสตร์จัดเตรียมวิธีการสุ่มไว้ วิธีการนี้จะสร้างจำนวนจริงบวก (สองเท่า) แบบสุ่มในช่วงตั้งแต่ 0.0 ถึง 1.0 ลายเซ็นวิธีการมีลักษณะดังนี้:
public static double random()
ลองดูตัวอย่าง:
public static void main(String[] args) {
    for (int i = 0; i < 5; i++) {
        System.out.println(Math.random());
    }
}
หลังจากดำเนินการตามวิธีการหลักแล้ว สิ่งต่อไปนี้จะปรากฏขึ้นบนคอนโซล:

0.37057465028778513
0.2516253742011597
0.9315649439611121
0.6346725713527239
0.7442959932755443
ด้วยการปรับเปลี่ยนเพียงเล็กน้อย คุณสามารถใช้วิธีการสุ่มของคลาส Math เพื่อให้ได้ตัวเลขสุ่มจำนวนเต็มซึ่งอยู่ในช่วงที่กำหนด นี่คือตัวอย่างของฟังก์ชันที่รับสองอาร์กิวเมนต์ min และ max และส่งกลับจำนวนเต็มแบบสุ่มซึ่งอยู่ในช่วงตั้งแต่ min (รวม) ถึงสูงสุด (รวม):
static int randomInARange(int min, int max) {
    return  (int) (Math.random() * ((max - min) + 1)) + min;
}
มาเขียนเมธอด Main ซึ่งเราจะทดสอบเมธอด RandomInARange:
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;
    }
}
หลังจากรันเมธอด main แล้ว ผลลัพธ์อาจมีลักษณะดังนี้:

-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

การปัดเศษ

สำหรับการปัดเศษตัวเลขใน Java หนึ่งในเครื่องมือคือวิธีการของคลาส Math วิธีกลมเพดานและพื้นอย่างแม่นยำยิ่งขึ้น:
  • รอบยาวแบบคงที่ (ดับเบิ้ลเอ)
  • รอบ int แบบคงที่ (ลอย)
  • ชั้นคู่แบบคงที่ (ดับเบิ้ลเอ)
  • ฝ้าเพดานคู่แบบคงที่ (ดับเบิ้ล ก)
วิธีปัดเศษ - ปัดเศษตามปกติสำหรับคนทั่วไป หากส่วนที่เป็นเศษส่วนของตัวเลขมากกว่าหรือเท่ากับ 0.5 ตัวเลขนั้นจะถูกปัดเศษขึ้น หรือปัดเศษลง วิธีพื้นเสมอโดยไม่คำนึงถึงค่าของส่วนที่เป็นเศษส่วนให้ปัดเศษตัวเลขลง (ไปทางค่าอนันต์ลบ) ในทางกลับกันวิธี ceil โดยไม่คำนึงถึงค่าของส่วนที่เป็นเศษส่วนจะปัดเศษตัวเลขขึ้น (ไปสู่ค่าอนันต์บวก) ลองดูตัวอย่าง:
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
}

บทสรุป

ในบทความนี้ เราได้เจาะลึกชั้นเรียนคณิตศาสตร์แบบผิวเผิน เราดูว่าคุณสามารถใช้งานคลาสนี้ได้อย่างไร:
  • คำนวณค่าโมดูโล;
  • คำนวณค่าของฟังก์ชันตรีโกณมิติ
  • ยกตัวเลขขึ้นสู่อำนาจ
  • แยกรากสี่เหลี่ยมและลูกบาศก์
  • สร้างตัวเลขสุ่ม
  • ตัวเลขกลมๆ.
มีวิธีการที่น่าสนใจอื่นๆ อีกมากมายในชั้นเรียนนี้ ซึ่งสามารถพบได้บนเว็บไซต์เอกสารอย่างเป็นทางการ สำหรับการทำความรู้จักครั้งแรกวิธีการข้างต้นก็เพียงพอแล้ว
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION