Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];

Вниз

Ошибка при работе функций 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.041 c
1-41604
Dmitry
2003-10-27 01:18
2003.11.13
Сменить курсор


1-41467
Sagrer
2003-11-04 19:37
2003.11.13
Помогите с Selection в Memo.


3-41039
NaZGA
2003-10-14 14:11
2003.11.13
ADO Временные таблицы


3-40814
Feofan
2003-10-22 02:32
2003.11.13
SQL запросы


3-40980
Kosta
2003-10-16 17:58
2003.11.13
Получение списка пользователей из MSSQL(2000)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский