Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
lenchis001
1 / 1 / 6
Регистрация: 28.08.2014
Сообщений: 93
#1

Неверная итерация - C++

06.11.2014, 00:08. Просмотров 293. Ответов 6
Метки нет (Все метки)


http://www.cyberforum.ru/cpp-beginners/thread42483.html
0
Миниатюры
Неверная итерация  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2014, 00:08
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Неверная итерация (C++):

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

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

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

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

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

6
Croessmah
++Ͻ
14147 / 8072 / 1512
Регистрация: 27.09.2012
Сообщений: 19,907
Записей в блоге: 3
Завершенные тесты: 1
06.11.2014, 02:04 #2
Evg: Представление вещественных чисел "на пальцах"
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4371 / 2346 / 654
Регистрация: 18.10.2014
Сообщений: 3,996
06.11.2014, 02:10 #3
Этот "бред" присутствует в вашей переменной с самых первых итераций. Вы его не видите просто потому, что функция вывода значения на экран округляет ваше число и тем самым "облагораживает" выводимые значения.

Подключите <iomanip> и сделайте вывод через

C++
1
cout << setprecision(10) << i << " ";
и вы увидите ваш "бред" намного раньше
0
lenchis001
1 / 1 / 6
Регистрация: 28.08.2014
Сообщений: 93
06.11.2014, 02:30  [ТС] #4
Хорошо, сейчас начну читать предложенную статью, но чтобы не терять время спрошу: А как сделать так, чтобы всего этого "счастья" не было и считало всё так, как ожидается? (ну вы поняли о чём я) Спасибо.
0
IrineK
Заблокирован
06.11.2014, 03:01 #5
Цитата Сообщение от lenchis001 Посмотреть сообщение
и считало всё так, как ожидается?
Вам нужно, чтобы "писало" все так, как ожидается.
Для этого организуете вывод с округлением до нужного знака.
0
lenchis001
1 / 1 / 6
Регистрация: 28.08.2014
Сообщений: 93
06.11.2014, 03:07  [ТС] #6
А можно ли сделать подсчёт с округлением?
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4371 / 2346 / 654
Регистрация: 18.10.2014
Сообщений: 3,996
06.11.2014, 03:17 #7
Цитата Сообщение от lenchis001 Посмотреть сообщение
А можно ли сделать подсчёт с округлением?
C округлением до чего именно? Такие числа в компьютере хранятся в двоичном плавающем формате. Для них понятие "округления до некоторого десятичного разряда" не имеет прямого смысла. В частности, число '0.1' в принципе невозможно представить точно в стандартном двоичном плавающем формате. Т.е. округляй-не округляй, все равно ровно '0.1' вы никогда не получите.

Если вас это не устраивает, то придется забыть о встроенных плавающих форматах и реализовывать арифметику самостоятельно. Например, можно перейти к арифметике с фиксированной точкой, т.е. представлять все нецелые значения как целые числа, домножив все на некоторую фиксированную величину.

Вот эквивалент вашего кода в арифметике с фиксированной точкой с одним знаком после запятой (домножение на 10)

C++
1
2
3
4
5
6
7
8
int main()
{
  // 0 * 10 = 0
  // 10 * 10 = 100
  // 0.1 * 10 = 1
  for (unsigned i = 0; i < 100; i += 1)
    cout << i / 10 << "." << i % 10 << " ";
}
0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4.0 4.1 4.2 4.3 4.4
4.5 4.6 4.7 4.8 4.9 5.0 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 6.0 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 7.0 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 8.0 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9
9.0 9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9
Как видите, никакого "бреда" в результатах нет.
0
06.11.2014, 03:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2014, 03:17
Привет! Вот еще темы с решениями:

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

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

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

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


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

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

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