double v = 4 / 3 * pi * r * r * r; // 錯誤寫法
輸出的體積 v 明顯偏小(實際上等於 pi * r³),4/3 似乎被「忽略」了。
4 和 3 均為 int 字面量,屬於整數類型。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 / int | int(截斷) | 5 / 2 = 2 |
| double / int | double | 5.0 / 2 = 2.5 |
| int / double | double | 5 / 2.0 = 2.5 |
| float / int | float | 5.0f / 2 = 2.5f |
1.0/2、100.0f/3。(double)a / b。const double PI = 3.14159265358979323846; // 高精度
const double FOUR_THIRDS = 4.0 / 3.0; // 預計算常量
double v = FOUR_THIRDS * PI * r * r * r; // 清晰、高效
理解整數除法特性,是 C/C++ 從入門到進階的必經之路。細節決定精度,習慣決定質量。