1. ฟังก์ชันตรีโกณมิติในภาษาจาวา
เมื่อเราศึกษาการปัดเศษของตัวเลขก่อนหน้านี้ เราได้ทำความคุ้นเคยกับMath
ชั้นเรียนและวิธีการบางอย่างของมัน ตอนนี้เราจะดูรายละเอียดเพิ่มเติมในคลาสนี้
ตามชื่อที่บอกไว้Math
คลาสประกอบด้วยเมธอดสำหรับการดำเนินการทางคณิตศาสตร์ที่โปรแกรมเมอร์ใช้บ่อยที่สุด นี่คือสิ่งที่น่าสนใจที่สุด:
วิธี | คำอธิบาย | |
---|---|---|
|
ส่งกลับค่าไซน์ของมุมd เป็นเรเดียน |
|
|
ส่งกลับค่าโคไซน์ของมุมd เป็นเรเดียน |
|
|
ส่งกลับค่าแทนเจนต์ของมุมd เป็นเรเดียน |
|
|
คืนค่าอาร์คไซน์ | |
|
ส่งกลับอาร์คโคไซน์ | |
|
ส่งกลับค่าอาร์คแทนเจนต์ | |
|
ส่งกลับไฮเปอร์โบลิกไซน์ | |
|
ส่งกลับไฮเพอร์โบลิกโคไซน์ | |
|
ส่งกลับไฮเพอร์โบลิกแทนเจนต์ |
และวิธีการใช้มุมที่แสดงเป็นเรเดียน ในการแปลงมุมจากองศาเป็นเรเดียนและกลับกัน คลาสเสนอวิธีพิเศษสองวิธี:Math.sin()
Math.cos()
Math.tan()
Math
วิธี | คำอธิบาย |
---|---|
|
แปลงมุมจากองศาเป็นเรเดียน |
|
แปลงมุมจากเรเดียนเป็นองศา |
นอกจากเมธอดแล้วMath
คลาสยังมีตัวแปรคง ที่สองตัว (ฟิลด์สแตติกของคลาส):
คงที่ | คำอธิบาย |
---|---|
|
ค่าคงที่ "Pi" เท่ากับ3.141592653589793 |
|
ค่าคงที่ "E" เท่ากับ2.718281828459045 |
ฟังก์ชันทั้งหมดนี้มีประโยชน์มากสำหรับคุณ หากคุณตัดสินใจที่จะเขียนเกมของคุณเอง ทำงานกับกราฟิก หรือเพียงแค่คำนวณความยาวของเส้นทางบนแผนที่
ตัวอย่างเช่น หากคุณต้องการคำนวณsin(45°)
มีวิธีดังนี้:
Math.sin( Math.toRadians(45) )
นี่คือตัวอย่าง:
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. ฟังก์ชันเกี่ยวกับพีชคณิตใน Java
ในกรณีส่วนใหญ่ คณิตศาสตร์ระดับมัธยมปลายก็เพียงพอแล้วสำหรับโปรแกรมเมอร์ แม้แต่ไซน์และโคไซน์ก็แทบไม่พบในโค้ด ส่วนใหญ่มักจะจำเป็นเมื่อทำงานกับเกม แผนที่ หรือเอ็นจิ้นเกม 90% ของโปรแกรมเมอร์ไม่เคยเจอสิ่งนี้
แต่นอกเหนือจากรูปทรงเรขาคณิตแล้ว บางครั้งโปรแกรมเมอร์ยังต้องใช้ฟังก์ชันเกี่ยวกับพีชคณิตอีกด้วย และแน่นอนว่าMath
คลาสประกอบด้วยคลาสที่พบบ่อยที่สุด:
วิธี | คำอธิบาย |
---|---|
|
รากที่สองของa |
|
ลูกบาศก์รูทของa |
|
ยกกำลัง:ab |
|
exponential (เลขออยเลอร์ยกกำลัง):ea |
|
ลอการิทึมธรรมชาติของa :ln(a) |
|
ลอการิทึมฐาน 10 ของa :log10(a) |
|
ลอการิทึมธรรมชาติของx + 1 :ln(x + 1) |
|
ex-1 |
หากคุณต้องการรากที่สองหรือคิวบ์ของตัวเลข วิธีการsqrt(a)
และcbrt(a)
วิธีการจะพร้อมให้บริการคุณ
รากที่สองสามารถคำนวณได้ดังนี้:
Math.sqrt(2)
หากคุณต้องการรับรูทที่มีกำลังสูงกว่า ให้ใช้วิธียกกำลัง: a
รูท¼
ที่สี่เป็นต้น
Math.pow(2, 0.25)
สำหรับลอการิทึมและเลขชี้กำลัง มี เมธอด log(a)
(ลอการิทึมธรรมชาติ) และexp(x)
(เลขชี้กำลัง) ในการคำนวณลอการิทึมฐาน 10 เราlog10(a)
มี
หากคุณต้องการให้ลอการิทึมของตัวเลขb
เป็นฐานa
ให้ใช้สูตรง่ายๆ นี้:loga(b) = ln(b) / ln(a)
วิธีการที่เป็นประโยชน์
หากคุณกำลังคำนวณเกี่ยวกับค่าที่น้อยมากของx
ฟังก์ชันสองตัวสุดท้าย — log1p()
และexpm1()
— อาจมีประโยชน์สำหรับคุณ
เมื่อเพิ่มdouble
ตัวแปรที่มีขนาดเล็กมากและมีขนาดใหญ่มาก คุณมักจะพบว่าค่าที่น้อยมากจะถูกละเว้น (ละทิ้ง) เนื่องจากไม่มีนัยสำคัญ สิ่งนี้จะเกิดขึ้นหากคุณใช้log()
and exp()
วิธีการ เพื่อแก้ปัญหานี้ โปรแกรมเมอร์จึงสร้างฟังก์ชันที่ส่งคืนเฉพาะ "ส่วนสำคัญขนาดเล็ก"
ตัวอย่าง:
สมมติว่าคุณต้องการคำนวณลอการิทึมธรรมชาติของ1 + x
ที่ไหนx
คือ คุณไม่สามารถส่งหมายเลขนี้ไปยังเมธอดได้ เนื่องจากถ้าคุณเพิ่มและคุณจะได้รับ เป็นจำนวนเล็กน้อยที่เมื่อบวกเลขแล้วจะถูกทิ้งทั้งหมด10-20
log()
1
10-20
1
10-20
เนื่องจากคณิตศาสตร์มักเกี่ยวข้องกับการคำนวณlog()
จำนวนที่ใกล้เคียง1
โปรแกรมเมอร์จึงคิดวิธีแก้ปัญหานี้: แทนที่จะส่งตัวเลขไปยังเมธอด ให้ส่งเฉพาะความแตกต่าง1
จาก
3. ขั้นต่ำและสูงสุด
ฟังก์ชันที่มี ประโยชน์อีกสองฟังก์ชันคือmin(a, b)
และ max(a, b)
อย่างที่คุณอาจเดาได้ ตัวเลขแรกจะส่งกลับตัวเลขขั้นต่ำสองตัว:
Math.min(a, b)
และวินาทีส่งคืนจำนวนสูงสุดสองตัว:
Math.max(a, b)
เหตุใดเราจึงต้องการฟังก์ชันเหล่านี้ ในเมื่อคุณสามารถเขียนif
หรือแม้แต่ใช้ตัวดำเนินการแบบไตรภาคได้(a < b ? a: b)
เสมอ
มันคือทั้งหมดที่เกี่ยวกับการอ่านรหัส บางครั้งโค้ดของคุณมีif
คำสั่งมากเกินไป และคุณต้องการใช้รูปแบบที่กะทัดรัดกว่านี้ ลองเปรียบเทียบ:
รหัส | คำอธิบาย |
---|---|
|
การใช้if-else คำสั่ง (วิธีที่ยาวที่สุดในการเขียน) |
|
การใช้ตัวดำเนินการแบบไตรภาค ข้อเสีย: - รหัสขนาดใหญ่ - การคำนวณจะดำเนินการสองครั้ง |
|
นี่เป็นวิธีที่ดีในการเขียน แต่มันซ้ำซ้อนเล็กน้อย |
|
ได้เลย 🙂 |
4. ขั้นต่ำและสูงสุดของจำนวนหลายตัว
มีอีกวิธีที่ยอดเยี่ยมในการใช้min()
and max()
วิธีการ
ในการคำนวณค่าต่ำสุด (หรือสูงสุด) ของตัวเลขหรือตัวแปรหลายๆ ตัว สะดวกมากในการโทรไปยังเมธอดเหล่านี้
วิธีหาตัวเลขขั้นต่ำ 3 ตัวมีดังนี้
Math.min(a, Math.min(b, c))
แล้วไง สะดวกมาก: คำนวณค่าต่ำสุดของตัวเลขสองตัว จากนั้นส่งคืนค่าต่ำสุดของตัวเลขนี้และตัวเลขที่สาม
จะได้รับตัวเลขอย่างน้อยสี่ตัวด้วยวิธีเดียวกัน:
Math.min(a, Math.min(b, Math.min(с, d)))
ที่กล่าวว่าเราสามารถเขียนสูตรนี้ให้ชัดเจนขึ้นเล็กน้อย:
Math.min(Math.min(a, b), Math.min(c, d))
มันใช้งานได้เหมือนกันสำหรับmax()
วิธีการนี้
การใช้if-else
โอเปอเรเตอร์หรือโอเปอเรเตอร์ ternaryจะทำให้ข้อมูลโค้ดเหล่านี้ยุ่งยากขึ้นเล็กน้อย แต่การใช้ วิธี min()
and max()
นั้นสมบูรณ์แบบ
GO TO FULL VERSION