Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Alex Skye
Сообщений: n/a
#1

Погрешности в определении 0 - C++

24.10.2007, 11:36. Просмотров 1105. Ответов 1
Метки нет (Все метки)

Есть вот такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
double Hphi(double x)
{
  if(x==0) return 111;
  else return 222;
}
 
int main(int argc, char *argv[])
{
    double x, H;
    for (x = -0.2; x <= 0.2; x=x+0.1){
          H = Hphi(x);
          printf("%10f, %10f\n", x, H);
    };
    
    getch();
    return 0;
}
А вот результат его работы:
-0.300000, 222.000000
-0.200000, 222.000000
-0.100000, 222.000000
0.000000, 222.000000
0.100000, 222.000000
0.200000, 222.000000.

Если же задавать цикл от -0,2 до 0,2 то все нормально:
-0.200000, 222.000000
-0.100000, 222.000000
0.000000, 111.000000
0.100000, 222.000000
0.200000, 222.000000

Очевидно проблема в погрешности определения 0, но почему она имеет место не пойму. Подскажите пожалуйста, если кто знает.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2007, 11:36     Погрешности в определении 0
Посмотрите здесь:

Упражнения по инициализации,определении - C++
Проверьте пожалуйста, правильно я понимаю смысл инициализации указателей на константу, константных выражений и тп. 1. Объясните...

Косяк в определении структуры - C++
struct LodedModuleDescriptor{ DWORD nameHash; HMODULE hDll; }; struct LoadedModules{ int count; int arraySize; struct...

Ошибка в определении структуры - C++
Здравствуйте. Я только начал изучать структуры и не могу понять в чем ошибка. struct event { char start_time; char stop_time; ...

Ошибка при определении массива - C++
#pragma hdrstop #pragma argsused #ifdef _WIN32 #include &lt;tchar.h&gt; #else typedef char _TCHAR; #define _tmain main ...

Ошибка при определении макроса - C++
Здорова! Есть код: #include &lt;iostream&gt; using std::cout; using std::endl; #include &lt;string&gt; using std::string; #include...

Найти ошибку в определении класса - C++
Доброго дня. Имеется код. Ошибка на последних двух строчках class one { protected: int x; public: one(); ...

Ошибка в определении шаблонного метода - C++
Подскажите пожалуйста, что делаю не так в определении шаблонного метода. Вот код: // test.cpp #include &lt;iostream&gt; #include...

Throw() в объявлении/определении ф-ции - C++
Привет всем! Какое отличие такого написания ф-ции void foo(){ throw std::exception(&quot;except in function foo&quot;); } от void...

Ошибка в определении структурного типа - C++
В строке 40 выдает ошибку &quot;error C2440: 'initializing' : cannot convert from 'int' to 'char *'. Помогите, пожалуйста, исправить ее ...

Ошибка в определении типов чисел - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; using namespace std; int main() { double x, y,...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Herbert
0 / 0 / 2
Регистрация: 27.08.2007
Сообщений: 26
26.10.2007, 22:56     Погрешности в определении 0 #2
Погрешность у тебя в нуле проявилась потому что ты именно ноль "вылавливаешь". А так она не только в нуле есть. Все твои -0.4, -0.3, -0.2, -0.1 .... и т.д. на самом деле таковыми не являются там ошибка так или иначе есть (маленькая просто - где-то в ...надцатом знаке после запятой). И ошибка эта тем больше чем больше операций сложения прошло.
Если в цикле вместо x = -0.2 написать x=-5000000 то ошибка набежит уже порядка 0.0002.
Короче я бы просто не стал с нулем действительные числа сравнивать.
Yandex
Объявления
26.10.2007, 22:56     Погрешности в определении 0
Ответ Создать тему
Опции темы

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