То, что вы написали, по сути даже правильно, но есть один глюк, который вызывает у студентов взрыв мозга и непонимание, лучше его специально объяснить. Как-нибудь так:
В десятичной системе число 1/3 = 0.3333333... требует бесконечного количества разрядов для представления, аналогично и в двоичной системе, в которой хранятся данные в компьютере. Но в памяти машины нет места для бесконечного числа разрядов, часть их приходится отсекать и терять на этом точность. Много вычислений подряд может увеличивать потерю точности после каждого шага. Кроме того, обычно данные вводятся в десятичном формате, хранятся и вычисляются в двоичном, после чего обратно преобразуются в десятичный. Даже если в одном из форматов число выглядит "точным", в другом это не так. Например, 1/10 в двоичный вид и обратно точно не конвертировать, а 1/2- можно. За счет этого получаются такие "загадочные" ситуации, когда вводят "0.1", и вроде бы даже никаких вычислений не делается, но потом показывается "0.10000000000000001". На самом деле вычисления там все-таки приходится выполнять при преобразовании туда и обратно, и в этот момент происходит потеря точности.
1) Оно противоречит их опыту. Питон достаточно аккуратно считает и выводит. Мне пришлось специально долго и упорно подбирать тесты, чтобы теоретически 2.0, у одних недодали, другим переложили.
2) Ок, хорошая мысль - подчеркнуть, что еще конвертация туда-сюда на этапе чтения и вывода.
По-моему тема выморочная. В том смысле, что бесполезна как для тех, кто проблему осознает, так и для тех, кто ее не понимает.
Просто потому, что никому не нужны проблемы без решений. Или проблемы, которые вызывают практические негативные последствия у небольшого числа слушателей.
А если у человека есть идеи обхода проблемы, то он в теме и без дополнительного вводного инструктажа. Разговор с таким человеком сразу можно начать с эффективных идей по обходу проблемы и/или по определению, актуальна ли проблема в конкретном случае.
А если нужно прямо глубоко-глубоко, так этим можно годами заниматься, причем скорее на математических, чем на программистских, занятиях.
То, что вы написали, по сути даже правильно, но есть один глюк, который вызывает у студентов взрыв мозга и непонимание, лучше его специально объяснить. Как-нибудь так:
В десятичной системе число 1/3 = 0.3333333... требует бесконечного количества разрядов для представления, аналогично и в двоичной системе, в которой хранятся данные в компьютере. Но в памяти машины нет места для бесконечного числа разрядов, часть их приходится отсекать и терять на этом точность. Много вычислений подряд может увеличивать потерю точности после каждого шага. Кроме того, обычно данные вводятся в десятичном формате, хранятся и вычисляются в двоичном, после чего обратно преобразуются в десятичный. Даже если в одном из форматов число выглядит "точным", в другом это не так. Например, 1/10 в двоичный вид и обратно точно не конвертировать, а 1/2- можно. За счет этого получаются такие "загадочные" ситуации, когда вводят "0.1", и вроде бы даже никаких вычислений не делается, но потом показывается "0.10000000000000001". На самом деле вычисления там все-таки приходится выполнять при преобразовании туда и обратно, и в этот момент происходит потеря точности.
Reply
2) Ок, хорошая мысль - подчеркнуть, что еще конвертация туда-сюда на этапе чтения и вывода.
Reply
По-моему тема выморочная. В том смысле, что бесполезна как для тех, кто проблему осознает, так и для тех, кто ее не понимает.
Просто потому, что никому не нужны проблемы без решений. Или проблемы, которые вызывают практические негативные последствия у небольшого числа слушателей.
А если у человека есть идеи обхода проблемы, то он в теме и без дополнительного вводного инструктажа. Разговор с таким человеком сразу можно начать с эффективных идей по обходу проблемы и/или по определению, актуальна ли проблема в конкретном случае.
А если нужно прямо глубоко-глубоко, так этим можно годами заниматься, причем скорее на математических, чем на программистских, занятиях.
Reply
Leave a comment