1. C語言中的double型別概述
什麼是double型別
double
型別是在C語言中用來處理浮點數的資料型別。它佔用64位元(8位元組)的記憶體,可以處理非常高精度和廣泛範圍的數值。由於這些特性,double
型別廣泛應用於科學運算和金融計算等需要高度精確度的場合。
與float型別的差異
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)。透過cast,可以將整數轉換成浮點數,以進行更高精度的運算。
int intVal = 10;
double doubleVal = (double)intVal;
若忘記型別轉換,整數的運算結果會捨去小數點以下,請特別注意。
4. double型別的輸入與輸出
使用printf函數輸出
要用printf
輸出double
型別數值時,需使用格式化符號%lf
。若要以科學記號顯示可用%le
,以最佳格式顯示可用%lg
。
double pi = 3.14159;
printf("圓周率: %lf\n", pi);
printf("科學記號: %le\n", pi);
printf("最佳格式: %lg\n", pi);
使用scanf函數輸入與錯誤檢查
從用戶輸入double
型別時,需搭配scanf
和%lf
格式化符號。為避免輸入錯誤,建議進行錯誤檢查。
double radius;
printf("請輸入圓的半徑: ");
if (scanf("%lf", &radius) != 1) {
printf("輸入發生錯誤\n");
return 1;
}
printf("輸入的半徑: %lf\n", radius);

5. double型別的範圍與精度
double型別的最小值與最大值
double
型別的最小值與最大值,可透過<float.h>
標頭檔案中的DBL_MIN
和DBL_MAX
來取得。
printf("double型別最小值: %e\n", DBL_MIN);
printf("double型別最大值: %e\n", DBL_MAX);
精度限制與注意事項
double
型別雖然有約15位數精度,但浮點運算可能發生四捨五入誤差。特別是反覆計算極小或極大的數時,需留意精度損失。
6. double型別的實用範例
計算圓面積
以下示範如何用double
型別計算圓的面積。
double radius = 5.5;
double area = 3.14159 * radius * radius;
printf("圓的面積: %lf\n", 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): %lf\n", 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("結果: %lf\n", result);
} else {
printf("不能除以零。\n");
}
效能考量
double
型別雖有高精度,但相較於float
型別,運算速度可能較慢。若不需要高精度,選用float
型別可提升效能。
8. 小結
double
型別是處理高精度浮點數時不可或缺的資料型別。本文從基本用法到實例、錯誤處理及效能考量,全面說明double
型別。了解其特性並正確運用,可開發更精確的程式。