![]() |
|
Модераторы: bsa |
![]()
|
|
| nubliK |
|
|||
![]() вселенские матрицы Профиль Группа: Участник Сообщений: 36 Регистрация: 11.9.2008 Где: Владивосток Репутация: нет Всего: нет |
Не знаю как у других, у меня почему то возникает накопление ошибки при прохождении цикла, вот код:
Компилится все правильно и работает тоже (в данном примере функция немного отличается от оригинала), дык вот если числу "A" задать значение больше 13 то цикл начинает врать на еденицу - как побороть? |
|||
|
||||
| NightmareZ |
|
|||
![]() [хакер] ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 10.8.2006 Репутация: 0 Всего: 13 |
Приведённый тобой код можно заменить на такой:
И никакой цикл тебе врать ничего не будет. -------------------- NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш Ely-Art.ru - наша маленькая домашняя арт-студия mugcraft.ru - кружки на любой вкус |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
скорей всего из за ошибки округления цифр с плавающей запятой. исправьте цикл на абсолютный расчет или избавьтесь от плавающих значений. хм... непонятно как из примера ТС, Вы получили такой код |
|||
|
||||
| nubliK |
|
||||||
![]() вселенские матрицы Профиль Группа: Участник Сообщений: 36 Регистрация: 11.9.2008 Где: Владивосток Репутация: нет Всего: нет |
Бред сивой кобылы мягко говоря. Смотри код внимательно.
Как это сделать? и переменная обязательно должна быть с плавающей точкой. Вычитаемое может быть и не 0.1 но и 0.05 и хоть десять. Добавлено через 12 минут и 55 секунд прошу прощение за грубость у NightmareZ =) Это сообщение отредактировал(а) nubliK - 20.1.2009, 04:22 |
||||||
|
|||||||
| nubliK |
|
|||
![]() вселенские матрицы Профиль Группа: Участник Сообщений: 36 Регистрация: 11.9.2008 Где: Владивосток Репутация: нет Всего: нет |
нашел небольшую статейку по теме тут http://xpoint.ru/know-how/Articles/Floatin...umbers?comments
но вопрос остался в силе =) И еще если это никого не затруднит не могли бы вы привести пример варианта как можно задать точность округления числа с плавающей точкой (то есть точность до определенного знака). |
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Можно использовать числа с плавающей точкой двойной точности - тип double. Или в крайнем случае - расширенной точности (long double).
Указать точность округления до определенного знака при вычислениях не получится. -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| Kurganec |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 6.6.2008 Где: СПБ Репутация: нет Всего: нет |
попробуй while(A > 6.) //с точкой
или while(A>6.*0.99999) // близкий к 100% последнее конечно бред, но у меня тоже проблемы в своё время были при сравнении вещественных переменных, с целыми. отпишись тока |
|||
|
||||
| nubliK |
|
|||
![]() вселенские матрицы Профиль Группа: Участник Сообщений: 36 Регистрация: 11.9.2008 Где: Владивосток Репутация: нет Всего: нет |
Всем огромное спасибо, вот мое решение получилось так:
Получается что компу нехватает точности чтобы хранить число с плавающей точкой - соответственно решение получилось через приведение типов от double к float =) Если кто придумает правельнее то ХАЧУ! кстати тут вот подобная дисскуссия вилась и слизал идею я отсюда http://forum.codenet.ru/archive/index.php/t-24605.html |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
Это сообщение отредактировал(а) vinter - 20.1.2009, 09:43 |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 1 Всего: 110 |
а если так:
хотя, конечно, это уже хак не все числа в компьютере представляются неточно те, которые в двоичном виде представляются в виде конечных (и не очень длинных) дробей, по идее, должны представляться точно, хотя это уже похоже на деталь реализации, к которой не стоит привязываться... Добавлено через 1 минуту и 3 секунды что-то здесь забыто: цикл либо не выполнится (если условие изначально ложное), либо будет бесконечным -------------------- qqq |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
maxim1000, спасибо, исправил
|
|||
|
||||
| nubliK |
|
|||
![]() вселенские матрицы Профиль Группа: Участник Сообщений: 36 Регистрация: 11.9.2008 Где: Владивосток Репутация: нет Всего: нет |
А вот и правильный ответ:
Спасибо товарищу mes т.к. он прав что в таких случаях лучший вариант уйти от плавающей точки. |
|||
|
||||
| baldina |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
mes:
данный случай настолько прост, что его даже обсуждать не стоит: здесь вообще цикл не нужен. а вот если он нужен, то, например, вместо
делаем
сравнение чисел с плавающей можно производить так:
|
||||||||
|
|||||||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
||||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
||||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |