免費開始練習
普考申論題 105年 [資訊處理] 程式設計概要

第 二 題

📖 題組:
三、觀察以下 C++語言之程式,試回答下列問題: int main(){ double a = 0.2 * 0.2, b = 0.04; if(a == b){ cout << "a = b" << endl; } else if(a < b){ cout << "a < b" << endl; } else{ cout << "a > b" << endl; } cout << a << endl << b << endl; }
📝 此題為申論題,共 2 小題

小題 (二)

根據上題(一)之輸出為 a = b、a < b 或 a > b,請說明其原因?(15 分)

思路引導 VIP

看到浮點數(double/float)的四則運算與等號判斷(==),應立刻聯想到「IEEE 754 浮點數精確度」與「二進位儲存誤差」問題。解題關鍵在於指出十進位小數轉二進位時產生的截斷誤差,以及運算後誤差累積的結果,並點出浮點數不可直接使用 '==' 比較的實務觀念。

🤖
AI 詳解
AI 專屬家教

【破題】 本題輸出結果為 a > b,核心考點在於計算機系統中「IEEE 754 浮點數的二進位表示法與運算誤差」。 【論述】

小題 (一)

試問該程式之輸出為何?(10 分)

思路引導 VIP

本題核心考點為「浮點數的精度誤差」。看到浮點數(小數)直接進行等號比較時,必須警覺二進位無法精確表示 0.2 等十進位小數,這會導致乘法運算後產生微小的位元誤差,最後再結合 cout 的預設輸出精度即可推斷出正確結果。

🤖
AI 詳解
AI 專屬家教

【解題關鍵】IEEE 754 浮點數在二進位轉換時的精度誤差與 cout 的預設顯示精度。 【詳解】 一、變數賦值與運算:

🏷️ 相關主題

程式語言與演算法實作
查看更多「[資訊處理] 程式設計概要」的主題分類考古題