Главная страница
    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.47 MB
Время: 0.037 c
1-41556
Alexandr!
2003-11-04 11:40
2003.11.13
Qreport


1-41680
Jimboo
2003-10-23 15:15
2003.11.13
Помогите с реализацией


14-42016
Kirik
2003-10-17 00:29
2003.11.13
Где взять описание RxLib на русском?


3-41020
Vick
2003-10-15 11:16
2003.11.13
Variant - неизвестный тип для ClientDataSet


14-42019
Zhirnov Maxim
2003-10-15 13:07
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский