浮點數加減乘除運算會遇到哪些問題?

更新 發佈閱讀 4 分鐘

浮點數運算看似與數學課本上的實數運算無異,但由於電腦內部使用二進制和有限位數來儲存數字(遵循 IEEE 754 標準),在實際程式設計中會遇到許多意想不到的「陷阱」。

這些問題主要可以歸納為三大類:精度誤差比較失效以及特殊值異常。以下我為你詳細拆解這些問題及其背後的原理。

1. 精度誤差:為什麼 0.1 + 0.2 ≠ 0.3?

這是最經典也最讓人頭痛的浮點數問題。

  • 現象:在大多數程式語言(如 Python, JavaScript, C++)中,計算 0.1 + 0.2 得到的結果不是 0.3,而是 0.30000000000000004
  • 原因二進制無法精確表示某些十進制小數
    • 就像十進制無法精確表示 1/3(只能寫成 0.333...),二進制也無法精確表示十進制的 0.1。0.1 在二進制中是一個無限循環小數(0.0001100110011...)。
    • 由於記憶體有限(雙精度浮點數尾數僅 52 位),電腦必須將這個無限小數「截斷」或「捨入」,從而產生了微小的捨入誤差。
  • 誤差累積:單次運算的誤差很小,但在循環累加(例如累加 10000 次 0.0001)或迭代計算中,這些微小誤差會不斷疊加,最終導致結果嚴重偏離理論值。

2. 比較失效:直接比較浮點數是危險的

由於上述的精度誤差,直接使用等於號(==)來判斷兩個浮點數是否相等,往往會導致邏輯錯誤。

  • 現象:程式碼 if (0.1 + 0.2 == 0.3) 的判斷結果通常是 False
  • 原因:左邊是經過運算後的近似值(0.3000...04),右邊是字面量 0.3 的近似值,兩者在二進制底層並不完全相同。
  • 正確做法:通常會定義一個極小的閾值(稱為 Epsilon,如 1e-9),判斷兩數之差的絕對值是否小於這個閾值。

3. 數量級差異導致的「吞噬」現象

當兩個數值量級相差懸殊時進行加減運算,較小的數可能會被「吃掉」。

  • 現象:計算 1e16 + 1(即 10,000,000,000,000,000 + 1),結果仍然是 1e16,那個 1 憑空消失了。
  • 原因對階時的精度丟失
    • 浮點數加減法需要先將指數對齊(讓小數點位置一致)。為了將小數的指數對齊到大數,小數的尾數必須向右移位。
    • 當差距過大時,小數的有效數位會被移出儲存範圍,最終被捨棄,導致「大數吞小數」。

4. 特殊值與運算異常(Inf 與 NaN)

當運算結果超出浮點數能表示的範圍,或進行無意義的數學運算時,會產生特殊值。

  • 溢出(Overflow)與無窮大(Inf)
    • 當計算結果超過浮點數能表示的最大值(例如 float 約為 3.4e38),結果會變成 Inf(無窮大)。例如 1.0e30 * 1.0e30 會得到 Inf。
  • 下溢(Underflow)
    • 當結果過於接近 0,小於最小正浮點數時,會被視為 0.0。
  • 非數字(NaN, Not a Number)
    • 進行無意義的運算會產生 NaN,例如 0.0 / 0.0、∞ - ∞、√(-1) 或 sin(Inf)。
    • 傳染性:NaN 具有傳染性,任何涉及 NaN 的運算(如 5 + NaN),結果都會變成 NaN,這在科學計算中常導致整個數據集失效。
  • 除以零
    • 雖然整數除以零通常會導致程式崩潰(Exception),但在浮點數運算中,1.0 / 0.0 通常會返回 Inf 而不是直接崩潰,這有時會掩蓋程式邏輯錯誤。

📊 問題總結與對策表

vocus|新世代的創作平台

理解這些問題能幫助你在編寫涉及數學運算的程式時,避開這些隱形的「地雷」,寫出更健壯的代碼。



留言
avatar-img
sirius數字沙龍
18會員
428內容數
吃自助火鍋啦!不要客氣,想吃啥,請自行取用!
sirius數字沙龍的其他內容
2026/04/07
IEEE 754 標準不僅僅是教科書裡的理論,它幾乎是現代所有數位技術的基石。從你手機裡的遊戲畫面到銀行系統的利息計算,背後都依賴這個標準來處理帶有小數點的數字。 根據我整理的資料,IEEE 754 的實際應用主要分佈在以下幾個關鍵領域,每個領域對精度和效率的權衡都有所不同: 🎮 1. 電腦圖形
Thumbnail
2026/04/07
IEEE 754 標準不僅僅是教科書裡的理論,它幾乎是現代所有數位技術的基石。從你手機裡的遊戲畫面到銀行系統的利息計算,背後都依賴這個標準來處理帶有小數點的數字。 根據我整理的資料,IEEE 754 的實際應用主要分佈在以下幾個關鍵領域,每個領域對精度和效率的權衡都有所不同: 🎮 1. 電腦圖形
Thumbnail
2026/04/07
八進制(Octal)其實就是二進制的一個「壓縮版本」,規則非常簡單而優雅: 👉 1 個八進制位 = 3 個二進制位(bit) 因為: 8 = 2^3 一、核心對照表(一定要熟) 二、二進制 → 八進制 方法:每 3 位分一組(從右開始) 範例 1 二進制:110101
Thumbnail
2026/04/07
八進制(Octal)其實就是二進制的一個「壓縮版本」,規則非常簡單而優雅: 👉 1 個八進制位 = 3 個二進制位(bit) 因為: 8 = 2^3 一、核心對照表(一定要熟) 二、二進制 → 八進制 方法:每 3 位分一組(從右開始) 範例 1 二進制:110101
Thumbnail
2026/04/07
二進制(Binary)和十六進制(Hexadecimal)之間的轉換,其實是電腦世界最重要、也最簡單的一種換算。因為它們之間有一個完美關係: 👉 1 個十六進制位 = 4 個二進制位(bit) 這讓轉換變得非常直覺。 一、先記住對照表(核心) 十六進制二進制 👉 A~F 代表 10~15
Thumbnail
2026/04/07
二進制(Binary)和十六進制(Hexadecimal)之間的轉換,其實是電腦世界最重要、也最簡單的一種換算。因為它們之間有一個完美關係: 👉 1 個十六進制位 = 4 個二進制位(bit) 這讓轉換變得非常直覺。 一、先記住對照表(核心) 十六進制二進制 👉 A~F 代表 10~15
Thumbnail
看更多
你可能也想看
Thumbnail
本文接續介紹IEEE所認可的輸入法(Input)以及直接量測法(Direct Measurement),兩種馬達量測方式。 輸入法: 馬達轉矩係經由計算馬達輸入功率後,再扣除馬達本體的損失,包括銅損、鐵損等等而得;如下列的數學計算式。其中,T為馬達轉矩,ω為馬達角速度,Pin為輸入功率、 Ptl為馬
Thumbnail
本文接續介紹IEEE所認可的輸入法(Input)以及直接量測法(Direct Measurement),兩種馬達量測方式。 輸入法: 馬達轉矩係經由計算馬達輸入功率後,再扣除馬達本體的損失,包括銅損、鐵損等等而得;如下列的數學計算式。其中,T為馬達轉矩,ω為馬達角速度,Pin為輸入功率、 Ptl為馬
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
In today's interconnected world, efficient and reliable network infrastructure is crucial for businesses and organizations. Power over Ethernet (PoE)
Thumbnail
In today's interconnected world, efficient and reliable network infrastructure is crucial for businesses and organizations. Power over Ethernet (PoE)
Thumbnail
全球通訊領域的頂級盛會——2025年IEEE全球通訊會議 (IEEE GLOBECOM) 近日在台北隆重登場。作為白金級贊助商,鴻海集團(Foxconn)在此次會議上展示了其在 6G、低軌衛星(LEO)、AI高速傳輸 等領域的最新佈局,勾勒出一個「從太空到地面」的全域通訊未來藍圖。 對於敏銳的投資
Thumbnail
全球通訊領域的頂級盛會——2025年IEEE全球通訊會議 (IEEE GLOBECOM) 近日在台北隆重登場。作為白金級贊助商,鴻海集團(Foxconn)在此次會議上展示了其在 6G、低軌衛星(LEO)、AI高速傳輸 等領域的最新佈局,勾勒出一個「從太空到地面」的全域通訊未來藍圖。 對於敏銳的投資
Thumbnail
投稿前的最後一哩路,藏著三個足以讓好論文「死在起點」的系統性風險:30%擴展規則的誤解、arXiv預印本的時機與匿名性管理失當、以及自引失衡所引發的審稿人偏見。了解它們的觸發機制,是完成投稿前最後一道「防雷」功課。
Thumbnail
投稿前的最後一哩路,藏著三個足以讓好論文「死在起點」的系統性風險:30%擴展規則的誤解、arXiv預印本的時機與匿名性管理失當、以及自引失衡所引發的審稿人偏見。了解它們的觸發機制,是完成投稿前最後一道「防雷」功課。
Thumbnail
Associate Editor(AE)不是論文的第一個讀者,他是論文的第一個裁判。根據IEEE的AE操作指引,每位AE在收到論文分配後7天內,必須判斷該論文是否應被「立即拒稿(Immediate Reject)」。讀懂AE前5分鐘在做什麼,是讓論文通過初篩的關鍵技能。
Thumbnail
Associate Editor(AE)不是論文的第一個讀者,他是論文的第一個裁判。根據IEEE的AE操作指引,每位AE在收到論文分配後7天內,必須判斷該論文是否應被「立即拒稿(Immediate Reject)」。讀懂AE前5分鐘在做什麼,是讓論文通過初篩的關鍵技能。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文深入剖析 IEEE TIFS與 IEEE TDSC兩本頂級期刊的論文選題格局、新穎性定義及常見的拒稿原因。文章更歸納了三類常見的、註定被拒的研究類型:數據集重複、範疇錯配與邊際貢獻的過度包裝,並提供了選題定位、新穎性自查、範疇匹配確認及被拒論文再分析等可操作的建議。
Thumbnail
本文深入剖析 IEEE TIFS與 IEEE TDSC兩本頂級期刊的論文選題格局、新穎性定義及常見的拒稿原因。文章更歸納了三類常見的、註定被拒的研究類型:數據集重複、範疇錯配與邊際貢獻的過度包裝,並提供了選題定位、新穎性自查、範疇匹配確認及被拒論文再分析等可操作的建議。
Thumbnail
💡什麼是IEEE ISPSD?為什麼這麼重要? IEEE ISPSD 全名是「國際功率半導體與IC設計研討會」,是功率元件領域全球最頂尖的學術會議之一~能夠獲選發表、甚至被會議肯定的技術,不但要創新,還要具備實務應用價值。
Thumbnail
💡什麼是IEEE ISPSD?為什麼這麼重要? IEEE ISPSD 全名是「國際功率半導體與IC設計研討會」,是功率元件領域全球最頂尖的學術會議之一~能夠獲選發表、甚至被會議肯定的技術,不但要創新,還要具備實務應用價值。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
選刊是論文投稿流程中最被低估的決策環節。許多研究者在完成論文後才考慮「要投哪本刊」,卻不知道這個問題其實應該在研究問題成型之初就已確定。選對了刊,等於論文成功了一半;選錯了刊,再好的工作也難逃desk rejection的命運。
Thumbnail
選刊是論文投稿流程中最被低估的決策環節。許多研究者在完成論文後才考慮「要投哪本刊」,卻不知道這個問題其實應該在研究問題成型之初就已確定。選對了刊,等於論文成功了一半;選錯了刊,再好的工作也難逃desk rejection的命運。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News