С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.94
grrrrr
45 / 45 / 7
Регистрация: 21.04.2009
Сообщений: 265
#1

Итерация - C++

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

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

C++
1
2
3
4
for(i=0.1; i<=n; i+=0.1)
    {
         cout << i << " ";
    }
Например ввожу 2, а он зараза показывает до 1,9. Почему?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.06.2009, 12:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Итерация (C++):

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

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

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

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

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

При повторных итерация цикла, функция getline не работает - C++
Здравствуйте. Подскажите пожалуйста. Цель данного куска кода - ввод названия (артикула) товара. До getline я использовал простой cin, но...

6
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
30.06.2009, 12:54 #2
Потому что число 0.1, которое ты прибавляешь не может хранится в компьютере, как 0.1 ровно. Если я не ошибаюсь, это одно из таких чисел. Почитай про представление дробных чисел в памяти компа.
0
#pragma
Временно недоступен
954 / 225 / 6
Регистрация: 12.04.2009
Сообщений: 921
30.06.2009, 13:12 #3
Предположительно,на последней итерации цикла число i превышает n,так как абсолютная погрешность (машинный эпсилон) при каждой итерации приплюсовывается к i.Поэтому на момент итерации,когда i и n должны стать равны,i уже превышает n.Советую посмотреть программу в дебаггере,так лучше поймёшь,когда увидишь. Ещё вот http://ru.wikipedia.org/wiki/%D0%A7%...82%D0%BE%D0%B9
0
grrrrr
45 / 45 / 7
Регистрация: 21.04.2009
Сообщений: 265
30.06.2009, 13:18  [ТС] #4
Понял! Буду разбираться! Спасибо!
0
Lord_Voodoo
Супер-модератор
8594 / 2211 / 61
Регистрация: 07.03.2007
Сообщений: 10,766
Завершенные тесты: 1
30.06.2009, 13:21 #5
это все проблемы с представлением в компе чисел с плавающей запятой, согласен с предудыщими отвечающими... лучше его не юзать в цикле ИМХО... чтобы потом плавающих багов долго и нудно не ловить
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
30.06.2009, 13:33 #6
http://xpoint.ru/know-how/Articles/FloatingPointNumbers
Там perl, но фигня одна и та же.

Добавлено через 1 минуту 56 секунд
grrrrr, можно решить эту проблему просто округляя число, например, до двух знаков после запятой.
0
odip
Эксперт С++
7159 / 3221 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
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
30.06.2009, 22:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2009, 22:45
Привет! Вот еще темы с ответами:

Реверс цифр длинных чисел одномерного массива (итерация и рекурсия) - C++
Разработать функцию, которая переставляет в обратном порядке цифры заданного длинного целого числа (например, число 5321 превращается в...

Найти первые N чисел Фибоначчи (рекурсия/итерация, сравнить эффективность) - C++
Найти первые N чисел Фибоначчи двумя способами: с помощью рекурсии и с помощью итерации. Сравнить эффективность алгоритмов.

Incomplete type used in nested type specifier - Итерация по списку аргументов - C++
Здравствуйте! Пытаюсь написать утилитарную структуру для применения шаблонной функции на списке аргументов. #include &lt;tuple&gt; ...

Итерация - Turbo Pascal
В работе требуется описать применение метода итерации для уточнения корней уравнения. Нигде не могу найти объяснение (теорию) этого...


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

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

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