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

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

Восстановить пароль Регистрация
 
ExFau$t
55 / 55 / 4
Регистрация: 08.05.2012
Сообщений: 448
08.09.2014, 14:04     Ошибки точности на выводе в файл #1
Здравствуйте, возникла такая ситуация - есть некая переменная-массив, выводится на экран (std::cout), и это диагональная матрица с эл-тами 1000. Следом идет вывод в файл, однако там уже эл-ты 999.999 . С чем это может быть связано?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mss307
118 / 118 / 25
Регистрация: 14.12.2013
Сообщений: 352
08.09.2014, 15:19     Ошибки точности на выводе в файл #2
код предоставить можете?
ExFau$t
55 / 55 / 4
Регистрация: 08.05.2012
Сообщений: 448
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");
}
zss
Модератор
Эксперт С++
 Аватар для zss
5943 / 5548 / 1783
Регистрация: 18.12.2011
Сообщений: 14,167
Завершенные тесты: 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 это одинаковые числа
ExFau$t
55 / 55 / 4
Регистрация: 08.05.2012
Сообщений: 448
08.09.2014, 17:36  [ТС]     Ошибки точности на выводе в файл #5
абсолютно неодинаковые, так как, если из 1000 вычесть 999,999, ноль не получится, а ячейка будет занята.
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();
ExFau$t
55 / 55 / 4
Регистрация: 08.05.2012
Сообщений: 448
08.09.2014, 17:47  [ТС]     Ошибки точности на выводе в файл #7
Причём здесь способ открытия файла?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2014, 18:05     Ошибки точности на выводе в файл
Еще ссылки по теме:

Fopen_s: код ошибки 2, файл не открывается C++
Что такое ошибки «потери точности»? C++
C++ Не так выглядят русские буквы при выводе в файл.

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

Или воспользуйтесь поиском по форуму:
zss
Модератор
Эксперт С++
 Аватар для zss
5943 / 5548 / 1783
Регистрация: 18.12.2011
Сообщений: 14,167
Завершенные тесты: 1
08.09.2014, 18:05     Ошибки точности на выводе в файл #8
Цитата Сообщение от ExFau$t Посмотреть сообщение
Причём здесь способ открытия файла?
Вы пытаетесь выводить разными функциями, соответственно и получаете разный результат.
Еще раз напоминаю, что действительные числа в памяти представлены приближено.
Например, одна третья это и 0.33333333 и 0.33333334. Точно также и единица может быть представлена как 0.99999999.
То есть с точностью до единички в последнем знаковом разряде.
Yandex
Объявления
08.09.2014, 18:05     Ошибки точности на выводе в файл
Ответ Создать тему
Опции темы

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