Вот код написан на дельфи. procedure TForm1.FormCreate(Sender: TObject); var a,b,c:Extended; begin b:=0.178176194206200011; c:=30005788672; ShowMessage(FloatToStr(b*cos(pi*c)*sin(pi*c))); ShowMessage(FloatToStr(b*cos(pi*c)*sin(pi*c))); end; При одинаковых формулах выдает разные результаты. Все это связанно с тем, что после первого вывода MessageBoxa один из флагов сопроцессора изменяется PC. Что влият на вычисления синуса! Последующии изменения флагов не выявленны. Может это дельфи, что-то делает не так? Может, кто разъяснит по подробней, а то плохо разбираюсь со процессором. ПС. XP SP1. Pentium4. Delphi7.
Тебя наверно плющит. Я проверил, у меня все совпадает с точность до копеечки. 2k SP4, Celeron 2.0, Delphi5
Иногда отладчик делфы некорректно удаляет брекпоинты и после этого начинают происходить настоящие чудеса. Обычно проблема решается перезапуском делфы.
Скорее это баг дельфи, чем микрософта. По хорошему, перед вычислениями в фпу надо бы обнулить флаги - finit и т.п. А этим должен заниматься рантайм дельфи, а не микрософта.
HARD Все всем спасибо.Прогу скомпилировал. У меня и не только результаты разнятся. Значит глюк дельфи7 при иницилизации сопроцессора. В других версиях не проявляется. Нужно было добавить строчку. Set8087CW($123f);