Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.008 c
1-238
AlexMey
2002-03-19 12:59
2002.04.01
Создание собственных классов?


1-237
Linux
2002-03-20 20:25
2002.04.01
Как вставить ссылку на форму.


14-305
Lord Vader
2002-02-20 04:59
2002.04.01
RUNDLL32.EXE - Перезагрузить компьютер в режиме MS-DOS


1-93
Ahd
2002-03-19 11:31
2002.04.01
Диметрия


3-62
АндрейР
2002-03-08 20:00
2002.04.01
Как выбрать максимальное значение поля?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский