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