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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
JuzTosS
0 / 0 / 0
Регистрация: 03.03.2010
Сообщений: 8
#1

Неточность операций с float - C++

20.05.2010, 15:48. Просмотров 1537. Ответов 7
Метки нет (Все метки)

Здравствуйте.

У меня в цикле осуществляется итерация вида float time += 0.1;
при этом возникает ошибка, например 0.3 + 0.1 = 0.400....001;
или 0.3 + 0.1 = 0.399...999;

В принципе мне это не очень важно,
но непонятно из-за чего это происходит...

Спасибо за ответы.

Картика прилагается =)
Миниатюры
Неточность операций с float  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2010, 15:48     Неточность операций с float
Посмотрите здесь:

Неточность результата - C++
Напишите программу, которая выдавала бы запрос на ввод расхода бензина в европейском стиле (количество литров на 100 км) и преобразовывала...

Неточность конвертера валюты - C++
Вопрос наверное, такой нубский, но автор видеоуроков мне в скайпе не отвечает и я хочу спросить у вас. В чем проблема? Точность в...

Неточность функции поиска угла - C++
написал функцию нахождения угла по 3-м точкам int LengthBetweenPoints(point a,point b) { return...

Неточность в понимании условия задачи "Жук" (acmp) - C++
Моё решение: #include <stdio.h> #include <stdio.h> #include <math.h> #include <cstdio> #include <algorithm> #include <cstring> ...

float *m=new float[n] - C++
в задаче на массивы попалось float *m=new float.Что это значит?

Float - C++
Доброго всем времени суток. Я новичок в программировании и только начал учится прошу вашего понимания и помощи. Расскажите пожалуйста что...

float - C++
Столкнулся с такой проблемой. Допустим float a=0.125; При выводе printf("%.2f",a) выводит 0.13, а мне надо 0.12

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт С++
8283 / 3502 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
20.05.2010, 15:53     Неточность операций с float #2
в программировании на встроенных вещественных типах невозможно получить точное значение и то о чем вы спрашиваете - это вполне нормально, поэтому можете просто не обращать на это внимание
Mur3ik
102 / 102 / 4
Регистрация: 12.05.2010
Сообщений: 232
20.05.2010, 19:18     Неточность операций с float #3
таковы особенности структуры хранения переменной float, если хочешь точности используй double с ней такого мной замечено не было.
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
20.05.2010, 19:39     Неточность операций с float #4
как сказал уже M128K145 есть особенности перевода из десятичной в двоичную систему вещественных чисел, которая приводит к тому что уже число само по себе невозможно представить точно, даже не трогая его
Цитата Сообщение от JuzTosS Посмотреть сообщение
float time += 0.1;
C++
1
2
3
4
for( int i=0;i<=100;++i ){
  float time = 0.1 * i;
  ...
}
так вы гарантируете своевременный выход из цикла
Syndarin
13 / 13 / 1
Регистрация: 15.09.2009
Сообщений: 57
20.05.2010, 19:43     Неточность операций с float #5
Ох, меня преподаватель такой же штукой озадачил, типа, на сообразительность. Признаюсь, соображал часа два)))

тип double лично в моем примере не помог.

Я использовал такую проверку на равенство нулю (подразумевая, что цифры, младше тысячных, меня не интересуют)
C
1
fabs(0-MyFloat)<0.001
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
21.05.2010, 09:38     Неточность операций с float #6
таковы особенности структуры хранения переменной float, если хочешь точности используй double с ней такого мной замечено не было.
Это особенности представления вещественных чисел вообще.
Поэтому что float, что double, что long double - везде это есть.
У double просто выше точность
JuzTosS
0 / 0 / 0
Регистрация: 03.03.2010
Сообщений: 8
27.05.2010, 12:27  [ТС]     Неточность операций с float #7
хмм... нашёл интересную настройку в свойствах проекта:
Думаю, что она может на это повлиять, однако пока не экспериментировал...
Миниатюры
Неточность операций с float  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2010, 13:17     Неточность операций с float
Еще ссылки по теме:

float vs string - C++
в общем есть такая конструкция FILE* pfi; char* fn = &quot;D:/test.txt&quot;; pfi= fopen(fn,&quot;w+&quot;); fputs(&quot;\tx=&quot;,pfi); fputs(x,pfi); ...

Сравнение float. - C++
Доброго времени суток! Помогите пожалуйста сформулировать условие. Есть определенный объект, который следит за передвижением...

Разъяснение float f = 1.2F; - C++
Вчера читал статью про C++ и встретил код, написанный следующим методом float f = 1.2F; и пришел в замешательство. Переменная f...

float переменная - C++
я инициализирую переменную float значением 0.15 а в действительности там 0.15000001. потом прибавляю 0.01 получаю 0.16000001 потом...

Из float в string - C++
Как из переменной типа флоат записать число в string? float x = -123.56; string Str; Нужно чтобы Str стало равно &quot;-123.56&quot;


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

Или воспользуйтесь поиском по форуму:
Day
1154 / 959 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
27.05.2010, 13:17     Неточность операций с float #8
Можно сделать так
C
1
2
3
4
  char s[20];
  time += 0.1;
  sprintf(s, "%.1f", time);
  time = atof(s);
Функция sprintf (и ей подобные) вполне грамотно работает с округлением
А double все же лучше. Тем более что все сишные функции все равно к нему float приводят
Yandex
Объявления
27.05.2010, 13:17     Неточность операций с float
Ответ Создать тему
Опции темы

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