Страница 2 из 5
Экспонента Если число a положительно, то его можно представить в виде суммы целой и дробной части: a=[a]+{a}. Целая часть может быть записана в беззнаковое длинное значение: [a]=a020+a121+...+a31231. Дробная же часть может быть (для двойной точности) записана в формате двоичной дроби с фиксированной точкой, в которой имеется не более 48 битов: {a}=a-12-1+a-22-2+...+a-482-48. Поскольку, по свойству действительной экспоненты, ex+y=exey, то для ее вычисления необходимо просто перемножить те значения exp(2k), где k меняется от -48 до 31 (включая нуль), при которых соответствующие биты ak ненулевые. Более того, поскольку для положительных k уже значение exp(28) дает число, близкое к предельно возможному для чисел двойной точности, то имеет смысл перемножать не более 8 значений для положительных k, а при обнаружении ненулевого бита ak при k>7 возвращать признак переполнения (OVERFLOW). Для отрицательных значений a=-c можно поступить двумя путями: либо вычислить экспоненту для c, а затем обратить, либо провести аналогичное разложение: a=-[c]-{c}, но при этом использовать табличные данные для обратных величин exp(-2k). Вместо переполнения при обнаружении ненулевого бита для k>7 следует возвращать нуль. На данной странице приведен вариант с использованием табличных данных для обратных величин; это вообще исключает деление из процесса вычисления экспоненты. |