Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вычислить на Fpu

279
01 мая 2006 года
bave
456 / / 07.03.2004
Мне надо запрограммировать на FPU выражение, которое в записи ПОЛИЗ выглядит так:
x xo + ^2 a ^2 / y oy + ^2 b ^2 / +
---------------------------------------------
Проблема в том, что все операнды выражения
целочисленные значения, а результаты некоторых
операции числа с плавающей точкой:
Т. е.
вот допустим начало выражения я запрограммирую так:

fild DWORD ptr [edi] ;это x
fiadd DWOPD ptr [ebp+8] ;это xo

Теперь у меня на вершине стека сопроцессора
число x+xo, которое мне надо возвести в квадрат
Если бы оно было вещественным, то я бы возвёл его
в квадрат так: fmul st(0)
и получил бы (x+xo)^2, но поскольку в st(0)
целое число, то fmul не катит, а для использования
fimul мне придётся сначало выгружать x+ox в память, что, во-первых, медленно. Во-вторых,
место в стеке для x+xo заранее выделять надо,
т.е. чё то типа такого:
fist [ebp-4]
fimul DWORD ptr [ebp-4]

Какие есть быстрые способы преобразования числа из одного формата в другой не выгружая операнда в память и не загружая его обратно.
Если кто предложит вариан вычисления этого
выражения с вычислением целочисленных операций чисто на CPU тоже буду благодарен.
9.5K
01 мая 2006 года
Damarus
101 / / 08.04.2006
Цитата:
Originally posted by bave
Какие есть быстрые способы преобразования числа из одного формата в другой не выгружая операнда в память и не загружая его обратно.



Не надо ничего преобразовывать. В FPU все числа с точкой. Т.е. код:

 
Код:
fild DWORD ptr [edi]
fiadd DWOPD ptr [ebp+8]
fmul st(0), st(0)

будет нормально работать.
5.3K
01 мая 2006 года
r000n_m
177 / / 26.02.2006
При загрузки любых операндов в стек сопроцессор сам преобразовывает их во временное вещественное (10 байт) представление
279
01 мая 2006 года
bave
456 / / 07.03.2004
Спасибо. Пудово так работает, даже считает как надо :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог