Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];




Вниз

Что за ошибка? 


Володя   (2002-03-21 14:43) [0]

В общем доходит до смешного.
Пишу, н-р, такой оператор:
var
x, q:extended;
...
x:=q/500;
...
Если поставить breakpoint после этого оператора, то все нормально. Если до и пройти по F8(F7), возникает ошибка "Invalid floatung operation". Причем, ошибка может быть, а может и не быть. В общем замучился. Не могу нормально отладить программу.
Может кто встречался с этим? Компилятор Delphi 6, Win98SE.
Спасибо, Володя



Alx2   (2002-03-21 14:45) [1]

Странно...
А код полностью можно?



Andrey007   (2002-03-21 14:47) [2]

А Вы первоначальную инициализацию переменных сделали? Ещё нужно посмортеть значения этих переменных - может быть выход за границы диапазон. А вообще, похоже, что на ноль делите.



Alx2   (2002-03-21 14:58) [3]

Да, скорее всего инициализация...



-=CrazyFish=-   (2002-03-21 15:24) [4]

перед
x:=q/500;
присвой
x:=0;
должно сработать



-=CrazyFish=-   (2002-03-21 15:28) [5]

прежде чем использовать переменные с плавающей запятой их желательно обнулять



Alx2   (2002-03-21 15:31) [6]

>-=CrazyFish=- © (21.03.02 15:28)
???

А если просто инициализировать? (Не обязательно нулем)



-=CrazyFish=-   (2002-03-21 15:36) [7]

ну погорячился я насчет нуля... ;) согласен



MBo   (2002-03-21 15:50) [8]

а был ли мальчик? :)



McSimm   (2002-03-21 16:02) [9]

>MBo © (21.03.02 15:50)
Вот и я думаю... :)

Люди, инициализировать, конечно, надо. Только не x, а q.
Происходит ошибка потому, что в памяти, отведенной для q оказываются случайные значения. Если для Integer это в принципе не страшно, то для Extended... - не всякий набор бит можно разделить на 500 :))



Alx2   (2002-03-21 16:11) [10]

Чем легче вопрос, тем сильнее понос....
Так мы скоро начнем разбирать с какой буквы слово "begin" правильно надо писать...

>Люди, инициализировать, конечно, надо. Только не x, а q.
Ну естественно...
Однако ни кода нет, нии автора...



Володя   (2002-03-21 16:49) [11]

Даже не ожидал такого моментального отклика. Вообще собирался посмотреть завтра.Спасибо всем.
Вот ниже привожу кусок процедуры. У меня тоже были сомнения по поводу неопределенности значения. Но ошибка появляется и даже после такой инициализации.
var
Quant:Integer;
x, q:extended;
begin
ind:=0;
while GetNorm(Art, MontagName, NormK, NormS) do
begin
NormK:=0.4;
q:=4.67;
x:=0;
x:=NormK*Q;//Здесь ошибка invalid floating point operation, если здесь поставить breakpoint
x:=x/NormS;//или здесь,если breakpoint поставить здесь.Верхняя строчка отрабатывает без ошибки
end
end;
Это какая-то ерунда. Сам вижу. Все переменные определены. Мало того, инициализированы непосредственно перед использованием. (вариант случайных значений вроде как отпадает).
Причем откомпилированный exe-шник работает на ура. Проблема в том, что не могу отладить.



Alx2   (2002-03-21 16:52) [12]

Попробуй отключить оптимизацию, перекомпилируй и снова проверь где возникает exception.
Скорее всего из-за NormS



MBo   (2002-03-21 16:57) [13]

x:=0;
x:=NormK*Q
x:=x/NormS
первые две строчки не генерируют кода - нет смысла (оптимизация)
NormS чему равно?



McSimm   (2002-03-21 17:00) [14]

как описана процедура GetNorm( и где описаны NormK, NormS ?

> x:=0;
>x:=NormK*Q;

А перед x:=0 тоже желательно x проинициализировать :) (шутка)



Alx2   (2002-03-21 17:01) [15]

>MBo © (21.03.02 16:57)
> x:=0;
Это, видимо, следствие неправильно понятого совета "прежде чем использовать переменные с плавающей запятой их желательно обнулять" (-=CrazyFish=- © (21.03.02 15:28))



-=CrazyFish=-   (2002-03-21 17:09) [16]

Народ, вы будете смеяться, но пару месяцев назад столкнулся со следующим глюком
в строке x:=(тут вычисления с плавающей запятой);
вылезала ошибка "Invalid Floating Operation" все переменные были инициализированны кроме x. Когда я уже был в ступоре помогло только x:=0; а уже потом вышеуказанная строчка. Что вы скажете на это?



Alx2   (2002-03-21 17:14) [17]

>-=CrazyFish=- © (21.03.02 17:09)
Код в студию!
Хочется на сгенерированный asm поглядеть



-=CrazyFish=-   (2002-03-21 17:24) [18]

Код в студию не получится, т.к. нет его у меня сейчас.
Может в сгенерированном asm"е и были глюки, но в паскале все было верно.



Володя   (2002-03-21 17:31) [19]

Ладно, парни. В чем был баг так и не понял, но проблему решил следующим образом. Просто в папке проекта удалил все файлы кроме *.pas, *.dfm и, конечно, *.dpr. После запуска Delphi все вспомогательные файлы создались заново (конечно, все настройки проекта потерял). После повторной настройки (пути, иконки и тп.) проблема пропала. Надеюсь навсегда. Спасибо всем принявшим участие в обсуждении.




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.75 MB
Время: 0.018 c
1-250             Sound                 2002-03-21 01:37  2002.04.01  
Помогите с компонентом TreeView!


1-137             Transaero             2002-03-19 12:04  2002.04.01  
Как возвести в степень отрицательное число?


14-309            McSimm                2002-02-18 15:47  2002.04.01  
Клиент для форумов. Dolphin 1.2. Новая версия.


4-350             MrAngel               2002-01-28 16:58  2002.04.01  
Shell Creating - вечная проблема. Часть вторая.


3-4               Daiz13                2002-03-05 10:58  2002.04.01  
Создание пользователей Interbase