Numeric and Mathematical Modules Волков Никита
Эта тема включает в себя следующие модули: 1)numbers - Этот модуль содержит абстрактные базовые классы и включает в себя классы Number, Complex, Real, Rational и Integral. 2)math - В этих модулях собраны математические функции для действительных аргументов(cos(х), asin(х), log(х), sqrt(х)…). 3)cmath - В этом модуле собраны функции для комплексных аргументов (z == z.real + z.imag*1j, в основном функции те же что и для math). 4)decimal - Модуль оказывает поддержку для десятичной арифметики плавающей запятой 5)fractions - Этот модуль реализует класс Rational. Модуль поддерживает арифметику рациональных чисел. 6)random - Этот модуль генерирует случайные числа. 7)itertools - Этот модуль содержит набор функций для работы с итераторами. 8)functools - М одуль для функций, которые действуют на функции или возвращают другие функции. 9)operator - Описание стандартных операторов как функций( operator.add(x,y)~x+y )
Числа в питоне: Числа в питоне поддаются следующей иерархии: модуль number описывает каждый из этих классов, для примера рассмотрим комплексные числа: class numbers.Complex real возвращает вещественную часть числа (1+3j).real == 1 imag возвращает мнимую часть числа (1+3j).imag == 3 conjugate() возвращает сопряженное число, (1+3j).conjugate() == (1-3j).
random в Python Для генерирования случайных чисел Python использует Mersenne Twister как основной генератор. Вкратце о нем: Отличие этого генератора от других в его большом периоде значений, отсутствие каких либо предсказуемости и статистических зависимостей. Mersenne Twister основывается на свойствах простых чисел Мерсенна и обеспечивает быструю генерацию случайных чисел. Числа Мерсенна числа вида M_n = 2 n – 1( … ) Основные функции модуля: random() - генерирует случайное число из промежутка [0.0, 1.0 ). choice(s) - выбирает случайное число из последовательности s. shuffle(s) – размешивает элементы последовательности s. seed(n) – устанавливает генератор в некоторое состояние.
Модуль decimal Этот модуль использует понятие так называемых чисел с плавающей запятой. Каждое число можно представить в экспоненциальной форме : При вычислениях удобно использовать так называемой нормализованное представление числа(1
Стандартно используется тип данных float, который имеет точность 7-8 десятичных знаков после запятой ( для выделения большего количества знаков точности требуется больше памяти ).Тип данных double имеет точность 15-16, при этом число 1.1 хранится в этих типах данных как Сложение в системе осуществляется следующим образом: = , числа, идущие после 16ого(или меньше) знака, не будут храниться в памяти, поэтому у всех дробных чисел будет какой-то свой хвост, значение выражения будет не равно 0, что естественно не допустимо в расчетах, применимых к деньгам или точным вычислениям. Тип decimal не допускает таких неточностей, ведь в этом типе мы сами задаем точность вычислений и это позволяет контролировать их правильность. Пример приминения: from decimal import ( включение модуля ) getcontext().prec = 6 ( задание тоности) Decimal(1) / Decimal(7) Decimal(' ') ( будет получен такой ответ) getcontext().prec = 28 Decimal(1) / Decimal(7) Decimal(' ')
Тип decimal предлагает компромисс: можно работать с очень большими, можно с очень маленькими, можно – со средними. Со всеми – одинаково удобно, с одинаковой точностью, в одном и том же формате – масштабный коэффициент вводится незаметно. И – не слишком дорого: Единственная проблема в сложении очень больших чисел с очень маленькими, в таких случаях следует быть внимательным: На абстрактом примере покажу в чем проблема при округлении: ((((12 + 0,42) + 0,43) + 0,45) + 0,48) = (0,42 + 0,43 + 0,45 + 0,48) = 14
Конец.