Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.07 c
6-41813
alex732
2003-09-15 15:59
2003.11.13
ESockError 10022:Invalid argument


1-41584
Users
2003-10-27 12:11
2003.11.13
Вставка в EXCEL OLAP куба средствами Delphi


14-42065
VEG
2003-10-17 17:34
2003.11.13
Что для вас является самым ценным в компьютере?


3-40803
k_len
2003-10-22 09:49
2003.11.13
DBGrid


1-41288
Bless
2003-10-29 09:51
2003.11.13
Как узнать, сколько памяти занимает класс?




   Наверх