Сообщить об ошибке.

Сигнальные флаги модуля decimal

Сигналы представляют условия, которые возникают во время вычислений. Каждый соответствует одному флагу контекста и одному активатору ловушки контекста.

Флаг контекста устанавливается всякий раз, когда встречается условие. После вычисления флаги могут быть проверены в информационных целях, например чтобы определить, было ли вычисление точным. После проверки флагов обязательно очистите все флаги перед началом следующего вычисления.

Если для сигнала установлен контекстный прерыватель ловушки, то условие вызывает исключение Python. Например, если ловушка установлена DivisionByZero, то возникает исключение DivisionByZero.

Содержание:


Иерархия сигналов модуля decimal:

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)

decimal.Clamped:

Класс decimal.Clamped сигнализирует об изменении показателя степени, чтобы соответствовать ограничениям представления.

Как правило, ограничение происходит, когда показатель степени выходит за пределы контекста Emin и Emax. Если возможно, показатель степени уменьшается, добавляя нули к коэффициенту.

decimal.DecimalException:

Базовый класс для других сигналов и подкласс исключения ArithmeticError.

decimal.DivisionByZero:

Класс decimal.DivisionByZero сигнализирует о делении бесконечного числа на ноль.

Может произойти с делением, делением по модулю или при увеличении числа до отрицательной степени. Если этот сигнал не захвачен, возвращает Infinity или -Infinity со знаком, определяемым входными данными для расчета.

decimal.Inexact:

Класс decimal.Inexact указывает, что произошло округление и результат не является точным.

Сигнал происходит, когда ненулевые цифры отбрасывались во время округления. Округленный результат возвращается. Чтобы обнаружить, когда результаты являются неточными используются сигнальный флаг или ловушка.

decimal.InvalidOperation:

Класс decimal.InvalidOperation указывает, что была выполнена недопустимая операция или операция которая не имеет смысла.

Возможные причины включают:

Infinity - Infinity
0 * Infinity
Infinity / Infinity
x % 0
Infinity % x
sqrt(-x) and x > 0
0 ** 0
x ** (non-integer)
x ** Infinity

decimal.Overflow:

Класс decimal.Overflow указывает, на числовое переполнение.

Указывает, что показатель степени превышает Emax после округления. Если не захвачен, то результат зависит от режима округления или уходит к наибольшему представимому конечному числу или округляя до Infinity. В любом случае сигнализируются Inexact и Rounded.

decimal.Rounded:

Класс decimal.Rounded указывает, что произошло округление, хотя, возможно, информация не была потеряна.

Сигнализируется всякий раз, когда округление сбрасывает цифры. Даже если эти цифры равны нулю, например округление от 5,00 до 5,0. Если не захвачен ловушкой trap, возвращает результат без изменений. Этот сигнал используется для обнаружения потери значащих цифр.

decimal.Subnormal:

Класс decimal.Subnormal указывает, что экспонента была ниже, чем Emin до округления.

Происходит, когда результат операции является ненормальным, т. е. показатель степени слишком мал. Если не захвачен trap, возвращает результат без изменений.

decimal.Underflow:

Класс decimal.Underflow указывает, что произошло числовое занижение с результатом, округленным до нуля.

Происходит, когда субнормальный результат сводится к нулю округлением. Также сигнализируются decimal.Inexact и decimal.Subnormal.

decimal.FloatOperation:

Класс decimal.FloatOperation включает более строгую семантику для смешивания чисел с плавающей точкой и десятичных дробей.

Если сигнал не захвачен (по умолчанию), то разрешено смешивание десятичных чисел Decimal и float в конструкторе decimal.Decimal(), Context.create_decimal() и всех операторах сравнения.

  • Обе операции преобразования и сравнения являются точными.
  • Любое возникновение смешанной операции записывается без вывода сообщений, устанавливая FloatOperation в контекстных флагах.
  • Явные преобразования с помощью Decimal.from_float() или Context.create_decimal_from_float() флаг не устанавливают.

В противном случае, когда сигнал захвачен в ловушку, только сравнения на равенство и явные преобразования не будут вызывать исключений. Все остальные смешанные операции вызывают FloatOperation.