Организация параллельных потоков. Часть 1 | страница 12



Численные методы всегда дают приближённый результат. Вопрос только в том, какой уровень погрешности позволит работать с полученными результатами и решать практическую задачу — определить площадь, объём, нагрузку, деформацию изделия и тому подобное.

В нашем примере погрешность зависит, прежде всего, от количества прямоугольников. Нам предстоит исследовать эту зависимость и построить графики.

Задание. Запустите программу численного интегрирования с разным количеством прямоугольников. Организуйте ввод количества прямоугольников через параметры командной строки. При вычислениях используйте тип float. Используйте пакетный файл и сделайте по 10 запусков программы для каждого количества прямоугольников. Зафиксируйте в отчёте среднее время вычислений и уровень погрешности в процентах от теоретического значения.


Второй фактор, влияющий на уровень погрешности, — это тип переменной. В стандартном языке Си есть два типа переменных с плавающей точкой: float и double. Их ещё называют вещественными числами — в отличие от целых. Они обеспечивают разное количество значащих десятичных разрядов.

Задание. Выясните, какую точность представления обеспечивают два вещественных типа.

Задание. Проведите эксперименты по численному интегрированию с типом double. Сравните уровень погрешности и время вычислений.


Каждый тип переменной имеет свои пределы возможных значений. Выход в большую и меньшую сторону приводит к потере результатов. К тому же, у нас есть положительные и отрицательные числа.

Задание. Выясните пределы возможных значений для обоих вещественных типов в положительной и отрицательной области значений.

Задание. Составьте тестовые программы и выясните, что происходит при выходе за пределы допустимых значений для обоих вещественных типов.


С увеличением числа прямоугольников погрешность вычислений должна уменьшаться. Однако, при слишком большом числе прямоугольников должно начаться снижение точности и рост погрешности (рис. 6.8). При сложении большого числа с маленьким возникает проблема потери точности. Маленькое число может просто выйти за границы разрядной сетки — это так называемое «обратное переполнение» или «потеря точности / значимости». В нашем случае накопленная сумма значений может оказаться гораздо больше, чем новое прибавляемое значение.


Рис. 6.8. Изменение погрешности вычислений


Можно грубо оценить число прямоугольников, при котором сумма половины значений будет значительно больше, чем одно отдельное, очередное значение f (x). Другими словами, одно значение f (x) должно выйти за пределы разрядной сетки — по сравнению с накопленной суммой.