|
Программирование >> Перегруженные имена функций и идентификаторы
x += 0.01; x -= 1.0; print( 100*.01 - 1 = %g\1 ,x); Правильным ответом является 0.0, однако ответ, полученный данной программой, будет малой величиной, близкой к 0.0. При вычислении ошибка округления, возникающая во время преобразования 0.01 в двоичное число, накапливается. Изменение типа x на double или long double только уменьшает ошибку вычисления, но не устраняет ее вообще. Для решения этой проблемы Borland C++ предлагает специфический для C++ тип bcd (двоично-десятичный), объявленный в файе bcd.h. В случае двоично-десятичного представления число 0.01 будет иметь точное значение, а переменная x типа bcd даст точное исчисление центов. #include <bcd.h> int i; bcd x = 0.0; for (i = 0; i < 100; x += 0.01; x -= 1.0; cout << 100*0.1 - 1 = << x << \n ; При этом необходимо учитывать следующие особенности типа bcd: bcd не уничтожает ошибку округления вообще. Вычисление типа 1.0/3.0 все равно будет иметь ошибку округления. Обычные математические функции, такие как sqrt и log, для аргументов с типом bcd переопределяются. Числа типа bcd имеют точность представления около 17 разрядов и диапазон принимаемых значений от 1x10-125 до 1x10125. Преобразования двоично-десятичных чисел Тип bcd - это определяемый тип, отличный от float, double или long double. Десятичная арифметика выполняется только когда хотя бы один операнд имеет тип bcd. Для преобразования двоично-десятичного числа обратно к обычной системе счисления с основанием 2 (тип float, double или long double), служит функция-элемент real класса bcd. Функция real выполняет все необходимые преобразования к типам long, double или lognd double, хотя такое преобразование не выполняется автоматически. Функция real выполняет все необходимые преобразования к типу long double, который может быть затем преобразован к другим типам при помощи обычных средств языка Си. Например: /* Печать чисел BCD */ #include <bcd.h> #include <iostream.h> #include <stdio.h> void main(void) { bcd a = 12.1; double x = real(a); /* преобразование для печати printf( \na = %Lg , real(a)); printf( \na = %g , (double)real(a)); cout << \na = << a; /* рекомендуемый метод Отметим, что поскольку printf не выполняет контроль типа аргументов, спецификатор формата должен иметь L, если передается значение real(a) типа long double. Число десятичных знаков Вы можете задать, сколько десятичных знаков должно участвовать в преобразовании из двоичного типа в bcd. Это число является вторым, необязательным аргументом в конструкторе bcd. Например, для преобразования $1000.00/7 в переменную bcd, округленную до ближайшего цента, можно записать: bcd a = bcd(1000.00/7, 2) где 2 обозначает два разряда после десятичной точки. Таким образом: 1000.00/7 = 142.85714 bcd(1000.00/7, 2) = 142.860 bcd(1000.00/7, 1) = 142.900 bcd(1000.00/7, 0) = 142.000 bcd(1000.00/7, -1) = 140.000 bcd(1000.00/7, -2) = 100.000 Округление происходит по банковским правилам, что означает округление до ближайшего целого числа, причем в случае одинакового расстояния до ближайшего целого в прямую и обратную сторону округление выполняется в сторону четного Например: bcd(12.335, 2) = 12.34 bcd(12.245, 2) = 12.34 bcd(12.355, 2) = 12.36 Такой метод округления задается стандартом IEEE. Видео-функции Borland C++ поставляется с полной библиотекой графических функций, позволяющих создание экранных графиков и диаграмм. Графические функции доступных только для 16-разрядн1х приложений DOS. Ниже приведено краткое описание видеорежимов и окон. Затем объясняется, как программировать в текстовом и графическом режимах. Видеорежимы Ваш компьютер обязательно имеет некоторый видеоадаптер. Это может быть монохромный дисплейный адаптер (MDA) для базового (только текстового) дисплея, либо это может быть графический адаптер, например цветной графический адаптер (CGA), улучшенный графический адаптер (EGA), монохромный графический адаптер Hercules или видеографическая матрица (VGA/SVGA). Каждый из этих адаптеров может работать в нескольких режимах. Режим определяет величину экрана - 80 или 40 символов в строке (только в текстовом режиме), разрешающую способность экрана (только в графическом режиме) и тип дисплея (цветной или черно-белый). Рабочий режим экрана определяется, когда ваша программа вызывает одну из функций определения режима (textmode, initgraph или setgraphmode). В текстовом режиме экран компьютера разделен на ячейки (80 или 40 столбцов в ширину и 25, 43 или 50 строк по высоте). Каждая ячейка состоит из атрибута и символа. Символ представляет собой имеющий графическое отображение символ кода ASCII, а атрибут задает, каким образом данный символ будет выведен на экран (его цвет, яркость, и т.д.). Borland C++ предоставляет полный набор подпрограмм для манипулирования текстовым экраном, для вывода текста
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |