Пред.
След.
Макеты страниц
Распознанный текст, спецсимволы и формулы могут содержать ошибки, поэтому с корректным вариантом рекомендуем ознакомиться на отсканированных изображениях учебника выше Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике ДЛЯ СТУДЕНТОВ И ШКОЛЬНИКОВ ЕСТЬ
ZADANIA.TO
1.7.2. Потеря значащих цифрВ табл. 1.35 даны шаги кодирования строки . Она похожа на табл. 1.34 и иллюстрирует проблему потери значащих разрядов. Переменные Low и High сближаются, и поскольку в этом примере Low всегда равна 0, переменная High теряет свои значащие цифры при приближении к Low.
Потеря значащих цифр происходит не только в этом случае, но всегда, когда Low и High должны близко сходиться. Из-за своего конечного размера переменные Low и High могут достигнуть значений, скажем 499996 и 500003, а затем, вместо того, чтобы получить значения с одинаковыми старшими цифрами, они станут равны 499999 и 500000. Поскольку самые значимые цифры остались разными, алгоритм ничего не даст на выход, не будет сдвигов, и следующая итерация только добавит цифры в младший разряд переменных. Старшие цифры будут потеряны, а первые 6 цифр не изменятся. Алгоритм будет работать, не производя выходных цифр, пока не достигнет eof. Решить эту проблему можно, если заранее распознать эту ситуацию и поменять масштаб обеих переменных. В приведенном примере это следует сделать, когда обе переменные достигнут значений 49хххх и 50уууу. Необходимо удалить вторую значащую цифру, получить значения 4хххх0 и 5уууу9, а затем увеличить счетчик cntr. Возможно, смену масштаба придется делать несколько раз до тех пора, пока не сравняются самые значащие цифры. После этого самая значащая цифра (это будет 4 или 5) подается на выход, за которой следует cntr нулей (если переменные сходятся к 4) или девяток (если они стремятся к 5).
Табл. 1.35. Кодирование «» сдвигами.
|
1 |
Оглавление
|