Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.13;
Скачать: CL | DM;

Вниз

Ошибка при работе функций trunc и int.   Найти похожие ветки 

 
Unknown user ©   (2003-10-27 19:43) [0]

При вызове данных функций с определенными значениями аргументов возникает исключение invalid floating point operation. Значения аргументов за диапазон не выходят, при вызове с теми же аргументами round -все проходит гладко. В чем может быть дело? Я уже не знаю, что думать.


 
Sergey_Masloff   (2003-10-27 19:47) [1]

>При вызове данных функций с определенными значениями аргументов >возникает исключение invalid floating point operation
При таких сильных утверждениях неплохо привести эти значения аргументов.


 
Anatoly Podgoretsky ©   (2003-10-27 20:02) [2]

Что то не верится, ты случайно не обманываешь нас?


 
Unknown user ©   (2003-10-27 20:08) [3]

2 Sergey_Masloff. Оно все кажется забавным, как так такие простые и проверенные функции -5 строчек ассемблерного кода, и вызывают ошибку. Я бы сам не поверил если бы не столкнулся, но тем не менее компилятор явно указывает адрес исключения, и замена trunc на round убирает ошибку. А насчет значений аргументов - закономерности я не нашел, в программе данная функция вызывается сотню раз в секунду всегда с новым значением аргумента, и при определенном(случайном) значении возникает исключение. Указатели не используются.


 
Anatoly Podgoretsky ©   (2003-10-27 20:10) [4]

и замена trunc на round убирает ошибку одназначно нас обманул с Значения аргументов за диапазон не вых


 
Unknown user ©   (2003-10-27 20:13) [5]

2 Anatoly Podgoretsky. Нет, Borland"oм клянусь. Мне даже пришлось написать свою функцию trunc(после нескольких часов безуспешного поиска ошибки).


 
Unknown user ©   (2003-10-27 20:15) [6]

2 Anatoly Podgoretsky. Нет ну если для Single число 1.49545 -выход за range -тогда виноват.


 
Anatoly Podgoretsky ©   (2003-10-27 20:22) [7]

Unknown user © (27.10.03 20:13) [5]
И чем же твой trunc отличается от стандартного, могу по секрету сообщить, что стандартный использует аппаратные возможности сопроцессора, просто записывает результат в переменную.


 
default ©   (2003-10-27 20:24) [8]

ты скажи при каком именно значение Trunc падает(
а если после ряда значений он падает, значит это уже не он виноват скорее всего


 
Unknown user ©   (2003-10-27 20:27) [9]

2 Anatoly Podgoretsky.

function Trunc(V:Single):integer;
begin
Result:=Round(V);
if V-Result<0 then Result:=Result-1;
end;


 
Unknown user ©   (2003-10-27 20:29) [10]

2 default. Да, "падает" именно после ряда значений.


 
default ©   (2003-10-27 20:32) [11]


procedure _TRUNC;
asm
{ -> FST(0) Extended argument }
{ <- EDX:EAX Result }

SUB ESP,12
FNSTCW [ESP].Word // save
FNSTCW [ESP+2].Word // scratch
FWAIT
OR [ESP+2].Word, $0F00 // trunc toward zero, full precision
FLDCW [ESP+2].Word
FISTP qword ptr [ESP+4]
FWAIT
FLDCW [ESP].Word
POP ECX
POP EAX
POP EDX
end;

вот его код, и это не пять строк
попробуй создай новый проект и там повызывай Trunc с Random-ыми значениями


 
Anatoly Podgoretsky ©   (2003-10-27 20:34) [12]

Да тут как минимум два преобразования в Extended


 
Anatoly Podgoretsky ©   (2003-10-27 20:36) [13]

Да лучше сделать отладочную версию, вызывать два Trunc и анализ при ошибке


 
Unknown user ©   (2003-10-27 20:49) [14]

2 default & Anatoly Podgoretsky. Пробовал уже получать значение аргумента через Random -все Ок, ошибка не возникает. Вот участок моего кода, вызывающего ошибку:

Frames:=trunc(GetTickCount*0.001-FStartFrameTime)*Mov.FramesPerSecond);

FStartFrameTime:Single
Mov.FramesPerSecond:integer;



 
Anatoly Podgoretsky ©   (2003-10-27 21:01) [15]

Вот здесь неясная величина FStartFrameTime, как оно получается, чему равно и почему оно в Single, а не целое или хотя бы Double

Провел бы ты отладку


 
Unknown user ©   (2003-10-27 21:13) [16]

2 Anatoly Podgoretsky & default. Спасибо за помощь. Буду рыть дальше...



Страницы: 1 вся ветка

Текущий архив: 2003.11.13;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.048 c
3-40804
Rod
2003-10-22 12:47
2003.11.13
Активизация роли приложения SQL2000 через BDE


3-40907
snoup
2003-10-19 14:25
2003.11.13
Можно ли и как создавать таблицы с помощью TIB компонент?


6-41853
needle
2003-09-18 15:38
2003.11.13
Аутентификация NT


3-40825
frogl
2003-10-21 18:42
2003.11.13
MS SQL, записать поле text


1-41178
Crush
2003-11-02 23:54
2003.11.13
Поиск файла на вичестере