φυβλαςのβλογ
phyblas的博客



javascript เบื้องต้น บทที่ ๑๖: ฟังก์ชันที่เกี่ยวข้องกับคณิตศาสตร์
เขียนเมื่อ 2019/07/31 23:27
แก้ไขล่าสุด 2021/09/28 16:42



ออบเจ็กต์ Math

การคำนวณพื้นฐานเช่น บวก, ลบ, คูณ, หาร นั้นสามารถทำได้โดยใช้ตัวดำเนินการ +, -, *, / ง่ายๆ แต่สำหรับการคำนวณที่ซับซ้อนขึ้นไป เช่นพวกเลขยกกำลัง, ตรีโกณมิติ, สุ่มค่า, ฯลฯ พวกนี้ต้องใช้ฟังก์ชันช่วย

ฟังก์ชันต่างๆที่เกี่ยวข้องกับทางคณิตศาสตร์นั้นได้ถูกรวบรวมเอาไว้ที่ออบเจ็กต์ที่ชื่อ Math

Math เป็นออบเจ็กต์ตัวหนึ่ง มีหน้าที่แค่เก็บฟังก์ชันและค่าคงที่ต่างๆเท่านั้น ไม่สามารถทำหน้าที่เป็นคอนสตรักเตอร์เพื่อสร้างออบเจ็กต์ใดๆได้
alert(typeof Math); // ได้ object
new Math() // ได้ TypeError: Math is not a constructor



ค่าคงที่

ค่าคงที่บางส่วนที่มีความหมายสำคัญทางคณิตศาสตร์ซึ่งอาจมีโอกาสได้ใช้งานบ่อยได้ถูกเตรียมไว้ในออบเจ็กต์ Math

ค่าคงที่ ค่า ความหมาย
Math.E 2.718281828459045 ค่า e
Math.LN2 0.6931471805599453 ln(2)
Math.LN10 2.302585092994046 ln(10)
Math.LOG2E 1.4426950408889634 1/ln(2)
Math.LOG10E 0.4342944819032518 1/ln(10)
Math.SQRT1_2 0.7071067811865476 รากที่สองของ 1/2
Math.SQRT2 1.4142135623730951 รากที่สองของ 2
Math.PI 3.141592653589793 สัดส่วนเส้นรอบวงต่อเส้นผ่านศูนย์กลาง



ฟังก์ชันต่างๆที่ใช้ได้

ฟังก์ชันที่มีตั้งแต่ใน ES3

Math.sin (x) sine
Math.cos (x) cosine
Math.tan (x) tangent
Math.asin (x) arcsine
Math.acos (x) arccos
Math.atan (x) arctan
Math.atan2 (y, x) arctan2
Math.abs (x) หาค่าสัมบูรณ์
Math.round (x) ปัดเศษ .5 ขึ้นไปขึ้น ต่ำกว่า .5 ลง
Math.ceil (x) ปัดเป็นจำนวนเต็มโดยปัดขึ้น
Math.floor (x) ปัดเป็นจำนวนเต็มโดยปัดลง
Math.exp (x) เอ็กซ์โพเน็นเชียล (ex)
Math.log (x) ลอการิธึม logex
Math.sqrt (x) รากที่สอง
Math.pow (x, y) x ยกกำลัง y (xy)
Math.max (x1, x2, ...) หาค่าสูงสุด
Math.min (x1, x2, ...) หาค่าต่ำสุด
Math.random () สร้างค่าสุ่มตั้งแต่ 0 ถึง 1


ฟังก์ชันที่เพิ่มเข้ามาใน ES6

Math.sinh (x) hyperbolic sine
Math.cosh (x) hyperbolic cosine
Math.tanh (x) hyperbolic tangent
Math.asinh (x) inverse hyperbolic sine
Math.acosh (x) inverse hyperbolic cosine
Math.atanh (x) inverse hyperbolic tangent
Math.log10 (x) log10(x)
Math.log2 (x) log2(x)
Math.log1p (x) loge(1+x)
Math.expm1 (x) ex-1
Math.cbrt (x) รากที่สาม
Math.hypot (x1, x2, ...) รากที่สองของผลบวกกำลังสอง
Math.trunc (x) ปัดเป็นจำนวนตรงโดยปัดเศษทิ้ง
Math.sign (x) หาว่าเป็นบวกหรือลบ ถ้าเป็นบวกได้ 1 ถ้าเป็นลบได้ -1



ปัดเศษ

เมื่อมีจำนวนทศนิยมแล้วต้องการปัดให้เป็นจำนวนเต็ม อาจใช้
- Math.ceil เมื่อต้องการปัดขึ้นเสมอ
- Math.floor เมื่อต้องการปัดลงเสมอ
- Math.round เมื่อต้องการให้ปัดขึ้นเมื่อเป็น 0.5 ขึ้นไป และปัดลงเมื่อไม่ถึง 0.5
alert(Math.ceil(11.2)); // ได้ 12
alert(Math.floor(11.51)); // ได้ 11
alert(Math.round(11.8)); // ได้ 12
alert(Math.round(11.4)); // ได้ 11
alert(Math.ceil(-11.2)); // ได้ -11
alert(Math.floor(-11.51)); // ได้ -12
alert(Math.round(-11.8)); // ได้ -12
alert(Math.round(-11.4)); // ได้ -11

ส่วน Math.trunc ที่เพิ่มมาใน ES6 นั้นจะเหมือน floor ในกรณีที่เป็นเลขบวก และเหมือน ceil เมื่อเป็นเลขลบ



ค่าสัมบูรณ์

Math.abs ใช้หาค่าสัมบูรณ์ของตัวเลข
alert(Math.abs(-15)); // ได้ 15
alert(Math.abs("20")); // ได้ 20



เลขยกกำลัง

ฟังก์ชันที่เกี่ยวข้องกับเลขยกกำลังได้แก่
- Math.exp ใช้คำนวณเอ็กซ์โพเนนเชียล
- Math.log ใช้คำนวณลอการิธึมฐานธรรมชาติ
- Math.sqrt ใช้คำนวณค่ารากที่สอง
- Math.pow ใช้คำนวณเลขยกกำลัง
alert(Math.exp(10)); // ได้ 22026.465794806718
alert(Math.log(10)); // ได้ 2.302585092994046
alert(Math.sqrt(100)); // ได้ 10
alert(Math.pow(10, 2)); // ได้ 100

ใน ES2016 ขึ้นไปสามารถใช้ x**y แทน Math.pow(x,y) ได้
alert(10**2); // ได้ 100


ตรีโกณมิติ

ฟังก์ชันตรีโกณมิติพื้นฐานประกอบไปด้วย
- Math.sin
- Math.cos
- Math.tan
alert(Math.sin(Math.PI)); // ได้ 1.2246467991473532e-16
alert(Math.cos(3)); // ได้ -0.9899924966004454
alert(Math.tan(Math.PI / 4)); // ได้ 0.9999999999999999

และฟังก์ชันส่วนกลับ ประกอบไปด้วย
- Math.asin
- Math.acos
- Math.atan
- Math.atan2
alert((Math.asin(1) / Math.PI) * 180); // ได้ 90
alert((Math.acos(1) / Math.PI) * 180); // ได้ 0
alert((Math.atan(1) / Math.PI) * 180); // ได้ 45
alert((Math.atan2(0.5, 0.5) / Math.PI) * 180); // ได้ 45
alert((Math.atan2(0.5, -0.5) / Math.PI) * 180); // ได้ 135
alert((Math.atan2(-0.5, -0.5) / Math.PI) * 180); // ได้ -135
alert((Math.atan2(-0.5, 0.5) / Math.PI) * 180); // ได้ -45


และใน ES6 ยังมีพวกไฮเพอร์โบลิกเพิ่มเข้ามาอีกด้วย



ค่าสูงสุดต่ำสุด

Math.min เป็นฟังก์ชันที่ใช้หาค่าต่ำสุดในบรรดาข้อมูลทั้งหมดที่ใส่เข้าไปเป็นอาร์กิวเมนต์ ส่วนฟังก์ชันที่ใช้หาค่าสูงสุดคือ Math.max
alert(Math.max(1,Math.PI,5)); // ได้ 5
alert(Math.min(2,3,5)); // ได้ 2

หากข้อมูลที่ใส่เข้าไปมีที่ไม่ใช่ตัวเลขก็จะถูกแปลงเป็นตัวเลขโดยอัตโนมัติก่อนเทียบ แต่ถ้าตัวใดตัวหนึ่งแปลงไม่ได้จะได้ NaN
alert(Math.max("a", 1, 2)); // ได้ NaN
alert(Math.min("2", 1.5, 4)); // ได้ 1.5


การสร้างค่าสุ่ม

