Главная страница
    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.48 MB
Время: 0.041 c
3-40822
PolarS
2003-10-22 10:38
2003.11.13
Как программно выполнить Job MS SQL Server?


4-42293
frost
2003-08-22 08:58
2003.11.13
Добавление пункта в контекстное меню Windows


14-42010
Woman
2003-10-16 16:08
2003.11.13
Перевод из тнд в привычные еденицы


1-41389
GIL
2003-10-30 10:43
2003.11.13
Необязательный параметр в процедуре или функции


1-41177
MaxwellZ
2003-11-02 17:09
2003.11.13
Оформление формы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский