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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
like-nix
351 / 32 / 6
Регистрация: 02.07.2008
Сообщений: 311
#1

Точности вычислений и преобразований double - C++

15.10.2009, 14:37. Просмотров 1975. Ответов 3
Метки нет (Все метки)

Всем привет!

Вопрос точности вычислений и преобразований double.

Объясните пожалуйста следующее:

Арифметические операции:
C++
1
double test_k = 1495.0 * 0.00001;
test_k = 0.014950000000000001

Преобразования:
C++
1
2
3
4
  char buffer [50];
  double a=5.38986;
  sprintf(buffer, "%f", a);
  sscanf(buffer, "%lf", &test_k);
test_k = 5.3898599999999997

В обоих случаях получаем погрешность. Как сделать так чтобы не было погрешности в вычислениях?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2009, 14:37     Точности вычислений и преобразований double
Посмотрите здесь:
Точности вычислений double C++
Потеря точности у double C++
C++ float и double (расчет точности)
Потеря точности числа формата double C++
Расчет точности для float и double C++
Точность вычислений у double C++
C++ Накопление погрешности вычислений с double
C++ Неоднозначность преобразований. Как задать "приоритет" преобразований
C++ Объяснить, что это значит double *F; F=new double[n];
Домашнее задание ошибки double circle_area(double R) C++
C++ Ошибка: невозможно преобразовать 'double' в 'double'
Шаблон класса complex. Ошибка undefined reference to `complex<double>::SetRe(double)' C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт С++
8283 / 3502 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
15.10.2009, 14:54     Точности вычислений и преобразований double #2
like-nix, никак. Напиши свою функцию Round для округления с заданной точностью
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
15.10.2009, 15:05     Точности вычислений и преобразований double #3
В процессоре вещественные числа представлены неточно - а с какой-то заданной точностью.
like-nix
351 / 32 / 6
Регистрация: 02.07.2008
Сообщений: 311
15.10.2009, 16:42  [ТС]     Точности вычислений и преобразований double #4
Важное дополнение, достаточно будет точности в 4 разряда.

like-nix, сейчас идея такая:

Я реализовал класс Sdouble, который будет реализовывать операции с типом double, с определенной точностью.

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
template <unsigned int precision>
class SDouble
{
public:
    // construction
    SDouble ();  // uninitialized
    SDouble (double fX);
    //copy constructor
    SDouble (const SDouble& rkSD);
    
    // assignment
    inline SDouble& operator= (const SDouble&) const;
    
    // comparison
    bool operator== (const SDouble&) const;
    bool operator!= (const SDouble&) const;
    bool operator<  (const SDouble&) const;
    bool operator<= (const SDouble&) const;
    bool operator>  (const SDouble&) const;
    bool operator>= (const SDouble&) const;
    
    //arithmetic operations himself
    inline SDouble operator+ (const SDouble&) const;
    inline SDouble operator- (const SDouble&) const;
    inline SDouble operator* (const SDouble&) const;
    inline SDouble operator/ (const SDouble&) const;
    
    // arithmetic updates
    inline SDouble& operator+= (const SDouble&);
    inline SDouble& operator-= (const SDouble&);
    inline SDouble& operator*= (const SDouble&);
    inline SDouble& operator/= (const SDouble&);
    
    //value
    double getValue();
private:
    //Функция преобразования произвольного double в double нужной точности
    double supp_val_precision(double);
    //double с определенной точностью
    double m_Value;
};

С помощью функции supp_val_degree выпоняем преобразование

Значит остается вопрос как мне например из 5.45352345234523452345 получить 5.45350000000000000000
Есть у кого нибудь какие ниьудб идеи как должна выглядеть функция supp_val_degree?
Я так понимаю что при вычислениях с разрядносью 4 погрешность очень маленькая, или я ошибаюсь?
Yandex
Объявления
15.10.2009, 16:42     Точности вычислений и преобразований double
Ответ Создать тему
Опции темы

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