![]() |
|
|
![]()
|
|
| Нитонисе |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Заполняю контейнер vector элементами типа float. Нужно удалить одинаковые значения, но этого не происходит из-за того, что после запятой у казалось бы одинаковых элементов - идут неодинаковые знаки.
Так, добавив в контейнер два числа 2.6 - одно из них не удалится из контейнера, потому что одно хранится в виде 2.6000000123, а второе в виде 2.59999999999123. Это неизлечимо? |
|||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 1 Всего: 32 |
Округли до значимых разрядов и сравнивай
-------------------- ![]() |
|||
|
||||
| Нитонисе |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
||||
|
||||
| fry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: нет Всего: 3 |
Сделай функцию сравнения вида:
float delta(f1-f2); delta=delta>0 ? delta: -delta; return (delta<MAX_DELTA) ? 1: 0; Это сообщение отредактировал(а) fry - 26.12.2009, 08:18 |
|||
|
||||
| Нитонисе |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
||||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 167 Всего: 306 |
Нитонисе, для твоих целей более подходит std::list
|
|||
|
||||
| Usper |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 13.4.2007 Репутация: 15 Всего: 15 |
Нитонисе, у fry подход правильный, но реализация странная, при этом без соблюдения синтаксиса приплюснотого Си
З.Ы. вектор тут совсем не причём. -------------------- На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник. |
|||
|
||||
| fry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: нет Всего: 3 |
А дубликат это или нет ты как узнаешь? (Ответ см. в первом посте).
Обходишь вектор, смотришь какие рядом значения, если функция возвращает 1, то удаляешь одно из них.
.....хм, а где ошибся? Млин, пока отвечали на "хм, а где ошибся?" сам проверил. Все ОК. Это сообщение отредактировал(а) fry - 26.12.2009, 09:19 |
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 167 Всего: 306 |
||||
|
||||
| fry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: нет Всего: 3 |
Эт точно. Поддерживаю.
|
|||
|
||||
| Usper |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 13.4.2007 Репутация: 15 Всего: 15 |
А, и вправду, синтаксических ошибок нет , я спросонья подумал, что это и есть вся функция. Приношу свои извинения.
mrbrooks, а как в std::list реализована функция unique()? Возможно, здесь будут те же проблемы, что и при обычном сравнивании чисел с плавающей точкой. Это сообщение отредактировал(а) Usper - 26.12.2009, 10:15 -------------------- На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник. |
|||
|
||||
| Нитонисе |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
||||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 167 Всего: 306 |
||||
|
||||
| Нитонисе |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Точно что могут быть проблемы, потому что у меня некоторые и в векторе удаляются, потому что хранятся красиво, без лишних знаков после запятой. А некоторые не хотят так хранится и потому вектор их считает различными значениями, несмотря на то что отличие в 8-ом знаке после запятой. И лист тоже. |
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 167 Всего: 306 |
Нитонисе, приведи код как ты заполняешь контейнер.
|
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |