No Image

Float в питоне это

СОДЕРЖАНИЕ
10 просмотров
11 марта 2020

Числа в Python 3: целые, вещественные, комплексные. Работа с числами и операции над ними.

Целые числа (int)

Числа в Python 3 ничем не отличаются от обычных чисел. Они поддерживают набор самых обычных математических операций:

x + y Сложение
x – y Вычитание
x * y Умножение
x / y Деление
x // y Получение целой части от деления
x % y Остаток от деления
-x Смена знака числа
abs(x) Модуль числа
divmod(x, y) Пара (x // y, x % y)
x ** y Возведение в степень
pow(x, y[, z]) x y по модулю (если модуль задан)

Также нужно отметить, что целые числа в python 3, в отличие от многих других языков, поддерживают длинную арифметику (однако, это требует больше памяти).

Битовые операции

Над целыми числами также можно производить битовые операции

x

x | y Побитовое или
x ^ y Побитовое исключающее или
x & y Побитовое и
x > y Битовый сдвиг вправо
Инверсия битов

Дополнительные методы

int.bit_length() – количество бит, необходимых для представления числа в двоичном виде, без учёта знака и лидирующих нулей.

int.to_bytes(length, byteorder, *, signed=False) – возвращает строку байтов, представляющих это число.

Системы счисления

Те, у кого в школе была информатика, знают, что числа могут быть представлены не только в десятичной системе счисления. К примеру, в компьютере используется двоичный код, и, к примеру, число 19 в двоичной системе счисления будет выглядеть как 10011. Также иногда нужно переводить числа из одной системы счисления в другую. Python для этого предоставляет несколько функций:

  • int([object], [основание системы счисления]) – преобразование к целому числу в десятичной системе счисления. По умолчанию система счисления десятичная, но можно задать любое основание от 2 до 36 включительно.
  • bin(x) – преобразование целого числа в двоичную строку.
  • hex(х) – преобразование целого числа в шестнадцатеричную строку.
  • oct(х) – преобразование целого числа в восьмеричную строку.

Вещественные числа (float)

Вещественные числа поддерживают те же операции, что и целые. Однако (из-за представления чисел в компьютере) вещественные числа неточны, и это может привести к ошибкам:

Для высокой точности используют другие объекты (например Decimal и Fraction)).

Также вещественные числа не поддерживают длинную арифметику:

Простенькие примеры работы с числами:

Дополнительные методы

float.as_integer_ratio() – пара целых чисел, чьё отношение равно этому числу.

float.is_integer() – является ли значение целым числом.

float.hex() – переводит float в hex (шестнадцатеричную систему счисления).

classmethod float.fromhex(s) – float из шестнадцатеричной строки.

Помимо стандартных выражений для работы с числами (а в Python их не так уж и много), в составе Python есть несколько полезных модулей.

Модуль math предоставляет более сложные математические функции.

Модуль random реализует генератор случайных чисел и функции случайного выбора.

Комплексные числа (complex)

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

Также для работы с комплексными числами используется также модуль cmath.

Главным отличием вещественных чисел от целых является наличие символа " . " которая отделяет целую часть от дробной:

Причем обратите внимание на числа 2. и .78 , т.е. если Python видит, что слева или справа от точки ничего нет, то он понимает, что либо целая либо дробная часть равна (0).

Другой отличительной чертой является необязательное наличие символа " e " – экспоненты:

Если на длину целых чисел не накладывается абсолютно никаких ограничений по величине, то с вещественными числами это не так. Что бы узнать информацию о числах типа float для компьютера на котором выполняется программа, можно воспользоваться командой sys.float_info :

  • max – максимальное представимое число;
  • max_exp – максимальня степень (2);
  • max_10_exp – максимальное число e, такое что 10**e находится в [min , max] ;
  • min – минимальное представимое число;
  • min_exp – минимальная степень (2);
  • min_10_exp – минимальное число e, такое что 10**e находится в [min , max] ;
  • dig – максимальное число цифр, которыми можно точно отобразить число;
  • mant_dig – максимальное число цифр в radix системе счисления, которыми можно точно отобразить число;
  • epsilon – разность между (1) и наименьшим числом большим (1) которую можно представить как число с плавающей точкой;
  • radix – основание используемой системы счисления;
  • rounds – целочисленная константа определяющая режим округления.
Читайте также:  Pegatron ipppv d3g bios

В данном выводе для нас представляют особый интерес значения: max , min , max_10_exp и min_10_exp , которые определяют пределы диапазонов для мантисы и степени, например:

Значения -inf, inf и nan

Тем не менее вместо ошибок OverflowError, когда число выходит за указанные пределы, иногда появляются значения -inf и inf :

Возможно, к появляению ошибки OverflowError приводит только операция возведения в степень (скорее всего, хотя может я и не прав, точные причины возникновения данной ошибки кроются где-то в недрах языка C, на котором реализован интерпретатор CPython). Все что нужно знать о значениях -inf и inf это то что это числа обозначающие плюс минус бесконечность. Да, это на самом деле числа числа с плавающей запятой, которые могут учавствовать в выражениях:

Однако, что бы вы не делали с бесконечностью, она так и останется бесконечностью. Единственное что можно попробовать, так это вычесть из одной бесконечности другую бесконечность:

И мы получили nan – значение, которое означает неопределяемое число (или "не число"). Но оно ведет себя как число, и в каком бы выражении оно не появилось, результат всегда будет nan (кроме nan/0 т.к. деление на (0) всегда приводит к появлению ошибки):

В реальной жизни, вы скорее всего никогда не встретитесь с значениями -inf , inf и nan , если только не собираетесь заниматься какими-нибудь весьма специфичными вычислениями. Но, как правило, тех, кто встречается с этими значениями впервые, почему-то смущает, то что они не понимают откуда берутся и как действуют эти значения.

Арифметические операции

Целые числа поддерживают следующие математические операции, которые отсортированы по убыванию приоритета:

