Page 2 of 2

Posted: Thu Mar 01, 2007 1:10 pm
by Serial
Всё, окончательно разобрался..

Code: Select all

double round(double x) 
{ 
   __asm   fld x 
   __asm   frndint 
} 
По-моему получены ответы на все вопросы. Так что всем кто пытался и всем кто помог СПАСИБО ;)

Posted: Thu Mar 01, 2007 5:00 pm
by diamond
Эх, не успел...
Итак. Компилятор Visual C++ 6 инлайнит вызовы функций sin,cos,sqrt и некоторых других. Компилятор из Visual Studio 2005 этого по умолчанию не делает, но его можно заставить, указав в GUI опцию "Floating point support: fast" на какой-то из вкладок компиляции. Эквивалент командной строки: /fp:fast. Функции типа acos,asin приходится реализовывать ручками. Обновил примеры на http://diamondz.land.ru/hll/hll_examples.7z - теперь в каталоге vc там появился файл math.cpp с реализациями acos, asin, ceil, floor, round и для VC6 _ftol (преобразование double в long), VS инлайнит _ftol. Для использования всего этого достаточно подключить math.cpp к проекту так же, как это делалось для остальных файлов, а в файлы, использующие математическую библиотеку, нужно включить <math.h>. Предупреждение: #include <math.h> должно стоять до #include "kosSyst.h" (ибо в kosSyst.h функция abs превращается в макрос).