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

C++ 經典坑:整數除法導致球體體積計算結果為 0

     編輯:程式設計綜合問答

問題代碼

double v = 4 / 3 * pi * r * r * r; // 錯誤寫法

輸出的體積 v 明顯偏小(實際上等於 pi * r³),4/3 似乎被「忽略」了。

根本原因:整數除法截斷

  • 4 和 3 均為 int 字面量,屬於整數類型。
  • C++ 中 整數相除結果仍為整數,小數部分直接截斷(向零取整)。
  • 4 / 3 = 1(而非 1.333...),導致公式實際計算為 1 * pi * r³。

正確寫法:引入浮點數字面量

只需將任一操作數改為浮點型,即觸發隱式類型提升,進行浮點除法:

double v = 4.0 / 3 * pi * r * r * r;  // 推薦:4.0 是 double
double v = 4 / 3.0 * pi * r * r * r;  // 同理
double v = 4.0 / 3.0 * pi * r * r * r; // 更明確

類型提升規則速查

運算元類型結果類型示例
int / intint(截斷)5 / 2 = 2
double / intdouble5.0 / 2 = 2.5
int / doubledouble5 / 2.0 = 2.5
float / intfloat5.0f / 2 = 2.5f

避坑指南

  1. 常量參與除法時,習慣加 `.0` 或 `.0f`,如 1.0/2、100.0f/3。
  2. 變量除法:確保至少一方為浮點型,必要時強制轉換 (double)a / b。
  3. 編譯器警告:開啟 `-Wextra` (GCC/Clang) 或 `/W4` (MSVC) 可捕獲此類隱式截斷。

延伸:定義常量的最佳實踐

const double PI = 3.14159265358979323846; // 高精度
const double FOUR_THIRDS = 4.0 / 3.0;     // 預計算常量
double v = FOUR_THIRDS * PI * r * r * r;  // 清晰、高效

理解整數除法特性,是 C/C++ 從入門到進階的必經之路。細節決定精度,習慣決定質量。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved