#c #math #c99 #long-double
#c #математика #c99 #long-double
Вопрос:
Каковы доступные переносимые реализации функций библиотеки C99 long double math ( expl
, cosl
logl
и т.д.), Если таковые имеются? Я просмотрел исходные файлы fdlibm (на базе Sun), NetBSD (на основе UCB) и т.д. И не видел их.
Ответ №1:
Вы должны быть в состоянии увидеть это в библиотеках на базе Sun (используемых практически во всех открытых библиотеках C, о которых я знаю, включая glibc и FreeBSD one).
Я обычно предпочитаю код BSD для математического кода (более читаемый IMO). Смотрите здесь для 80-битного двойного формата (Intel). Для данной функции разные реализации / архитектуры могут находиться в разных каталогах.
Следует понимать, что long double не стандартизирован (точнее, только с версии IEEE754 2008 года, которая на самом деле еще не реализована в большинстве распространенных процессоров). Это означает, что для каждого процессора требуется разная реализация для многих вещей (IA32, AMD64, PPC, Alpha, Sparc отличаются в этом аспекте …).
Комментарии:
1. Что ж, поддержка 80-разрядных и 128-разрядных версий должна охватывать практически все… И я подозреваю, что 128-разрядная реализация должна работать для 80-разрядных систем, но, возможно, это не совсем очевидно или даже верно. 🙂
2. 128 бит не работают как 80 бит, представление битов полностью отличается. Множество макросов низкого уровня должны иметь дело с бинарными деталями (isnan / isfinite / etc …). Если вы посмотрите на некоторую реализацию nextafter и подобных макросов / функций, вы увидите, как были абстрагированы двоичные различия (это не всегда возможно).
3. Да, я имел в виду математические функции более высокого уровня. Конечно, функции на уровне битов будут отличаться.
Ответ №2:
Попробуйте математическую библиотеку Cephes.
Комментарии:
1. Интересно, но, похоже, у нее есть некоторые серьезные проблемы с лицензией: mail-archive.com/debian-legal@lists.debian.org/msg29047.html Есть идеи, были ли они решены?
2. @R, я всегда думал, что код из netlib бесплатный, но документы в netlib.org/cephes/cephes.doc скажите «Авторское право 1984 — 1992 Стивена Л. Мошье». Его сайт moshier.net/#Cephes вообще не упоминает лицензирование. Но там написано «Последний дистрибутив Linux, датированный 6/4/00», поэтому я предполагаю, что его можно использовать свободно, поскольку он в Linux, но IANAL.
3. Ах, README в netlib.org/cephes/readme говорится «В любом случае, авторское право на это принадлежит автору. То, что вы видите здесь, может использоваться свободно, но оно поставляется без поддержки или гарантии.» Итак, действительно бесплатно.
4. «Используется свободно» — это довольно расплывчато. Рассматривается ли подготовка производных работ в разделе «используется свободно»? Это звучит как бессмыслица DJB, представляющая двусмысленное утверждение о том, что код «бесплатный», оставляя при этом достаточно пространства для маневра, чтобы облапошить любого, кто попытается использовать его, при желании, позже…
5. Иногда стоит просто попросить автора открыть исходный код, я успешно пробовал это несколько раз. Также OP не указал лицензию с открытым исходным кодом в качестве требования.