![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
daemonaz |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 160 Регистрация: 4.5.2008 Репутация: нет Всего: нет |
Программирую в Qt SDK, столкнулся с такой проблемой, нужно было вычислить по некой формуле число с плавающей точкой с обратным преобразованием в целое число появляются ошибки, выявил ошибку в присваивании float tmp = 0.35, но в пошаговом режиме когда стал смотреть, то увидел что число не ровно 0.35, а 0.349999999999, а на единицу прибавил, то есть 0.36, отладчик показывает 0.360000003 . Как с этим бороться?
|
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
путем изучения матчасти.
числа с плавающей запятой представляются в компьютере с конечной точностью (в силу конечного размера отведенной под число памяти). для чисел float это заметнее чем для double: их размер (в битах) меньше. т.к. используется двоичная арифметика, дробная часть представляется с точностью до степени двойки. т.е. числа 0.5 и 0.25 представляются точно, а 0.1 и 0.3 - приближенно. это нужно учитывать при вычислениях и сравнениях чисел с запятой: в вычислениях, если возможно, не использовать накопление результата, сравнения производить не ==, а с требуемой точностью:
|
|||
|
||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
в Qt есть средства для сравнения float/double: qFuzzyCompare
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |