」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼 C++ 中的浮點運算會導致精確度錯誤?

為什麼 C++ 中的浮點運算會導致精確度錯誤?

發佈於2024-11-24
瀏覽:650

Why Does Floating-Point Arithmetic in C   Lead to Precision Errors?

C 中的浮點精度

在 C 中,浮點數精確到一定的小數位數。然而,這種精確度是有限制的,這可能會導致意外的結果。

問題陳述

考慮以下程式碼片段:

double a = 0.3;
std::cout.precision(20);
std::cout 

如圖所示,a 略小於 0.3,但乘以 50 時,b 會略大於 15.0。與預期結果的偏差可歸因於浮點精度的限制。

解決方案

要獲得正確的結果,避免設定精度高於數位類型的可用精度。以下修改後的程式碼片段示範了這種方法:

#include 
#include 
int main() {
  double a = 0.3;
  std::cout.precision(std::numeric_limits::digits10);
  std::cout ::digits10);
  std::cout 

此方法可確保將精度設定為雙精度資料類型可用的最大值。需要注意的是,如果循環運行明顯更多的迭代次數(例如 5000 次而不是 50 次),則無論精度設定如何,累積誤差最終都會變得明顯。這是浮點運算的固有限制。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3