Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кто может помочь чайнику? 
:(
    Опции темы
dont
Дата 6.8.2005, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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.

PM MAIL ICQ   Вверх
JoyEx
Дата 6.8.2005, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дядя
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 21.6.2005
Где: Москва, РФ

Репутация: нет
Всего: 12



Так в чём состоит вопрос?


--------------------
Если ты уже никого не боишься, значит ты самый страшный 
PM IM ICQ AOL YIM MSN   Вверх
Fixin
Дата 6.8.2005, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 2
Всего: 18



exchange какого типа?
пробуй так:
Код
for (j = 0;(((double)exchange[j+1] != 0.0) || ((double)exchange[j+1] != 0.05));j++);

Добавлено @ 22:24
Цитата
Так в чём состоит вопрос?
В том, что цикл доолжен завершиться (по данным) на первой итерации, а доходит до 6017-ой, при этом не выполнив ни одного условия.
PM MAIL ICQ   Вверх
dont
Дата 6.8.2005, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL ICQ   Вверх
sergejzr
Дата 6.8.2005, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360




Цитата(dont @ 6.8.2005, 21:29)
ричем здесь вообще 6017?

А это тебе просто повезло, что в памяти на 6017 месте от начала твоего массива exchange, дейсвительно оказалось значение прерывающее цикл smile



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Fixin
Дата 6.8.2005, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 2
Всего: 18



Цитата(Fixin @ 6.8.2005, 23:23)
exchange какого типа?
пробуй так:
Код
for (j = 0;(((double)exchange[j+1] != 0.0) || ((double)exchange[j+1] != 0.05));j++);

Читай опять, по буквам.
PM MAIL ICQ   Вверх
Void
Дата 6.8.2005, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Итак, exchange, судя по всему, имеет тип float или double. Проверять типы с плавающей точкой на строгое (не)равенство нельзя. То есть можно, конечно, но смысла это особого не имеет smile Надо проверять на равенство с погрешностью, т.е. примерно так: fabs(x - 0.05) >= EPS, где EPS - какая-то, довольно малая константа.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Fixin
Дата 6.8.2005, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 2
Всего: 18



Цитата
Проверять типы с плавающей точкой на строгое (не)равенство нельзя
Тык он же с константой сравнивает...
PM MAIL ICQ   Вверх
dont
Дата 6.8.2005, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 11.7.2005

Репутация: нет
Всего: нет



Да читать то я умею, но вот только твой код не помогает.
Дак и в памяте по адресу, который соответствует exchange[2] стоит вовсе другое число, а элемент массива с индексом 6017 очень круто, т.к. таких элементов у меня всего 6000!
Добавлено @ 22:53
Цитата
Проверять типы с плавающей точкой на строгое (не)равенство нельзя

Тык он же с константой сравнивает...
- Вот-вот, константа это!
PM MAIL ICQ   Вверх
Fixin
Дата 6.8.2005, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 2
Всего: 18



А так работает:
Код
for (j = 0;;j++)
    {
        if (((double)exchange[j+1] == 0.0) || ((double)exchange[j+1] == 0.05))
            break;
    }

PM MAIL ICQ   Вверх
Void
Дата 6.8.2005, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Цитата(Fixin @ 7.8.2005, 00:47)
Тык он же с константой сравнивает...

Какая разница?


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
sergejzr
Дата 6.8.2005, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Цитата(dont @ 6.8.2005, 21:51)
а элемент массива с индексом 6017 очень круто, т.к. таких элементов у меня всего 6000!

Программа не знает сколько у тебя элементов и шурует дальше по памяти пока та не кончится или условие всё таки не выполнится smile

Цитата(dont @ 6.8.2005, 21:51)
Проверять типы с плавающей точкой на строгое (не)равенство нельзя

Тык он же с константой сравнивает...
- Вот-вот, константа это!

Void немног8о не то имеет ввиду. Дело в ом, что числа 0.005 может не существовать. Когда работаешь в плавающей точкой, никогда нельзя быть уверенным, что то заначение, которое нужно, можно таким типом данных точно представить. Поэтому надо использовать погрешность.



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
dont
Дата 6.8.2005, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 11.7.2005

Репутация: нет
Всего: нет



>>Какая разница?
Большая!
2 Fixin : Большое спасибо , так работает, но все же интересно чем тот вариант не подходит, они же аналогичные по сути!!!
PM MAIL ICQ   Вверх
Fixin
Дата 6.8.2005, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 2
Всего: 18



Цитата
интересно чем тот вариант не подходит
Дрючка какая-то. Ишу.
PM MAIL ICQ   Вверх
dont
Дата 6.8.2005, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 11.7.2005

Репутация: нет
Всего: нет



>>Программа не знает сколько у тебя элементов и шурует дальше по памяти пока та не кончится или условие всё таки не выполнится .
Возможно, С++ только начинаю учить, но в Паскале сразу бы ошибку выкинуло!
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0581 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.