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-20log()110-20110-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