首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言 double 型別詳細說明:浮點數儲存與精度特性

     編輯:C 語言問答

C 語言 double 型別完整解析

基本定義

double (雙精度浮點數) 是 C 語言基本資料型別之一,用於儲存**帶小數點的實數**,精度與範圍均優於 float。

型別對照表 (IEEE 754 標準,典型 64 位元系統)

型別位元數有效位數 (十進位)範圍約略記憶體
float32~6-7 位±3.4e-38 ~ ±3.4e+384 bytes
double64~15-16 位±1.7e-308 ~ ±1.7e+3088 bytes
long double80/128~18-33 位更大10/16 bytes

宣告與初始化範例

double price = 19.99;
double pi = 3.14159265358979323846;
double scientific = 6.022e23;      // 科學記號
double negative = -273.15;
double fromInt = 42;               // 隱含轉換 int → double

格式化輸入輸出

操作格式字串範例
scanf 讀取%lfscanf("%lf", &d);
printf 輸出%f (預設 6 位小數)printf("%.2f", d); → 兩位小數
科學記號輸出%e / %Eprintf("%e", d); → 1.999000e+01
自動選擇%g / %G短者優先,移除尾隨零

常見陷阱與最佳實務

陷阱說明對策
浮點數直接比較相等if (a == b) 因精度誤差常失效用 fabs(a-b) < EPSILON (如 1e-9)
累加誤差大量浮點數加總產生誤差Kahan Summation 演算法、用 long double 累加
整數除法截斷double d = 5/2; → 2.0 (整數除法先算)5.0/2 或 (double)5/2
scanf("%f", &d) 讀 double%f 對應 float,讀 double 需 %lf編譯器警告 -Wformat 會提示

標準庫數學函數 (<math.h>)

double sqrt(double x);      // 平方根
double pow(double x, double y); // x^y
double sin(double x);       // 弧度制
double cos(double x);
double log(double x);       // 自然對數
double exp(double x);       // e^x
double fabs(double x);      // 絕對值
double floor(double x);     // 向下取整
double ceil(double x);      // 向上取整

編譯時需連結數學庫:gcc -lm main.c (GCC/Clang),MSVC 自動連結。

何時選用 double vs float

  • 預設用 double:現代 CPU 浮點運算單元原生 64 位元,double 不慢反而更準
  • 用 float:大量陣列 (記憶體/頻寬敏感)、GPU 計算、嵌入式無 FPU、網路傳輸封包
  • 用 long double:極高精度科學計算、金融利息精算
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved