Как видим, значение exp(0) равно 1, поэтому наш синий график “настоящей” экспоненты пересекает ось (0,1). Если присмотреться повнимательнее, то видно, что на самом деле мы нарисовали первое приближение (exp0(x)==0) черным цветом поверх оси
Это функция exp1(x)==1, представляющая собой аппроксимацию экспоненты с помощью только одного члена степенного ряда. Она точно совпадает с экспонентой в точке (0,1), но мы можем построить более точную аппроксимацию.
Используя два члена разложения (1+x), получаем диагональ, пересекающую ось (0,1). С помощью трех членов разложения (1+x+pow(x,2)/fac(2)) можем обнаружить признаки сходимости.
Десять членов приближения дают очень хорошее приближение, особенно для значений x, превышающих –3.
На первый взгляд, мы могли бы получать все более точные аппроксимации, постоянно увеличивая количество членов степенного ряда. Однако существует предел, и после тринадцати членов происходит нечто странное: аппроксимация ухудшается, а после вычисления восемнадцати членов на рисунке появляются вертикальные линии.
double, и наши результаты стали отклоняться от правильного ответа. Более подробная информация на эту тему приведена в главе 24.
Последний рисунок представляет собой хорошую иллюстрацию следующего принципа: если ответ выглядит хорошо, еще не значит, что программа работает правильно. Если программа проработает немного дольше или на несколько других данных, то может возникнуть настоящая путаница, как это произошло в данном примере.
15.6. Графические данные
С помощью этого примера мы обсудим следующие проблемы программирования, связанные с представлением данных:
• чтение файла;
• масштабирование данных для подгонки к окну;
• отображение данных;
• разметка графика.
Мы не будем вдаваться в художественные аспекты этой проблемы. В принципе мы строим “график для идиотов”, а не для художественной галереи. Очевидно, что вы сможете построить его намного более красиво, чем это нужно.
Имея набор данных, мы должны подумать о том, как их получше изобразить на экране. Для простоты ограничимся только данными, которые легко изобразить на плоскости, ведь именно такие данные образуют огромный массив приложений, с которыми работают большинство людей. Обратите внимание на то, что гистограммы, секторные диаграммы и другие популярные виды диаграмм на самом деле просто причудливо отображают двумерные данные. Трехмерные данные часто возникают при обработке серии двумерных изображений, при наложении нескольких двумерных графиков в одном окне (как в примере “Возраст населения Японии”) или при разметке отдельных точек. Если бы мы хотели реализовать такие приложения, то должны были бы написать новые графические классы или адаптировать другую графическую библиотеку.
Итак, наши данные представляют собой пары точек, такие как (year,number of children). Если у нас есть больше данных, например (year,number of children,number of adults,number of elderly), то мы должны просто решить, какую пару или пары чисел хотим изобразить. В нашем примере мы рисуем пары (year,number of children), (year,number of adults) и (year,number of elderly).