Операция Результат Замечание
1 x ** y возводит x в степень y (I)
2 pow(x, y[, z]) возводит x в степень y по модулю z, где z – необязательный аргумент (I)
3 divmod(x, y) возвращает кортеж с парой чисел (x // y, x % y) (II)
4 x.conjugate() возвращает (ar) – число, которое комплексно сопряжено с (x)
5 complex(re, im) преобразует re в комплексное число (по умолчанию im = 0 ) (V)
6 float(x) преобразует x в вещественное число (число с плавающей точкой) (V)
7 int(x) переобразует x в целое число, представленное в десятичной системе счисления (V)
8 abs(x) абсолютное значение (модуль) числа x
9 +x делает число x положительным
10 -x делает число x отрицательным
11 x % y остаток от деления x на y (II)
12 x // y результат целочисленного деления x на y (III) (II)
13 x / y результат "истинного" деления x на y
14 x * y произведение x и y
15 x – y разность x и y
16 x + y сумма x и y
Читайте также:  Посудомоечная машина bosch моргает индикатор кран

Важно: приоритет математических операций выше побитовых логических операций и операций сравнения.

I. возведение (0) в степень (0) возвращает (1):

Извлечение корней четной степени из отрицательных чисел не вызывает ошибки, а возвращает комплексное число:

Использование в выражении x ** y слишком больших значений x и y типа float может привести к ошибке OverflowError.

II. функция divmod() и операции % , // не работают для комплексных чисел. Для вас это может быть и очевидно, но не пользователя для которого вы пишите программу.

III. Данная операция всегда возвращает целое число, т.е. если число x можно представить в виде d*y + r , то x//y = d (r – остаток от деления). Так же следует иметь ввиду, что результат данной операции всегда округляется в сторону минус бесконечности:

Это немного сбивает с толку, но проверив результат по формуле x = d*y + r , вы убедитесь что все верно.

IV. встроенная функция int() отбрасывает дробную часть вещественных чисел:

V. строго говоря эти функции не являются математическими, но они могут учавствовать в математических выражениях Python и поэтому должны обладать приоритетом.

Операции сравнения

Для сравнения чисел, доступно (8) операций сравнения, причем все они имеют одинаковый приоритет:

Операция Результат Замечание
1 x True если x меньше y, иначе False
2 x True если x меньше или равно y, иначе False
3 x > n True если x больше y, иначе False
4 x >= n True если x больше или равно y, иначе False
5 x == y True если x равно y, иначе False
6 x != y True если x не равно y, иначе False
7 x is y True если x и y это один и тот же объект, иначе False
8 x is not y True если x и y это не один и тот же объект, иначе False

Важно: приоритет операций сравнения ниже математических и побитовых операций.

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

В Python сравнение x > y and y > z является эквивалентным x > y > z т.е. сравнения связаные оператором and в произвольные цепочки могут быть записаны в более компактной форме. Выполнение таких выражений начинается слева направо и останавливается как только будет получено первое значение False. Это означает, что если в выражении x > y > z сравнение x > y вернет False то сравнение y > z выполняться не будет.

Методы вещественных чисел

Вещественные числа – это объекты, которые обладают следующими методами:

Появление таких больших чисел связано с тем, что числа типа float на самом деле не являются десятичными дробями, и хранятся в памяти с небольшой погрешностью:

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

где sign – это необязательный знак, который может быть как + или – ; integer – и fraction – целая и дробная части которые должны обязательно содержать хотя бы по одной цифре, ‘0x’ – уже знакомый нам префикс, обозначающий шестнадцатеричные числа и ‘p’ exponent – экспонента в виде десятичного целого числа со знаком или без.

Читайте также:  Whatsapp проблемы с сообщениями

Показатель степени ‘p’ exponent является степенью двойки, например, перевод числа ‘0x2.f1ap+3’ из шестнадцатеричной системы счисления в десятичную будет выглядеть следующим образом:

Применение обратного преобразования дает другую шестнадцатеричную строку, которая, однако, представляет тоже самое число:

Для целых чисел определены операции + , – , * и ** . Операция деления / для целых чисел возвращает вещественное число (значение типа float ). Также функция возведения в степень возвращает значение типа float , если показатель степени — отрицательное число.

Но есть и специальная операция целочисленного деления, выполняющегося с отбрасыванием дробной части, которая обозначается // (она соответствует операции div в Паскале). Она возвращает целое число: целую часть частного. Другая близкая ей операция − это операция взятия остатка от деления, обозначаемая % (она соответствует операции mod в Паскале). Например:

2. Действительные числа

В этом разделе речь пойдет о действительных числах, имеющих тип float .

Обратите внимание, что если вы хотите считать с клавиатуры действительное число, то результат, возращаемый функцией input() необходимо преобразовывать к типу float :

Действительные (вещественные) числа представляются в виде чисел с десятичной точкой (а не запятой, как принято при записи десятичных дробей в русских текстах). Для записи очень больших или очень маленьких по модулю чисел используется так называемая запись «с плавающей точкой» (также называемая «научная» запись). В этом случае число представляется в виде некоторой десятичной дроби, называемой мантиссой, умноженной на целочисленную степень десяти (порядок). Например, расстояние от Земли до Солнца равно 1.496·10 11 , а масса молекулы воды 2.99·10 -23 .

Числа с плавающей точкой в программах на языке Питон, а также при вводе и выводе записываются так: сначала пишется мантисса, затем пишется буква e , затем пишется порядок. Пробелы внутри этой записи не ставятся. Например, указанные выше константы можно записать в виде 1.496e11 и 2.99e-23 . Перед самим числом также может стоять знак минус.

Напомним, что результатом операции деления / всегда является действительное число ( float ), в то время как результатом операции // является целое число ( int ).

Преобразование действительных чисел к целому производится с округлением в сторону нуля, то есть int(1.7) == 1 , int(-1.7) == -1 .

3. Библиотека math

Для проведения вычислений с действительными числами язык Питон содержит много дополнительных функций, собранных в библиотеку (модуль), которая называется math .

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

Например, пусть мы хотим округлять вещественные числа до ближайшего целого числа вверх. Соответствующая функция ceil от одного аргумента вызывается, например, так: math.ceil(x) (то есть явно указывается, что из модуля math используется функция ceil ). Вместо числа x может быть любое число, переменная или выражение. Функция возращает значение, которое можно вывести на экран, присвоить другой переменной или использовать в выражении:

Другой способ использовать функции из библиотеки math , при котором не нужно будет при каждом использовании функции из модуля math указывать название этого модуля, выглядит так:

Ниже приведен список основных функций модуля math . Более подробное описание этих функций можно найти на сайте с документацией языка Питон.

Комментировать
10 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
Adblock detector