Числа, арифметические операции

Целые числа

Целые числа, как и в жизни, как и в других языках - это... целые числа. 0, 1, -111, 954323209 - это всё примеры целых чисел. В Python они представлены типом int.

Тип int не означает, что где-то специально нужно писать int a = 5. Это означает лишь то, что, если написать a = 5, то a будет объектом класса 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, но это тема другой статьи.

Приоритет арифметических операций

Это хоть и кажется иногда очевидным, или несущественным, но на самом деле крайне важно.

  • Сначала идут выражения в скобках
  • Затем операция возведения в степень
  • Затем умножение и деление (обычное, целочисленное)
  • Сложение и вычитание
  • При равном приоритете операции выполняются слева направо

И особенно важно это станет уже в следующей части.