Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Глюки if() |
Автор: WandM 23.11.2005, 20:13 | ||
Здравствуйте. Кто-нибудь знает, что происходит? Вроде как программа сортировки препод попросил сделать ее так: Прога проходит по файлу f несколько раз и сортирует фамилии в порядке убывания балла (5.0 потом 4.9 и т.д.) Глюк в том, что отсортированы только те фамилии, у кого балл 5.0, 4.9 и 4.8 и больше ничего на экран не выводится!
Файл: 5 A 5.0 5 AA 3.5 5 B 4.9 5 C 4.8 5 CC 4.9 5 D 4.7 и т.д. Результат на экране: A 5.0 B 4.9 CC 4.9 C 4.8 |
Автор: Mayk 23.11.2005, 20:18 | ||
Не стоит так float'ы сравнивать. Попробуй заменить на if(fabs(mark-i)<1e-5) к примеру |
Автор: xTr1m 23.11.2005, 20:37 |
А можно немного пояснить, почему сравнивать надо именно с "1e-5" ? |
Автор: Mayk 23.11.2005, 20:44 | ||
Просто это достаточно маленькое число. Почему бы и нет? Еще в задаче можно похитрить - вместо считывания одного флоата читать два инт-а - тот что ДО точки, и что после. |
Автор: _hunter 23.11.2005, 20:44 |
можеш и с 1e-6 сравнивать... это просто допустимая точность |
Автор: xTr1m 23.11.2005, 20:57 | ||
а почему не работает так
фишка именно в нуле? ![]() |
Автор: Void 23.11.2005, 20:58 |
xTr1m Нет. Дело в том машинное представление чисел с плавающей точкой имеет ограниченную точность. Поищи, эта тема не раз подымалась. |
Автор: WandM 24.11.2005, 15:42 |
Спасибо, теперь все работает![]() |