Python обрабатывает большие числа автоматически (в отличие от языка, подобного C, где вы можете переполнить его типы данных и значения сбрасываются, например, на ноль) - через определенную точку (sys.maxint
или 2147483647) он преобразует целое число в "long "(обозначается L
после числа), который может быть любой длины:
>>> def fact(x):
... return reduce(lambda x, y: x * y, range(1, x+1))
...
>>> fact(10)
3628800
>>> fact(200)
788657867364790503552363213932185062295135977687173263294742533244359449963403342920304284011984623904177212138919638830257642790242637105061926624952829931113462857270763317237396988943922445621451664240254033291864131227428294853277524242407573903240321257405579568660226031904170324062351700858796178922222789623703897374720000000000000000000000000000000000000000000000000L
Длинные числа «просты», с плавающей запятой сложнее, и почти любое компьютерное представление числа с плавающей запятой является приближением, например:
>>> float(1)/3
0.33333333333333331
Очевидно, что вы не можете хранить бесконечное количество 3 в памяти, поэтому он обманывает и округляет его немного.
Возможно, вы захотите взглянуть на модуль десятичный :
- Десятичные числа могут быть представлены точно. Напротив, числа типа 1.1 не имеют точного представления в двоичной с плавающей запятой. Конечные пользователи обычно не ожидают, что 1.1 будет отображаться как 1.1000000000000001, как это происходит с двоичной плавающей запятой.
- В отличие от двоичной аппаратной части с плавающей запятой, десятичный модуль имеет изменяемую пользователем точность (по умолчанию до 28 разрядов), которая может быть настолько большой, насколько это необходимо для данной проблемы