Форум программистов, компьютерный форум CyberForum.ru

При значении больше 10 выводит неверный результат - C++

Войти
Регистрация
Восстановить пароль
 
Rostislav95
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 20
23.07.2014, 09:42     При значении больше 10 выводит неверный результат #1
При вводе чисел до 10, например 4 выводится результат 4 = 4.02725. Начина с 10 результат такой 10=10. Почему так ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
int main ()
{
    setlocale(0,"");
    int A;
    double number;
    number = 0;
    cout << "Введите число А" << endl;
    cin >> A;
    int k;
    k = 1;
    for (int i=1; number<A; i++)
    {
        number += 1.0/k;
        k+=1;
    }
    cout <<"Первое число которое больше " << A << " = " << number << endl;
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2014, 09:42     При значении больше 10 выводит неверный результат
Посмотрите здесь:

C++ Деревья, неверный результат
C++ При вычислении выражения выдается неверный результат
При введении больше 20 чисел программа выдает странный результат C++
Не могу найти ошибку, при любом значении выводит 1.68729e+038 C++
Калькулятор выводит неверный результат C++
Неправильно выводит результат при нахождении расстояния между отрезками C++
C++ Выводит неверный результат ln2=1-1/2+1/3-1/4
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6414 / 4880 / 448
Регистрация: 14.02.2011
Сообщений: 16,187
23.07.2014, 09:51     При значении больше 10 выводит неверный результат #2
Цитата Сообщение от Rostislav95 Посмотреть сообщение
Начина с 10 результат такой 10=10. Почему так ?
на бумажке прикинь как все это работает
почитай про числовые ряды
потом введи число 1000000
Цитата Сообщение от Rostislav95 Посмотреть сообщение
for (int i=1; number<A; i++)
зачем здесь цикл for? и переменная i ???
Ilot
Модератор
Эксперт С++
1778 / 1153 / 223
Регистрация: 16.05.2013
Сообщений: 3,042
Записей в блоге: 5
Завершенные тесты: 1
23.07.2014, 10:01     При значении больше 10 выводит неверный результат #3
Возможно такой код вам скажет больше:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <iomanip>
using namespace std;
int main () {
    system("chcp 1251");
    int A;
    double number;
    number = 0.0;
    cout << "Введите число А" << endl;
    cin >> A;
    for (int k = 1; number < A; ++k)
        number += 1.0/k;
    cout <<"Первое число которое больше " << A << " = " << setprecision(10) << number << endl;
    return 0;
}
А на досуге изучите тему о флагах форматирования в потоках.
ValeryS
Модератор
6414 / 4880 / 448
Регистрация: 14.02.2011
Сообщений: 16,187
23.07.2014, 10:27     При значении больше 10 выводит неверный результат #4
Ilot,
та же ошибка что и у автора
просто я не стал акцентировать
Цитата Сообщение от Ilot Посмотреть сообщение
number < A
Цитата Сообщение от Ilot Посмотреть сообщение
"Первое число которое больше "
выход из цикла если число больше или равно
вот и выведет при больших k равное значение
нужно number < =A
но это мелочи
что значит число больше ????
при вводе 1 выдаст 1 ( по вашим вариантам) или 1.5( по моему)
но число которое больше 1 это 1.0000...........00001

да и на больших числах цикл просто умрет ( произойдет переполнение) да и разрядность дубли не даст прироста
Ilot
Модератор
Эксперт С++
1778 / 1153 / 223
Регистрация: 16.05.2013
Сообщений: 3,042
Записей в блоге: 5
Завершенные тесты: 1
23.07.2014, 10:57     При значении больше 10 выводит неверный результат #5
Цитата Сообщение от ValeryS Посмотреть сообщение
вот и выведет при больших k равное значение
Глупости.
При больших k член гармонического ряда становится мал и поэтому первое число большее A будет отличаться от А на весьма малую величину. А так как по умолчанию точность для представления вещественных чисел составляет 4 порядка (здесь боюсь соврать...) то если первые 4 цифры после запятой будут нулями и не установлен флаг showpos в консоли произойдет отброска дробной части числа. Вот и вся причина. Может где-то соврал, но суть думаю ясна.
ValeryS
Модератор
6414 / 4880 / 448
Регистрация: 14.02.2011
Сообщений: 16,187
23.07.2014, 11:18     При значении больше 10 выводит неверный результат #6
Цитата Сообщение от Ilot Посмотреть сообщение
Глупости.
посмотри условия цикла
выполнять пока меньше
а равно это не меньше
Цитата Сообщение от Ilot Посмотреть сообщение
первое число большее A будет отличаться от А на весьма малую величину.
а кто спорит то?
просто если задашь 1000000 то после миллиона циклов 1.0/k будет равна 0.000001
сумма 1000000+0.000001 даст 1000000 ограничения разрядной сетки
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2014, 11:29     При значении больше 10 выводит неверный результат
Еще ссылки по теме:

C++ Неверный результат при преобразования типов данных static_cast<int>(double)
C++ Почему выводит неверный результат при вычислении произведения?
Класс Triangle, при вводе сторон и угла не выводит результат C++
Почему выводит неверный результат? C++
Определить при каком значении x sin(x) станет больше cos(x) C++

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

Или воспользуйтесь поиском по форуму:
Ilot
Модератор
Эксперт С++
1778 / 1153 / 223
Регистрация: 16.05.2013
Сообщений: 3,042
Записей в блоге: 5
Завершенные тесты: 1
23.07.2014, 11:29     При значении больше 10 выводит неверный результат #7
ValeryS, проблема у ТС не в потере значимости или в неправильном операторе отношения, а в настройках потока на отображение вещественных чисел. Я не сомниваюсь, что вы это понимаете, поэтому не вижу смысла вести дискуссию. А посему разрешите откланяться
Yandex
Объявления
23.07.2014, 11:29     При значении больше 10 выводит неверный результат
Ответ Создать тему
Опции темы

Текущее время: 01:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru