1. ภาพรวมของชนิดข้อมูล double ในภาษา C
double คืออะไร
double
เป็นชนิดข้อมูลที่ใช้สำหรับตัวเลขทศนิยมในภาษา C โดยใช้หน่วยความจำ 64 บิต (8 ไบต์) สามารถเก็บตัวเลขได้อย่างแม่นยำและครอบคลุมช่วงค่าที่กว้างมาก ด้วยคุณสมบัตินี้ จึงนิยมใช้ในงานคำนวณทางวิทยาศาสตร์หรือการเงินที่ต้องการความแม่นยำสูง
ความแตกต่างระหว่าง float และ double
float
ใช้หน่วยความจำ 32 บิต (4 ไบต์) มีความแม่นยำประมาณ 7 หลัก ขณะที่ double
มีความแม่นยำประมาณ 15 หลัก เหมาะสำหรับงานที่ต้องการความละเอียดมากกว่า อีกทั้ง double
ยังสามารถเก็บค่าตัวเลขในช่วงที่กว้างกว่า float
อีกด้วย
2. พื้นฐานของชนิด double
การประกาศและกำหนดค่าเริ่มต้นให้ double
วิธีการประกาศตัวแปรชนิด double
มีดังนี้
double myNumber;
double myNumber = 3.14159;
ตัวแปรชนิด double
สามารถกำหนดค่าเป็นเลขทศนิยมได้โดยตรง นอกจากนี้ยังสามารถกำหนดค่าโดยใช้รูปแบบเลขชี้กำลังได้อีกด้วย
double largeNumber = 1.23e4; // 1.23 × 10^4
ขนาดหน่วยความจำและช่วงค่าของ double
double
ใช้หน่วยความจำ 64 บิต (8 ไบต์) สามารถเก็บค่าตั้งแต่ประมาณ ±1.7E±308 ได้ จึงรองรับทั้งเลขจำนวนมากและเลขทศนิยมที่ต้องการความละเอียดสูง

3. การคำนวณและการแปลงชนิดข้อมูลกับ double
การดำเนินการทางคณิตศาสตร์
double
รองรับการดำเนินการพื้นฐาน เช่น การบวก ลบ คูณ หาร เป็นต้น
double a = 5.5;
double b = 2.0;
double sum = a + b;
double difference = a - b;
double product = a * b;
double quotient = a / b;
การแปลงชนิดข้อมูล (Cast)
หากต้องการแปลงค่าจากชนิดข้อมูลอื่นเป็น double
สามารถใช้การ cast เพื่อเปลี่ยนค่า integer ให้กลายเป็นทศนิยมและสามารถคำนวณได้อย่างแม่นยำ
int intVal = 10;
double doubleVal = (double)intVal;
หากลืม cast ขณะคำนวณกับ integer ผลลัพธ์ทศนิยมจะถูกปัดทิ้ง ดังนั้นต้องระมัดระวัง
4. การรับและแสดงผลค่าของ double
การแสดงผลด้วย printf
เมื่อแสดงผลค่าของ double
ด้วย printf
ควรใช้ฟอร์แมต %lf
หากต้องการแสดงแบบเลขชี้กำลังใช้ %le
และหากต้องการให้ระบบเลือกฟอร์แมตที่เหมาะสมให้ใช้ %lg
double pi = 3.14159;
printf("円周率: %lfn", pi);
printf("指数表示: %len", pi);
printf("最適表示: %lgn", pi);
การรับค่าด้วย scanf และการตรวจสอบข้อผิดพลาด
เมื่อต้องการรับค่าจากผู้ใช้เป็น double
ให้ใช้ scanf
และฟอร์แมต %lf
ควรตรวจสอบข้อผิดพลาดทุกครั้งเมื่อรับค่าเข้า
double radius;
printf("円の半径を入力してください: ");
if (scanf("%lf", &radius) != 1) {
printf("入力エラーが発生しましたn");
return 1;
}
printf("入力された半径: %lfn", radius);

5. ขอบเขตและความแม่นยำของ double
ค่าต่ำสุดและค่าสูงสุดของ double
ค่าต่ำสุดและค่าสูงสุดของ double
สามารถตรวจสอบได้ด้วย DBL_MIN
และ DBL_MAX
ที่กำหนดในไฟล์เฮดเดอร์ <float.h>
printf("double型の最小値: %en", DBL_MIN);
printf("double型の最大値: %en", DBL_MAX);
ข้อจำกัดด้านความแม่นยำและจุดที่ควรระวัง
double
มีความแม่นยำประมาณ 15 หลัก แต่การคำนวณเลขทศนิยมอาจเกิดข้อผิดพลาดเนื่องจากการปัดเศษโดยอัตโนมัติ โดยเฉพาะเมื่อคำนวณกับค่าที่เล็กมากหรือใหญ่มากหลายครั้ง
6. ตัวอย่างการใช้งาน double
คำนวณพื้นที่วงกลม
ตัวอย่างการใช้ double
ในการคำนวณพื้นที่วงกลม
double radius = 5.5;
double area = 3.14159 * radius * radius;
printf("円の面積: %lfn", area);
การเปรียบเทียบค่าตัวเลข
สามารถใช้ double
เพื่อเปรียบเทียบขนาดของตัวเลขได้
double x = 3.14;
double y = 2.71;
if (x > y) {
printf("xはyより大きいn");
} else {
printf("xはyより小さいn");
}
การใช้งานในงานคำนวณทางวิทยาศาสตร์
ในการคำนวณทางวิทยาศาสตร์มักใช้ double
เพื่อรองรับค่าที่เล็กหรือใหญ่มาก เช่น การคำนวณค่าคงที่ทางฟิสิกส์หรือการวิเคราะห์เชิงสถิติ
double result = log(10.0); // คำนวณลอการิทึมธรรมชาติ
printf("log(10): %lfn", result);

7. ข้อผิดพลาดที่พบบ่อยและจุดที่ควรระวัง
การหารจำนวนเต็มกับ double
เมื่อกำหนดค่าจากผลหารของจำนวนเต็มสองจำนวนให้กับ double
ผลลัพธ์ทศนิยมจะถูกตัดทิ้งเหลือแค่จำนวนเต็ม
double d = 2 / 3; // ผลลัพธ์คือ 0.0000
สามารถแก้ไขโดยใช้ cast เพื่อให้คำนวณในรูปแบบ double
double d = (double)2 / 3; // จะแสดงผล 0.6666… อย่างถูกต้อง
การจัดการข้อผิดพลาดขณะคำนวณ
การคำนวณด้วย double
อาจเกิดข้อผิดพลาด เช่น การหารด้วยศูนย์หรือโอเวอร์โฟลว์ ดังนั้นควรตรวจสอบค่าทุกครั้งก่อนคำนวณ
double a = 10.0;
double b = 0.0;
if (b != 0.0) {
double result = a / b;
printf("結果: %lfn", result);
} else {
printf("ゼロによる除算はできません。n");
}
ข้อควรคำนึงเรื่องประสิทธิภาพ
double
แม้จะมีความแม่นยำสูง แต่บางครั้งประมวลผลช้ากว่า float
หากไม่ต้องการความละเอียดสูง ควรใช้ float
เพื่อให้ได้ประสิทธิภาพที่ดีกว่า
8. สรุป
double
เป็นชนิดข้อมูลที่สำคัญสำหรับการจัดการตัวเลขทศนิยมที่ต้องการความแม่นยำสูง บทความนี้ได้อธิบายตั้งแต่พื้นฐาน การใช้งานจริง การจัดการข้อผิดพลาด ไปจนถึงเรื่องประสิทธิภาพของ double
หากเข้าใจและใช้งานให้เหมาะสม จะช่วยให้โปรแกรมมีความแม่นยำมากขึ้น