- C++ Technical Report 1
-
C++ Technical Report 1 (TR1) является общим названием для стандарта ISO / IEC TR 19768, библиотеки расширений C++ — это документ с предложением дополнений в стандарт библиотеки С++. Дополнения включают регулярные выражения, умные указатели, хэш-таблицы, и генераторы случайных чисел. TR1 не стандарт, а скорее проект документа. Однако, большинство его предложений, вероятно, станут частью следующего официальный стандарта. В то же время, производители могут использовать этот документ как руководство по созданию расширений.
Содержание
Специальные математические функции
Некоторые особенности TR1, такие, как специальные математические функции и некоторые дополнения C99, которые не включены в Visual C++ реализацию TR1
- дополнения к
<cmath>/<math.h>файлы заголовков —beta,legendreи т. д.
В следующей таблице приведены все 23 специальных функций, описанные в TR1.Имя функции Прототип функции Математическое выражение Обобщённые полиномы Лягерра double assoc_laguerre(unsigned n, unsigned m, double x) ; 
Присоединённые многочлены Лежандра double assoc_legendre(unsigned l, unsigned m, double x) ; 
Бета-функция double beta(double x, double y) ; 
Полный нормальный эллиптический интеграл Лежандра 1-го рода double comp_ellint_1(double k) ; 
Полный нормальный эллиптический интеграл Лежандра 2-го рода double comp_ellint_2(double k) ; 
Полный нормальный эллиптический интеграл Лежандра 3-го рода double comp_ellint_3(double k, double nu) ; 
Вырожденные гипергеометрические функции double conf_hyperg(double a, double c, double x) ; 
Регулярные цилиндрические функции Бесселя double cyl_bessel_i(double nu, double x) ; 
Цилиндрические функции Бесселя первого рода double cyl_bessel_j(double nu, double x) ; 
en:Irregular modified cylindrical Bessel functions double cyl_bessel_k(double nu, double x) ; ![\begin{align}
K_\nu(x) & = \textstyle\frac{\pi}{2} i^{\nu+1} \big(J_\nu(ix) + i N_\nu(ix)\big) \\
& = \begin{cases}
\displaystyle \frac{I_{-\nu}(x) - I_\nu(x)}{\sin \nu\pi}, & \text{for } x \ge 0 \text{ and } \nu \notin \mathbb{Z} \\[10pt]
\displaystyle \frac{\pi}{2} \lim_{\mu \to \nu} \frac{I_{-\mu}(x) - I_\mu(x)}{\sin \mu\pi}, & \text{for } x < 0 \text{ and } \nu \in \mathbb{Z} \\
\end{cases}
\end{align}](556dc847890d300ead77c5f8e0ba2675.png)
en:Cylindrical Neumann functions double cyl_neumann(double nu, double x) ; ![N_\nu(x) = \begin{cases}
\displaystyle \frac{J_\nu(x)\cos \nu\pi - J_{-\nu}(x)}{\sin \nu\pi}, & \text{for } x \ge 0 \text{ and } \nu \notin \mathbb{Z} \\[10pt]
\displaystyle \lim_{\mu \to \nu} \frac{J_\mu(x)\cos \mu\pi - J_{-\mu}(x)}{\sin \mu\pi}, & \text{for } x < 0 \text{ and } \nu \in \mathbb{Z} \\
\end{cases}](8e366ab40889bc13f751769309f557ce.png)
Неполный нормальный эллиптический интеграл 1-го рода double ellint_1(double k, double phi) ; 
Неполный нормальный эллиптический интеграл 2-го рода double ellint_2(double k, double phi) ; 
Неполный нормальный эллиптический интеграл 3-го рода double ellint_3(double k, double nu, double phi) ; 
Интегральная показательная функция double expint(double x) ; 
Многочлены Эрмита double hermite(unsigned n, double x) ; 
en:Hypergeometric series double hyperg(double a, double b, double c, double x) ; 
en:Laguerre polynomials double laguerre(unsigned n, double x) ; 
en:Legendre polynomials double legendre(unsigned l, double x) ; 
Дзета-функция Римана double riemann_zeta(double x) ; ![\Zeta(x) =
\begin{cases}
\displaystyle \sum_{k = 1}^\infty k^{-x}, & \text{for } x > 1 \\[10pt]
\displaystyle 2^x\pi^{x-1}\sin\left(\frac{x\pi}{2}\right)\Gamma(1-x)\zeta(1-x), & \text{for } x < 1 \\
\end{cases}](0770c3b962273c9fc126a401e2bf696a.png)
en:Spherical Bessel functions of the first kind double sph_bessel(unsigned n, double x) ; 
en:Spherical associated Legendre functions double sph_legendre(unsigned l, unsigned m, double theta) ; ![Y_{l}^{m}(\theta, 0) \text{ where } Y_{l}^{m}(\theta, \phi) = (-1)^{m}\left[\frac{(2l+1)}{4\pi}\frac{(l-m)!}{(l+m)!}\right]^{1 \over 2} P_{l}^{m}(cos \theta)e^{im\phi}, \text{ for } |m| \leq l](e4d0f6be79042fe7eb6ab7950aa3be3d.png)
en:Spherical Neumann functions double sph_neumann(unsigned n, double x) ; 
Каждая функция имеет два дополнительных варианта. Добавление F 'или' L 'суффикс к имени функции дает функцию, которая действует на float или long double значения соответственно. Например:
float sph_neumannf( unsigned n, float x ) ; long double sph_neumannl( unsigned n, long double x ) ;
Совместимость с СИ
Одной из концепций при разработке C++ было обеспечение как можно большей совместимости с языком программирования Си. Однако данная концепция не являлась и не является приоритетной, а лишь настоятельно рекомендованной, а потому C++ нельзя в строгом смысле считать надмножеством Си (стандарты этих языков расходятся). TR1 — это попытка примирить некоторые из различий данных языков путем добавления различных заголовков в следующие библиотеки С++:
<complex>,<locale>,<cmath>и т. д. Данные изменения способствуют приведению C++ в соответствие с C99 (не все части C99 включены в TR1).См. также
Литература
- ISO/IEC JTC1/SC22/WG21 (2005-06-24). «Draft Technical Report on C++ Library Extensions» (PDF).
- Becker Peter The C++ Standard Library Extensions: A Tutorial and Reference. — Addison-Wesley Professional, 2006. — ISBN 0-321-41299-0
Ссылки
- Scott Meyers' Effective C++: TR1 Information — contains links to the TR1 proposal documents which provide background and rationale for the TR1 libraries.
Категории:- Библиотеки C++
- Компьютерные и телекоммуникационные стандарты
- дополнения к
Wikimedia Foundation. 2010.