Объявление форума |
Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС. |
Полигон-2 » IBM PC-совместимое. До 2000 года включительно » Сопроцессоры 8087 и утилита mcpdiag |
<<Назад Вперед>> | Страницы: 1 2 3 4 5 * 6 7 | Печать |
sanders
Advanced Member
Профессионал Откуда: Санкт-Петербург Всего сообщений: 6434 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 26 мар. 2008 |
Странная информация. На чем основана? В даташите на 8087 английским по белому написано, что он содержит арифметические, логарифмческие, тригонометрические команды. То есть уже 8087 должен уметь вычислять тригонометрию. И на счет идентичности результатов в моем сообщении Вы не поняли: я имел в виду, что вычисленные 255 результатов подряд на одной машине с одним и тем же сопроцессором, разве что чередуясь с другими операциями, раз в 100...300 итераций вдруг отличаются после 8го знака. |
pahan
Advanced Member
Откуда: Химки, М.О. Всего сообщений: 1070 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 13 мар. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 14 апреля 2015 18:49 Сообщение отредактировано: 15 апреля 2015 13:37 Ну я же дал ссылку на Странная информация. На чем основана?родной интеловский мануал. Их две - FPTAN (тангенс) и FPATAN ( В даташите на 8087 английским по белому написано, что он содержит арифметические, логарифмческие, тригонометрические команды. Отдельные команды FSIN (синус), FCOS (косинус), FSINCOS (оба сразу) появились именно в 387. Отличаются от чего? От тех же самых операций над теми же самыми числами на том же или другом сопроцессоре? И кстати, в какой разрядности (32, 64, 80 бит) проводятся вычисления и в какой выводится конечный результат? И на счет идентичности результатов в моем сообщении Вы не поняли: я имел в виду, что вычисленные 255 результатов подряд на одной машине с одним и тем же сопроцессором, разве что чередуясь с другими операциями, раз в 100...300 итераций вдруг отличаются после 8го знака. |
sanders
Advanced Member
Профессионал Откуда: Санкт-Петербург Всего сообщений: 6434 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 26 мар. 2008 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 14 апреля 2015 21:21 Сообщение отредактировано: 14 апреля 2015 21:27
pahan написал: Отличаются по ходу выполнения программы, спустя микросекунду или сколько там времени нужно на следующее вычисление. Отличаются от чего? От тех же самых операций над теми же самыми числами на том же или другом сопроцессоре? И кстати, в какой разрядности (32, 64, 80 бит) проводятся вычисления и в какой выводится конечный результат? Алгоритм такой: - цикл от 1 до 255. а(i):=X_случайное число умножить на Y_случайное число b(i):=X_случайное число делить на Y_cлучайное число конец цикла - цикл от 2 до 255 если a(1)>>a(i) то аварийный останов с выдачей несовпадения a(1) и a(i) если b(1)>>b(i) то аварийный останов с выдачей несовпадения b(1) и b(i) конец цикла И такие итреации крутятся в главном цикле от 1 до 65535. Так вот, останов по ошибке умножения выпадает спустя 100...300 итреаций. Останов по ошибке деления - никогда! Разрядность массивов результатов умножения и деления = real - кажется это 32 байт. На 9 знаке выпадает ошибка. Пришлось уменьшить разрядность до single = 8 байт - сейчас нет под рукой хэлпа по Турбо Паскалю, а память стала подводить, но вроде разрядность такая. Причем отлаживал я прогу на 386/387SX с сопроцессором ULSI (не на 8087, уж очень все медленно на ХТ). Я не исследовал детально этот феномен. Можно попробовать компильнуть без сопроцессора, а задав его эмуляцию и сравнить результат. Можно попробовать не чередовать умножение и деление (может что-то где-то засоряется в регистрах), а выполнить подряд только умножение и сравнить... Но это если меня снова пробьет на программирование. Пока что стояла задача понять, можно ли использовать 8087 на повышенных частотах, и если да, то каков критерий рабочести, а если нет, то почему. Что-то у меня этот редактор нашего форума индекс i в квадратных скобках воспринимает, как тэг курсива. Пришлось ставить круглые скобки. А как отключать тэги в сообщении? |
Fe-Restorator |
NEW! Сообщение отправлено: 15 апреля 2015 13:28
Сопр не умеет считать на 8-ми битах. Равно и на 16, на 32... Заложена в него способность вычислять на 80-ти битах, значит именно так он и будет работать, постоянно, независимо от разрядности входящих данных. Теоретически, неиспользуемые разряды должны быть обнулены, однако на практике - это не всегда так. Особенно для сопра, разогнанного по частоте. И приведение результата счёта к требуемой разрядности тоже влияет, округлением до N-ного знака. Поясню: случайная ересь в разрядах с 10-го по 80-й (при вычислениях) легко накрутит значение в 9-м разряде, с некоторым трудом - и в 8-мом. Округление до 8-го разряда дополнительно накрутит 8-й разряд. Примерно таков механизм ошибок, если отвлечься от битности/разрядности. |
Сейчас на форуме |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Все числа внутри FPU всегда числа с расширенной точностью. При загрузке числа одинарной, двойной точности целого - FPU просто преобразует любое число в формвт расширенной точности, при выгрузке числа в память - наоборот(в зависимости от того с какой точностью работаем). Ни о каком отбрасывании или обнулении неиспользуемых бит разговор не идет. Да и форматы чисел с плавающей точкой не такие чтобы можно было что-то отбрасывать. |
Fe-Restorator |
NEW! Сообщение отправлено: 17 апреля 2015 9:31
i8088 написал: Вот на этом этапе и происходит дополнение нулями до нужного формата чисел. Токма в разогнанном сопре обнуление не всегда надёжно - появление самопроизвольных бит весьма вероятно, оно и вносит ошибки в вычисления. FPU просто преобразует любое число в формвт расширенной точности, |
Сейчас на форуме |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 17 апреля 2015 10:57 Сообщение отредактировано: 17 апреля 2015 11:02
Для большей ясности уточню: нулями может дополняться только мантисса, порядок числа хранится смещенным(на 127 для чисел одинарной точности, если память не изменяет) и соответственно дополнение нулем или единицей зависит от от знака порядка(крайние порядки зарезервированы для специальных значений). Конечно в разогнанном FPU возможны какие угодно сбои, как Вы совершенно справедливо отметили. |
sanders
Advanced Member
Профессионал Откуда: Санкт-Петербург Всего сообщений: 6434 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 26 мар. 2008 |
Господа, вы уже спориите на абстрактные темы. Вы ушли от фактов и выхватываете верхушки, не анализируя связи. Я отлаживал программу и столкнулся с погрешностью НА НЕРАЗОГНАННОМ 387SX ULSI. А во-вторых, ваши теории неверны, поскольку при делении погрешность не возникает. В-третьих, абсурдно предполагать, что какие-то биты не обнуляются. 299 раз обнулились, а на 300й нет? Вот вернется у меня программисткое настроение, тогда проверю на разных процессорах, сопроцессорах и с разными форматами данных. Может, просто в компиляторе ошибка, как много их было в макросах Экселя 6.0 |
Fe-Restorator |
NEW! Сообщение отправлено: 18 апреля 2015 10:03 Сообщение отредактировано: 18 апреля 2015 10:07
sanders написал: Лучше-бы отладка проводилась на DX40, 486-го поколения. Там хотя-бы нет разбежки частот проца с сопром, возможных издержек на этой почве. Я отлаживал программу и столкнулся с погрешностью НА НЕРАЗОГНАННОМ 387SX ULSI А поскольку целевой сопр именно 8087, то и на нём стоило отлаживать, ибо также нет разбежки частот, несмотря на отдельность чипа. |
Сейчас на форуме |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 18 апреля 2015 12:00 Сообщение отредактировано: 18 апреля 2015 12:12
sanders написал: Согласен, я люблю теорию! Господа, вы уже спориите на абстрактные темы. Вполне возможно и ошибка в компиляторе, однозначно можно проверить написав все на ассемблере. Кстати что за компилятор у Вас? Можно попробовать откомпилировать другим компилятором или по крайней мере другой версией компилятора. С разными версиями компилятора(или компиляторы разных фирм) часто требуется некоторая коррекция программы, но это решаемо. Сейчас обратил внимание на Ваш алгоритм Те Вы пользуетесь функцией rnd для генерации случайное чисел? Может быть погрешность - цикл от 1 до 255. возникает просто при некоторых сочетаниях операндов, поэтому и не сразу проявляется? Проверьте на более современных FPU, там такое наблюдается? Надо поискать errata документы для старых FPU, какие ошибки были найдены. |
<<Назад Вперед>> | Страницы: 1 2 3 4 5 * 6 7 | Печать |
Полигон-2 » IBM PC-совместимое. До 2000 года включительно » Сопроцессоры 8087 и утилита mcpdiag |
0 посетителей просмотрели эту тему за последние 15 минут |
В том числе: 0 гостей, 0 скрытых пользователей |
Последние | |
[Москва] LIQUID-Акция. Сливаются разъемы CF МС7004 и 7004А на AT и XT Пайка термотрубок Проммать s478 PEAK 715VL2-HT ( Full-Size SBC) Подскажите по 386 материке по джамперам. |
Самые активные 5 тем | |