Форум: "Основная";
Текущий архив: 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 все вспомогательные файлы создались заново (конечно, все настройки проекта потерял). После повторной настройки (пути, иконки и тп.) проблема пропала. Надеюсь навсегда. Спасибо всем принявшим участие в обсуждении.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c