Python shell врёт? или есть какие то "но"? - Общение Python мододелов

Вопрос Python shell врёт? или есть какие то "но"?

Регистрация
12 Апр 2013
Сообщения
86
Репутация
0
Спасибо
0
Монет
0
10 в 80 степени равно 1+80 нулей. И 1e+80 тоже равно 1+80 нулей. но сравнение через == выдало False. но при делении получаем 1.0. то есть в 1e+80 помещается ровно одно 10^80 а это ли не значит их равность? Я ошибся или Python IDLE Shell 3.13.2?
295543287_2523373cf239b6e62beb66504d376109_800.png

 
Регистрация
9 Май 2013
Сообщения
81
Репутация
0
Спасибо
0
Монет
0
Ограничение класса float
Будут ошибки
Там не 1.0000000000000000000000000000000000000000000000000000
а 1.00000000000000000000000000000000000012234852494749747
Типа того
 
Регистрация
10 Ноя 2013
Сообщения
101
Репутация
1
Спасибо
0
Монет
0
Проводить равенство вещественных чисел неправильно, т.к. хрен его знает что там после запятой
 
Регистрация
2 Мар 2013
Сообщения
99
Репутация
0
Спасибо
0
Монет
0
Ошибся ты. Точнее, не ошибся, а просто не понимаешь, что такое вещественные числа в компьютерах. Вещественное число - это всегда приближённое значение, с погрешностью. И сравнивать вещественные числа на равенство некорректно. Да, в некоторых случаях такое сравнение даст правильный результат, но в большинстве случаев оно даст "не равно" там, где ты считаешь значения равными.

Ты же на уроках физики в школе записываешь не точный ответ, а только несколько первых цифр ответа. В компьютерах вещественные числа записывается точно так же. Только точность (длина мантиссы) всегда - 53 двоичных разряда.

Внутри компьютера числа хранятся в двоичном виде. Целое число 10**80 - вот так: 0b11010111111001110111101010001111100001111101101011110111111110111101110000110011011101000101111011001001011110111110100100000110001100101001100011101000100010011101100100110011101100000100000000000000000000000000000000000000000000000000000000000000000000000000000000 и чтобы записать вещественное число 1.0е+80 точно, необходимо хранить не меньше 187 значащих битов мантиссы: 0b110101111110011101111010100011111000011111011010111101111111101111011100001100110111010001011110110010010111101111101001000001100011001010011000111010001000100111011001001100111011000001 Но, повторю, компьютер хранит только 53 бита, да ещё и последний бит округлит: 0b11010111111001110111101010001111100001111101101011111 И именно это создаёт погрешность.
 
Сверху Снизу