Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2010, 19:32   #1
manick
Пользователь
 
Регистрация: 14.04.2010
Сообщений: 17
По умолчанию 'Invalid floating point operation'. process stopped. Use Step or Run to continue.

Project calcul.exe raised exception class EInvalidOp with massege
'Invalid floating point operation'. process stopped. Use Step or Run to continue.

обьясните пожалуста....
manick вне форума Ответить с цитированием
Старый 29.05.2010, 20:00   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

ответы на все вопросы
Цитата:
Проект calcul.exe поднял EInvalidOp исключением класса massege
'Неверный операции с плавающей точкой. процесс остановился. Использование Шаг или Запустить, чтобы продолжить.
Смотрим где в коде с вещественными числами намудрили
eoln вне форума Ответить с цитированием
Старый 29.05.2010, 21:54   #3
manick
Пользователь
 
Регистрация: 14.04.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
ответы на все вопросы

Смотрим где в коде с вещественными числами намудрили
я пытаюсь посчитать арктангенс по ряду тейлора
Код:
function arctanT (x:real):real;
var
n:LonGint;
s,z,v:real;
begin
for n:=0 to 1432 do
begin
if odd(n) then s:=s-st(x,n*2+1)/(n*2+1)
else           s:=s+st(x,n*2+1)/(n*2+1);
end;

Result:=s;
end;
считает например когда Х= 0.3 0.5 0.6 0.7
для 0.1 0.2 0.4 0.8 0.9 не хочет

а нужно что бы считало от -1 до 1
manick вне форума Ответить с цитированием
Старый 29.05.2010, 22:22   #4
bitSoft
Programming...
Форумчанин
 
Аватар для bitSoft
 
Регистрация: 13.03.2010
Сообщений: 198
По умолчанию

Таблица 3.2. Вещественные типы данныхТип Диапазон возможных значений Значащих цифр максимально Размер в байтах
Real48 2.9 * 10-39 .. 1.7 * 1038 11-12 6
Real 5.0 * 10-324 .. 1.7 * 10308 15-16 8
Single 1.5 * 10-45 .. 3.4 * 1038 7-8 4
Double 5.0 * 10-324 .. 1.7 * 10308 15-16 8
Extended 3.6 * 10-4951 .. 1.1 * 104932 19-20 10
Comp -263+1 .. 263-1 19-20 8
Currency -922337203685477.5808 .. 922337203685477.5807 19-20 8

Postavi vmesto Real, postavi Currency
Код:
With TProgrammersForum.Create do  AddNewTopic('Title','Content...');
bitSoft вне форума Ответить с цитированием
Старый 29.05.2010, 22:23   #5
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Какие доказательства что ошибка здесь? Что за функция st?
eoln вне форума Ответить с цитированием
Старый 29.05.2010, 22:35   #6
manick
Пользователь
 
Регистрация: 14.04.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
Какие доказательства что ошибка здесь? Что за функция st?

function st(x:real;n:longint):real;
var
D:real; i:longint;
begin
if n=0 then
begin
D:=1;
end
else
begin
D:=1;
for i:=1 to n do
begin
D:=D*x;
end;
end;
Result:=D;
end;

доказательств нет.
manick вне форума Ответить с цитированием
Старый 29.05.2010, 23:25   #7
manick
Пользователь
 
Регистрация: 14.04.2010
Сообщений: 17
По умолчанию

В Build еще пишет
Variable 's' might not have been initialized
manick вне форума Ответить с цитированием
Старый 29.05.2010, 23:32   #8
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

От -1 до 1 считает нормально. При других значениях резко возростает и происходит переполнение. Значит ошибка при передаче, функция arctanT получает какие-то другие значения не из интервала [-1, 1]

На счёт Variable 's' might not have been initialized - это неинициализированная переменная. Перед циклом поставить s:=0;
eoln вне форума Ответить с цитированием
Старый 29.05.2010, 23:44   #9
manick
Пользователь
 
Регистрация: 14.04.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
От -1 до 1 считает нормально. При других значениях резко возростает и происходит переполнение. Значит ошибка при передаче, функция arctanT получает какие-то другие значения не из интервала [-1, 1]

На счёт Variable 's' might not have been initialized - это неинициализированная переменная. Перед циклом поставить s:=0;
а как ты сделал?
есть еще такое действие

Цитата:
x:=StrToFloat(form1.Edit1.Text);
y:=arctanT(x)*180/pi;
Form1.Edit1.Text:=FloatToStr(y);
может изза этого
manick вне форума Ответить с цитированием
Старый 30.05.2010, 00:20   #10
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

С помощью пошаговой отладки (клавиша F8) пройдись и узнаешь где и когда вылетает программа.
Возможно в Edit1 вовсе не число. Какой разделитель между целой и дробной частью? Возможно вместо запятой точка или наоборот. 0,5 и 0.5 - это разные вещи.
eoln вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Invalid floating point operation на паскале maziLa Помощь студентам 3 26.05.2010 19:37
invalid floating point operation Mikhail91 Общие вопросы C/C++ 5 24.03.2010 00:05
Ошибка: invalid floating point operation Willow Помощь студентам 3 24.01.2010 18:42
invalid floating point operation mosq Общие вопросы Delphi 7 01.11.2009 13:28
Invalid floating point operation Skytis Помощь студентам 3 07.05.2008 12:16