4.7 – Введение в экспоненциальную запись
Прежде чем мы поговорим о нашей следующей теме, пройдемся по теме экспоненциальной записи.
Экспоненциальная запись (научная нотация) – это удобное сокращение для краткого написания длинных чисел. И хотя сначала экспоненциальная запись может показаться чуждой, ее понимание поможет вам понять, как работают числа с плавающей запятой, и, что более важно, каковы их ограничения.
Числа в экспоненциальном представлении имеют следующий вид: мантисса x 10 порядок . Например, в экспоненциальном представлении 1,2 x 10 4 , 1,2 – это мантисса, а 4 – порядок (показатель степени). Поскольку 10 4 означает 10 000, 1,2 x 10 4 означает 12 000.
По соглашению, числа в экспоненциальном представлении записываются с одной цифрой перед десятичной запятой, а остальные цифры – после нее.
Рассмотрим массу Земли. В десятичной системе счисления мы запишем это как 5973600000000000000000000 кг. Это действительно большое число (слишком большое, чтобы поместиться даже в 8-байтовое целочисленное значение). Его также трудно прочитать (это 19 или 20 нулей?). Даже с разделителями ( 5 973 600 000 000 000 000 000 000 ) число всё равно трудно прочитать.
В экспоненциальном представлении оно будет записано как 5,9736 x 10 24 кг, что намного легче прочитать. Экспоненциальная запись имеет дополнительное преимущество, поскольку упрощает сравнение двух действительно больших или действительно маленьких чисел, просто сравнивая показатель степени.
Поскольку в C++ может быть сложно ввести или отобразить показатели степени, для обозначения части выражения «умноженное на 10 в степени» мы используем букву ' e ' (или иногда ' E '). Например, 1,2 x 10 4 будет записано как 1.2e4 , а 5,9736 x 10 24 будет записано как 5.9736e24 .
Для чисел меньше 1 показатель степени может быть отрицательным. Число 5e-2 эквивалентно 5 x 10 -2 , что составляет 5/10 2 или 0,05 . Масса электрона составляет 9.1093822e-31 кг.
Как преобразовывать числа в экспоненциальное представление
Используйте следующую процедуру:
- ваш показатель степени начинается с нуля;
- сдвиньте десятичную запятую так, чтобы слева от нее была только одна ненулевая цифра;
- каждый знак, на который вы сдвигаете десятичную запятую влево, увеличивает показатель степени на 1;
- каждый знак, на который вы сдвигаете десятичную запятую вправо, уменьшает показатель степени на 1;
Вот несколько примеров:
Самое важное, что нужно понять: цифры в мантиссе (часть перед "е") называются значащими цифрами. Количество значащих цифр определяет точность числа. Чем больше цифр в мантиссе, тем точнее число.
Точность и конечные нули после десятичной запятой
Рассмотрим случай, когда мы просим двух лаборантов взвесить одно и то же яблоко. Один возвращается и говорит, что яблоко весит 87 грамм. Другой возвращается и говорит, что яблоко весит 87,00 грамм. Предположим, что взвешивание правильное. В первом случае фактический вес яблока может составлять от 86,50 до 87,49 грамма. Может быть, точность весов была 1 грамм. Или, может быть, наш помощник немного округлил. Во втором случае мы в большей степени уверены в фактическом весе яблока (оно весит от 86,9950 до 87,0049 граммов, где значительно меньше вариативности).
Поэтому в стандартной экспоненциальной записи мы предпочитаем оставлять конечные нули после десятичной запятой, потому что эти цифры несут полезную информацию о точности числа.
Однако в C++ 87 и 87.00 обрабатываются одинаково, и компилятор сохранит одно и то же значение для каждого из них. Нет никаких технических причин, по которым мы должны предпочесть одно другому (хотя могут быть научные причины, если вы используете исходный код в качестве документации).
Теперь, когда мы рассмотрели экспоненциальную запись (научную нотацию), мы готовы рассмотреть числа с плавающей запятой.
Небольшой тест
Вопрос 1
Преобразуйте следующие числа в экспоненциальную запись в стиле C++ (используя e для обозначения экспоненты) и определите, сколько значащих цифр каждое имеет число (оставляйте конечные нули после десятичной запятой):
Взгляд со стороны: Стандарт IEEE754
Из математики известно, что любое действительное число F в позиционной системе счисления с основанием q записывается на бумаге в виде последовательности цифр. Вес цифры зависит от ее позиции в числе. Основание системы q равно количеству цифр (знаков ее алфавита) и определяет, во сколько раз различаются значения цифр соседних разрядов числа. Такая запись числа называется естественной и выглядит следующим образом:
F = c_(L-1,) c_(L-2)…c_(0.) d_(0 )…d_(N-2,) d_(N-1,) (1)
Где c_(L-1,) c_(L-2)…c_0- цифры целой части, а d_(0 )…d_(N-2,) d_(N-1) — цифры дробной части числа. Число может состоять из сколь угодно большого количества значащих цифр L целой части и N цифр дробной части.
Если точку в числе F, представленном выражением (1) переместить на h разрядов влево, то мы получим новое число М, которое связано с первоначальным числом формулой, представляющей собой экспоненциальную зависимость:Значение числа F при этом уменьшится в h раз. Чтобы число не изменилось, его умножают на величину q^h. Таким образом, число, записанное в естественном виде (1), может быть представлено в эквивалентном ему экспоненциальном виде:
Если точку в числе F, представленном выражением (1) переместить на h разрядов вправо, то мы получим новое число М, которое связано с первоначальным числом формулой:
Значение числа F при этом увеличится в h раз. Чтобы число не изменилось, его умножают на величину q^(-h). Таким образом, для рассматриваемого случая, число, записанное в естественном виде (1), может быть представлено в следующем эквивалентном ему экспоненциальном виде:
В общем случае, любое действительное число, записанное в естественной форме (1), может быть записано в эквивалентном ему экспоненциальном виде следующим образом:
где М представляет собой число (1) со смещенной точкой на h позиций в ту или иную сторону. Число М в такой записи принято называть мантиссой числа, а q^(±h) характеристикой числа с порядком ±h, который в литературе еще называют экспонентой. Знак и величина порядка h компенсируют величину смещения точки относительно ее первоначального положения в числе (1). Обе записи (1) и (4) суть записи одного и того же числа различным образом.
Число (1) имеет L + N разрядов. Поскольку в естественном представлении числа (1) число разрядов L целой части и N разрядов дробной части могут иметь сколь угодно большое значение, то число M в (2) также может иметь сколь угодно большое количество разрядов. В общем случае, количество разрядов числа М в (2) может быть бесконечным. Например, когда число представляет собой периодическую дробь, или число иррационально. На практике мы имеем дело с ограниченным количеством разрядов для представления действительного числа в естественной форме. Сколько бы разрядов числа мы ни писали справа, рано или поздно мы должны ограничить количество разрядов представляемого числа. Хотя бы потому, что писать будет уже некуда. В результате, число сначала ограничивают, а затем округляют до приемлемой для данной задачи крайней правой цифры. При этом, конечно, теряется точность представления этого числа. Вопросы точности представления чисел в математике мы здесь не затрагиваем. Этому вопросу посвящено огромное число работ. Отметим только, что точность представления числа выбирается в разумных пределах и поэтому действительное число всегда записывается с ограничением разрядности. Тем самым, строго говоря, оно становится рациональным числом. В компьютерной литературе, числа, имеющие дробную часть, принято называть действительными числами. Мы тоже будем придерживаться этой терминологии.
В математике, как правило, к представлению чисел в экспоненциальном виде прибегают тогда, когда число, записанное в естественном виде (1), имеет незначащие нули. Чтобы сократить запись и не писать повторяющиеся незначащие цифры используют запись числа в экспоненциальной форме (2). Тогда порядок характеристики h указывает на количество незначащих нулей до или после точки. В более общем случае, число h со знаком, как мы видели выше, указывает на количество смещений точки относительно ее первоначального положения в числе. В любом случае, когда указывается число сдвигов h, всегда известна и точка отсчета, относительно которой происходит смещение разделительной точки в числе.
2. ПРЕДСТАВЛЕНИЕ ЧИСЕЛ В МАШИННОМ СЛОВЕ
В вычислительном устройстве для записи числа отводится ограниченное разрядное пространство. Поэтому на числа, записываемые в машинное слово, накладываются определенные ограничения, которые определяют точность представления чисел и диапазон принимаемых ими значений.
Двоичное число, представленное в экспоненциальном виде, в компьютере записывается в виде машинного слова, разбитого на специальные области. Структура машинного слова может быть схематично представлена следующим образом:
В этом слове К разрядов отводится для записи мантиссы M, R разрядов под запись порядка h характеристики и по одному разряду отводится под запись знака S числа и z знака порядка. Машинное пространство, выделенное под запись мантиссы числа, будем называть областью машинной мантиссы (ОММ), а число, записанное в эту область, машинной мантиссой. Аналогично, пространство, выделенное в машине под запись порядка характеристики, будем называть областью машинного порядка (ОМП) характеристики, а число, записанное в эту область будем называть машинным порядком. Если в ОММ в явном виде содержится точка, то числа, представленные в таком формате, называются числами с фиксированной точкой. Далее мы будем рассматривать числа, записанные в экспоненциальном виде (2). Числа, представленные в таком формате, называют еще числами с плавающей точкой.
3. НОРМАЛИЗАЦИЯ ЧИСЕЛ
Как уже отмечалось выше, при преобразовании числа, записанного в естественном виде, к экспоненциальному виду, точка в числе вида (1) может смещаться на произвольное количество разрядов вправо или влево. А, чтобы значение числа при этом не изменилось, на количество смещений должен быть откорректирован порядок характеристики экспоненциального числа. Очевидно, что при этом возникает множественность представления одного и того же числа, записанного в экспоненциальном виде.
Возьмем двоичное число 0.001001 и запишем его в экспоненциальном виде в машинное слово, в котором ОММ имеет 3 разряда. В том случае, когда предполагается, что машинная мантисса представлена в виде правильной дроби, мы будем иметь следующие возможные варианты записи этого числа: 0.1001•2^(-2)=0.100•2^(-2)=0.010•2^(-1)=0.001•2^0. Во всех этих случаях младший разряд записываемого числа был утерян, поскольку он вышел за пределы разрядной сетки ОММ. Итак, мы получили запись одного и того же числа различными вариантами.
Налицо неоднозначность представления чисел в машинном слове. Мы должны указать машине критерий выбора, по которому отдается предпочтение той или иной форме записи числа в машинном слове. Запись экспоненциального числа в формате, в котором мантисса числа представляется единственным образом, называется нормализацией.
В настоящее время чаще всего рассматриваются два варианта нормализации чисел. В первом варианте [1], перед записью в машинное слово число представляется в виде двоичного дробного числа, в котором единица стоит сразу после точки. При такой нормализации двоичная мантисса в виде правильной дроби лежит в диапазоне 0.1≤М< 1. Другой вариант нормализации заключается в следующем. Действительное число перед записью в машинное слово приводится к виду, в котором мантисса представляет собой смешанную дробь, в которой в младшем разряде целой части обязательно присутствует значащая цифра. Для двоичного числа эта цифра — единица. Такой вариант нормализации закреплен в стандарте IEEE754
4. ДЕЙСТВИТЕЛЬНЫЕ ЧИСЛА В ПРЕДСТАВЛЕНИИ СТАНДАРТА IEEE754
В настоящее время в компьютерной арифметике, для оперирования с действительными числами, широко используется стандарт IEEE754 [2]. В этом стандарте введен класс нормализованных чисел, который позволяет решить две проблемы. Одна из них, это неоднозначное представление чисел с плавающей запятой. А вторая проблема, это получение возможности представления чисел в широком диапазоне значений. Для решения этих проблем было предложено, перед записью в машинное слово действительного числа, приводить его к нормализованному виду.
Рассмотрим особенности представления действительных чисел с плавающей запятой в стандарте IEEE754.
В соответствие со стандартом, все числа в машинном слове представляются в нормализованном виде. Для этого они преобразуются к виду:
Здесь 1.М – мантисса, состоящая из единицы в целой части и числа М, которое записывается в ОММ сразу за единицей. Значения мантиссы в нормализованных числах располагаются в интервале:
а значения порядков характеристик чисел лежат в диапазоне –(B-1) ≤ h ≤ B. Здесь B – максимальное число, которое можно записать в ОМП машинного слова.
Двоичное нормализованное число в машинном слове с К- разрядной ОММ схематично выглядит следующим образом:
Расположение разрядов для знака порядка z и знака числа S в машинном слове может быть произвольным. На характер представимых чисел это не влияет. Как видно из этого рисунка, К-ый разряд в мантиссе нормализованного числа всегда равен единице. Этот разряд присутствует в машинном слове виртуально. На самом деле его в разрядной сетке нет. Тем не менее, виртуальная единица всегда учитывается при представлении чисел и при проведении математических операций над ними. Предполагается, что в нормализованном числе точка в мантиссе расположена справа от единицы.
В стандарте, чтобы сэкономить на знаке порядка, используется смещенное представление порядков характеристик чисел, записанных в машинное слово. Для простоты изложения, значения порядков характеристик мы представляем здесь и далее без смещения.
При нормализованном представлении чисел сразу возникает проблема, связанная с отсутствием нуля. В нормализованных числах нуль не входит в интервал значений мантиссы. Это обстоятельство не позволяет получить нулевой результат вычислений. При математических операциях над нормализованными числами в компьютере нуль в явном виде не получается, а получается его признак.
И вторая проблема, которая возникает при нормализации чисел, это ограничение диапазона представления малых чисел, из-за того, что значения мантиссы нормализованных чисел не превышают единицы. Это заставило авторов стандарта ввести класс денормализованных чисел, что существенно усложнило алгоритмы работы с такими числами.
Минимальное нормализованное число, которое можно записать в машинное слово, выглядит схематично следующим образом:
Это число, с учетом положения неявной единицы, может быть представлено следующим выражением:
|F_min | = S 2^(-В) (1+0) = S 2^(-В)
Где В- максимальное число, записанное в ОМП. Число 2^(-В) в стандарте считается специальным числом, которое принимается за ±0. Знак при нуле принимает свое значение в соответствие со значением знака S числа. Далее, для простоты, мы будем рассматривать только положительные числа.
Минимальным положительным нормализованным числом в стандарте считается число вида:
Таким образом, минимальное нормализованное число в стандарте представлено формулой:
Равенство порядка характеристики числу (-В) в стандарте зарезервировано под признак особого случая. Шаг, с которым изменяются значения нормализованных чисел равен ξ = 2^(-B)
Максимальное положительное нормализованное число в стандарте представлено в виде
Это число можно записать в виде выражения:Вычислим диапазон представимых чисел, нормализованных по стандарту:
|F_max |/|F_min | = 2^В• (2-2^(-К))/ 2^(-В+1) = 2^(2В )•(1- 2^(-(К+1))) ≈ 2^2В
Как мы видим, диапазон представимых нормализованных чисел определяется главным образом диапазоном чисел, которые можно записать в ОМП.
Отметим также, что даже при К = 1, когда мантисса числа содержит всего один разряд, выбирая соответствующее значение В можно записать или очень большое, или очень маленькое число. Образно говоря, мантисса в числе, представленном в экспоненциальном виде, по аналогии с географической картой, определяет количество объектов, которое мы рассматриваем, а коэффициент q^(±h) является масштабным коэффициентом, определяющим расстояние между этими объектами. С увеличением масштабного коэффициента q^(±h), при ограниченной площади карты (разрядности ОММ), становятся различимы более мелкие объекты (числа), а количество различимых объектов (чисел) уменьшается. В десятичной системе счисления часто, для описания количественных характеристик физических объектов, вместо коэффициента q^(±h) используют приставки нано, микро, мили, кило, мега и проч.
Для того, чтобы расширить диапазон представимых чисел в сторону близких к нулю значений, в стандарте введен класс денормализованных чисел. Денормализованными числами считаются числа, которые определяются по формуле:
В этом выражении М — целое число, лежащее в диапазоне 1≤ М≤(2^(К-1)). А мантисса (M•2^(-К)), это дробное число, которое лежит в диапазоне
Как отсюда видно, в выражении для денормализованных чисел отсутствует неявная единица. В момент, когда характеристика нормализованного числа становится равной 2^(-B) (особый случай), далее преобразования ведутся так, как будто характеристика числа равна 2^(-(B-1)). А значения дробной мантиссы лежат в диапазоне (3). Это позволяет перейти из области нормализованных чисел к области чисел денормализованных плавно, без скачка. В области денормализованных чисел шаг изменения чисел становится равным ξ = 2^(-(B-1+К)). Когда значение мантиссы денормализованного числа становится равным нулю, считается, что число равно машинному нулю.
Денормализованное положительное число в машинном слове схематично выглядит следующим образом:
Минимальное положительное денормализованное число в машинном слове выглядит как:
Формула для минимального денормализованного числа будет следующей:
Максимальное положительное денормализованное число выглядит в машинном слове схематично следующим образом:
Формула для вычисления максимального денормализованного числа имеет вид:
Диапазон представимых в стандарте денормализованных чисел равен:
F_(den max)/ F_(den min)= 2^(В-1) (1-2^(-К)) /2^(-(В+К-1)) = 2^(2B-2) (2^К-1)
Ниже, для примера, приводится таблица, в которой представлено преобразование последовательности чисел перед записью их в машинное слово, в соответствие со стандартом IEEE754. Предполагается, что ОММ состоит из К=2 разрядов, плюс неявная единица. В ОМП можно записать максимальное число В=2. Минимальное число, с которого начинается отсчет нормализованных чисел, будет |F_min | = 2^(-2+1) = 2^(-1)= 0.1. В таблице эта область представлена числами на белом фоне. С 1 строки по 3-ю, на сером фоне, в таблице представлена область денормализованных чисел, для которых F_(den min) = 2^(-(2+2-1))= 2^(-3). Шаг изменения для этих чисел равен ξ = 0.001.
В 1-ом столбце таблицы пронумерованы шаги изменения числа от минимального значения до максимального. В столбце 2 записаны числа, которые образуются с каждым новым шагом. Значок х здесь означает произвольную цифру, нуль или единицу. Цифры, обозначенные как х, не участвуют в образовании мантиссы машинного слова. В столбце 3 представлена мантисса числа, после его нормализации. В столбце 4 представлены значения порядков характеристик чисел после их нормализации. В столбце 5 представлены значения машинных порядков характеристик чисел, записанных в машинное слово. В столбце 6 представлены денормализованные числа, которые записываются в ОММ. В столбце 7 пронумерованы уникальные денормализованные числа, которые записаны в машинном слове. А в столбце 8 пронумерованы уникальные нормализованные числа.
Как следует из приведенных в таблице значений чисел, записанных в машинное слово, диапазон представимых двоичных нормализованных чисел равен 1.11•2^2/1.0•2^(-1)=7/0.5=14. В то же время диапазон вместе взятых нормализованных и денормализованных чисел будет равен 1.11•2^2/0.01•2^(-1)=7/0.125=56. Видно, что диапазон представимых чисел, определяемый, как отношение максимального представимого числа к минимальному не совпадает с количеством представимых чисел.
Глядя на таблицу можно заметить, что, пока машинный порядок равен минимальному значению (h= -1), увеличение на 1 значения мантиссы приводит к увеличению числа, записанного в машинном слове тоже на 1. После того, как число в стр.2 станет равным двоичному числу 0.111, следующее его приращение на 1 дает число 1.000, которое не помещается в разрядную сетку ОММ. Поэтому мы сдвигаем точку в мантиссе числа на один разряд влево и увеличиваем машинный порядок на единицу. Далее изменение машинных чисел происходит с удвоенным значением шага. С каждым увеличением числа h на единицу происходит увеличение расстояния между соседними значениями машинных чисел вдвое.
Экспоненциальная форма записи чисел.
Экспоненциальная форма представления чисел обычно используется для записи очень больших или очень малых чисел, кот в естественной форме содержат большое количество незначащих нулей (1 000 000 = 1·10 6 ). Вещественные числа (конечные и бесконечные десятич. дроби) записываются в формате с плавающей запятой, т.е. положение запятой в числе может меняться.
Формат чисел с плавающей запятой: A = m · q n
m – мантисса числа q – основание системы счисления n – порядок числа
Естественная форма Экспоненциальная форма десятичная система счисления 16000000000000000 = 1,6 ·10 16 0,00000000000000016 = 1,6 ·10 -16 двоичная система счисления 11000000000000000 = 1,1 ·2 16 0,00000000000000011 = 1,1 ·2 -16 Диапазон изменения чисел определяется количеством разрядов, отведенный для хранения порядка числа, точность определяется количеством разрядов, отведенных для хранения мантиссы.
Нормализованная мантисса.
Прежде чем сохранить двоичное значение с плавающей запятой, необходимо нормализовать мантиссу.Этот процесс похож на нормализацию десятичного значения с плавающей запятой. Например, значение 1234.567 будет нормализовано, как 1.234567 x 10 3 путем перемещения десятичной точки до одной цифры.Аналогично, значение 1101.101 нормализуется в 1.101101 x 2 3 путем перемещения десятичной точки и домножения. Вот несколько примеров:
Вы наверное заметили, что в нормализованной мантиссе цифра 1 всегда слева от десятичной точки.
При хранении значений, в мантиссе единица не прописывается, а подразумевается.Экспоненты коротких реальных значений хранятся как 8-разрядные целые числа без знака, с уклоном 127.
Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:
Экспоненциальная запись
Экспоненциальная запись – способ записи слишком крупных чисел для большего удобства: запись комплексного числа, как выгляди экспоненциальная форма записи.
Задача обучения
- Освоение метода экспоненциальной записи и определение ситуаций ее использования.
Основные пункты
- Экспоненциальная запись – запись числа с точки зрения усиления степени от 1 до 10.
- При этом методе все числа записываются по формуле a х 10 b (b – степень).
- Каждое последующее число экспонентов в 10 раз превышает предыдущее. Отрицательные используют для небольших чисел.
Термины
- Экспоненциальная запись – метод отображения чисел в виде десятичного числа от 1 до 10, сила которого приумножается на 10.
- Степень – сила, на которую умножают число.
Все дело в удобстве
Экспоненциальная запись числа – метод фиксации слишком крупных или малых чисел, чтобы сохранить удобство в формулах. Этот способ действительно призван все упростить. Его удобно использовать при расчетах в калькуляторе и ведении записей. Все числа вводятся по формуле a х 10 b (b – степень).
Состоит из трех частей: коэффициент, основа и степень
Следует понимать, что большая часть объектов Вселенной по своим размерам превосходит привычные для человека числа. Например, для соответствия человеческой массы придется собрать в кучку 1 000 000 000 000 000 000 000 бактерий. Согласитесь, это даже сложно выговорить. Открытие сделал Томас Янг и ему было крайне неудобно вести подсчеты. Как раз для таких случаев и придумали новый метод — экспоненциальная форма записи комплексного числа.
Простая система
В методе экспоненциальной формы записи число записывается с точки зрения степени усиления от 1 до 10.
Например: 42 = 4.2 х 10 1 .
4200 = 4.2 х 10 3 и т.д.
Каждое последующее число будет в 10 раз больше предыдущего. Именно поэтому удобно использовать число 10. Если вы столкнулись с маленькими числами, то применяют отрицательную степень:
0.042 = 4.2 х 10 -2 .
Научные калькуляторы могут пользоваться другими сокращенными формулами, но смысл остается тем же. Например, 4.2 х 10 6 = 4.2Е + 6 или 4.2 6 . Подобные операции можно проводить в режиме онлайн.