Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 10.12.2016
Сообщений: 2
1

Ошибка: Floating point division by zero

26.03.2017, 23:28. Показов 3637. Ответов 4

Author24 — интернет-сервис помощи студентам
Доброй ночи!
У меня одна проблема. Делфи мне пишет floating point division by zero при интегрировании методом трапеции.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
program Project1;
 
function fA(x: real; j,k:integer) : real;
begin
  result := (1+x*x/8)*(9/8-x)*(j*ln(x-1/8))*(9/8-x)*(k*ln(x-1/8))+
            ((j*ln(x-1/8))*(-1)+(9/8-x)*j*((j-1)*ln(x-1/8)))*
            ((k*ln(x-1/8))*(-1)+(9/8-x)*k*(k-1*ln(x-1/8)));
end;
function fB(x,a,b: real; k:integer) : real;
begin
  result := (9/64-(-14/8))/(9/8-1/8)*((k*ln(x-1/8))*(-1)+(9/8-x)*k*(k-1*ln(x-1/8)))+
  (9/8-x)*(k*ln(x-1/8))*((1+(x*x)/8)*(9/64+(-3.5-9/64)*(x-1/8)/(9/8-1/8))-(1+x)/x*x*x+ln(7));
end;
 
var
    h,a,b:real;
    prov:real;
    i,k,j:integer;
    x,y:array[0..3] of real;
    mA:array[1..3,1..3] of real;
    mB:array[1..3] of real;
Begin
    a:=1/8; b:=9/8;
    h:=(b-a)/3;
    begin
      writeln('Расспишем точки интегрирования');
      x[0]:=a;
      for I := 1 to 2 do
        x[i]:= x[0]+i*h;
      x[3]:=b;
      for I := 0 to 3 do
        writeln('x[',i,']: ',x[i]:6:4);
      readln;
    end;
//============================
    begin
      writeln('Найдем A и B');
      writeln('Матрица A:');
      for k := 1 to 3 do
        begin
        for j := 1 to 3 do
          begin
          for I := 0 to 3 do
            y[i]:= fA(x[i],j,k);
            mA[k,j]:=h/2*(y[0]+2*(y[1]+y[2])+y[3]);
            write(mA[k,j]);
          end;
        writeln;
        end;
    end;
 
end.
Заранее спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2017, 23:28
Ответы с готовыми решениями:

Ошибка: Floating point division by zero
программа выдает ошибку из названия темы, ниже прикрепил архив с прогой

Ошибка floating point division by zero
Ошибка floating point division by zero Вот программа program Project2; {$APPTYPE CONSOLE} ...

Ошибка ''floating point division by zero''
Табуляция функции у и суммы ряда ее разложения. При выполнение выдает ошибку "floating point...

Ошибка: floating point division by zero
y:=9.1*x-(cos(x)*cos(x))*(abs(0.2*x))/((x+3)*(x+3)); Выдаёт ошибку floating point division by zero...

4
botsik
262 / 262 / 140
Регистрация: 05.06.2016
Сообщений: 1,247
Записей в блоге: 1
26.03.2017, 23:59 2
8 не входит в область допустимых значений (9/8-x)

Добавлено через 7 минут
и еще много других чисел
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
27.03.2017, 09:29 3
Лучший ответ Сообщение было отмечено тгк как решение

Решение

Цитата Сообщение от cfbogd Посмотреть сообщение
8 не входит в область допустимых значений (9/8-x)
Почему? Делим же на 8, а не на (8-х).

Добавлено через 3 минуты
А вот например ln(x-1/8) при х=1/8 точно не определен.
А вот в функциях много интересного, например (9/8-1/8), это же просто 1, и нафига городить?
0
1437 / 1014 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
27.03.2017, 10:14 4
Лучший ответ Сообщение было отмечено тгк как решение

Решение

function fB(x,a,b: real; k:integer) : real;
begin
result := (9/64-(-14/8))/(9/8-1/8)*((k*ln(x-1/8))*(-1)+(9/8-x)*k*(k-1*ln(x-1/8)))+
(9/8-x)*(k*ln(x-1/8))*((1+(x*x)/8)*(9/64+(-3.5-9/64)*(x-1/8)/(9/8-1/8))-(1+x)/x*x*x+ln(7));
end;
Выделенное место при х=0 даст эту ошибку. Либо обрабатывайте её, либо пропишите в начале функции что-то типа:
Delphi
1
if x = 0 then Exit;
Добавлено через 4 минуты
Цитата Сообщение от тгк Посмотреть сообщение
for I := 0 to 3 do
* * * * * * y[i]:= fA(x[i],j,k);
Вот здесь был прав Puporev. При x[0] = а = 1/8, фунция fA не определена из-за логарифма.

Добавлено через 2 минуты
И потом.. Не увидел, зачем Вам эта fB.
0
0 / 0 / 0
Регистрация: 10.12.2016
Сообщений: 2
27.03.2017, 18:08  [ТС] 5
Спасибо всем большое, но я решил проблему подключив math и использовав power.

Цитата Сообщение от Matan! Посмотреть сообщение
И потом.. Не увидел, зачем Вам эта fB.
Насчет этой функции, я её потом использую для нахождения матрицы B.
0
27.03.2017, 18:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.03.2017, 18:08
Помогаю со студенческими работами здесь

Ошибка: floating point division by zero
Выдает ошибку: floating point division by zero unit Unit1; interface uses Windows,...

Ошибка в коде: 'Floating point division by zero'"
Выскакивает ошибка "raised exception class EZeroDivide with massage 'Floating point division by...

Floating point division by zero
возникает такая ошибка: Floating point division by zero помогите, пожалуйста, ее исправить ...

Floating point division by zero
Вечер добрый, обращался с этой проблемой, но так и не разобрался. На пункте "Определение потерь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru