Python
Почему 1+eps != 1+eps+eps/2 не равны, eps - машинный эпсилон?
По определению: 1+eps!=1 и 1+eps/2==1
Машинные вычисленя с плавающей точкой лучше всего описываются теорией приближённых вычислений. Хотя она в современных ИТ не в моде, но от этого не перестаёт быть верной. И в ней A + B - B вполне может быть не равно A, а A + B вполне может быть равно A при ненулевом B, если при вычислениях теряется точность. И при повторении операций накапливается погрешность в полном соответствии с теорией: A + B + B + B может не быть равным A + 3 * B.
В машинных типах с плавающей точкой числа представлены в виде мантиссы (конечной двоичной дроби, например, 0.1110101) и порядка. Например, 32-битный тип IEEE гарантирует 7 десятичных цифр, а 64-битный - 15. Всё, что сверх этого, отбрасывается, и никакой Питон не спасёт.
Кроме того, конечные десятичные дроби редко можно представить в виде конечных двоичных дробей. Например, десятичное 0.1 в двоичной системе будет бесконечной дробью, а машина хранит только конечное число разрядов, поэтому уже до начала вычислений мы имеем неточное представление числа.
В Питоне есть тип Decimal из библиотеки decimal (кажется). Это - представление числа в виде десятичных цифр до и после запятой. В пределах точности (она регулируется параметрами) любая конечная десятичная дробь будет представлена точно. Но за это придётся заплатить скоростью вычислений.
В машинных типах с плавающей точкой числа представлены в виде мантиссы (конечной двоичной дроби, например, 0.1110101) и порядка. Например, 32-битный тип IEEE гарантирует 7 десятичных цифр, а 64-битный - 15. Всё, что сверх этого, отбрасывается, и никакой Питон не спасёт.
Кроме того, конечные десятичные дроби редко можно представить в виде конечных двоичных дробей. Например, десятичное 0.1 в двоичной системе будет бесконечной дробью, а машина хранит только конечное число разрядов, поэтому уже до начала вычислений мы имеем неточное представление числа.
В Питоне есть тип Decimal из библиотеки decimal (кажется). Это - представление числа в виде десятичных цифр до и после запятой. В пределах точности (она регулируется параметрами) любая конечная десятичная дробь будет представлена точно. Но за это придётся заплатить скоростью вычислений.
Что такое "машинный эпсилон" применительно к Питону с его встроенной произвольной точностью вычислений, уточни пожалуйста...
Андрей Бондаренко
В Python только целочисленные неограниченной длины. А вещественные - стандартный FPU'шный float64.
операции с плавающей точкой ограничены точностью представления
Похожие вопросы
- Почему остаток от деления 7 % 5 = 2, если он равен 1.4?
- С клавиатуры вводится число n. Вычислить сумму S=1/1+1/2+1/3+...+1/n.
- Python Имеется неупорядоченный массив из n различных целых чисел от 0 до n (0,1,…,j-1,j+1,….,n).
- Подскажите что изучать чтобы заниматься машинным обучением
- Дан список чисел. Нужно посчитать количество их "пар" (т.е. "1 1 1 1 1" = 10, "1 2 3 2 3" = 2 и т.д.) (Python)
- 2^1800+2^100−2^1200−32 - записали в системе счисления с основанием 2. Сколько цифр "1" содержится в этой записи?
- 1,7^2 = 2.8899999999999997 ? Или умножение в Python
- Вопросы по машинному обучению
- Pyton Объединение словарей в питоне, если ключи второго равны значениям первого
- Задана последовательность из N вещественных чисел. Определить, сколько среди них чисел меньших К, равных К и больших К.