3148 / 368 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
|
||||||
1 | ||||||
Почему при изменении условия цикла ничего не меняется?06.10.2011, 19:29. Показов 872. Ответов 4
Метки нет (Все метки)
Столкнулся с одним непонятным явлением в цикле. Для описания этого явления написал простенькую программку.
0
|
06.10.2011, 19:29 | |
Ответы с готовыми решениями:
4
Почему при изменении размера окна не меняется цвет заполнения? Почему меняется MD5-хэш файла при каждой компиляции, хотя вроде бы ничего не поменялось? При решении блоком Given/Find не меняется результат при изменении приближенных значений Не меняется дата при изменении времени |
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
06.10.2011, 20:04 | 2 |
RNT, почитай про представление чисел в машине. Эта тема, кстати, уже тут где-то обсуждалась.
Вообще, если бы ты захотел, то в дебагере бы увидел, чему равен i на последней итерации. Добавлено через 2 минуты О, нашел, как пример. Евгений уже запостил пост на эту тему. Вот темка, пятый пункт: Неочевидные ответы на простые вопросы
1
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
||||||
06.10.2011, 20:08 | 3 | |||||
патамучто
числа с плавающей запятой не так просто сравнивать i+=0.1 не гарантирует что будет прибавляться одна десятая после округления вполне может быть 0.0999... теперь смотри на одной из итераций 2.89 и и то и другое условие будет иметь одно и тоже действие посему в циклах используют целочисенное например так
1
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
06.10.2011, 20:12 | 4 |
Дискретная математика, однако :-)
Фокус в том, что значение 0.1 не представимо абсолютно точно в двоичном коде. По этой причине при последней итерации у тебя на самом деле i = 2.9000000000000012 - тут, сам понимаешь, будет ли условие четко < 3, или <= 3 - всяко цикл завершится. А вот если заголовок цикла записать так: for(i=0; i<3; i+=0.125) - значение 0.125 точно представимо в двоичном коде - то получишь как раз тот эффект, что и ожидаешь.
1
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|||||||||||
06.10.2011, 20:28 | 5 | ||||||||||
целочисленное решение
можно еще так выпендрится но только в учебных целях (хотя не знаю проканает ли проверять лень)
1
|
06.10.2011, 20:28 | |
06.10.2011, 20:28 | |
Помогаю со студенческими работами здесь
5
DataViewRowState не меняется при изменении в DataGrid При изменении DataTable не меняется RowState Меняется стиль при изменении класса Размер контейнера не меняется при изменении итератора Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |