วันอาทิตย์ที่ 23 พฤศจิกายน พ.ศ. 2557

ฟังก์ชันทางคณิตศาสตร์

1 ฟังก์ชันทางคณิตศาสตร์
ฟังก์ชันทางคณิตศาสตร์เป็นฟังก์ชันเกี่ยวข้องกับการคำนวณตัวเลข ทั้งการคำนวณตัวเลขทั่วไป เกี่ยวกับการปัดเศษเลข ฟังก์ชันทางตรีโกณ การสุ่มตัวเลข การแปลงตัวเลขระหว่างฐานและหน่วยที่ใช้บ่อย การทดสอบชนิดข้อมูล ซึ่งฟังก์ชันในกลุ่มนี้เป็นฟังก์ชันมาตรฐานที่ไม่ต้องติดตั้งโมดูล
เพิ่มเติม (extension module) พิเศษใดๆ
กลุ่มฟังก์ชันทางคณิตศาสตร์มีฟังก์ชันต่างๆ ที่สำคัญแยกตามกลุ่มย่อยดังนี้
1 1) ฟังก์ชันคณิตศาสตร์ทั่วไป
number abs (x) ให้ค่า Absolute value คือค่าที่ไม่คิดเครื่องหมายบวกลบ เช่น
abs (345) ให้ข้อมูลตัวเลข 345,
abs(-8023.50) ให้ผลลัพธ์ตัวเลข 8023.50 เป็นต้น
float exp (x) คำนวณค่า exponential ของ e (Natural logarithm base) ex
float log10 (x) คำนวณค่า logarithm ฐาน 10
float log (x) คำนวณค่า Natural logarithm loge (x) หรือ ln x
number max (x1,x2) ให้ค่าข้อมูลที่สูงสุดระหว่าง x1 กับ x2 เช่น
 max (50.4,-35) ได้ผลลัพธ์ 50.4 หรือ
 max (-380, -550) จะให้ผลลัพธ์ -380 เป็นต้น
number min (x1,x2) ให้ค่าข้อมูลที่น้อยที่สุดระหว่าง x1 กับ x2
float fmod (x1,x2) ให้ค่าเศษจากการหารเลขทศนิยม เช่น fmod(3.5,2) ได้ผลเป็น 1.5
(3.5 หารด้วย 2 ได้ผลจำนวนเต็มเป็น 1 และเหลือเศษ 1.5)
float hypot (x,y) คำนวณค่า Square root ของ (x2 + y2)
float pi ( ) ให้ค่า pi (3.1415926535898)
float pow (x,y) คำนวณค่ายกกำลัง x y
float sqrt (x) คำนวณค่าถอดรากที่ 2 (square root) ของ x
ฟังก์ชันเหล่านี้มักจะใช้กับสูตรการคำนวณตัวเลขเพื่อการวิเคราะห์ต่างๆ เช่น การคำนวณหาแนวโน้ม ค่าทางสถิติทั้งด้านวิทยาศาสตร์ด้านการเงิน ตัวอย่างของการใช้ฟังก์ชัน min, max เช่นการหักลดหย่อนภาษีที่ระบุว่าให้หักได้ตามจริงแต่ไม่เกินจำนวนที่ระบุ หรือ ให้เสียภาษีเหมาจ่าย 0.05% หรือทำการหักลดหย่อนแล้วคิดภาษีตามอัตราที่ระบุ แล้วแต่อย่างใดจะมากกว่ากัน ฯลฯ เป็นต้น
$insureDeduc = min ($insurance,50000.00);
1 2) ฟังก์ชันเกี่ยวกับการปัดเศษตัวเลข
• float ceil (float x)
ปัดเศษเลขทศนิยมให้เป็นเลขจำนวนเต็มโดยการปัดเศษขึ้นหากมีเลขหลังจุดทศนิยม
(ปัดเศษเลขโดยเพิ่มค่าขึ้นให้เป็นเลขจำนวนเต็มจำนวนถัดไป) ผลลัพธ์ได้เลข floating point ที่มี
เศษทศนิยมเป็น x.0 เช่น
ceil (4.01) ได้ผลลัพธ์ 5.0
ceil (3.98) ได้รับผลลัพธ์ 4.0
ceil (-3.98) ได้รับผลลัพธ์ -3.0
ceil (-4.01) ได้ผลลัพธ์ -4.0 เป็นต้น
• float floor (float x)
ปัดเศษเลขทศนิยมให้เป็นเลขจำนวนเต็มโดยการปัดเศษลงหากมีเลขหลังจุดทศนิยม
(ปัดเศษเลขโดยลดค่าลงให้เป็นเลขจำนวนเต็มจำนวนถัดไป) ผลลัพธ์ได้เลข floating point ที่มี
เศษทศนิยมเป็น x.0 เช่น
floor (4.99) ได้ผลลัพธ์ 4.0
floor (5.1) ได้ผลลัพธ์ 5.0
floor (5.0) ได้ผลลัพธ์ 5.0
บทที่ 3
ฟังก์ชันมาตรฐานของภาษา PHP.93
floor (-5.1) ได้ผลลัพธ์ -6.0
floor (-4.99) ได้ผลลัพธ์ -5.0
• float round (float x)
ปัดเศษเลขทศนิยมโดยปัดขึ้นหรือลงดูจากค่าทศนิยม 0.5 ผลลัพธ์ได้เลข floating point
ที่มีเศษทศนิยมเป็น x.0 เช่น
round (4.4999) ได้ผลลัพธ์ 4.0
round (4.5) ได้ผลลัพธ์ 5.0
round (-4.4999) ได้ผลลัพธ์ -4.0
round (-4.5) ได้ผลลัพธ์ -5.0
ฟังก์ชันเหล่านี้จะทำการปัดเศษทศนิยมให้เหลือแต่จำนวนเต็มแต่ยังคงได้รับผลเป็นตัวเลขชนิด
floating point เนื่องจากหากใช้ integer อาจไม่สามารถรับข้อมูลขนาดใหญ่ที่มาจากการปัดเศษของfloat ได้หากต้องการให้ปัดตัวเลขตามจำนวนหน่วยของหลักเลขที่ต้องการ เช่น ปัดเลขทศนิยมหลักที่3 (ปัดให้เหลือเศษเพียง 2 หลัก) ตย. 45.1225 ปัดเศษทิ้งเป็น 45.12 หรือปัดขึ้นเป็น 45.13 ทำได้โดยceil ($x/0.01)*0.01 หากต้องการปัดเศษให้เหลือเลขหลังจุด 4 หลักก็จะเป็น ceil ($x/0.0001)*0.0001 หากต้องการปัดเลขจำนวนเต็มให้เป็นหลักร้อย เช่น 35640 หากปัดขึ้นจะเป็น 35700 สามารถใช้ expression ceil($x/100)*100 ซึ่งหากจะเขียนเป็น expression แบบทั่วไปสร้างเป็น
function ใหม่ได้เป็น
function ceil2digit ($x,$digit=0) {
$c = pow(10,$digit);
return ceil($x/$c) * $c;
}
โดยที่มีการส่ง argument 2 ตัวได้แก่ $x เป็นค่าที่ต้องการปัดเลข และ $digit จำนวนหลัก
เลขที่ต้องการ เช่นหากจะปัดเลขให้เป็นหลักร้อยคือปัดเลขจำนวนเต็มที่มีเลข 0 ตรงท้าย 2 หลัก จะส่ง$digit เป็น 2 หากจะปัดเป็นหลักหมื่นคือปัดเลขจำนวนเต็มขึ้น 4 หลัก กำหนด $digit เป็น 4 ในกรณีปัดเศษเศษทศนิยมจะกำหนดจำนวนหลักเป็นเลขลบ เช่น หากต้องการปัดเลขเศษทศนิยมให้เหลือ 2 หลัก กำหนด $digit เป็น -2 หากจะปัดเลขเศษทศนิยมให้เหลือ 5 หลัก กำหนด $digit เป็น -5 เป็นต้น
ตัวอย่างการเรียกใช้ฟังก์ชัน ceil2digit( ) แสดงได้ดังนี้
<?
echo ceil2digit(3456,2); // 3500
echo ceil2digit(1401,2); // 1500
echo ceil2digit(1000001,5); // 1100000
echo ceil2digit(356.136589,-4); //356.1366
?>
1 3) ฟังก์ชันตรีโกณ
float acos (x) Arc cosine คือ cos-1 (x)
float acosh (x) Inverse hyperbolic cosine ของ x
float asin (x) Arc sine ของ x, sine-1 (x)
float asinh (x) Inverse hyperbolic sine ของ x
float atan2 (x,1x2) arc tangent of สองค่า
float atan (x) Arc tangent ของ x, tan-1 (x)
float atanh (x) Inverse hyperbolic tangent ของ x
float cos (x) Cosine ของ x, cos(x)
float cosh (x) Hyperbolic cosine ของ x
float sin (x) Sine ของ x, sine (x)
WEB PROGRAMMING
Using PHP. and MySQL.94 94
float sinh (x) Hyperbolic sine ของ x
float tan (x) Tangent ของ x
float tanh (x) Hyperbolic tangent ของ x
ฟังก์ชันในกลุ่มนี้มักจะใช้กับการคำนวณทางวิทยาศาสตร์วิศวกรรม เป็นหลัก เช่นในการ
ออกแบบโครงสร้างทางวิศวกรรม การคำนวณทางฟิสิกส์ฯลฯ เป็นต้น ส่วนในการใช้งานด้านทั่วไปมักไม่ได้ใช้ประโยชน์จากฟังก์ชันเหล่านี้ค่า argument ที่ส่งให้แก่ฟังก์ชันตรีโกณเป็นข้อมูลตัวเลขfloating point และจะให้ผลลัพธ์เป็น floating point เช่นกัน
1 4) ฟังก์ชันการแปลงเลข-หน่วย
เป็นฟังก์ชันที่ใช้แปลงตัวเลขหรือข้อความแสดงตัวเลขฐานหนึ่ง ไปเป็นข้อความหรือตัวเลขฐานอื่นๆ มีทั้งฟังก์ชันแปลงฐานใดๆ และฟังก์ชันที่กำหนดเฉพาะฐาน และยังมีฟังก์ชันที่ทำการแปลงหน่วย
ของมุมด้วย ฟังก์ชันในกลุ่มนี้ประกอบด้วยฟังก์ชันต่างๆ ดังนี้
string base_convert (string data,
int frombase, int tobase)
แปลงข้อความเลขฐานหนึ่งไปเป็นอีกฐานหนึ่งโดยระบุฐาน
ของเลขต้นทางและผลลัพธ์ตัวอย่างเช่น
$accessBit = base_convert ("744",8,2);
เป็นการแปลงข้อความจากเลขฐาน 8 เป็นเลขฐานสอง
เป็นต้น
int bindec ( string binary_string) แปลงข้อความแสดงเลขฐานสองให้เป็นเลขจำนวนเต็มฐาน
สิบ
string decbin ( int number) แปลงตัวเลขจำนวนเต็มให้เป็นข้อความแสดงเลขฐานสอง
string dechex ( int number) แปลงตัวเลขจำนวนเต็มให้เป็นข้อความแสดงเลขฐานสิบหก
string decoct ( int number) แปลงตัวเลขจำนวนเต็มให้เป็นข้อความแสดงเลขฐานแปด
float deg2rad ( float number) แปลงตัวเลขมุมที่มีหน่วยเป็นองศาให้เป็นหน่วย radian
int hexdec ( string hex_string) แปลงข้อความแสดงเลขฐานสิบหกให้เป็นตัวเลขจำนวนเต็ม
int octdec ( string hex_string) แปลงข้อความแสดงเลขฐานแปดให้เป็นตัวเลขจำนวนเต็ม
float rad2deg ( float number) แปลงตัวเลขมุมที่มีหน่วยเป็นเรเดียนให้เป็นหน่วยองศา
ตัวอย่างเช่น การสร้างฟังก์ชันเพื่อสร้าง color # ที่กำหนดสีให้แก่ HTML tag เช่น <body
bgcolor="#03203A"> ซึ่งต้องการเลขฐานสิบหก จากค่าตัวเลขสีแต่ละสีเป็นเลข 0-255 แสดงดัง
Listing 3.1-1
Listing 3.1-1 colorId-exam.php
1 <?
2 function colorID255($r,$g,$b){
3 $r = min($r,255);
4 $g = min($g,255);
5 $b = min($b,255);
6 return "#" .
7 str_pad(dechex($r),2,"0",STR_PAD_LEFT) .
8 str_pad(dechex($g),2,"0",STR_PAD_LEFT) .
9 str_pad(dechex($b),2,"0",STR_PAD_LEFT);
10 }
11 echo colorID255(200,40,130);
12 ?>
ตัวอย่างนี้ฟังก์ชัน colorID255 รับ argument 3 ตัวเป็นค่าสี integer สำหรับแม่สี red,
green และ blue จากตัวแปร $r, $g และ $b ในตัวอย่างนี้ใช้ฟังก์ชัน 3 ฟังก์ชันได้แก่ min( ) ,dexhex( ) และ str_pad( ) โดย คำสั่งบรรทัดที่ 3-5 ใช้เพื่อไม่ให้ค่าในตัวแปร $4,$g,$b เกิน 255เนื่องจากฟังก์ชัน min( ) จะให้ผลจากค่า argument ที่มีค่าน้อยกว่าดังนั้นหากค่าในตัวแปรเกิน 255จะให้ผลลัพธ์เป็น 255 แต่หากไม่เกินจะให้ค่าเดิม ในบรรทัดที่ 7-9 จะทำการแปลงจากค่าตัวเลขในตัวแปรให้กลายเป็นข้อความที่แสดเลขฐานสิบหกโดยใช้ฟังก์ชัน dechex( ) และเติมเลข 0 นำหน้าให้ครบ 2 หลักโดยใช้ฟังก์ชัน str_pad( )
1 5) ฟังก์ชันสุ่มตัวเลข
ในภาษา PHP มีการใช้ฟังก์ชันเกี่ยวกับการสุ่มตัวเลข 2 แบบได้แก่ แบบ libc ซึ่งจะใช้ฟังก์ชัน
rand ( ) และการใช้ฟังก์ชันสุ่มด้วยเทคนิค Mersenne Twister ที่สร้างค่าสุ่มได้เร็วกว่า libc ถึง 4 เท่าโดยใช้ฟังก์ชัน mt_rand ( ) ทั้งสองฟังก์ชันจะให้ค่าสุ่มเป็นเลขจำนวนเต็มที่กำหนดช่วงข้อมูลได้หากโปรแกรมใดต้องการสร้างค่าสุ่ม ควรจะใช้คำสั่งเพื่อเริ่มต้นการสร้างตัวเลขสำหรับการสุ่มโดยใช้ฟังก์ชัน Seed random number generator ในตอนต้นของ page คำสั่งการเริ่มการสร้างตัวเลขสุ่มนี้ใช้เพียงครั้งเดียวในแต่ละ page แล้วสามารถใช้ฟังก์ชัน rand( ) ได้หลายครั้ง หากไม่ใช้คำสั่งเริ่มต้นการสร้างค่าสุ่มจะทำให้ตัวเลขสุ่มเมื่อโปรแกรมทำงานแต่ละรอบได้ค่าที่ซ้ำกัน ฟังก์ชันที่ใช้
เริ่มการสร้างค่าสุ่มคือ srand( ) และ mt_srand( )การใช้ srand หรือ mt_srand ต้องการ parameter เป็นตัวเลขเพื่อกำหนดค่าตั้งต้นของการสุ่ม ซึ่งเทคนิคโดยทั่วไปเราจะใช้ค่าที่ไม่เหมือนกันในแต่ละครั้งที่เพจถูกเรียกให้ทำงาน ซึ่งมักจะดึงเอาเวลา timestamp ในขณะที่เพจถูกเรียกใช้งาน ที่มีความละเอียดสูง ซึ่งมีฟังก์ชันสนับสนุนคือmicrotime( ) นำมาใช้เป็นค่าเริ่มต้น ซึ่งมักจะใช้ code ดังนี้
srand((float)microtime() * 1000000);
ใน PHP version 4.2.0 เป็นต้นไปไม่จำเป็นต้องเขียนคำสั่ง srand หรือ mt_srand เนื่องจาก
PHP engine จะดำเนินการเองโดยอัตโนมัติ
รายการฟังก์ชันเกี่ยวกับการสุ่มตัวเลขแสดงในตารางต่อไปนี้
int mt_getrandmax ( ) ให้ค่าสุ่มสูงสูงสุดที่สามารถทำได้
void mt_srand ( ) เริ่มการสร้างค่าสุ่มในโปรแกรม
int mt_rand ( [int min, int
max])
สร้างตัวเลขสุ่มโดยสามารถกำหนดค่าสูงสุด ต่ำสุดได้หากไม่กำหนด
จะให้ค่าระหว่าง 0 ถึง ค่าสูงสูดที่สามารถทำได้ (ใช้ฟังก์ชัน
getrandmax หากต้องการทราบค่าสูงสุดที่สามารถทำได้)
int getrandmax ( ) ให้ค่าสุ่มสูงสูงสุดที่สามารถทำได้
int rand ( ) สร้างตัวเลขสุ่ม
void srand ( ) เริ่มการสร้างค่าสุ่มในโปรแกรม
ฟังก์ชันเกี่ยวกับการสร้างตัวเลขสุ่ม สามารถนำไปใช้ประโยชน์ได้เช่น การสุ่มรายการข้อมูล
ขึ้นมาแสดง ซึ่งข้อมูลนั้นอาจจะเป็นบทความทีน่าสนใจ รูปภาพ banner โฆษณา ฯลฯ เป็นต้น
และนอกจากนี้ยังอาจใช้ฟังก์ชันการสุ่มเพื่อสร้างข้อมูลสำหรับการทดสอบขึ้นอาจเป็นข้อมูลที่สร้างในระหว่างการทดสอบโปรแกรมหรือสร้างข้อมูลตัวอย่างเก็บลงในไฟล์ข้อมูลหรือฐานข้อมูลสำหรับใช้ทดสอบ หรืออาจสุ่มเพื่อสร้างสภาวะจำลองการทำงาน เช่นสุ่มเวลาที่จะมีข้อมูลลำดับถัดไปเข้ามา เป็นต้น
ตัวอย่างแสดงการสุ่มข้อมูลตัวเลขที่อยู่ระหว่าง 25-100 จำนวน 50 ค่า แสดงผลโดยมี
เครื่องหมาย comma คั่น
<?
mt_srand();
for ($i=0; $i<50; $i++) {
echo $comma, mt_rand (25,100);
$comma = ', ';
}
?>
1 6) ฟังก์ชันทดสอบนิพจน์ตัวเลข
ฟังก์ชันเหล่านี้จะทำการตรวจสอบข้อมูลที่ส่งมาใน argument ว่าได้เป็นข้อมูลที่สามารถเก็บ
ผลเป็นตัวเลขหรือไม่จะรับข้อมูลใน argument เป็นชนิดตัวเลข และให้ผลลัพธ์เป็น Boolean แสดงผลลัพธ์จากการตรวจสอบเป็น true หากตรงเงื่อนไข หากไม่ตรงจะได้ false
• boolean is_finite (float val)
WEB PROGRAMMING
Using PHP. and MySQL.96 96
ทดสอบว่าเป็น expression ตัวเลขที่ให้ค่าที่สามารถเก็บข้อมูลแบบ double ได้ (finite)
หรือไม่
• boolean is_infinite (float val)
ทดสอบว่าเป็น expression ให้ผลเป็นตัวเลขที่ให้ค่าตัวเลขที่ไม่สามารถเก็บค่าแบบ
double ได้ทั้งค่าบวกหรือลบหรือไม่ คือเป็นค่าที่มีขนาดใหญ่มากเกินความสามารถของ php ที่จะ
เก็บได้
• boolean is_nan (float val)
ทดสอบว่าเป็น expression ที่ได้ผลเป็นตัวเลขหรือไม่ หากไม่เป็นชนิดตัวเลข (is not anumber) อาจเป็นผลจากการใช้ expression ที่ไม่สามารถให้ผลเป็นค่าตัวเลขได้ถูกต้อง จะให้ผลลัพธ์เป็น true แต่หากเป็นข้อมูลตัวเลขจะได้ผลลัพธ์เป็น false เช่น is_nan( acos(1.01)) จะได้เป็น true (ปกติค่า cosine จะมีค่าไม่เกิน 1 ดังนั้น arc cosine ของ 1.01 ไม่สามารถหาค่าได้ฟังก์ชันเหล่านี้มักจะใช้เพื่อตรวจสอบความถูกต้องจากการคำนวณตัวเลขของexpression ว่าสามารถให้ผลลัพธ์ที่เป็นตัวเลขที่ถูกต้องหรือไม่ ซึ่งในการคำนวณด้วยexpression ที่เกิดผลลัพธ์เป็นค่าตัวเลขทศนิยมที่มีขนาดใหญ่มากๆ หรือมีขนาดเล็กมากๆ จนการเก็บข้อมูลแบบ double ซึ่งถือเป็นวิธีเก็บข้อมูลที่ได้ข้อมูลขนาดใหญ่มากที่สุดของภาษา PHP ไม่สามารถแทนค่าดังกล่าวได้หากนำผลลัพธ์จาก expression นั้นไปใช้ก็ได้ได้ผลที่ผิดพลาดไป จึงต้องมีการตรวจสอบก่อนว่าได้ผลลัพธ์ที่ถูกต้อง


ไม่มีความคิดเห็น:

แสดงความคิดเห็น