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

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

Войти
Регистрация
Восстановить пароль
 
ExFau$t
322 / 301 / 57
Регистрация: 08.05.2012
Сообщений: 1,582
#1

Ошибки точности на выводе в файл - C++

08.09.2014, 14:04. Просмотров 329. Ответов 7
Метки нет (Все метки)

Здравствуйте, возникла такая ситуация - есть некая переменная-массив, выводится на экран (std::cout), и это диагональная матрица с эл-тами 1000. Следом идет вывод в файл, однако там уже эл-ты 999.999 . С чем это может быть связано?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2014, 14:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибки точности на выводе в файл (C++):

Что такое ошибки «потери точности»? - C++
Что такое ошибки «потери точности»? Приведите примеры.

Программа зацикливается на выводе ошибки, не давая следующей возможности - C++
Есть функция, в которой заполняется вектор Values. В этой функции может быть введено неправильно целочисленное число (строчка 8), и, чтобы...

Кодировка при выводе в файл из system() - C++
Ув. форумчане! Прошу подсказать по вопросу о кодировке. В поиск прошу меня не отсылать ибо ищу уже неделю. Суть проблемы: требуется...

О классе, методе пузырька и выводе в файл, как сделать? - C++
Можно в очень понятной форме мне кое, что объяснить: 1) например нам надо посчитать S=v*t , и для v и t есть класс с 2мя объектами. Как...

Не так выглядят русские буквы при выводе в файл. - C++
Всем программистам привет! Написал программу алфавитно-частотный указатель, но почему-то данные в выходном файле нечитабельны, именно...

Ошибка при выводе в текстовый файл (Debug assertion failed) - C++
Значит, такая ситуация: Надо с помощью разложения в ряд Тейлора посчитать арктангенс и вывести результаты в текстовый файл, при чем...

7
mss307
118 / 118 / 25
Регистрация: 14.12.2013
Сообщений: 352
08.09.2014, 15:19 #2
код предоставить можете?
0
ExFau$t
322 / 301 / 57
Регистрация: 08.05.2012
Сообщений: 1,582
08.09.2014, 17:18  [ТС] #3
C
1
2
3
4
5
6
7
8
9
10
11
12
for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
std::cout<<A[i][j];
std::cout<<"\n";
}
for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
fprintf(f1,"%.4f ",A[i][j]);
fprintf(f1,"\n");
}
0
zss
Модератор
Эксперт С++
6400 / 5966 / 1943
Регистрация: 18.12.2011
Сообщений: 15,357
Завершенные тесты: 1
08.09.2014, 17:31 #4
Не стоит смешивать потоковый и Сишный вывод.
C++
1
2
3
4
5
6
7
for (int i=0;i<n;i++)
      for (int j=0;j<n;j++)
                  std::cout<<A[i][j]<<endl;
std::ofstream f1("file.txt");
for (int i=0;i<n;i++)
      for (int j=0;j<n;j++)
                  f1<<A[i][j]<<endl;
А с точки зрения плавающей арифметики 1000 и 999.9999 это одинаковые числа
0
ExFau$t
322 / 301 / 57
Регистрация: 08.05.2012
Сообщений: 1,582
08.09.2014, 17:36  [ТС] #5
абсолютно неодинаковые, так как, если из 1000 вычесть 999,999, ноль не получится, а ячейка будет занята.
0
mss307
118 / 118 / 25
Регистрация: 14.12.2013
Сообщений: 352
08.09.2014, 17:40 #6
как-то так. должно корректно работать.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < n; ++j)
            std::cout << mas[i][j] << " ";
        std::cout << "\n";
    }
 
 
    std::ofstream   fout;
    fout.open(".\\1.txt", std::ios_base::trunc);
 
    if(!fout.is_open())
    {
        std::cout << "fuck..";
        std::cout << fout.failbit;
        return  -1;
    }
 
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < n; ++j)
            fout << mas[i][j] << " ";
    }
 
    fout.close();
0
ExFau$t
322 / 301 / 57
Регистрация: 08.05.2012
Сообщений: 1,582
08.09.2014, 17:47  [ТС] #7
Причём здесь способ открытия файла?
0
zss
Модератор
Эксперт С++
6400 / 5966 / 1943
Регистрация: 18.12.2011
Сообщений: 15,357
Завершенные тесты: 1
08.09.2014, 18:05 #8
Цитата Сообщение от ExFau$t Посмотреть сообщение
Причём здесь способ открытия файла?
Вы пытаетесь выводить разными функциями, соответственно и получаете разный результат.
Еще раз напоминаю, что действительные числа в памяти представлены приближено.
Например, одна третья это и 0.33333333 и 0.33333334. Точно также и единица может быть представлена как 0.99999999.
То есть с точностью до единички в последнем знаковом разряде.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2014, 18:05
Привет! Вот еще темы с ответами:

При выводе данных в файл стереть всё, что в нём было - C++
Всем добрый день. Подскажите, пожалуйста, как при выводе данных в файл, первым делом стереть всё, что в нём вначале было? :)

Запись крит. ошибки в файл - C++
Предположим, что моего приложение в разных местах при разных условиях выкидывает исключения разного рода (bad_alloc или какие-то ещё)....

Fopen_s: код ошибки 2, файл не открывается - C++
Код следующий: FILE* outputFile; char FilePath = &quot;C:\\Users\\Екатерина\\Documents\\RAD...

Ошибки в выводе типа if (string != "0") printf("%s, ", string) - C++
Имеется класс &quot;почтовый адрес&quot;, поля - string и int. Необходимо сделать так, чтобы при печати выводились только поля с содержимым != 0....


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
08.09.2014, 18:05
Ответ Создать тему
Опции темы

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