Международный стандарт представления чисел с плавающей точкой в ЭВМ

Материал из MachineLearning.

(Различия между версиями)
Перейти к: навигация, поиск
(Числа с плавающей точкой)
(Введение)
Строка 4: Строка 4:
От этого главным образом зависит точность вычислений,а также их скорость.
От этого главным образом зависит точность вычислений,а также их скорость.
-
В этом отчёте будут рассматриваться те аспекты представления чисел в ЭВМ, которые важны пользователям, желающим активно работать с дробными величинами. Будет достаточно подробно рассмотрен наиболее часто используемый стандарт [http://ru.wikipedia.org/wiki/IEEE IEEE 754]. В заключение будут приведены способы доступа к основным параметрам представления дробных чисел в ряде языков программирования ([http://ru.wikipedia.org/wiki/Си_(язык_программирования) C],[http://ru.wikipedia.org/wiki/C%2B%2B C++],[http://ru.wikipedia.org/wiki/Fortran Fortran],[http://ru.wikipedia.org/wiki/Pascal Pascal]).
+
В этом отчёте будут рассматриваться те аспекты представления чисел в ЭВМ, которые важны пользователям, желающим активно работать с дробными величинами. Вначале будут введены общепринятые понятия для дальнейшего изложения материала. Будет достаточно подробно рассмотрен наиболее часто используемый стандарт [http://ru.wikipedia.org/wiki/IEEE IEEE 754]. В заключение будут приведены способы доступа к основным параметрам представления дробных чисел в ряде языков программирования ([http://ru.wikipedia.org/wiki/Си_(язык_программирования) C],[http://ru.wikipedia.org/wiki/C%2B%2B C++],[http://ru.wikipedia.org/wiki/Fortran Fortran],[http://ru.wikipedia.org/wiki/Pascal Pascal]).
-
β== Числа с плавающей точкой ==
+
== Числа с плавающей точкой ==
Числа с плавающей точкой - общепринятая форма представления дробных чисел в ЭВМ.
Числа с плавающей точкой - общепринятая форма представления дробных чисел в ЭВМ.
-
Параметрами такой формы представления является основание степени <tex>\beta</tex> (''base'') и точность <tex>p</tex> (''precision'').
+
Основными параметрами такой формы представления является основание степени <tex>\beta</tex> (''base'') и точность <tex>p</tex> (''precision'').
При этом всегда требуется, чтобы основание степени было целым чётным числом.
При этом всегда требуется, чтобы основание степени было целым чётным числом.
Если <tex>$\beta=10$</tex> и <tex>$p=3$</tex>, то число 0.1 представляется в виде
Если <tex>$\beta=10$</tex> и <tex>$p=3$</tex>, то число 0.1 представляется в виде
Строка 31: Строка 31:
Чаще всего такая ситуация возникает при попытке представить числа, имеющие слишком длинное или вообще бесконечное представление (пример с 0.1).
Чаще всего такая ситуация возникает при попытке представить числа, имеющие слишком длинное или вообще бесконечное представление (пример с 0.1).
В этом случае нужное нам число лежит где-то между двумя числами с плавающей точкой и будет представляться одним из них.
В этом случае нужное нам число лежит где-то между двумя числами с плавающей точкой и будет представляться одним из них.
-
Реже встречается попытка использовать числа, меньшие, чем <tex>1.0\times\beta^{e_{min}}</tex>, или большие, чем <tex>\beta.0\times\beta^{e_{max}}</tex>.
+
Реже встречается попытка использовать числа, меньшие чем <tex>1.0\times\beta^{e_{min}}</tex>, или большие чем <tex>\beta.0\times\beta^{e_{max}}</tex>.
-
Подробнее об этом речь пойдёт в разделе "Стандарт IEEE".
+
Подробнее об этих случаях речь пойдёт в разделе "Стандарт IEEE".
 +
 
 +
Введём ещё одну договорённость.
 +
Пока что представление чисел с плавающей точкой неуникально.
 +
Например, при <tex>$\beta=10$</tex> и <tex>$p=3$</tex> число 0.1 можно представить как <tex>0.01\times 10^{1}</tex> и как <tex>1.00\times 10^{-1}</tex>.
 +
Представление числа, в старшей позиции которого стоит цифра, отличная от нуля <tex>\left(d_0\neq 0\right)</tex>, мы будем называть ''нормализованным''.
 +
Использование нормализованных форм решает проблему неединственности представления чисел с плавающей точкой.
 +
(Однако, при такой договорённости возникает интересный вопрос — как представлять 0?)
== Стандарт IEEE ==
== Стандарт IEEE ==

Версия 19:36, 18 октября 2008

Содержание

Введение

Практически любой язык программирования даёт возможность использовать в вычислениях дробные числа. Когда дело касается программной реализации численных методов или любых других вычислений на ЭВМ, важным вопросом является внутреннее представление чисел, с которым приходится работать программисту. От этого главным образом зависит точность вычислений,а также их скорость.

В этом отчёте будут рассматриваться те аспекты представления чисел в ЭВМ, которые важны пользователям, желающим активно работать с дробными величинами. Вначале будут введены общепринятые понятия для дальнейшего изложения материала. Будет достаточно подробно рассмотрен наиболее часто используемый стандарт IEEE 754. В заключение будут приведены способы доступа к основным параметрам представления дробных чисел в ряде языков программирования (C,C++,Fortran,Pascal).

Числа с плавающей точкой

Числа с плавающей точкой - общепринятая форма представления дробных чисел в ЭВМ. Основными параметрами такой формы представления является основание степени \beta (base) и точность p (precision). При этом всегда требуется, чтобы основание степени было целым чётным числом. Если $\beta=10$ и $p=3$, то число 0.1 представляется в виде $1.00\times 10^{-1}$. Однако, очевидно, что при определённых параметрах некоторые числа не удастся представить точно. Например, при $\beta=2$ и $p=24$ то же самое число 0.1 представляется приблизительно в виде 1.10011001100110011001101\times 2^{-4} (поскольку в бинарном представлении число 0.1 имеет бесконечный вид).

В общем случае при заданных параметрах запись вида $d_0.d_1d_2 \dots d_{p-1}\times\beta^e$ представляет число

$\pm\left(d_0+d_1\beta^{-1}+d_2\beta^{-2}\dots+d_{p-1}\beta^{p-1}\right)\beta^e,\ ( 0\leq d_i<\beta )$

При этом d_0.d_1d_2 \dots d_{p-1} называется мантиссой числа и состоит из p позиций. В дальнейшем под числом с плавающей точкой мы будем понимать дробные числа точно представимые в смысле данной формы.

Существуют ещё два важных параметра — максимальный и минимальный показатели степени $e_{max}$ и e_{min}. Таким образом, при фиксированных параметрах мы можем представить $2\left(e_{max}-e_{min}+1\right)\beta^p$ разных чисел с учётом знака.

Здесь возникает проблема - что делать с числами, не представимыми точно. Чаще всего такая ситуация возникает при попытке представить числа, имеющие слишком длинное или вообще бесконечное представление (пример с 0.1). В этом случае нужное нам число лежит где-то между двумя числами с плавающей точкой и будет представляться одним из них. Реже встречается попытка использовать числа, меньшие чем 1.0\times\beta^{e_{min}}, или большие чем \beta.0\times\beta^{e_{max}}. Подробнее об этих случаях речь пойдёт в разделе "Стандарт IEEE".

Введём ещё одну договорённость. Пока что представление чисел с плавающей точкой неуникально. Например, при $\beta=10$ и $p=3$ число 0.1 можно представить как 0.01\times 10^{1} и как 1.00\times 10^{-1}. Представление числа, в старшей позиции которого стоит цифра, отличная от нуля \left(d_0\neq 0\right), мы будем называть нормализованным. Использование нормализованных форм решает проблему неединственности представления чисел с плавающей точкой. (Однако, при такой договорённости возникает интересный вопрос — как представлять 0?)

Стандарт IEEE

Рекомендации программисту

Заключение

Список литературы

  • David Goldberg.  What Every Computer Scientist Should Know About Floating-Point Arithmetic. ACM Computing Surveys, Vol. 23, No. 1 (March 1991), pages 5--48.


Личные инструменты