(2 курс ПМИ и ФИИТ) CS221. Архитектура компьютера

В тему последней лекции — свежая ссылка на Хабр: Рекуррентное соотношение Мюллера — специально подобранная простая формула, на которой быстро ломаются числа с плавающей точкой IEEE 754.

Если лень читать комментарии и ссылки из текста статьи, то краткое резюме такое:

  • вычисления с плавающей точкой могут давать сильно неправильные результаты даже на несложных соотношениях и небольших числах,

  • часто проблемы возникают при делении «похожих» чисел,

  • хотя многие общие проблемы понятны, но общих решений нет, в каждом конкретном случае нужно искать источник проблем, но, что ещё важнее, вначале надо заметить, что проблема вообще есть, для этого

  • следует понимать математическую структуру решаемой задачи, а не просто «запрограммировать формулы»,

  • хотя универсальных решений нет, есть несколько полезных трюков (вроде алгоритма Кэхана), которые следует знать, потому что они могут сильно облегчить жизнь.

2 лайка

Прямо неделя плавающей точки на Хабре:

Всё, точка, приплыли! Учимся работать с числами с плавающей точкой и разрабатываем альтернативу с фиксированной точностью десятичной дроби

22/05/2015, 10:02

Цитирую первую строку:

"Сегодня мы поговорим о вещественных числах. Точнее, о представлении их процессором"

Может все таки памятью? Странное начало …

Нет, именно процессором, у меня тоже так (хотя авторы с Хабра наверняка не слушали мой курс :)): числовые типы данных считаются частью уровня набора инструкций процессора. У конкретных процессоров могут присутствовать или нет инструкции для обработки этих данных в соответствующем представлении, а представления бывают разными. Так что конкретное представление связано именно с процессором.

Не согласен. Есть процессоры (например R600), которые работают с регистрами общего назначения и не отличают вещественные числа от целых. При этом набор бит в регистре воспринимается одними инструкциями как представление целого числа, а другими как вещественного. Я бы сказал, что процессор знает как обрабатывать набор бит. А что этот набор бит представляет, зависит не от процессора. Опять же набор бит - это ячейка(и) памяти, пусть и регистровой. Но это мнение человека, который не преподает курс по архитектурам. :smile:

Рома, ты будешь смеяться, но ты как раз подтвердил то, что это зависит от процессора, а не от памяти — раз можно хранить в регистрах общего назначения. Поясню. То, что интерпретация содержимого памяти (регистра или ОЗУ) зависит от исполняемой инструкции и говорит, что всё зависит от процессора, так как набор инструкций это артекфакт процессора, а не памяти.

И да, бит это не ячейка памяти. Бит это binary digit, двоичная цифра или двоичный разряд. Напомню, что слово разряд появляется в младшей школе при обучении счёту задолго до всяких компьютеров (во всяком случае, в наше с тобой время было так).

Когда вчера ложился спать, именно об этом и подумал: инструкция - это составляющая ФУ, а ФУ - это составляющая процессора. Согласен, что это был аргумент в пользу твоей точки зрения, а у меня в голове просто что-то заклинило.

Но утром я проснулся с другой мыслью. А как же быть с софтверной эмуляцией? Например, процессор может вообще не владеть плавучкой, но с помощью софт-флоат библиотеки можно проэмулировать ее. Тогда плавучка совсем не зависит от процессора.

И я понял, что меня скорее смущает не слово “процессор” в той фразе, а слово “представляет” по отношению к процессору. Процессор может интерпретировать, если у него есть такие инструкции, но не представлять.

Рома, я постепенно перестаю понимать твои аргументы :frowning:

Насчёт софтверных эмуляций: они существуют у чего-угодно. Например, для квантового компьютера есть эмуляции: это не делает квантовые компьютеры областью памяти. Стандарт IEEE 754 разрабатывался для аппаратной реализации и на сегодня в подавляющем большинстве его поддерживают процессоры общего назначения (в микроконтроллерах часто используется фиксированная точка ввиду дороговизны плавающей). Софтверная его эмуляция вещь достаточно бессмысленная: чаще встречаются библиотечные реализации рациональных чисел с произвольной точностью (GNU MP и т. п.), а не вот эти 32-64-80 бит из стандарта: эти размеры затачивались именно под регистры.

Как именно процессоры поддерживают этот стандарт, с помощью микропрограммы или специализированных логических схем, это внутреннее дело процессора. Раньше (60-е и 70-е) даже инструкции умножения могли делать с помощью микропрограммного цикла, хотя схемную реализацию множителя можно объяснить даже студенту второго курса.

Насчёт того представляет или интерпретирует процессор инструкции и операнды это чистая риторика. Напомню, что процессор не только читает (наиболее близкое русское слово к «интерпретирует») инструкции и операнды из памяти, но и пишет (слово, которое можно считать упрощённым аналогом «представляет)» туда результаты.

В конце хочу пожелать тебе всё-таки пройти по ссылке, которую я приводил выше, и почитать про архитектуру набора инструкций (ISA), хотя бы посмотреть на схему: Потому что наивные соображения это всегда хорошо, но системный взгляд на вещи полезней. Наборы инструкций и «родные» для процессора типы операндов для этих инструкций считаются частью его интерфейса (то есть ISA) и с памятью никак не связаны.

Артем, ну я сразу пошел по ссылке, как только ты ее указал. И все же твой последний пост апелирует к моему первому утверждению про память, а уже признал, что был не прав.

Смысл последнего поста был в том, что мне не нравится сочетание “процессор представляет вещественные числа”. И я по прежнему считаю его некорректным, в частности потому, что иногда у процессора вообще нет команд работающих с вещественными числами, а значит он об их существовании и не знает.

Это правда, бывает, что не знает. Но если кто-то и знает и обрабатывает, то обычно процессор (бывают ещё FPU, правда), потому если писать про обработку, то, мне кажется, вполне нормальным говорить от имени процессора :slight_smile:

Интересно, а это так и задумано обнуление контрольных работ и перенос их на сегодня или 29 мая, что это?

Это технический сбой, мы рассчитываем поправить его в ближайшие дни.

Еще 1 вопрос, сервис БРС будет заполнен в самом конце? Было бы не плохо посмотреть текущее состояние и оценивать свои силы на предстоящей контрольной!!!

Так в Moodle ж есть ссылка “Оценки”, где те же самые баллы стоят.

если бы в Moodle стояло x/100 то было бы нормально, а когда из 200-т, то как то не очень считается)

@Anatolij_Abramov 200 по недосмотру было, исправили. Написали бы раньше, исправили бы раньше.

Мы думали, что это фича, а не баг.

Пропали файлы задач контрольной работы, а она еще не проверена. Все ведь хорошо, они где-то сохранены?

Да вы не волнуйтесь, мы по серверу загрепаем “DIMA_THE_BEST” и всё найдём.

К сожалению, я не уверен, что в контрольной обозначил свой доминантный статус :frowning:

2 лайка