ความเข้าใจเกี่ยวกับชนิดข้อมูล double ในภาษา C: พื้นฐาน ตัวอย่าง และข้อควรระวัง

目次

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 หากเข้าใจและใช้งานให้เหมาะสม จะช่วยให้โปรแกรมมีความแม่นยำมากขึ้น

侍エンジニア塾