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

Теряется точность - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Цикл for http://www.cyberforum.ru/cpp-beginners/thread344707.html
#include <iostream> #include <string> using namespace std; int main () { //////////////////////////////////////////////////////// // Îòîáðàæåíèå ñëîâà íà îáîðîò. Íå ìîãó ðàçîáðàòüñÿ îêóäà
C++ Операции инкремента и декремента (префиксная и постфиксная версия). Подскажите. #include <iostream> #include <string> using namespace std; int main () { setlocale(LC_ALL, "rus"); http://www.cyberforum.ru/cpp-beginners/thread344700.html
Бинарная запись массива строк в фаил C++
Добрый день появился вопрос, как можно записать массив String** в бинарный фаил я сначала записываю длину текста, а потом пишу сам текст int temp; TEXT.write((char *) & (temp = NameTable.size()),sizeof(int)); TEXT.write(NameTable.c_str(),temp); а вот чтение выглядит совсем извратно // NameTable int temp;
C++ Спичечная модель
Спичечная модель Профессор Самоделкин решил изготовить объемную модель кубиков из спичек, используя спички для рёбер кубиков. Длина ребра каждого кубика равна одной спичке. Для построения модели трех кубиков он использовал 28 спичек. Какое наименьшее количество спичек нужно Самоделкину для построения модели из N кубиков? Все числа в задаче не превышают 2·10^9.
C++ Говорят Compilation error http://www.cyberforum.ru/cpp-beginners/thread344645.html
Решаю задачи на сайте ******** раньше решал на Паскале, сейчас решил учить С++... пытаюсь решить эту задачу http://********/?main=task&id_task=5 Решил у меня ответ пишется, но на сайте когда сдаю пишет "Compilation error"... подскажите, пожалуйста... #include <cstdlib> #include <iostream> using namespace std; int main() {
C++ Найти длину такого первого идентификатора в строку, в котором произведение всех четных цифр максимально решите плиз кому не трудно очень нужно... Задана последовательность идентификаторов, разделенных сериями пробелов. Последовательность задана строкой символов (string) заканчивается символом ‘*’. 2.Найти длину такого первого идентификатора в котором произведение всех четных цифр максимально. Именуйте темы осмысленно! Название темы должно максимально полно отражать её содержимое. подробнее

Показать сообщение отдельно
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
24.08.2011, 15:23     Теряется точность
Проблема видна в этой теме: Цветные шары
В принципе, я считаю подобные задачи на "плавучку" не совсем корректными.

Добавлено через 16 часов 17 минут
Чтобы было понятно, откуда вообще может взяться проблема, можно посмотреть на вывод вот такой программы:
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()
{
    for (int i = 1; i < 8; i += 2)
    {
        double v = i*875 / 8000.0;
        cout << fixed << setprecision(5) << v << endl;
        cout << fixed << setprecision(7) << v << endl << endl;
    }
    return 0;
}
Вывод:
Код
$ ./a.out      
0.10938
0.1093750

0.32812
0.3281250

0.54688
0.5468750

0.76562
0.7656250
Проблема самая обычная, неточное представление чисел. То есть число 0.3281250 на самом деле хранится как 0.3281249999... и округляется к 0.32812, хотя точное значение следовало бы округлить к 0.32813.
В общем виде решение проблемы с неточным представлением мне не известно, хотя в данном случае в качестве "объезда" можно было бы прибавлять маленькое число перед выводом, скажем 1.0e-8, или даже std::numeric_limits<double>::epsilon()
Но для общего случая просто используются целочисленные вычисления, где можно получить представление рациональной дроби с любой требуемой точностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru