Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.49 MB
Время: 0.013 c
1-244
Ирина
2002-03-19 10:25
2002.04.01
Открываем файл RichEdit-том


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


1-144
dolphin
2002-03-22 02:25
2002.04.01
Как определить есть ли файл на сервере.


6-263
Oleg_EM
2002-01-09 09:29
2002.04.01
AsyncPro 2.58 ApdTAPIDevice как ему сказать шоп пульсом набирал ?


14-293
Prog_SKV1
2002-02-15 09:04
2002.04.01
Для затравки разговора !!!




   Наверх