หากต้องการค่าสุ่มตั้งแต่ 0 ถึง 1 สามารถใช้ Math.random
var ar = [];
var i = 1;
while (i < 9) {
  ar.push("ครั้งที่ " + i + ": " + Math.random());
  i++;
}
alert(ar.join("\n"));
ได้
ครั้งที่ 1: 0.6290472603371913
ครั้งที่ 2: 0.9779730139377725
ครั้งที่ 3: 0.41997857970286534
ครั้งที่ 4: 0.1898982006892228
ครั้งที่ 5: 0.5984295533679661
ครั้งที่ 6: 0.8441898470520106
ครั้งที่ 7: 0.054433221098181606
ครั้งที่ 8: 0.881529245966359

จะได้ค่าสุ่มที่ไม่ซ้ำกันในแต่ละครั้ง

หากต้องการเลขสุ่มเป็นจำนวนเต็มในช่วงที่กำหนด อาจใช้ร่วมกับ Math.floor เช่น
var f = function(a, b) {
  return Math.floor(a + Math.random() * (b - a));
};

var ar1 = [];
var ar2 = [];
var i = 0;
while (i < 20) {
  ar1.push(f(5, 10)); // สุ่มเลขตั้งแต่ 5 ถึง 9
  ar2.push(f(10, 15)); // สุ่มเลขตั้งแต่ 10 ถึง 14
  i++;
}
alert(ar1); // ได้ 9,9,9,7,9,7,9,5,8,8,9,7,5,7,9,9,5,8,6,7
alert(ar2); // ได้ 10,13,14,14,11,10,14,10,13,10,14,12,13,14,14,12,13,12,13,10




-----------------------------------------

囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧

ดูสถิติของหน้านี้

หมวดหมู่

-- คอมพิวเตอร์ >> เขียนโปรแกรม >> javascript

ไม่อนุญาตให้นำเนื้อหาของบทความไปลงที่อื่นโดยไม่ได้ขออนุญาตโดยเด็ดขาด หากต้องการนำบางส่วนไปลงสามารถทำได้โดยต้องไม่ใช่การก๊อปแปะแต่ให้เปลี่ยนคำพูดเป็นของตัวเอง หรือไม่ก็เขียนในลักษณะการยกข้อความอ้างอิง และไม่ว่ากรณีไหนก็ตาม ต้องให้เครดิตพร้อมใส่ลิงก์ของทุกบทความที่มีการใช้เนื้อหาเสมอ

目录

从日本来的名言
模块
-- numpy
-- matplotlib

-- pandas
-- manim
-- opencv
-- pyqt
-- pytorch
机器学习
-- 神经网络
javascript
蒙古语
语言学
maya
概率论
与日本相关的日记
与中国相关的日记
-- 与北京相关的日记
-- 与香港相关的日记
-- 与澳门相关的日记
与台湾相关的日记
与北欧相关的日记
与其他国家相关的日记
qiita
其他日志

按类别分日志



ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ

  查看日志

  推荐日志

ตัวอักษรกรีกและเปรียบเทียบการใช้งานในภาษากรีกโบราณและกรีกสมัยใหม่
ที่มาของอักษรไทยและความเกี่ยวพันกับอักษรอื่นๆในตระกูลอักษรพราหมี
การสร้างแบบจำลองสามมิติเป็นไฟล์ .obj วิธีการอย่างง่ายที่ไม่ว่าใครก็ลองทำได้ทันที
รวมรายชื่อนักร้องเพลงกวางตุ้ง
ภาษาจีนแบ่งเป็นสำเนียงอะไรบ้าง มีความแตกต่างกันมากแค่ไหน
ทำความเข้าใจระบอบประชาธิปไตยจากประวัติศาสตร์ความเป็นมา
เรียนรู้วิธีการใช้ regular expression (regex)
การใช้ unix shell เบื้องต้น ใน linux และ mac
g ในภาษาญี่ปุ่นออกเสียง "ก" หรือ "ง" กันแน่
ทำความรู้จักกับปัญญาประดิษฐ์และการเรียนรู้ของเครื่อง
ค้นพบระบบดาวเคราะห์ ๘ ดวง เบื้องหลังความสำเร็จคือปัญญาประดิษฐ์ (AI)
หอดูดาวโบราณปักกิ่ง ตอนที่ ๑: แท่นสังเกตการณ์และสวนดอกไม้
พิพิธภัณฑ์สถาปัตยกรรมโบราณปักกิ่ง
เที่ยวเมืองตานตง ล่องเรือในน่านน้ำเกาหลีเหนือ
ตระเวนเที่ยวตามรอยฉากของอนิเมะในญี่ปุ่น
เที่ยวชมหอดูดาวที่ฐานสังเกตการณ์ซิงหลง
ทำไมจึงไม่ควรเขียนวรรณยุกต์เวลาทับศัพท์ภาษาต่างประเทศ