Числа, арифметические операции
Целые числа
Целые числа, как и в жизни, как и в других языках - это... целые числа. 0, 1, -111, 954323209 - это всё примеры целых чисел. В Python они представлены типом int.
В некоторых других языках целые числа имеют ограниченный размер (до 4294967296 или 18446744073709551616). Это связано с ограниченностью памяти, выделяемой на число. В Python же реализована так называемая длинная арифметика. Она позволяет оперировать очень большими целыми числами (в рамках доступной памяти компьютера). Также операции над очень большими числами будут занимать продолжительное время. Однако в подавляющем числе задач о затратах времени или памяти задумываться не нужно.
Над целыми числами можно производить арифметические операции:
- x + y - сложение
- x - y - вычитание
- x * y - умножение
- x ** y - возведение в степень
- Деление
- x / y - обычное деление. То есть если написать 7 / 2, то получится 3.5.
- x // y - целочисленное деление. То есть если написать 7 // 2, то получится 3.
- x % y - остаток от деления
Примеры ниже (а также любые свои) можно ввести в интерактивном режиме Python, и посмотреть, что будет получаться.
>>> 255 + 34 289 >>> 5 * 2 10 >>> 20 / 3 6.666666666666667 >>> 20 // 3 6 >>> 20 % 3 2 >>> 3 ** 4 81 >>> 3 ** 150 369988485035126972924700782451696644186473100389722973815184405301748249
Числа с плавающей точкой
Это числа с вещественной частью. 0.5, 3.1415926, -140.01, и другие - это всё примеры чисел с плавающей точкой. В Python они представлены типом float.
Можно ли целое число представить как число с плавающей точкой? Да! Тогда почему вообще числа с плавающей точкой выделяют как отдельный класс?
На самом деле, потому что целые числа занимают гораздо меньше места, чем числа с плавающей точкой. Также операции над целыми числами гораздо проще реализовать. Если для целых чисел реализована длинная арифметика, то для float такой реализации в Python нет. И, например, 2.01 ** 44 = 21909200334372.953, хоть на самом деле это неправда. Такой результат связан с ограниченной точностью представления.
Из-за этой ограниченной точности, кстати, 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 = 0.9999999999999999. Связано это с тем, что 0.1 представляется в типе float с небольшой ошибкой, которая при каждом сложении только накапливается.
Операции все те же самые, но, поскольку числа с плавающей точкой содержат ошибку, ими редко пользуются. Гораздо чаще пользуются Decimal, но это тема другой статьи.
Приоритет арифметических операций
Это хоть и кажется иногда очевидным, или несущественным, но на самом деле крайне важно.
- Сначала идут выражения в скобках
- Затем операция возведения в степень
- Затем умножение и деление (обычное, целочисленное)
- Сложение и вычитание
- При равном приоритете операции выполняются слева направо
И особенно важно это станет уже в следующей части.