語法書 / AA 競程語法書 下冊 / 第九單元 / 本單元重點回顧

本單元重點回顧

  1. 小數用 double:約 15 \sim 16 位有效數字;float 精度不足,競程不用;long double 是精度救兵。

  2. cout 預設輸出:最多 6 位有效數字,太大或太小改科學記號(ae+b 就是 a \times 10^b),多餘的零不印。

  3. 輸出格式自己控制fixed << setprecision(k) 固定小數點後 k 位;沒有 fixedsetprecision 是「k 位有效數字」——兩個一定成對寫。

  4. 混合運算看兩邊:兩個整數相除還是整數除法;要小數就先讓一邊變浮點((double)a / b1.0 * a / b),事後補救來不及。

  5. 浮點數=二進位的科學記號:正負號+指數+尾數三段。小數點靠指數「浮動」,精度由尾數決定。

  6. 誤差的兩個來源:多數小數(如 0.1)存進去就不準;運算逐步累積。超過 2^{53}(約 9 \times 10^{15})的整數,double 也存不準。

  7. 浮點數不用 ==:用 EPS——abs(a - b) < EPS 視為相等;「明顯小於」寫 a < b - EPS

  8. 誤差要求看得懂:絕對誤差 |v - ans|、相對誤差 \frac{|v-ans|}{|ans|};應對方式是把位數印好印滿(setprecision(12))。

  9. cmath 工具箱sqrtcbrtfloor(向下)、ceil(向上)、round(四捨五入,回傳浮點數);pow 又慢又不準,整數次方用連乘。

  10. 轉型是向零捨去(int)3.83(int)-2.9-2——負數時和 floor 分家;四捨五入成整數寫 (long long)round(x)

  11. 能用整數就用整數:大整數判斷、上取整 (A+B-1)/B、分數交叉相乘都有純整數寫法;sqrt 這類必須浮點的,拿近似值後用整數修正。