#c #gcc #floating-point #decimal
#c #gcc #с плавающей запятой #десятичный
Вопрос:
Я пытался выяснить, как интегрировать десятичные плавающие типы с GCC 10.2.0.
Я создал gcc с --enable-decimal-float=dpd
--with-backend=libdecnumber
флагами и и указал DFP_ENABLE=1
env var . Журналы показывают, что decimalNNN встроен в gcc, и я могу успешно скомпилировать следующее:
#define __STDC_WANT_DEC_FP__
#include <stdio.h>
#include <string.h>
#include <math.h>
int main () {
_Decimal64 d = 3.1415DD;
}
Далее я пытаюсь выяснить, как / где получить поддерживаемые математические функции libdfp, работающие с _Decimal64. Я просмотрел файлы заголовков в gcc (который был создан с использованием упомянутых выше флагов), и я не могу найти никаких таких функций.
Кроме того, я изучил сам проект libdfp и попытался его создать, но, похоже, он компилируется только в Linux (я на macOS).
При поиске в stackoverflow и github я нахожу признаки того, что у некоторых людей это работает, но я застрял.
Чего мне не хватает? Любые советы будут с благодарностью!
Комментарии:
1. Обратите внимание, что для этого требуется некоторая поддержка
libc
, в частностиglibc
[которую macOS не использует]. Кроме того,libdfp
он стабилен [потому что он не был изменен с 2010 года — согласно комментарию на странице github]. Итак, вы можете быть SOL. Если вы настроены на это, то пусть будет так. Но, если вы можете сделать шаг назад, какую функциональность это обеспечивает, которая вам нужна (например, округляет по-другому)? Если вам нужна более высокая точность,gmp
может быть полезна библиотека (GNU multiple precision arithemetic). Смотрите: gmplib.org У него есть [я полагаю] порт macOS.2. На странице github есть
DPD
формат [от IBM]. Еще до того, как я увидел это, я думал, что это похоже на формат IBM [на их мэйнфреймах] «упакованный десятичный», в котором с 1960-х годов были Ч / Б инструкции для упакованной десятичной арифметики. Инструкции IBM допускали десятичное число переменной длины до 256 (?) цифр. Они использовались банковскими S / W, которым требовались точные значения без усечения (например, альтернативаuint32_t
). Создать функции, которые это реализуют, не так уж сложно. Хотя вы, возможно, изобретаете велосипед заново, это может быть меньше работы, чем попытка портировать библиотеку.