![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| dont |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 11.7.2005 Репутация: нет Всего: нет |
Есть такая строка :
for (j = 0;((exchange[j+1] != 0) || (exchange[j+1] != 0.05));j++); после того как ее исполнения значение переменной j == 6017, а значение exchange[j+1] == 1.#QNAN. Первый елемент exchange[0] = 7.0, остальные - 0.0.Компилятор - Visual C++ 6.0. |
|||
|
||||
| JoyEx |
|
|||
|
Дядя ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 21.6.2005 Где: Москва, РФ Репутация: нет Всего: 12 |
Так в чём состоит вопрос?
-------------------- Если ты уже никого не боишься, значит ты самый страшный |
|||
|
||||
| Fixin |
|
||||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: 2 Всего: 18 |
exchange какого типа?
пробуй так:
Добавлено @ 22:24
|
||||
|
|||||
| dont |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 11.7.2005 Репутация: нет Всего: нет |
>>В том, что цикл доолжен завершиться (по данным) на первой итерации, а доходит до 6017-ой, при этом не выполнив ни одного условия.
Да прикол даже не в том, он не выполняеться 6017 раз, он просто подгружает проц(Пень4 2.8ГГц) до 60% процентов, секунд 10 думает, и сразу переходит на слудующую строку с такими значениями. Добавлено @ 22:32 А если написать так : for (j = 0;((exchange[j+1] != 0) || (exchange[j+1] != 0.05));j++) {m = j;}; , то он тогда выполняется 6017 раз. В чём прикол? Причем здесь вообще 6017? Это сообщение отредактировал(а) dont - 6.8.2005, 22:29 |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
А это тебе просто повезло, что в памяти на 6017 месте от начала твоего массива exchange, дейсвительно оказалось значение прерывающее цикл |
|||
|
||||
| Fixin |
|
||||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: 2 Всего: 18 |
Читай опять, по буквам. |
||||
|
|||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Итак, exchange, судя по всему, имеет тип float или double. Проверять типы с плавающей точкой на строгое (не)равенство нельзя. То есть можно, конечно, но смысла это особого не имеет
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| Fixin |
|
|||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: 2 Всего: 18 |
|
|||
|
||||
| dont |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 11.7.2005 Репутация: нет Всего: нет |
Да читать то я умею, но вот только твой код не помогает.
Дак и в памяте по адресу, который соответствует exchange[2] стоит вовсе другое число, а элемент массива с индексом 6017 очень круто, т.к. таких элементов у меня всего 6000! Добавлено @ 22:53
|
|||
|
||||
| Fixin |
|
|||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: 2 Всего: 18 |
А так работает:
|
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Какая разница? -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| sergejzr |
|
||||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Программа не знает сколько у тебя элементов и шурует дальше по памяти пока та не кончится или условие всё таки не выполнится
Void немног8о не то имеет ввиду. Дело в ом, что числа 0.005 может не существовать. Когда работаешь в плавающей точкой, никогда нельзя быть уверенным, что то заначение, которое нужно, можно таким типом данных точно представить. Поэтому надо использовать погрешность. |
||||
|
|||||
| dont |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 11.7.2005 Репутация: нет Всего: нет |
>>Какая разница?
Большая! 2 Fixin : Большое спасибо , так работает, но все же интересно чем тот вариант не подходит, они же аналогичные по сути!!! |
|||
|
||||
| Fixin |
|
|||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: 2 Всего: 18 |
|
|||
|
||||
| dont |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 11.7.2005 Репутация: нет Всего: нет |
>>Программа не знает сколько у тебя элементов и шурует дальше по памяти пока та не кончится или условие всё таки не выполнится .
Возможно, С++ только начинаю учить, но в Паскале сразу бы ошибку выкинуло! |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |