<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                這一節詳細說明 “0.1” 示例,教你怎樣自己去精確的分析此類案例。假設這里你已經對浮點數表示有基本的了解。 _Representation error_?提及事實上有些(實際是大多數)十進制小數不能精確的表示為二進制小數。這是 Python (或 Perl,C,C++,Java,Fortran 以及其它很多)語言往往不能按你期待的樣子顯示十進制數值的根本原因: ~~~ >>> 0.1 + 0.2 0.30000000000000004 ~~~ 這是為什么? 1/10 不能精確的表示為二進制小數。大多數今天的機器(2000年十一月)使用 IEEE-754 浮點數算法,大多數平臺上 Python 將浮點數映射為 IEEE-754 “雙精度浮點數”。754 雙精度包含 53 位精度,所以計算機努力將輸入的 0.1 轉為 J/2**N 最接近的二進制小數。_J_?是一個 53 位的整數。改寫: 1 / 10 ~= J / (2**N) 為: J ~= 2**N / 10 J 重現時正是 53 位(是 >= 2**52 而非 < 2**53 ), N 的最佳值是 56: ~~~ >>> 2**52 4503599627370496 >>> 2**53 9007199254740992 >>> 2**56/10 7205759403792793 ~~~ 因此,56 是保持 J 精度的唯一 N 值。J 最好的近似值是整除的商: ~~~ >>> q, r = divmod(2**56, 10) >>> r 6 ~~~ 因為余數大于 10 的一半,最好的近似是取上界: ~~~ >>> q+1 7205759403792794 ~~~ 因此在 754 雙精度中 1/10 最好的近似值是是 2**56,或: 7205759403792794 / 72057594037927936 要注意因為我們向上舍入,它其實比 1/10 稍大一點點。如果我們沒有向上舍入,它會比 1/10 稍小一點。但是沒辦法讓它 恰好 是 1/10! 所以計算機永遠也不 “知道” 1/10:它遇到上面這個小數,給出它所能得到的最佳的 754 雙精度實數: ~~~ >>> .1 * 2**55 7205759403792794.0 ~~~ 如果我們把這小數乘以 10**55,我們可以看到其55位十進制數的值: ~~~ >>> 3602879701896397 * 10 ** 55 // 2 ** 55 1000000000000000055511151231257827021181583404541015625 ~~~ 這表示存儲在計算機中的實際值近似等于十進制值 0.1000000000000000055511151231257827021181583404541015625。許多語言(包括舊版本的Python)會把結果舍入到17位有效數字,而不是顯示全部的十進制值: ~~~ >>> format(0.1, '.17f') '0.10000000000000001' ~~~ fractions?和?decimal?模塊使得這些計算很簡單: ~~~ >>> from decimal import Decimal >>> from fractions import Fraction >>> Fraction.from_float(0.1) Fraction(3602879701896397, 36028797018963968) >>> (0.1).as_integer_ratio() (3602879701896397, 36028797018963968) >>> Decimal.from_float(0.1) Decimal('0.1000000000000000055511151231257827021181583404541015625') >>> format(Decimal.from_float(0.1), '.17') '0.10000000000000001' ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看