[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Программирование: Разработка и отладка программ


128-разрядные числа двойной точности с плавающей точкой

Операционная система AIX поддерживает 128-разрядные числа двойной точности, обеспечивающие большую точность, чем применяемые по умолчанию 64-разрядные числа двойной точности. В 128-разрядных данных количество значащих цифр равно 31 (в 64-разрядных данных - только 17). Однако дополнительные значащие цифры повышают только точность (длину дробной части) чисел, но не их диапазон по абсолютной величине.

Работе со 128-разрядными данными двойной точности посвящены следующие разделы:

Компиляция программ, использующих 128-разрядные числа двойной точности

Для компиляции программ на языке C, в которых применяются 128-разрядные числа двойной точности, служит команда xlc128. Это разновидность команды xlc, поддерживающая 128-разрядные данные. Команда xlc поддерживает только 64-разрядные данные.

В стандартной библиотеке языка C libc128.a существуют аналоги процедур библиотеки libc.a, поддерживающие числа двойной точности. При компиляции приложений, использующих 64-разрядные данные двойной точности, компоновку следует выполнять с библиотекой libc.a. Приложения же, использующие 128-разрядные значений двойной точности, следует компоновать с обеими библиотеками libc128.a и libc.a, причем в списке просмотра библиотека libc128.a должна стоять перед библиотекой libc.a.

Соответствие стандарту IEEE 754

Функции для работы с 64-разрядными числами двойной точности полностью совместимы со стандартом IEEE 754, в отличие от функций для работы с 128-разрядными числами. Если вы хотите, чтобы приложения соответствовали стандарту IEEE 754, применяйте в них 64-разрядный формат данных.

128-разрядная реализация не соответствует стандарту IEEE в следующем:

Реализация 128-разрядного формата двойной точности

128-разрядное число двойной точности представляет собой упорядоченную пару 64-разрядных чисел двойной точности. Первый элемент этой пары содержит старшую, а второй - младшую часть числа. Длинное значение двойной точности является суммой этих 64-разрядных чисел.

Каждое из этих двух 64-разрядных чисел является числом двойной точности с плавающей точкой со знаком, порядком и мантиссой. Обычно модуль младшего числа меньше последнего разряда старшего, поэтому их значения не перекрываются и мантисса младшего числа повышает точность старшего числа.

Такое представление чисел обладает некоторыми особенностями, которые следует принять во внимание:

Значения для числовых макросов

В силу способа хранения длинных чисел двойной точности макросам могут соответствовать различные числа. При использовании 128-разрядного представления длинных чисел двойной точности значения следующих макросов из файла values.h, обязательных в стандарте языка C, не определены:

Число разрядов в мантиссе

Длина мантиссы не фиксирована, но для правильно отформатированных чисел (за исключением слишком малых) минимально возможное число разрядов равно 106. Поэтому значение макроса LDBL_MANT_DIG - 106.

Эпсилон

В стандарте ANSI C значение эпсилон определено как разность между наименьшим представимым числом, большим единицы, и единицей, т. е. b**(1-p), где b - это основание системы исчисления (2), а p - количество разрядов в числе в таком представлении. По этому определению необходимо, чтобы длина основания b была фиксированной, а это неверно для 128-разрядных чисел двойной точности.

Ниже приведено наименьшее представимое число, большее единицы:

0x3FF0000000000000, 0x0000000000000001

Разность между этим значением и единицей равна:

0x0000000000000001, 0x0000000000000000
0.4940656458412465441765687928682213E-323

Так как в 128-разрядных числах точность обычно составляет не менее 106 разрядов, то минимальное значение p равно 106. Таким образом, по формуле b**(1-p), 2**(-105) получается следующее значение:

0x3960000000000000, 0x0000000000000000
0.24651903288156618919116517665087070E-31

Оба значения подходят под определение значения эпсилон в соответствии со стандартом C. В функциях, использующих длинные числа двойной точности, будет применено второе значение, потому что оно лучше характеризует точность, достигаемую 128-разрядной реализацией.

Максимальное длинное число двойной точности

Значение макроса LDBL_MAX задает максимальное 128-разрядное число двойной точности, остающееся неизменным при умножении на 1.0. Это также максимальное конечное число, которое можно получить в результате простейших операций, такими как умножение и деление:

0x7FEFFFFFFFFFFFFF, 0x7C8FFFFFFFFFFFFF
0.1797693134862315807937289714053023E+309

Связанная информация

Команда cc.

Список функций для работы со 128-разрядными числами двойной точности.


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]