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

C 語言海倫公式求三角形面積為 0:整數除法導致精度丟失

     編輯:程式設計綜合問答

代碼截圖顯示使用 int 類型計算半周長 p = (a+b+c)/2,導致整數除法截斷小數部分。例如邊長 3,4,5 時 p=6 正確;但邊長 2,3,4 時 p=4(實際 4.5),後續 p-c = 0 導致面積為 0。

錯誤代碼

int a, b, c, p;
p = (a + b + c) / 2;      // 整數除法
double s = sqrt(p * (p-a) * (p-b) * (p-c));

修正方案

double a, b, c, p;        // 全部改為 double
p = (a + b + c) / 2.0;    // 強制浮點除法
double s = sqrt(p * (p-a) * (p-b) * (p-c));

知識點總結

  • C/C++ 中 int / int → int,截斷向零取整
  • 至少一個操作數為浮點類型才進行浮點除法
  • 幾何計算、物理模擬、金融計算**默認使用 double**
  • 輸出格式 printf("%.2f", s) 控制精度

調試技巧

遇到數值異常優先打印中間變量(p、p-a 等),定位精度丟失位置。

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