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