Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > проблема с float


Автор: daemonaz 20.9.2013, 15:19
Программирую в Qt SDK, столкнулся с такой проблемой, нужно было вычислить по некой формуле число с плавающей точкой с обратным преобразованием в целое число появляются ошибки, выявил ошибку в присваивании float tmp = 0.35, но в пошаговом режиме когда стал смотреть, то увидел что число не ровно 0.35, а 0.349999999999, а на единицу прибавил, то есть 0.36, отладчик показывает 0.360000003 . Как с этим бороться? 

Автор: baldina 20.9.2013, 17:28
путем изучения матчасти.
числа с плавающей запятой представляются в компьютере с конечной точностью (в силу конечного размера отведенной под число памяти).
для чисел float это заметнее чем для double: их размер (в битах) меньше.
т.к. используется двоичная арифметика, дробная часть представляется с точностью до степени двойки. т.е. числа 0.5 и 0.25 представляются точно, а 0.1 и 0.3 - приближенно. это нужно учитывать при вычислениях и сравнениях чисел с запятой: в вычислениях, если возможно, не использовать накопление результата, сравнения производить не ==, а с требуемой точностью:
Код

bool isEqual (float a, float b, float epsilon) {
  return fabs (a-b) < epsilon;
}

Автор: vinter 25.9.2013, 12:40
в Qt есть средства для сравнения float/double: qFuzzyCompare

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)