Я столкнулся с ситуацией, когда now начинает выдавать чудовищно округленные значения (до нескольких минут !). В результате расследования выяснилось, что это наблюдается после выполнения функции Direct3D.CreateDevice. Если же сразу после этой функции вставить
asm FNINIT end;
т.е. сбросить FPU, то тогда последующие вызовы now работают нормально со своей обычной точностью. Отсюда я делаю выводы: либо функция CreateDevice просто забыла вернуть FPU в прежнее состояние, либо она это сделала намеренно, чтобы ускорить работу по трехмерным расчетам, либо в функции now не предусмотрена инициализация FPU перед началом расчетов. У меня просто не укладывается в голове, как в XXI веке, работая на Delphi XE возможны такие подставы ! И еще мне не понятно почему на уровне пользователя Windows дает возможность выполнить инструкции сопроцессора, они разве не привилегированные?
Вопиющий случай с функцией now
Уважаемый Александр,
Я столкнулся с ситуацией, когда now начинает выдавать чудовищно округленные значения (до нескольких минут !). В результате расследования выяснилось, что это наблюдается после выполнения функции Direct3D.CreateDevice. Если же сразу после этой функции вставить
asm FNINIT end;
т.е. сбросить FPU, то тогда последующие вызовы now работают нормально со своей обычной точностью. Отсюда я делаю выводы: либо функция CreateDevice просто забыла вернуть FPU в прежнее состояние, либо она это сделала намеренно, чтобы ускорить работу по трехмерным расчетам, либо в функции now не предусмотрена инициализация FPU перед началом расчетов. У меня просто не укладывается в голове, как в XXI веке, работая на Delphi XE возможны такие подставы ! И еще мне не понятно почему на уровне пользователя Windows дает возможность выполнить инструкции сопроцессора, они разве не привилегированные?
С уважением,
Дмитрий Шеховцов
dima@transinf.ru