iT邦幫忙

2024 iThome 鐵人賽

DAY 29
0
Python

Python 數值與數學模組介紹與應用系列 第 29

Day29.04.decimal — 十進制定點和浮點算術13

  • 分享至 

  • xImage
  •  

訊號

訊號代表在計算期間引發的條件。每個訊號對應於一個上下文旗標和一個上下文陷阱啟用器。上下文旗標會在遇到特定條件時設定,偵測旗標後可以獲得計算的詳細資訊。在開始下一次計算之前,應確保清除所有旗標。如果為訊號設定了上下文陷阱啟用器,則在遇到條件時會引發特定的Python異常。

主要訊號類別

  • decimal.Clamped

    • 描述: 修改指數以符合表示限制。通常當指數值超出上下文的 EminEmax 限制時發生限位。會向係數添加零來將指數縮減至符合限制。
  • decimal.DecimalException

    • 描述: 所有其他訊號的基底類,繼承自 ArithmeticError
  • decimal.DivisionByZero

    • 描述: 當非無限數被零除時發生此訊號。可能在除法、取餘除法或對一個數進行負數次冪運算時發生。如果此訊號未被陷阱捕獲,則會返回 Infinity-Infinity,由計算的輸入決定正負符號。
  • decimal.Inexact

    • 描述: 表示發生了舍入且結果是不精確的。當舍入期間丟棄了非零數位時發生。此訊號旗標或陷阱用於偵測結果不精確的情況。
  • decimal.InvalidOperation

    • 描述: 表示執行了一個無效的操作。如果未被捕獲,則返回 NaN。可能的原因包括:
      • Infinity - Infinity
      • 0 * Infinity
      • Infinity / Infinity
      • x % 0
      • Infinity % x
      • sqrt(-x)x > 0
      • 0 ** 0
      • x ** (non-integer)
      • x ** Infinity
  • decimal.Overflow

    • 描述: 表示數值溢出。當舍入後指數值大於 Context.Emax 時發生。如果未被捕獲,結果將取決於舍入模式,向下舍入為最大的可表示有限數值,或向上舍入為 Infinity。無論哪種情況,都會發出 InexactRounded 訊號。
  • decimal.Rounded

    • 描述: 當發生舍入且可能丟失資訊時發出此訊號。即使丟棄的數字是零(如將 5.00 舍入到 5.0),也會發出此訊號。如果未被捕獲,則會返回未修改的結果。此訊號用於偵測有效位數的丟棄。
  • decimal.Subnormal

    • 描述: 當操作結果是次標準數(即指數過小)時發出此訊號。如果未被陷阱捕獲,則不會修改結果。
  • decimal.Underflow

    • 描述: 當一個次標準數結果經過舍入轉為零時發出此訊號。同時也會引發 InexactSubnormal 訊號。
  • decimal.FloatOperation

    • 描述: 當 floatDecimal 的混合運算啟用更嚴格的語意。如果訊號未被捕獲(預設),則允許 floatDecimal 的混合,並且轉換和比較都是完全精確的。發生的任何混合運算都會透過在上下文旗標中設定 FloatOperation 來靜默地記錄。透過 from_float()create_decimal_from_float() 進行明確轉換則不會設定旗標。在其他情況下(即訊號被捕獲),則只靜默執行相等性比較和明確轉換,所有其他混合運算都會引發 FloatOperation

訊號層級結構

以下表格總結了訊號的層級結構:

exceptions.ArithmeticError(exceptions.Exception)
    └── DecimalException
        ├── Clamped
        ├── DivisionByZero (DecimalException, exceptions.ZeroDivisionError)
        ├── Inexact
        │   ├── Overflow (Inexact, Rounded)
        │   └── Underflow (Inexact, Rounded, Subnormal)
        ├── InvalidOperation
        ├── Rounded
        ├── Subnormal
        └── FloatOperation (DecimalException, exceptions.TypeError)

上一篇
Day28.04.decimal — 十進制定點和浮點算術12
下一篇
Day30.04.decimal — 十進制定點和浮點算術14
系列文
Python 數值與數學模組介紹與應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言