|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » точность плавающей арифметики |
|
точность плавающей арифметики
|
Пользователь Сообщения: 135 |
Как использовать возможности сопроцессора на 100% ?
Почему long double 64 bit? А не 80 как было в "отсталом" DOC'е Теряется и точность и скорость. |
|
Отправлено: 04:01, 17-06-2004 |
Пользователь Сообщения: 135
|
Профиль | Отправить PM | Цитировать А если прога должна работать на любом компе, начиная с 486
Быстродействие в принципе не так важно. (Я пишу калькулятор, важнее точность.) Есть же мат сопроцессор. Хотелось бы его использовать. И имхо не так уж он и медленно работает. Или в MMX компах его уже нет? |
Отправлено: 03:13, 21-06-2004 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старый параноик Сообщения: 2423
|
Профиль | Отправить PM | Цитировать Для информации: Кратко об MMX, SSE, FPU
|
Отправлено: 10:38, 21-06-2004 | #12 |
Ночной странник Сообщения: 4050
|
Профиль | Сайт | Отправить PM | Цитировать bilytur
если нужно точность то писать нужно не на С. я бы посоветовал выбрать какойнибеть другой язык. в принципе доубле обеспечивает точность до 12 знаков после запятой. сопроцессор, как отдельная викросхема, был до 486, с появлением пней сопроцессор стал не отемлемой частью ядра. т.к. место в центре кристало очень дорого, решили обрезать доубле до 64 бит т.к. почти никто не пользовался другими. bilytur для вычислений сбольшой точностью есть специальные библиотеки "бесконечной точность" или библиотеки символьных вычислений, их задача исенно в том чтобы обеспечить большую точность, но быстродействие у них не велико! |
------- Отправлено: 18:53, 21-06-2004 | #13 |
![]() Модер Железа Сообщения: 1557
|
Профиль | Сайт | Отправить PM | Цитировать Цитата:
Vlad Drakula Цитата:
![]() |
||
------- Отправлено: 01:13, 22-06-2004 | #14 |
Ночной странник Сообщения: 4050
|
Профиль | Сайт | Отправить PM | Цитировать bgg0408
для выполнения вычислений с повышенной точность есть другие языки, напимер фартран. С изначально не расчитавался как язык для мат вычислений. т.е. это быстрый язык(если так можно выразиться), но это не его стихия. если писать беблиотеку символьных вычислений самому с нуля, да еще на чистом С... то тут действительно нужно много терпения! |
------- Отправлено: 02:29, 22-06-2004 | #15 |
Пользователь Сообщения: 135
|
Профиль | Отправить PM | Цитировать Из статьи от hasherfrog
Цитата:
(На других языках или других платформах этого запрета нет.) Vlad Drakula Да Цитата:
Или С, но тогда под ДОСом. На выбор. ![]() Вобщем проблему свою я решил несколько другим способом. (Нашел линуковскую либу, в исходниках. портанул под вин32, вроде скомпилилась и работает.) Всем большое спасибо. |
||
Отправлено: 03:18, 22-06-2004 | #16 |
Старый параноик Сообщения: 2423
|
Профиль | Отправить PM | Цитировать Цитата Vlad Drakula:
Но это детали, главное, что bilytur решениевроде бы нашёл. Только вот я не совсем понял... bilytur Цитата:
|
||
Отправлено: 09:22, 22-06-2004 | #17 |
![]() Модер Железа Сообщения: 1557
|
Профиль | Сайт | Отправить PM | Цитировать Vlad Drakula
Ты не прав. Ты знаешь почему используют ФОРТРАН дял вычислений? Не потому, что это "супер-пупер" язык. Просто много модулей уже написано на нем ![]() ![]() Можно сделать так: у нас есть массив char'ов. Каждый элемент - цифра. Складываем два массива => получаем третий с суммой. так можно построить математическую библиотеку. Правда, расход памяти большой, зато просто. |
------- Отправлено: 00:05, 23-06-2004 | #18 |
Пользователь Сообщения: 135
|
Профиль | Отправить PM | Цитировать Цитата:
мультипрецижн арифметик: http://www.swox.com/gmp/ Точность в принципе любая, написан на чистом С (не ++) и асме Что обрадовало - не фортран. Я в принципе не против фортрана, просто сейчас я изучаю С/++ Распыляться не хотелось. Да и считаю С языком на котором можно написать все что угодно. И даже математику. ![]() Вообщето к FPU это отношения не имеет. Но данный вариант меня устраивает даже больше. Добавлено: А да, компилил mingw |
|
Отправлено: 01:02, 23-06-2004 | #19 |
![]() Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать У меня никогда проблем не возникало. Если я компилирую под x86, и ставлю флажок "не эмулировать FPU", то всегда используется сопроцессор с полной точностью (80 бит). Если под P-4 SSE2, то иногда, когда компилятор посчитает нужным, используются регистры XMM с точностью 64 бит.
Я использовал Borland C++ Builder 3, 4, 6, Borland C++ 5.02, Intell C++ Compiler 6.0, Metrowerks CodeWarrior 8.0. О балансе совместимости и быстродействия. Любой процессор архитектуры IA-32 (т.е. начиная с i486) имеет сопроцессор, который умеет работать с 80-бит long double. Если речь идёт о совместимом софте под винду, то можно смело использовать сопроцессор на полную точность. Если хочется при этом побыстрее - некоторые процессоры работают быстрее с 32-бит float (поэтому его использует Direct3D). При этом нужно делать сопроцессору специальное (программное) переключение. Понятно, что точность при этом резко упадёт. Если планируется использовать функции трансцендентные сопроцессора (sin, cos, ...), то забудьте о скорости. Они считаются сотни тактов (на максимальной точности). Любой компилятор под x86 должен отводить под long double 80 бит. Да, чуть не забыл: изначально 80 бит использовалось только внутри сопроцессора, но потом сделали инструкцию, которая может загружать и выгружать из сопроцессора все 80 бит. Любые вычисления приводят к потере точности (также при вычислении трансц. функций, а при умножении - особенно), поэтому хранение всех 80 бит означает и хранение мусора в последних битах. Может по этому ваш комплятор хранит в памяти только 64 бита. Большую роль играет align. Intel рекомендует укладывать long double по 16 байт. Если хочется выйти за машинную точность, пробуйте эмулировать сопроцессор. Расширения процессора SSE и SSE2 работают с плавающей арифметикой. Ускорение достигается за счёт одновременного вычисления однотипных операций и на разных модулях параллельно. SSE работает с float, SSE2 - с double. Трансцендентные функции не сделаны, поэтому intel предлагает либо считать их на сопроцессоре, либо в рядах на SSE (на сайте есть библиотека с исходниками). |
Отправлено: 13:07, 30-06-2004 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Принтер - Точность полей при печати буклетом МФУ HP LJ M1005 MFP | 1wolf | Прочее железо | 7 | 29-12-2009 12:50 | |
Как в С++ Builder 6 сделать окно для вводв цифор с плавающей | ReadeR 666 | Программирование и базы данных | 4 | 29-03-2004 03:34 |
|