6.13 Десятичные типы с плавающей точкой
В качестве расширения, GNU C поддерживает десятичные типы с плавающей точкой, как определено в проекте N1312 черновика ISO/IEC WDTR24732. Поддержка десятичных типов с плавающей точкой в GCC будет развиваться по мере изменения черновика технического отчета. Вызовы функций для любого целевого устройства также могут измениться. Не все целевые устройства поддерживают десятичные типы с плавающей точкой.
Десятичные типы с плавающей точкой — это _Decimal32, _Decimal64, и _Decimal128. Они используют основание десять, в отличие от типов с плавающей точкой float, double, и long double, основание которых не определено стандартом C, но обычно равно двум.
Поддержка десятичных типов с плавающей точкой включает арифметические операторы сложения, вычитания, умножения, деления; унарные арифметические операторы; операторы сравнения; операторы равенства; и преобразования в целые числа и другие типы с плавающей точкой. Используйте суффикс ‘df’ или ‘DF’ в литеральной константе типа _Decimal32, ‘dd’ или ‘DD’ для _Decimal64, и ‘dl’ или ‘DL’ для _Decimal128.
Поддержка десятичных чисел с плавающей точкой в GCC, как указано в черновике технического отчета, является неполной:
- Когда значение десятичного типа с плавающей точкой не может быть представлено в целом типе, в который оно преобразуется, результат является неопределенным, а не значением, указанным в черновике технического отчета.
- GCC не предоставляет функциональность библиотеки C, связанную с
math.h,fenv.h,stdio.h,stdlib.h, иwchar.h, которая должна быть реализована в отдельной библиотеке C. Из-за этого компилятор GNU C не определяет макрос__STDC_DEC_FP__для указания того, что реализация соответствует техническому отчету.
Типы _Decimal32, _Decimal64, и _Decimal128 поддерживаются форматом отладки DWARF 2.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-4.9.4/gcc/Decimal-Float.html