Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Rumbakalao
0 / 0 / 0
Регистрация: 21.09.2014
Сообщений: 3
1

Вычислительная ошибка при малом шаге

21.09.2014, 16:51. Просмотров 454. Ответов 2
Метки нет (Все метки)

Всем привет. Только начинаю изучать с++. В общем, нужно написать программу. Вот она:
"Вычислить и вывести на экран в виде таблицы значения функции, заданной
графически (из лабораторной работы №1, вариант остаётся прежним) на интервале от Х1
до Х2 с шагом dx. Интервал и шаг задать таким образом, чтобы проверить все
ветви программы. Таблицу снабдить заголовком и шапкой."

Программу я написал и работает она вроде правильно, но при вводе шага, меньшего 0.5 в точках, где y=0 программа выдает непонятные числа, например при шаге 0.2 в точках, где х и y должны быть нулями она выдаёт
x= -2.98023e-008 y=0.000244141. Помогите исправить программу, пожалуйста. (Это только первая половина задания, так что на переменную р не обращайте внимания - она отвечает за выбор задания)

C++
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
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
#include <cmath>
#include <stdlib.h>
 
using namespace std;
 
int main()
 
{
      short int p,r1,r2;
      float x,x1,x2,y,d;
      cout << "Enter R1" << endl;
      cin >> r1;
      cout << "Enter R2" << endl;
      cin >> r2;
      cout << "Choose programm" << endl;
      cin >> p;
      if (p==1)
      { cout << "Enter first x" << endl;
      cin >> x1;
      cout << "Enter last x" << endl;
      cin >> x2;
      cout << "Enter step (dx)" << endl;
      cin >> d;
      cout << "\t       F(X)\n";
      cout << "\t      ------\n";
      cout << endl;
      cout << "+---------------+---------------+\n";
      cout << "| X \t\t| Y\t        |\n";
      cout << "+---------------+---------------+\n";
      x = x1;
      do 
      {if (x > x2)
      {exit(0);} 
      if (x >= -3 & x < -2)
           { y = -x - 2; }
            else if ( x == -2)
            { y = 0; }
            else if (x > -2 & x < 0)
            { y =  sqrt(r1*r1 - (x + 1)*(x + 1)); }
            else if (x == 0)
            { y = 0; }
            else if (x > 0 & x < 4)
            { y = - sqrt(r2*r2 - (x - 2)*(x - 2)); }
            else if (x == 4)
            { y = 0; }
            else if (x > 4 & x <= 6)
            { y = -x/2 + 2; }
            else if (x >= 6 & x <= 7)
            { y = -1; }
            else 
         { cout << "Numbers "<<x<<" and next is out of range " << endl; 
         exit (0); }
         cout << "| " << x << "\t\t| "<< y << endl;
         cout << "+---------------+---------------+ "<< endl;
         x = x + d;}
      while (x <= x2);
      
      }
      else if (p==2)
      {
      }
      else cout << "Here only 2 tasks!" << endl;
      return 0;
      }
0
Миниатюры
Вычислительная ошибка при малом шаге  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2014, 16:51
Ответы с готовыми решениями:

Ошибка на шаге strcpy в MVS2015
Выдаёт ошибку на шаге strcpy? Что не так и как исправить? #include...

Действие при определенном шаге цикла
Подскажите пожалуйста, есть цикл for ( i=0; i&lt;100 000; i++), нужно что бы при...

Найти значения функции при заданном шаге агрумента
Решите пожалуйста, с меня конфетка:) Извиняюсь за качество

В одном шаге от счастья.
#include &lt;iostream&gt; using namespace std; const int size = 6; int main() {...

Расчет числа Фибоначчи на шаге n
Помогите пожалуйста,нужно написать программу для расчета числа Фибоначчи на...

2
zss
Модератор
Эксперт С++
7186 / 6681 / 4230
Регистрация: 18.12.2011
Сообщений: 17,631
Завершенные тесты: 1
21.09.2014, 17:09 2
Вы же всегда имеете приближенное значение (и if ( x == -2) никогда не сработает),
поэтому то, что Вы приводите, можно считать нулем с точностью 0,0000001 в первом случае
и с 0.0001 - во втором.

Кстати, везде надо писать не числа, а соответствующие значения r:
например, вместо -2 надо -2*r1
вместо -1 надо -r1
и т.д.
0
Renji
2105 / 1545 / 471
Регистрация: 05.06.2014
Сообщений: 4,484
21.09.2014, 17:20 3
например при шаге 0.2 в точках, где х и y должны быть нулями она выдаёт
x= -2.98023e-008 y=0.000244141.
Как минимум заменить while на:
C++
1
2
3
4
for(int N=0;x<=x2;x=x1+d*++N)
{
...
}
Чем больше сложений, тем больше погрешности вычислений.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2014, 17:20

Вычислительная математика
Здраствуйте,добрые,люди.Тут такое задание по вычислительной математике,кому не...

вычислительная геомтерия
Круг Даны координаты n точек (xi,yi), i=1,2,…,n (n≤100). Указать номера тех...

Вычислительная геометрия на С
Заданы координаты N точек. Определить те две точки, проведенная через которые...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru