Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/35: Рейтинг темы: голосов - 35, средняя оценка - 4.83
49 / 49 / 13
Регистрация: 21.04.2009
Сообщений: 265
1

Итерация

30.06.2009, 12:44. Просмотров 6874. Ответов 6
Метки нет (Все метки)


Здравствуйте!

C++
1
2
3
4
for(i=0.1; i<=n; i+=0.1)
    {
         cout << i << " ";
    }
Например ввожу 2, а он зараза показывает до 1,9. Почему?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.06.2009, 12:44
Ответы с готовыми решениями:

Неверная итерация
Привет народ. Объясните пожалуйста, что это за бред? (я подчеркнул)

Вычисление значения функции. Итерация
Составить программу вычисления значения функции, представляется в ввиде бесконечного ряда с...

почему не срабатывает последняя итерация
подскажите почему не срабатывает и как исправить чтобы был вывод i=3 ? (нужен тип double) ...

Итерация массива внешним указателем
Кто знает, как выполнить определенное действие с каждым элементом массива, заданного через звезду...

__________________
Помогаю в написании студенческих работ здесь.
Записывайтесь на профессиональные курсы C++ разработчиков
6
Почетный модератор
7356 / 2619 / 275
Регистрация: 29.07.2006
Сообщений: 13,675
30.06.2009, 12:54 2
Потому что число 0.1, которое ты прибавляешь не может хранится в компьютере, как 0.1 ровно. Если я не ошибаюсь, это одно из таких чисел. Почитай про представление дробных чисел в памяти компа.
0
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
30.06.2009, 13:12 3
Предположительно,на последней итерации цикла число i превышает n,так как абсолютная погрешность (машинный эпсилон) при каждой итерации приплюсовывается к i.Поэтому на момент итерации,когда i и n должны стать равны,i уже превышает n.Советую посмотреть программу в дебаггере,так лучше поймёшь,когда увидишь. Ещё вот http://ru.wikipedia.org/wiki/%... 0%BE%D0%B9
0
49 / 49 / 13
Регистрация: 21.04.2009
Сообщений: 265
30.06.2009, 13:18  [ТС] 4
Понял! Буду разбираться! Спасибо!
0
Супер-модератор
8745 / 2474 / 140
Регистрация: 07.03.2007
Сообщений: 11,747
30.06.2009, 13:21 5
это все проблемы с представлением в компе чисел с плавающей запятой, согласен с предудыщими отвечающими... лучше его не юзать в цикле ИМХО... чтобы потом плавающих багов долго и нудно не ловить
0
Почетный модератор
7356 / 2619 / 275
Регистрация: 29.07.2006
Сообщений: 13,675
30.06.2009, 13:33 6
http://xpoint.ru/know-how/Arti... intNumbers
Там perl, но фигня одна и та же.

Добавлено через 1 минуту 56 секунд
grrrrr, можно решить эту проблему просто округляя число, например, до двух знаков после запятой.
0
Эксперт С++
7175 / 3234 / 77
Регистрация: 17.06.2009
Сообщений: 14,165
30.06.2009, 22:45 7
Очевидно что округлением ничего не решить, только хуже будет.

Нужно избавить от ошибок округления, например так:

Код
int i2, n2;
double i_val;

n2= n*10;
for ( i2= 1; i2<=n2; i2++ ) {
	i_val= 0.1*i2;
	cout << i_val << " ";
}
cout << "\n";
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.06.2009, 22:45

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Чтение файла, лишняя итерация
Вопрос по функции feof(). Я так понимаю она должна сигнализировать о конце файл, если был прочитан...

Итерация. не знаю как решить
Вычислить (рис1) Вычисление прекратить,если(рис2) Подсчитать кол-во слагаемых. Буду...

Вычислить значение выражения (рекурсия/итерация)
Вычеслить y(n)= 1/n+1/(n-1)+1/(n-2)+1/...+1/1+1дробь2 Решит с использыванием рекурсии и без нее

Итераторы и итерация. Оператор >>. Простой текстовый редактор Страуструпа
Добрый день! Есть код Страуструпа из Принципы и практика использования С++ Глава 20, параграф 6....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.