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

Откуда погрешность? - C++

Восстановить пароль Регистрация
 
nikitapel
 Аватар для nikitapel
36 / 36 / 4
Регистрация: 20.03.2011
Сообщений: 331
05.11.2011, 01:04     Откуда погрешность? #1
C++
1
2
double j=3.143;
cout << int(j*1000); // выдает 3142
Подскажите откуда берется погрешность?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2011, 01:04     Откуда погрешность?
Посмотрите здесь:

Погрешность и бесконечность C++
C++ ДУ. Метод Рунге-Кутта. Погрешность.
C++ Погрешность вычисления(ряд Тейлора)
C++ Погрешность метода Симпсона
C++ Погрешность дробной части
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I2um1
Злой няш
 Аватар для I2um1
1333 / 1031 / 114
Регистрация: 05.04.2010
Сообщений: 1,808
05.11.2011, 01:15     Откуда погрешность? #2
Здесь внизу или здесь есть информация о том, как в компьютере представляются вещественные числа. Это так сказать срабатывает погрешность при переводе из абракадабры в нормальный вид числа и все потому, что вещественное число хранится в слегка необычной форме.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
05.11.2011, 01:16     Откуда погрешность? #3
nikitapel, представление вещ-х чисел здесь на форуме уже много раз обсуждалось. Юзай поиск.
Bers
Заблокирован
05.11.2011, 01:17     Откуда погрешность? #4
Цитата Сообщение от nikitapel Посмотреть сообщение
Подскажите откуда берется погрешность?
Особенности хранения вещественного числа в памяти.
Если дробная часть числа не является основанием двойки в степени N, то машина не в состоянии запомнить такое число без погрешности.

вместо 0,3 будит либо 0,2999999999999999 либо 0,300000000000001 и тп
nikitapel
 Аватар для nikitapel
36 / 36 / 4
Регистрация: 20.03.2011
Сообщений: 331
05.11.2011, 01:24  [ТС]     Откуда погрешность? #5
Подскажите а как вообще решить эту проблему!?

Добавлено через 4 минуты
Bers но
C++
1
2
double j=3.143;
cout << j*1000;
Пишет без проблем 3143.
Bers
Заблокирован
05.11.2011, 01:30     Откуда погрешность? #6
nikitapel, то, что выводит на экранчик консолька - это мелом по воде писанно.
Смотрите в отладчике, что на самом деле живет в переменной j

Добавлено через 4 минуты
C++
1
2
3
 double j=3.143; //3.1429999999999998
    double m=j*1000; //3143.0000000000000
    double l = j*10000; //31429.999999999996
nikitapel
 Аватар для nikitapel
36 / 36 / 4
Регистрация: 20.03.2011
Сообщений: 331
05.11.2011, 01:43  [ТС]     Откуда погрешность? #7
Bers а почему тогда он не выводит на экран 3.1429999999999998?

Добавлено через 10 минут
Сделал вот так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <sstream>
using namespace std;
int DoubleToInt(double nik)
{
    nik=nik*1000;
stringstream per;
int g1;
per << nik;
per >> g1;
return g1;    
}
    
int main()
{
cout << DoubleToInt(3.147);
system("pause");
}
Bers
Заблокирован
05.11.2011, 01:44     Откуда погрешность? #8
Цитата Сообщение от nikitapel Посмотреть сообщение
Bers а почему тогда он не выводит на экран 3.1429999999999998?
Консолька умеет учитывать погрешность.
nikitapel
 Аватар для nikitapel
36 / 36 / 4
Регистрация: 20.03.2011
Сообщений: 331
05.11.2011, 01:50  [ТС]     Откуда погрешность? #9
Да Bers действительно консоль учитывает погрешность.
Прровел тест.
C++
1
2
3
cout << int(3.14) << "\n";
cout << int(3.52) << "\n";
cout << int(3.99) << "\n";
Везде выдал 3. Я то думал что он округляет.
Теперь понятно почему предыдущий код работает!!!
Спасибо большое Bars просветили
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2012, 22:55     Откуда погрешность?
Еще ссылки по теме:

C++ Погрешность вычислений
C++ Высокая точность вычислений (погрешность<10^-30)
C++ Погрешность числа (округление)

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

Или воспользуйтесь поиском по форуму:
NEvOl
12 / 11 / 0
Регистрация: 13.08.2012
Сообщений: 616
21.11.2012, 22:55     Откуда погрешность? #10
у меня возникла проблема, работаю в VCL Forms числа вывожу влейблы, всё работает как нужно, но после подключения d3dx9.h появляется погрешность, подскажите пожалуйста что делать ?(

Добавлено через 5 часов 1 минуту
проблема решена
Yandex
Объявления
21.11.2012, 22:55     Откуда погрешность?
Ответ Создать тему
Опции темы

Текущее время: 12:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru