首頁 > 後端開發 > C++ > 主體

為什麼 C 語言中的浮點運算會導致精確度問題?

DDD
發布: 2024-11-04 11:20:02
原創
879 人瀏覽過

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

C 中的浮點精確度怪癖

C 中的浮點運算表現出可能違反直覺的行為。考慮以下內容:

表達式 double a = 0.3;將邏輯上表示 0.3 的值賦給變數 a。然而, std::cout 的輸出

同樣,在 a 與 b 重複相加的循環中,循環結束時的結果(50 次迭代)是“15.000000000000014211”,該值高於應有的值。此結果示範了捨入誤差如何在多次運算中累積。

為了規避這些精確度問題,避免將浮點數值的精確度設定為高於資料型別的實際精確度非常重要。這可以使用以下方法來實現:

<code class="cpp">#include <iostream>
#include <limits>

int main() {
    double a = 0.3;
    std::cout.precision(std::numeric_limits<double>::digits10);
    std::cout << a << std::endl;

    double b = 0;
    for (char i = 1; i <= 50; i++) {
        b = b + a;
    }

    std::cout.precision(std::numeric_limits<double>::digits10);
    std::cout << b << std::endl;
}</code>
登入後複製

透過將精度設定為雙精度資料類型的最大可用精度,輸出將準確表示儲存的值。然而,如果循環運行明顯更多的迭代次數(例如 5000 次而不是 50 次),由於浮點運算的固有限制,累積誤差仍然會變得明顯。

以上是為什麼 C 語言中的浮點運算會導致精確度問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!