Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.01;
Скачать: CL | DM;

Вниз

Что за ошибка?   Найти похожие ветки 

 
Володя   (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 все вспомогательные файлы создались заново (конечно, все настройки проекта потерял). После повторной настройки (пути, иконки и тп.) проблема пропала. Надеюсь навсегда. Спасибо всем принявшим участие в обсуждении.



Страницы: 1 вся ветка

Текущий архив: 2002.04.01;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.012 c
1-141
S
2002-03-21 18:02
2002.04.01
Помогите скрыть форму!


1-149
Просто чел
2002-03-22 00:46
2002.04.01
КАК СОЗДАТЬ MEMO НА СТРАНИЧКЕ TabSheet


14-289
Almas
2002-02-15 15:01
2002.04.01
Проблемы с установкой Дельфи


6-278
Velocity
2002-01-17 07:28
2002.04.01
BROADCAST-пакет в локалке


3-50
AndrewK
2002-03-05 15:35
2002.04.01
Как составить SQL запрос