Форум: Форум C++Разное
Новые темы: 00
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вопрос точности вычислений и преобразований double.
 
 автор: like-nix   (15.10.2009 в 14:43)   письмо автору
 
 

Всем привет!

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

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

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

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

test_k = 5.3898599999999997

В обоих случаях получаем погрешность. Как сделать так чтобы не было погрешности в вычислениях?

  Ответить  
 
 автор: like-nix   (15.10.2009 в 15:43)   письмо автору
 
   для: like-nix   (15.10.2009 в 14:43)
 

Важное дополнение, достаточно будет точности в 4 разряда.

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

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

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 погрешность очень маленькая, или я ошибаюсь?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования