uclibc-cmath.ppc 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878
  1. diff -Nur gcc-4.8.3.orig/libstdc++-v3/include/c_global/cmath gcc-4.8.3/libstdc++-v3/include/c_global/cmath
  2. --- gcc-4.8.3.orig/libstdc++-v3/include/c_global/cmath 2013-02-03 18:54:05.000000000 +0100
  3. +++ gcc-4.8.3/libstdc++-v3/include/c_global/cmath 2014-07-27 07:24:43.600272987 +0200
  4. @@ -1040,143 +1040,213 @@
  5. // functions
  6. using ::acosh;
  7. using ::acoshf;
  8. +#ifdef __LONG_DOUBLE_128__
  9. using ::acoshl;
  10. +#endif
  11. using ::asinh;
  12. using ::asinhf;
  13. +#ifdef __LONG_DOUBLE_128__
  14. using ::asinhl;
  15. +#endif
  16. using ::atanh;
  17. using ::atanhf;
  18. +#ifdef __LONG_DOUBLE_128__
  19. using ::atanhl;
  20. +#endif
  21. using ::cbrt;
  22. using ::cbrtf;
  23. +#ifdef __LONG_DOUBLE_128__
  24. using ::cbrtl;
  25. +#endif
  26. using ::copysign;
  27. using ::copysignf;
  28. +#ifdef __LONG_DOUBLE_128__
  29. using ::copysignl;
  30. +#endif
  31. using ::erf;
  32. using ::erff;
  33. +#ifdef __LONG_DOUBLE_128__
  34. using ::erfl;
  35. +#endif
  36. using ::erfc;
  37. using ::erfcf;
  38. +#ifdef __LONG_DOUBLE_128__
  39. using ::erfcl;
  40. +#endif
  41. using ::exp2;
  42. using ::exp2f;
  43. +#ifdef __LONG_DOUBLE_128__
  44. using ::exp2l;
  45. +#endif
  46. using ::expm1;
  47. using ::expm1f;
  48. +#ifdef __LONG_DOUBLE_128__
  49. using ::expm1l;
  50. +#endif
  51. using ::fdim;
  52. using ::fdimf;
  53. +#ifdef __LONG_DOUBLE_128__
  54. using ::fdiml;
  55. +#endif
  56. using ::fma;
  57. using ::fmaf;
  58. +#ifdef __LONG_DOUBLE_128__
  59. using ::fmal;
  60. +#endif
  61. using ::fmax;
  62. using ::fmaxf;
  63. +#ifdef __LONG_DOUBLE_128__
  64. using ::fmaxl;
  65. +#endif
  66. using ::fmin;
  67. using ::fminf;
  68. +#ifdef __LONG_DOUBLE_128__
  69. using ::fminl;
  70. +#endif
  71. using ::hypot;
  72. using ::hypotf;
  73. +#ifdef __LONG_DOUBLE_128__
  74. using ::hypotl;
  75. +#endif
  76. using ::ilogb;
  77. using ::ilogbf;
  78. +#ifdef __LONG_DOUBLE_128__
  79. using ::ilogbl;
  80. +#endif
  81. using ::lgamma;
  82. using ::lgammaf;
  83. +#ifdef __LONG_DOUBLE_128__
  84. using ::lgammal;
  85. +#endif
  86. using ::llrint;
  87. using ::llrintf;
  88. +#ifdef __LONG_DOUBLE_128__
  89. using ::llrintl;
  90. +#endif
  91. using ::llround;
  92. using ::llroundf;
  93. +#ifdef __LONG_DOUBLE_128__
  94. using ::llroundl;
  95. +#endif
  96. using ::log1p;
  97. using ::log1pf;
  98. +#ifdef __LONG_DOUBLE_128__
  99. using ::log1pl;
  100. +#endif
  101. using ::log2;
  102. using ::log2f;
  103. +#ifdef __LONG_DOUBLE_128__
  104. using ::log2l;
  105. +#endif
  106. using ::logb;
  107. using ::logbf;
  108. +#ifdef __LONG_DOUBLE_128__
  109. using ::logbl;
  110. +#endif
  111. using ::lrint;
  112. using ::lrintf;
  113. +#ifdef __LONG_DOUBLE_128__
  114. using ::lrintl;
  115. +#endif
  116. using ::lround;
  117. using ::lroundf;
  118. +#ifdef __LONG_DOUBLE_128__
  119. using ::lroundl;
  120. +#endif
  121. using ::nan;
  122. using ::nanf;
  123. +#ifdef __LONG_DOUBLE_128__
  124. using ::nanl;
  125. +#endif
  126. using ::nearbyint;
  127. using ::nearbyintf;
  128. +#ifdef __LONG_DOUBLE_128__
  129. using ::nearbyintl;
  130. +#endif
  131. using ::nextafter;
  132. using ::nextafterf;
  133. +#ifdef __LONG_DOUBLE_128__
  134. using ::nextafterl;
  135. +#endif
  136. using ::nexttoward;
  137. using ::nexttowardf;
  138. +#ifdef __LONG_DOUBLE_128__
  139. using ::nexttowardl;
  140. +#endif
  141. using ::remainder;
  142. using ::remainderf;
  143. +#ifdef __LONG_DOUBLE_128__
  144. using ::remainderl;
  145. +#endif
  146. using ::remquo;
  147. using ::remquof;
  148. +#ifdef __LONG_DOUBLE_128__
  149. using ::remquol;
  150. +#endif
  151. using ::rint;
  152. using ::rintf;
  153. +#ifdef __LONG_DOUBLE_128__
  154. using ::rintl;
  155. +#endif
  156. using ::round;
  157. using ::roundf;
  158. +#ifdef __LONG_DOUBLE_128__
  159. using ::roundl;
  160. +#endif
  161. using ::scalbln;
  162. using ::scalblnf;
  163. +#ifdef __LONG_DOUBLE_128__
  164. using ::scalblnl;
  165. +#endif
  166. using ::scalbn;
  167. using ::scalbnf;
  168. +#ifdef __LONG_DOUBLE_128__
  169. using ::scalbnl;
  170. +#endif
  171. using ::tgamma;
  172. using ::tgammaf;
  173. +#ifdef __LONG_DOUBLE_128__
  174. using ::tgammal;
  175. +#endif
  176. using ::trunc;
  177. using ::truncf;
  178. +#ifdef __LONG_DOUBLE_128__
  179. using ::truncl;
  180. +#endif
  181. /// Additional overloads.
  182. constexpr float
  183. diff -Nur gcc-4.8.3.orig/libstdc++-v3/include/tr1/cmath gcc-4.8.3/libstdc++-v3/include/tr1/cmath
  184. --- gcc-4.8.3.orig/libstdc++-v3/include/tr1/cmath 2013-02-03 18:54:05.000000000 +0100
  185. +++ gcc-4.8.3/libstdc++-v3/include/tr1/cmath 2014-07-26 12:58:43.652151897 +0200
  186. @@ -158,143 +158,213 @@
  187. // functions
  188. using ::acosh;
  189. using ::acoshf;
  190. +#ifdef __LONG_DOUBLE_128__
  191. using ::acoshl;
  192. +#endif
  193. using ::asinh;
  194. using ::asinhf;
  195. +#ifdef __LONG_DOUBLE_128__
  196. using ::asinhl;
  197. +#endif
  198. using ::atanh;
  199. using ::atanhf;
  200. +#ifdef __LONG_DOUBLE_128__
  201. using ::atanhl;
  202. +#endif
  203. using ::cbrt;
  204. using ::cbrtf;
  205. +#ifdef __LONG_DOUBLE_128__
  206. using ::cbrtl;
  207. +#endif
  208. using ::copysign;
  209. using ::copysignf;
  210. +#ifdef __LONG_DOUBLE_128__
  211. using ::copysignl;
  212. +#endif
  213. using ::erf;
  214. using ::erff;
  215. +#ifdef __LONG_DOUBLE_128__
  216. using ::erfl;
  217. +#endif
  218. using ::erfc;
  219. using ::erfcf;
  220. +#ifdef __LONG_DOUBLE_128__
  221. using ::erfcl;
  222. +#endif
  223. using ::exp2;
  224. using ::exp2f;
  225. +#ifdef __LONG_DOUBLE_128__
  226. using ::exp2l;
  227. +#endif
  228. using ::expm1;
  229. using ::expm1f;
  230. +#ifdef __LONG_DOUBLE_128__
  231. using ::expm1l;
  232. +#endif
  233. using ::fdim;
  234. using ::fdimf;
  235. +#ifdef __LONG_DOUBLE_128__
  236. using ::fdiml;
  237. +#endif
  238. using ::fma;
  239. using ::fmaf;
  240. +#ifdef __LONG_DOUBLE_128__
  241. using ::fmal;
  242. +#endif
  243. using ::fmax;
  244. using ::fmaxf;
  245. +#ifdef __LONG_DOUBLE_128__
  246. using ::fmaxl;
  247. +#endif
  248. using ::fmin;
  249. using ::fminf;
  250. +#ifdef __LONG_DOUBLE_128__
  251. using ::fminl;
  252. +#endif
  253. using ::hypot;
  254. using ::hypotf;
  255. +#ifdef __LONG_DOUBLE_128__
  256. using ::hypotl;
  257. +#endif
  258. using ::ilogb;
  259. using ::ilogbf;
  260. +#ifdef __LONG_DOUBLE_128__
  261. using ::ilogbl;
  262. +#endif
  263. using ::lgamma;
  264. using ::lgammaf;
  265. +#ifdef __LONG_DOUBLE_128__
  266. using ::lgammal;
  267. +#endif
  268. using ::llrint;
  269. using ::llrintf;
  270. +#ifdef __LONG_DOUBLE_128__
  271. using ::llrintl;
  272. +#endif
  273. using ::llround;
  274. using ::llroundf;
  275. +#ifdef __LONG_DOUBLE_128__
  276. using ::llroundl;
  277. +#endif
  278. using ::log1p;
  279. using ::log1pf;
  280. +#ifdef __LONG_DOUBLE_128__
  281. using ::log1pl;
  282. +#endif
  283. using ::log2;
  284. using ::log2f;
  285. +#ifdef __LONG_DOUBLE_128__
  286. using ::log2l;
  287. +#endif
  288. using ::logb;
  289. using ::logbf;
  290. +#ifdef __LONG_DOUBLE_128__
  291. using ::logbl;
  292. +#endif
  293. using ::lrint;
  294. using ::lrintf;
  295. +#ifdef __LONG_DOUBLE_128__
  296. using ::lrintl;
  297. +#endif
  298. using ::lround;
  299. using ::lroundf;
  300. +#ifdef __LONG_DOUBLE_128__
  301. using ::lroundl;
  302. +#endif
  303. using ::nan;
  304. using ::nanf;
  305. +#ifdef __LONG_DOUBLE_128__
  306. using ::nanl;
  307. +#endif
  308. using ::nearbyint;
  309. using ::nearbyintf;
  310. +#ifdef __LONG_DOUBLE_128__
  311. using ::nearbyintl;
  312. +#endif
  313. using ::nextafter;
  314. using ::nextafterf;
  315. +#ifdef __LONG_DOUBLE_128__
  316. using ::nextafterl;
  317. +#endif
  318. using ::nexttoward;
  319. using ::nexttowardf;
  320. +#ifdef __LONG_DOUBLE_128__
  321. using ::nexttowardl;
  322. +#endif
  323. using ::remainder;
  324. using ::remainderf;
  325. +#ifdef __LONG_DOUBLE_128__
  326. using ::remainderl;
  327. +#endif
  328. using ::remquo;
  329. using ::remquof;
  330. +#ifdef __LONG_DOUBLE_128__
  331. using ::remquol;
  332. +#endif
  333. using ::rint;
  334. using ::rintf;
  335. +#ifdef __LONG_DOUBLE_128__
  336. using ::rintl;
  337. +#endif
  338. using ::round;
  339. using ::roundf;
  340. +#ifdef __LONG_DOUBLE_128__
  341. using ::roundl;
  342. +#endif
  343. using ::scalbln;
  344. using ::scalblnf;
  345. +#ifdef __LONG_DOUBLE_128__
  346. using ::scalblnl;
  347. +#endif
  348. using ::scalbn;
  349. using ::scalbnf;
  350. +#ifdef __LONG_DOUBLE_128__
  351. using ::scalbnl;
  352. +#endif
  353. using ::tgamma;
  354. using ::tgammaf;
  355. +#ifdef __LONG_DOUBLE_128__
  356. using ::tgammal;
  357. +#endif
  358. using ::trunc;
  359. using ::truncf;
  360. +#ifdef __LONG_DOUBLE_128__
  361. using ::truncl;
  362. +#endif
  363. #endif
  364. diff -Nur gcc-4.8.3.orig/libstdc++-v3/include/tr1/cmath.orig gcc-4.8.3/libstdc++-v3/include/tr1/cmath.orig
  365. --- gcc-4.8.3.orig/libstdc++-v3/include/tr1/cmath.orig 1970-01-01 01:00:00.000000000 +0100
  366. +++ gcc-4.8.3/libstdc++-v3/include/tr1/cmath.orig 2013-02-03 18:54:05.000000000 +0100
  367. @@ -0,0 +1,1440 @@
  368. +// TR1 cmath -*- C++ -*-
  369. +
  370. +// Copyright (C) 2006-2013 Free Software Foundation, Inc.
  371. +//
  372. +// This file is part of the GNU ISO C++ Library. This library is free
  373. +// software; you can redistribute it and/or modify it under the
  374. +// terms of the GNU General Public License as published by the
  375. +// Free Software Foundation; either version 3, or (at your option)
  376. +// any later version.
  377. +
  378. +// This library is distributed in the hope that it will be useful,
  379. +// but WITHOUT ANY WARRANTY; without even the implied warranty of
  380. +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  381. +// GNU General Public License for more details.
  382. +
  383. +// Under Section 7 of GPL version 3, you are granted additional
  384. +// permissions described in the GCC Runtime Library Exception, version
  385. +// 3.1, as published by the Free Software Foundation.
  386. +
  387. +// You should have received a copy of the GNU General Public License and
  388. +// a copy of the GCC Runtime Library Exception along with this program;
  389. +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
  390. +// <http://www.gnu.org/licenses/>.
  391. +
  392. +/** @file tr1/cmath
  393. + * This is a TR1 C++ Library header.
  394. + */
  395. +
  396. +#ifndef _GLIBCXX_TR1_CMATH
  397. +#define _GLIBCXX_TR1_CMATH 1
  398. +
  399. +#pragma GCC system_header
  400. +
  401. +#include <cmath>
  402. +
  403. +#ifdef _GLIBCXX_USE_C99_MATH_TR1
  404. +
  405. +#undef acosh
  406. +#undef acoshf
  407. +#undef acoshl
  408. +#undef asinh
  409. +#undef asinhf
  410. +#undef asinhl
  411. +#undef atanh
  412. +#undef atanhf
  413. +#undef atanhl
  414. +#undef cbrt
  415. +#undef cbrtf
  416. +#undef cbrtl
  417. +#undef copysign
  418. +#undef copysignf
  419. +#undef copysignl
  420. +#undef erf
  421. +#undef erff
  422. +#undef erfl
  423. +#undef erfc
  424. +#undef erfcf
  425. +#undef erfcl
  426. +#undef exp2
  427. +#undef exp2f
  428. +#undef exp2l
  429. +#undef expm1
  430. +#undef expm1f
  431. +#undef expm1l
  432. +#undef fdim
  433. +#undef fdimf
  434. +#undef fdiml
  435. +#undef fma
  436. +#undef fmaf
  437. +#undef fmal
  438. +#undef fmax
  439. +#undef fmaxf
  440. +#undef fmaxl
  441. +#undef fmin
  442. +#undef fminf
  443. +#undef fminl
  444. +#undef hypot
  445. +#undef hypotf
  446. +#undef hypotl
  447. +#undef ilogb
  448. +#undef ilogbf
  449. +#undef ilogbl
  450. +#undef lgamma
  451. +#undef lgammaf
  452. +#undef lgammal
  453. +#undef llrint
  454. +#undef llrintf
  455. +#undef llrintl
  456. +#undef llround
  457. +#undef llroundf
  458. +#undef llroundl
  459. +#undef log1p
  460. +#undef log1pf
  461. +#undef log1pl
  462. +#undef log2
  463. +#undef log2f
  464. +#undef log2l
  465. +#undef logb
  466. +#undef logbf
  467. +#undef logbl
  468. +#undef lrint
  469. +#undef lrintf
  470. +#undef lrintl
  471. +#undef lround
  472. +#undef lroundf
  473. +#undef lroundl
  474. +#undef nan
  475. +#undef nanf
  476. +#undef nanl
  477. +#undef nearbyint
  478. +#undef nearbyintf
  479. +#undef nearbyintl
  480. +#undef nextafter
  481. +#undef nextafterf
  482. +#undef nextafterl
  483. +#undef nexttoward
  484. +#undef nexttowardf
  485. +#undef nexttowardl
  486. +#undef remainder
  487. +#undef remainderf
  488. +#undef remainderl
  489. +#undef remquo
  490. +#undef remquof
  491. +#undef remquol
  492. +#undef rint
  493. +#undef rintf
  494. +#undef rintl
  495. +#undef round
  496. +#undef roundf
  497. +#undef roundl
  498. +#undef scalbln
  499. +#undef scalblnf
  500. +#undef scalblnl
  501. +#undef scalbn
  502. +#undef scalbnf
  503. +#undef scalbnl
  504. +#undef tgamma
  505. +#undef tgammaf
  506. +#undef tgammal
  507. +#undef trunc
  508. +#undef truncf
  509. +#undef truncl
  510. +
  511. +#endif
  512. +
  513. +namespace std _GLIBCXX_VISIBILITY(default)
  514. +{
  515. +namespace tr1
  516. +{
  517. +_GLIBCXX_BEGIN_NAMESPACE_VERSION
  518. +
  519. +#if _GLIBCXX_USE_C99_MATH_TR1
  520. +
  521. + // types
  522. + using ::double_t;
  523. + using ::float_t;
  524. +
  525. + // functions
  526. + using ::acosh;
  527. + using ::acoshf;
  528. + using ::acoshl;
  529. +
  530. + using ::asinh;
  531. + using ::asinhf;
  532. + using ::asinhl;
  533. +
  534. + using ::atanh;
  535. + using ::atanhf;
  536. + using ::atanhl;
  537. +
  538. + using ::cbrt;
  539. + using ::cbrtf;
  540. + using ::cbrtl;
  541. +
  542. + using ::copysign;
  543. + using ::copysignf;
  544. + using ::copysignl;
  545. +
  546. + using ::erf;
  547. + using ::erff;
  548. + using ::erfl;
  549. +
  550. + using ::erfc;
  551. + using ::erfcf;
  552. + using ::erfcl;
  553. +
  554. + using ::exp2;
  555. + using ::exp2f;
  556. + using ::exp2l;
  557. +
  558. + using ::expm1;
  559. + using ::expm1f;
  560. + using ::expm1l;
  561. +
  562. + using ::fdim;
  563. + using ::fdimf;
  564. + using ::fdiml;
  565. +
  566. + using ::fma;
  567. + using ::fmaf;
  568. + using ::fmal;
  569. +
  570. + using ::fmax;
  571. + using ::fmaxf;
  572. + using ::fmaxl;
  573. +
  574. + using ::fmin;
  575. + using ::fminf;
  576. + using ::fminl;
  577. +
  578. + using ::hypot;
  579. + using ::hypotf;
  580. + using ::hypotl;
  581. +
  582. + using ::ilogb;
  583. + using ::ilogbf;
  584. + using ::ilogbl;
  585. +
  586. + using ::lgamma;
  587. + using ::lgammaf;
  588. + using ::lgammal;
  589. +
  590. + using ::llrint;
  591. + using ::llrintf;
  592. + using ::llrintl;
  593. +
  594. + using ::llround;
  595. + using ::llroundf;
  596. + using ::llroundl;
  597. +
  598. + using ::log1p;
  599. + using ::log1pf;
  600. + using ::log1pl;
  601. +
  602. + using ::log2;
  603. + using ::log2f;
  604. + using ::log2l;
  605. +
  606. + using ::logb;
  607. + using ::logbf;
  608. + using ::logbl;
  609. +
  610. + using ::lrint;
  611. + using ::lrintf;
  612. + using ::lrintl;
  613. +
  614. + using ::lround;
  615. + using ::lroundf;
  616. + using ::lroundl;
  617. +
  618. + using ::nan;
  619. + using ::nanf;
  620. + using ::nanl;
  621. +
  622. + using ::nearbyint;
  623. + using ::nearbyintf;
  624. + using ::nearbyintl;
  625. +
  626. + using ::nextafter;
  627. + using ::nextafterf;
  628. + using ::nextafterl;
  629. +
  630. + using ::nexttoward;
  631. + using ::nexttowardf;
  632. + using ::nexttowardl;
  633. +
  634. + using ::remainder;
  635. + using ::remainderf;
  636. + using ::remainderl;
  637. +
  638. + using ::remquo;
  639. + using ::remquof;
  640. + using ::remquol;
  641. +
  642. + using ::rint;
  643. + using ::rintf;
  644. + using ::rintl;
  645. +
  646. + using ::round;
  647. + using ::roundf;
  648. + using ::roundl;
  649. +
  650. + using ::scalbln;
  651. + using ::scalblnf;
  652. + using ::scalblnl;
  653. +
  654. + using ::scalbn;
  655. + using ::scalbnf;
  656. + using ::scalbnl;
  657. +
  658. + using ::tgamma;
  659. + using ::tgammaf;
  660. + using ::tgammal;
  661. +
  662. + using ::trunc;
  663. + using ::truncf;
  664. + using ::truncl;
  665. +
  666. +#endif
  667. +
  668. +#if _GLIBCXX_USE_C99_MATH
  669. +#if !_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC
  670. +
  671. + /// Function template definitions [8.16.3].
  672. + template<typename _Tp>
  673. + inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
  674. + int>::__type
  675. + fpclassify(_Tp __f)
  676. + {
  677. + typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
  678. + return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
  679. + FP_SUBNORMAL, FP_ZERO, __type(__f));
  680. + }
  681. +
  682. + template<typename _Tp>
  683. + inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
  684. + int>::__type
  685. + isfinite(_Tp __f)
  686. + {
  687. + typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
  688. + return __builtin_isfinite(__type(__f));
  689. + }
  690. +
  691. + template<typename _Tp>
  692. + inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
  693. + int>::__type
  694. + isinf(_Tp __f)
  695. + {
  696. + typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
  697. + return __builtin_isinf(__type(__f));
  698. + }
  699. +
  700. + template<typename _Tp>
  701. + inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
  702. + int>::__type
  703. + isnan(_Tp __f)
  704. + {
  705. + typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
  706. + return __builtin_isnan(__type(__f));
  707. + }
  708. +
  709. + template<typename _Tp>
  710. + inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
  711. + int>::__type
  712. + isnormal(_Tp __f)
  713. + {
  714. + typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
  715. + return __builtin_isnormal(__type(__f));
  716. + }
  717. +
  718. + template<typename _Tp>
  719. + inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
  720. + int>::__type
  721. + signbit(_Tp __f)
  722. + {
  723. + typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
  724. + return __builtin_signbit(__type(__f));
  725. + }
  726. +
  727. + template<typename _Tp>
  728. + inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
  729. + int>::__type
  730. + isgreater(_Tp __f1, _Tp __f2)
  731. + {
  732. + typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
  733. + return __builtin_isgreater(__type(__f1), __type(__f2));
  734. + }
  735. +
  736. + template<typename _Tp>
  737. + inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
  738. + int>::__type
  739. + isgreaterequal(_Tp __f1, _Tp __f2)
  740. + {
  741. + typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
  742. + return __builtin_isgreaterequal(__type(__f1), __type(__f2));
  743. + }
  744. +
  745. + template<typename _Tp>
  746. + inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
  747. + int>::__type
  748. + isless(_Tp __f1, _Tp __f2)
  749. + {
  750. + typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
  751. + return __builtin_isless(__type(__f1), __type(__f2));
  752. + }
  753. +
  754. + template<typename _Tp>
  755. + inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
  756. + int>::__type
  757. + islessequal(_Tp __f1, _Tp __f2)
  758. + {
  759. + typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
  760. + return __builtin_islessequal(__type(__f1), __type(__f2));
  761. + }
  762. +
  763. + template<typename _Tp>
  764. + inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
  765. + int>::__type
  766. + islessgreater(_Tp __f1, _Tp __f2)
  767. + {
  768. + typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
  769. + return __builtin_islessgreater(__type(__f1), __type(__f2));
  770. + }
  771. +
  772. + template<typename _Tp>
  773. + inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
  774. + int>::__type
  775. + isunordered(_Tp __f1, _Tp __f2)
  776. + {
  777. + typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
  778. + return __builtin_isunordered(__type(__f1), __type(__f2));
  779. + }
  780. +
  781. +#endif
  782. +#endif
  783. +
  784. +#if _GLIBCXX_USE_C99_MATH_TR1
  785. +
  786. + /// Additional overloads [8.16.4].
  787. + using std::acos;
  788. +
  789. + inline float
  790. + acosh(float __x)
  791. + { return __builtin_acoshf(__x); }
  792. +
  793. + inline long double
  794. + acosh(long double __x)
  795. + { return __builtin_acoshl(__x); }
  796. +
  797. + template<typename _Tp>
  798. + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
  799. + double>::__type
  800. + acosh(_Tp __x)
  801. + { return __builtin_acosh(__x); }
  802. +
  803. + using std::asin;
  804. +
  805. + inline float
  806. + asinh(float __x)
  807. + { return __builtin_asinhf(__x); }
  808. +
  809. + inline long double
  810. + asinh(long double __x)
  811. + { return __builtin_asinhl(__x); }
  812. +
  813. + template<typename _Tp>
  814. + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
  815. + double>::__type
  816. + asinh(_Tp __x)
  817. + { return __builtin_asinh(__x); }
  818. +
  819. + using std::atan;
  820. + using std::atan2;
  821. +
  822. + inline float
  823. + atanh(float __x)
  824. + { return __builtin_atanhf(__x); }
  825. +
  826. + inline long double
  827. + atanh(long double __x)
  828. + { return __builtin_atanhl(__x); }
  829. +
  830. + template<typename _Tp>
  831. + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
  832. + double>::__type
  833. + atanh(_Tp __x)
  834. + { return __builtin_atanh(__x); }
  835. +
  836. + inline float
  837. + cbrt(float __x)
  838. + { return __builtin_cbrtf(__x); }
  839. +
  840. + inline long double
  841. + cbrt(long double __x)
  842. + { return __builtin_cbrtl(__x); }
  843. +
  844. + template<typename _Tp>
  845. + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
  846. + double>::__type
  847. + cbrt(_Tp __x)
  848. + { return __builtin_cbrt(__x); }
  849. +
  850. + using std::ceil;
  851. +
  852. + inline float
  853. + copysign(float __x, float __y)
  854. + { return __builtin_copysignf(__x, __y); }
  855. +
  856. + inline long double
  857. + copysign(long double __x, long double __y)
  858. + { return __builtin_copysignl(__x, __y); }
  859. +
  860. + template<typename _Tp, typename _Up>
  861. + inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
  862. + copysign(_Tp __x, _Up __y)
  863. + {
  864. + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
  865. + return copysign(__type(__x), __type(__y));
  866. + }
  867. +
  868. + using std::cos;
  869. + using std::cosh;
  870. +
  871. + inline float
  872. + erf(float __x)
  873. + { return __builtin_erff(__x); }
  874. +
  875. + inline long double
  876. + erf(long double __x)
  877. + { return __builtin_erfl(__x); }
  878. +
  879. + template<typename _Tp>
  880. + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
  881. + double>::__type
  882. + erf(_Tp __x)
  883. + { return __builtin_erf(__x); }
  884. +
  885. + inline float
  886. + erfc(float __x)
  887. + { return __builtin_erfcf(__x); }
  888. +
  889. + inline long double
  890. + erfc(long double __x)
  891. + { return __builtin_erfcl(__x); }
  892. +
  893. + template<typename _Tp>
  894. + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
  895. + double>::__type
  896. + erfc(_Tp __x)
  897. + { return __builtin_erfc(__x); }
  898. +
  899. + using std::exp;
  900. +
  901. + inline float
  902. + exp2(float __x)
  903. + { return __builtin_exp2f(__x); }
  904. +
  905. + inline long double
  906. + exp2(long double __x)
  907. + { return __builtin_exp2l(__x); }
  908. +
  909. + template<typename _Tp>
  910. + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
  911. + double>::__type
  912. + exp2(_Tp __x)
  913. + { return __builtin_exp2(__x); }
  914. +
  915. + inline float
  916. + expm1(float __x)
  917. + { return __builtin_expm1f(__x); }
  918. +
  919. + inline long double
  920. + expm1(long double __x)
  921. + { return __builtin_expm1l(__x); }
  922. +
  923. + template<typename _Tp>
  924. + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
  925. + double>::__type
  926. + expm1(_Tp __x)
  927. + { return __builtin_expm1(__x); }
  928. +
  929. + // Note: we deal with fabs in a special way, because an using std::fabs
  930. + // would bring in also the overloads for complex types, which in C++0x
  931. + // mode have a different return type.
  932. + // With __CORRECT_ISO_CPP_MATH_H_PROTO, math.h imports std::fabs in the
  933. + // global namespace after the declarations of the float / double / long
  934. + // double overloads but before the std::complex overloads.
  935. + using ::fabs;
  936. +
  937. +#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
  938. + inline float
  939. + fabs(float __x)
  940. + { return __builtin_fabsf(__x); }
  941. +
  942. + inline long double
  943. + fabs(long double __x)
  944. + { return __builtin_fabsl(__x); }
  945. +
  946. + template<typename _Tp>
  947. + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
  948. + double>::__type
  949. + fabs(_Tp __x)
  950. + { return __builtin_fabs(__x); }
  951. +#endif
  952. +
  953. + inline float
  954. + fdim(float __x, float __y)
  955. + { return __builtin_fdimf(__x, __y); }
  956. +
  957. + inline long double
  958. + fdim(long double __x, long double __y)
  959. + { return __builtin_fdiml(__x, __y); }
  960. +
  961. + template<typename _Tp, typename _Up>
  962. + inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
  963. + fdim(_Tp __x, _Up __y)
  964. + {
  965. + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
  966. + return fdim(__type(__x), __type(__y));
  967. + }
  968. +
  969. + using std::floor;
  970. +
  971. + inline float
  972. + fma(float __x, float __y, float __z)
  973. + { return __builtin_fmaf(__x, __y, __z); }
  974. +
  975. + inline long double
  976. + fma(long double __x, long double __y, long double __z)
  977. + { return __builtin_fmal(__x, __y, __z); }
  978. +
  979. + template<typename _Tp, typename _Up, typename _Vp>
  980. + inline typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type
  981. + fma(_Tp __x, _Up __y, _Vp __z)
  982. + {
  983. + typedef typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type __type;
  984. + return fma(__type(__x), __type(__y), __type(__z));
  985. + }
  986. +
  987. + inline float
  988. + fmax(float __x, float __y)
  989. + { return __builtin_fmaxf(__x, __y); }
  990. +
  991. + inline long double
  992. + fmax(long double __x, long double __y)
  993. + { return __builtin_fmaxl(__x, __y); }
  994. +
  995. + template<typename _Tp, typename _Up>
  996. + inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
  997. + fmax(_Tp __x, _Up __y)
  998. + {
  999. + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
  1000. + return fmax(__type(__x), __type(__y));
  1001. + }
  1002. +
  1003. + inline float
  1004. + fmin(float __x, float __y)
  1005. + { return __builtin_fminf(__x, __y); }
  1006. +
  1007. + inline long double
  1008. + fmin(long double __x, long double __y)
  1009. + { return __builtin_fminl(__x, __y); }
  1010. +
  1011. + template<typename _Tp, typename _Up>
  1012. + inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
  1013. + fmin(_Tp __x, _Up __y)
  1014. + {
  1015. + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
  1016. + return fmin(__type(__x), __type(__y));
  1017. + }
  1018. +
  1019. + using std::fmod;
  1020. + using std::frexp;
  1021. +
  1022. + inline float
  1023. + hypot(float __x, float __y)
  1024. + { return __builtin_hypotf(__x, __y); }
  1025. +
  1026. + inline long double
  1027. + hypot(long double __x, long double __y)
  1028. + { return __builtin_hypotl(__x, __y); }
  1029. +
  1030. + template<typename _Tp, typename _Up>
  1031. + inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
  1032. + hypot(_Tp __y, _Up __x)
  1033. + {
  1034. + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
  1035. + return hypot(__type(__y), __type(__x));
  1036. + }
  1037. +
  1038. + inline int
  1039. + ilogb(float __x)
  1040. + { return __builtin_ilogbf(__x); }
  1041. +
  1042. + inline int
  1043. + ilogb(long double __x)
  1044. + { return __builtin_ilogbl(__x); }
  1045. +
  1046. + template<typename _Tp>
  1047. + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
  1048. + int>::__type
  1049. + ilogb(_Tp __x)
  1050. + { return __builtin_ilogb(__x); }
  1051. +
  1052. + using std::ldexp;
  1053. +
  1054. + inline float
  1055. + lgamma(float __x)
  1056. + { return __builtin_lgammaf(__x); }
  1057. +
  1058. + inline long double
  1059. + lgamma(long double __x)
  1060. + { return __builtin_lgammal(__x); }
  1061. +
  1062. + template<typename _Tp>
  1063. + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
  1064. + double>::__type
  1065. + lgamma(_Tp __x)
  1066. + { return __builtin_lgamma(__x); }
  1067. +
  1068. + inline long long
  1069. + llrint(float __x)
  1070. + { return __builtin_llrintf(__x); }
  1071. +
  1072. + inline long long
  1073. + llrint(long double __x)
  1074. + { return __builtin_llrintl(__x); }
  1075. +
  1076. + template<typename _Tp>
  1077. + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
  1078. + long long>::__type
  1079. + llrint(_Tp __x)
  1080. + { return __builtin_llrint(__x); }
  1081. +
  1082. + inline long long
  1083. + llround(float __x)
  1084. + { return __builtin_llroundf(__x); }
  1085. +
  1086. + inline long long
  1087. + llround(long double __x)
  1088. + { return __builtin_llroundl(__x); }
  1089. +
  1090. + template<typename _Tp>
  1091. + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
  1092. + long long>::__type
  1093. + llround(_Tp __x)
  1094. + { return __builtin_llround(__x); }
  1095. +
  1096. + using std::log;
  1097. + using std::log10;
  1098. +
  1099. + inline float
  1100. + log1p(float __x)
  1101. + { return __builtin_log1pf(__x); }
  1102. +
  1103. + inline long double
  1104. + log1p(long double __x)
  1105. + { return __builtin_log1pl(__x); }
  1106. +
  1107. + template<typename _Tp>
  1108. + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
  1109. + double>::__type
  1110. + log1p(_Tp __x)
  1111. + { return __builtin_log1p(__x); }
  1112. +
  1113. + // DR 568.
  1114. + inline float
  1115. + log2(float __x)
  1116. + { return __builtin_log2f(__x); }
  1117. +
  1118. + inline long double
  1119. + log2(long double __x)
  1120. + { return __builtin_log2l(__x); }
  1121. +
  1122. + template<typename _Tp>
  1123. + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
  1124. + double>::__type
  1125. + log2(_Tp __x)
  1126. + { return __builtin_log2(__x); }
  1127. +
  1128. + inline float
  1129. + logb(float __x)
  1130. + { return __builtin_logbf(__x); }
  1131. +
  1132. + inline long double
  1133. + logb(long double __x)
  1134. + { return __builtin_logbl(__x); }
  1135. +
  1136. + template<typename _Tp>
  1137. + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
  1138. + double>::__type
  1139. + logb(_Tp __x)
  1140. + {
  1141. + return __builtin_logb(__x);
  1142. + }
  1143. +
  1144. + inline long
  1145. + lrint(float __x)
  1146. + { return __builtin_lrintf(__x); }
  1147. +
  1148. + inline long
  1149. + lrint(long double __x)
  1150. + { return __builtin_lrintl(__x); }
  1151. +
  1152. + template<typename _Tp>
  1153. + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
  1154. + long>::__type
  1155. + lrint(_Tp __x)
  1156. + { return __builtin_lrint(__x); }
  1157. +
  1158. + inline long
  1159. + lround(float __x)
  1160. + { return __builtin_lroundf(__x); }
  1161. +
  1162. + inline long
  1163. + lround(long double __x)
  1164. + { return __builtin_lroundl(__x); }
  1165. +
  1166. + template<typename _Tp>
  1167. + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
  1168. + long>::__type
  1169. + lround(_Tp __x)
  1170. + { return __builtin_lround(__x); }
  1171. +
  1172. + inline float
  1173. + nearbyint(float __x)
  1174. + { return __builtin_nearbyintf(__x); }
  1175. +
  1176. + inline long double
  1177. + nearbyint(long double __x)
  1178. + { return __builtin_nearbyintl(__x); }
  1179. +
  1180. + template<typename _Tp>
  1181. + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
  1182. + double>::__type
  1183. + nearbyint(_Tp __x)
  1184. + { return __builtin_nearbyint(__x); }
  1185. +
  1186. + inline float
  1187. + nextafter(float __x, float __y)
  1188. + { return __builtin_nextafterf(__x, __y); }
  1189. +
  1190. + inline long double
  1191. + nextafter(long double __x, long double __y)
  1192. + { return __builtin_nextafterl(__x, __y); }
  1193. +
  1194. + template<typename _Tp, typename _Up>
  1195. + inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
  1196. + nextafter(_Tp __x, _Up __y)
  1197. + {
  1198. + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
  1199. + return nextafter(__type(__x), __type(__y));
  1200. + }
  1201. +
  1202. + inline float
  1203. + nexttoward(float __x, long double __y)
  1204. + { return __builtin_nexttowardf(__x, __y); }
  1205. +
  1206. + inline long double
  1207. + nexttoward(long double __x, long double __y)
  1208. + { return __builtin_nexttowardl(__x, __y); }
  1209. +
  1210. + template<typename _Tp>
  1211. + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
  1212. + double>::__type
  1213. + nexttoward(_Tp __x, long double __y)
  1214. + { return __builtin_nexttoward(__x, __y); }
  1215. +
  1216. + // DR 550. What should the return type of pow(float,int) be?
  1217. + // NB: C++0x and TR1 != C++03.
  1218. + // using std::pow;
  1219. +
  1220. + inline float
  1221. + remainder(float __x, float __y)
  1222. + { return __builtin_remainderf(__x, __y); }
  1223. +
  1224. + inline long double
  1225. + remainder(long double __x, long double __y)
  1226. + { return __builtin_remainderl(__x, __y); }
  1227. +
  1228. + template<typename _Tp, typename _Up>
  1229. + inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
  1230. + remainder(_Tp __x, _Up __y)
  1231. + {
  1232. + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
  1233. + return remainder(__type(__x), __type(__y));
  1234. + }
  1235. +
  1236. + inline float
  1237. + remquo(float __x, float __y, int* __pquo)
  1238. + { return __builtin_remquof(__x, __y, __pquo); }
  1239. +
  1240. + inline long double
  1241. + remquo(long double __x, long double __y, int* __pquo)
  1242. + { return __builtin_remquol(__x, __y, __pquo); }
  1243. +
  1244. + template<typename _Tp, typename _Up>
  1245. + inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
  1246. + remquo(_Tp __x, _Up __y, int* __pquo)
  1247. + {
  1248. + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
  1249. + return remquo(__type(__x), __type(__y), __pquo);
  1250. + }
  1251. +
  1252. + inline float
  1253. + rint(float __x)
  1254. + { return __builtin_rintf(__x); }
  1255. +
  1256. + inline long double
  1257. + rint(long double __x)
  1258. + { return __builtin_rintl(__x); }
  1259. +
  1260. + template<typename _Tp>
  1261. + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
  1262. + double>::__type
  1263. + rint(_Tp __x)
  1264. + { return __builtin_rint(__x); }
  1265. +
  1266. + inline float
  1267. + round(float __x)
  1268. + { return __builtin_roundf(__x); }
  1269. +
  1270. + inline long double
  1271. + round(long double __x)
  1272. + { return __builtin_roundl(__x); }
  1273. +
  1274. + template<typename _Tp>
  1275. + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
  1276. + double>::__type
  1277. + round(_Tp __x)
  1278. + { return __builtin_round(__x); }
  1279. +
  1280. + inline float
  1281. + scalbln(float __x, long __ex)
  1282. + { return __builtin_scalblnf(__x, __ex); }
  1283. +
  1284. + inline long double
  1285. + scalbln(long double __x, long __ex)
  1286. + { return __builtin_scalblnl(__x, __ex); }
  1287. +
  1288. + template<typename _Tp>
  1289. + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
  1290. + double>::__type
  1291. + scalbln(_Tp __x, long __ex)
  1292. + { return __builtin_scalbln(__x, __ex); }
  1293. +
  1294. + inline float
  1295. + scalbn(float __x, int __ex)
  1296. + { return __builtin_scalbnf(__x, __ex); }
  1297. +
  1298. + inline long double
  1299. + scalbn(long double __x, int __ex)
  1300. + { return __builtin_scalbnl(__x, __ex); }
  1301. +
  1302. + template<typename _Tp>
  1303. + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
  1304. + double>::__type
  1305. + scalbn(_Tp __x, int __ex)
  1306. + { return __builtin_scalbn(__x, __ex); }
  1307. +
  1308. + using std::sin;
  1309. + using std::sinh;
  1310. + using std::sqrt;
  1311. + using std::tan;
  1312. + using std::tanh;
  1313. +
  1314. + inline float
  1315. + tgamma(float __x)
  1316. + { return __builtin_tgammaf(__x); }
  1317. +
  1318. + inline long double
  1319. + tgamma(long double __x)
  1320. + { return __builtin_tgammal(__x); }
  1321. +
  1322. + template<typename _Tp>
  1323. + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
  1324. + double>::__type
  1325. + tgamma(_Tp __x)
  1326. + { return __builtin_tgamma(__x); }
  1327. +
  1328. + inline float
  1329. + trunc(float __x)
  1330. + { return __builtin_truncf(__x); }
  1331. +
  1332. + inline long double
  1333. + trunc(long double __x)
  1334. + { return __builtin_truncl(__x); }
  1335. +
  1336. + template<typename _Tp>
  1337. + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
  1338. + double>::__type
  1339. + trunc(_Tp __x)
  1340. + { return __builtin_trunc(__x); }
  1341. +
  1342. +#endif
  1343. +_GLIBCXX_END_NAMESPACE_VERSION
  1344. +}
  1345. +}
  1346. +
  1347. +namespace std _GLIBCXX_VISIBILITY(default)
  1348. +{
  1349. +namespace tr1
  1350. +{
  1351. +_GLIBCXX_BEGIN_NAMESPACE_VERSION
  1352. +
  1353. + // DR 550. What should the return type of pow(float,int) be?
  1354. + // NB: C++0x and TR1 != C++03.
  1355. + inline double
  1356. + pow(double __x, double __y)
  1357. + { return std::pow(__x, __y); }
  1358. +
  1359. + inline float
  1360. + pow(float __x, float __y)
  1361. + { return std::pow(__x, __y); }
  1362. +
  1363. + inline long double
  1364. + pow(long double __x, long double __y)
  1365. + { return std::pow(__x, __y); }
  1366. +
  1367. + template<typename _Tp, typename _Up>
  1368. + inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
  1369. + pow(_Tp __x, _Up __y)
  1370. + {
  1371. + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
  1372. + return std::pow(__type(__x), __type(__y));
  1373. + }
  1374. +
  1375. +_GLIBCXX_END_NAMESPACE_VERSION
  1376. +}
  1377. +}
  1378. +
  1379. +#include <bits/stl_algobase.h>
  1380. +#include <limits>
  1381. +#include <tr1/type_traits>
  1382. +
  1383. +#include <tr1/gamma.tcc>
  1384. +#include <tr1/bessel_function.tcc>
  1385. +#include <tr1/beta_function.tcc>
  1386. +#include <tr1/ell_integral.tcc>
  1387. +#include <tr1/exp_integral.tcc>
  1388. +#include <tr1/hypergeometric.tcc>
  1389. +#include <tr1/legendre_function.tcc>
  1390. +#include <tr1/modified_bessel_func.tcc>
  1391. +#include <tr1/poly_hermite.tcc>
  1392. +#include <tr1/poly_laguerre.tcc>
  1393. +#include <tr1/riemann_zeta.tcc>
  1394. +
  1395. +namespace std _GLIBCXX_VISIBILITY(default)
  1396. +{
  1397. +namespace tr1
  1398. +{
  1399. +_GLIBCXX_BEGIN_NAMESPACE_VERSION
  1400. +
  1401. + /**
  1402. + * @defgroup tr1_math_spec_func Mathematical Special Functions
  1403. + * @ingroup numerics
  1404. + *
  1405. + * A collection of advanced mathematical special functions.
  1406. + * @{
  1407. + */
  1408. +
  1409. + inline float
  1410. + assoc_laguerref(unsigned int __n, unsigned int __m, float __x)
  1411. + { return __detail::__assoc_laguerre<float>(__n, __m, __x); }
  1412. +
  1413. + inline long double
  1414. + assoc_laguerrel(unsigned int __n, unsigned int __m, long double __x)
  1415. + {
  1416. + return __detail::__assoc_laguerre<long double>(__n, __m, __x);
  1417. + }
  1418. +
  1419. + /// 5.2.1.1 Associated Laguerre polynomials.
  1420. + template<typename _Tp>
  1421. + inline typename __gnu_cxx::__promote<_Tp>::__type
  1422. + assoc_laguerre(unsigned int __n, unsigned int __m, _Tp __x)
  1423. + {
  1424. + typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
  1425. + return __detail::__assoc_laguerre<__type>(__n, __m, __x);
  1426. + }
  1427. +
  1428. + inline float
  1429. + assoc_legendref(unsigned int __l, unsigned int __m, float __x)
  1430. + { return __detail::__assoc_legendre_p<float>(__l, __m, __x); }
  1431. +
  1432. + inline long double
  1433. + assoc_legendrel(unsigned int __l, unsigned int __m, long double __x)
  1434. + { return __detail::__assoc_legendre_p<long double>(__l, __m, __x); }
  1435. +
  1436. + /// 5.2.1.2 Associated Legendre functions.
  1437. + template<typename _Tp>
  1438. + inline typename __gnu_cxx::__promote<_Tp>::__type
  1439. + assoc_legendre(unsigned int __l, unsigned int __m, _Tp __x)
  1440. + {
  1441. + typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
  1442. + return __detail::__assoc_legendre_p<__type>(__l, __m, __x);
  1443. + }
  1444. +
  1445. + inline float
  1446. + betaf(float __x, float __y)
  1447. + { return __detail::__beta<float>(__x, __y); }
  1448. +
  1449. + inline long double
  1450. + betal(long double __x, long double __y)
  1451. + { return __detail::__beta<long double>(__x, __y); }
  1452. +
  1453. + /// 5.2.1.3 Beta functions.
  1454. + template<typename _Tpx, typename _Tpy>
  1455. + inline typename __gnu_cxx::__promote_2<_Tpx, _Tpy>::__type
  1456. + beta(_Tpx __x, _Tpy __y)
  1457. + {
  1458. + typedef typename __gnu_cxx::__promote_2<_Tpx, _Tpy>::__type __type;
  1459. + return __detail::__beta<__type>(__x, __y);
  1460. + }
  1461. +
  1462. + inline float
  1463. + comp_ellint_1f(float __k)
  1464. + { return __detail::__comp_ellint_1<float>(__k); }
  1465. +
  1466. + inline long double
  1467. + comp_ellint_1l(long double __k)
  1468. + { return __detail::__comp_ellint_1<long double>(__k); }
  1469. +
  1470. + /// 5.2.1.4 Complete elliptic integrals of the first kind.
  1471. + template<typename _Tp>
  1472. + inline typename __gnu_cxx::__promote<_Tp>::__type
  1473. + comp_ellint_1(_Tp __k)
  1474. + {
  1475. + typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
  1476. + return __detail::__comp_ellint_1<__type>(__k);
  1477. + }
  1478. +
  1479. + inline float
  1480. + comp_ellint_2f(float __k)
  1481. + { return __detail::__comp_ellint_2<float>(__k); }
  1482. +
  1483. + inline long double
  1484. + comp_ellint_2l(long double __k)
  1485. + { return __detail::__comp_ellint_2<long double>(__k); }
  1486. +
  1487. + /// 5.2.1.5 Complete elliptic integrals of the second kind.
  1488. + template<typename _Tp>
  1489. + inline typename __gnu_cxx::__promote<_Tp>::__type
  1490. + comp_ellint_2(_Tp __k)
  1491. + {
  1492. + typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
  1493. + return __detail::__comp_ellint_2<__type>(__k);
  1494. + }
  1495. +
  1496. + inline float
  1497. + comp_ellint_3f(float __k, float __nu)
  1498. + { return __detail::__comp_ellint_3<float>(__k, __nu); }
  1499. +
  1500. + inline long double
  1501. + comp_ellint_3l(long double __k, long double __nu)
  1502. + { return __detail::__comp_ellint_3<long double>(__k, __nu); }
  1503. +
  1504. + /// 5.2.1.6 Complete elliptic integrals of the third kind.
  1505. + template<typename _Tp, typename _Tpn>
  1506. + inline typename __gnu_cxx::__promote_2<_Tp, _Tpn>::__type
  1507. + comp_ellint_3(_Tp __k, _Tpn __nu)
  1508. + {
  1509. + typedef typename __gnu_cxx::__promote_2<_Tp, _Tpn>::__type __type;
  1510. + return __detail::__comp_ellint_3<__type>(__k, __nu);
  1511. + }
  1512. +
  1513. + inline float
  1514. + conf_hypergf(float __a, float __c, float __x)
  1515. + { return __detail::__conf_hyperg<float>(__a, __c, __x); }
  1516. +
  1517. + inline long double
  1518. + conf_hypergl(long double __a, long double __c, long double __x)
  1519. + { return __detail::__conf_hyperg<long double>(__a, __c, __x); }
  1520. +
  1521. + /// 5.2.1.7 Confluent hypergeometric functions.
  1522. + template<typename _Tpa, typename _Tpc, typename _Tp>
  1523. + inline typename __gnu_cxx::__promote_3<_Tpa, _Tpc, _Tp>::__type
  1524. + conf_hyperg(_Tpa __a, _Tpc __c, _Tp __x)
  1525. + {
  1526. + typedef typename __gnu_cxx::__promote_3<_Tpa, _Tpc, _Tp>::__type __type;
  1527. + return __detail::__conf_hyperg<__type>(__a, __c, __x);
  1528. + }
  1529. +
  1530. + inline float
  1531. + cyl_bessel_if(float __nu, float __x)
  1532. + { return __detail::__cyl_bessel_i<float>(__nu, __x); }
  1533. +
  1534. + inline long double
  1535. + cyl_bessel_il(long double __nu, long double __x)
  1536. + { return __detail::__cyl_bessel_i<long double>(__nu, __x); }
  1537. +
  1538. + /// 5.2.1.8 Regular modified cylindrical Bessel functions.
  1539. + template<typename _Tpnu, typename _Tp>
  1540. + inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type
  1541. + cyl_bessel_i(_Tpnu __nu, _Tp __x)
  1542. + {
  1543. + typedef typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type;
  1544. + return __detail::__cyl_bessel_i<__type>(__nu, __x);
  1545. + }
  1546. +
  1547. + inline float
  1548. + cyl_bessel_jf(float __nu, float __x)
  1549. + { return __detail::__cyl_bessel_j<float>(__nu, __x); }
  1550. +
  1551. + inline long double
  1552. + cyl_bessel_jl(long double __nu, long double __x)
  1553. + { return __detail::__cyl_bessel_j<long double>(__nu, __x); }
  1554. +
  1555. + /// 5.2.1.9 Cylindrical Bessel functions (of the first kind).
  1556. + template<typename _Tpnu, typename _Tp>
  1557. + inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type
  1558. + cyl_bessel_j(_Tpnu __nu, _Tp __x)
  1559. + {
  1560. + typedef typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type;
  1561. + return __detail::__cyl_bessel_j<__type>(__nu, __x);
  1562. + }
  1563. +
  1564. + inline float
  1565. + cyl_bessel_kf(float __nu, float __x)
  1566. + { return __detail::__cyl_bessel_k<float>(__nu, __x); }
  1567. +
  1568. + inline long double
  1569. + cyl_bessel_kl(long double __nu, long double __x)
  1570. + { return __detail::__cyl_bessel_k<long double>(__nu, __x); }
  1571. +
  1572. + /// 5.2.1.10 Irregular modified cylindrical Bessel functions.
  1573. + template<typename _Tpnu, typename _Tp>
  1574. + inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type
  1575. + cyl_bessel_k(_Tpnu __nu, _Tp __x)
  1576. + {
  1577. + typedef typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type;
  1578. + return __detail::__cyl_bessel_k<__type>(__nu, __x);
  1579. + }
  1580. +
  1581. + inline float
  1582. + cyl_neumannf(float __nu, float __x)
  1583. + { return __detail::__cyl_neumann_n<float>(__nu, __x); }
  1584. +
  1585. + inline long double
  1586. + cyl_neumannl(long double __nu, long double __x)
  1587. + { return __detail::__cyl_neumann_n<long double>(__nu, __x); }
  1588. +
  1589. + /// 5.2.1.11 Cylindrical Neumann functions.
  1590. + template<typename _Tpnu, typename _Tp>
  1591. + inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type
  1592. + cyl_neumann(_Tpnu __nu, _Tp __x)
  1593. + {
  1594. + typedef typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type;
  1595. + return __detail::__cyl_neumann_n<__type>(__nu, __x);
  1596. + }
  1597. +
  1598. + inline float
  1599. + ellint_1f(float __k, float __phi)
  1600. + { return __detail::__ellint_1<float>(__k, __phi); }
  1601. +
  1602. + inline long double
  1603. + ellint_1l(long double __k, long double __phi)
  1604. + { return __detail::__ellint_1<long double>(__k, __phi); }
  1605. +
  1606. + /// 5.2.1.12 Incomplete elliptic integrals of the first kind.
  1607. + template<typename _Tp, typename _Tpp>
  1608. + inline typename __gnu_cxx::__promote_2<_Tp, _Tpp>::__type
  1609. + ellint_1(_Tp __k, _Tpp __phi)
  1610. + {
  1611. + typedef typename __gnu_cxx::__promote_2<_Tp, _Tpp>::__type __type;
  1612. + return __detail::__ellint_1<__type>(__k, __phi);
  1613. + }
  1614. +
  1615. + inline float
  1616. + ellint_2f(float __k, float __phi)
  1617. + { return __detail::__ellint_2<float>(__k, __phi); }
  1618. +
  1619. + inline long double
  1620. + ellint_2l(long double __k, long double __phi)
  1621. + { return __detail::__ellint_2<long double>(__k, __phi); }
  1622. +
  1623. + /// 5.2.1.13 Incomplete elliptic integrals of the second kind.
  1624. + template<typename _Tp, typename _Tpp>
  1625. + inline typename __gnu_cxx::__promote_2<_Tp, _Tpp>::__type
  1626. + ellint_2(_Tp __k, _Tpp __phi)
  1627. + {
  1628. + typedef typename __gnu_cxx::__promote_2<_Tp, _Tpp>::__type __type;
  1629. + return __detail::__ellint_2<__type>(__k, __phi);
  1630. + }
  1631. +
  1632. + inline float
  1633. + ellint_3f(float __k, float __nu, float __phi)
  1634. + { return __detail::__ellint_3<float>(__k, __nu, __phi); }
  1635. +
  1636. + inline long double
  1637. + ellint_3l(long double __k, long double __nu, long double __phi)
  1638. + { return __detail::__ellint_3<long double>(__k, __nu, __phi); }
  1639. +
  1640. + /// 5.2.1.14 Incomplete elliptic integrals of the third kind.
  1641. + template<typename _Tp, typename _Tpn, typename _Tpp>
  1642. + inline typename __gnu_cxx::__promote_3<_Tp, _Tpn, _Tpp>::__type
  1643. + ellint_3(_Tp __k, _Tpn __nu, _Tpp __phi)
  1644. + {
  1645. + typedef typename __gnu_cxx::__promote_3<_Tp, _Tpn, _Tpp>::__type __type;
  1646. + return __detail::__ellint_3<__type>(__k, __nu, __phi);
  1647. + }
  1648. +
  1649. + inline float
  1650. + expintf(float __x)
  1651. + { return __detail::__expint<float>(__x); }
  1652. +
  1653. + inline long double
  1654. + expintl(long double __x)
  1655. + { return __detail::__expint<long double>(__x); }
  1656. +
  1657. + /// 5.2.1.15 Exponential integrals.
  1658. + template<typename _Tp>
  1659. + inline typename __gnu_cxx::__promote<_Tp>::__type
  1660. + expint(_Tp __x)
  1661. + {
  1662. + typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
  1663. + return __detail::__expint<__type>(__x);
  1664. + }
  1665. +
  1666. + inline float
  1667. + hermitef(unsigned int __n, float __x)
  1668. + { return __detail::__poly_hermite<float>(__n, __x); }
  1669. +
  1670. + inline long double
  1671. + hermitel(unsigned int __n, long double __x)
  1672. + { return __detail::__poly_hermite<long double>(__n, __x); }
  1673. +
  1674. + /// 5.2.1.16 Hermite polynomials.
  1675. + template<typename _Tp>
  1676. + inline typename __gnu_cxx::__promote<_Tp>::__type
  1677. + hermite(unsigned int __n, _Tp __x)
  1678. + {
  1679. + typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
  1680. + return __detail::__poly_hermite<__type>(__n, __x);
  1681. + }
  1682. +
  1683. + inline float
  1684. + hypergf(float __a, float __b, float __c, float __x)
  1685. + { return __detail::__hyperg<float>(__a, __b, __c, __x); }
  1686. +
  1687. + inline long double
  1688. + hypergl(long double __a, long double __b, long double __c, long double __x)
  1689. + { return __detail::__hyperg<long double>(__a, __b, __c, __x); }
  1690. +
  1691. + /// 5.2.1.17 Hypergeometric functions.
  1692. + template<typename _Tpa, typename _Tpb, typename _Tpc, typename _Tp>
  1693. + inline typename __gnu_cxx::__promote_4<_Tpa, _Tpb, _Tpc, _Tp>::__type
  1694. + hyperg(_Tpa __a, _Tpb __b, _Tpc __c, _Tp __x)
  1695. + {
  1696. + typedef typename __gnu_cxx::__promote_4<_Tpa, _Tpb, _Tpc, _Tp>::__type __type;
  1697. + return __detail::__hyperg<__type>(__a, __b, __c, __x);
  1698. + }
  1699. +
  1700. + inline float
  1701. + laguerref(unsigned int __n, float __x)
  1702. + { return __detail::__laguerre<float>(__n, __x); }
  1703. +
  1704. + inline long double
  1705. + laguerrel(unsigned int __n, long double __x)
  1706. + { return __detail::__laguerre<long double>(__n, __x); }
  1707. +
  1708. + /// 5.2.1.18 Laguerre polynomials.
  1709. + template<typename _Tp>
  1710. + inline typename __gnu_cxx::__promote<_Tp>::__type
  1711. + laguerre(unsigned int __n, _Tp __x)
  1712. + {
  1713. + typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
  1714. + return __detail::__laguerre<__type>(__n, __x);
  1715. + }
  1716. +
  1717. + inline float
  1718. + legendref(unsigned int __n, float __x)
  1719. + { return __detail::__poly_legendre_p<float>(__n, __x); }
  1720. +
  1721. + inline long double
  1722. + legendrel(unsigned int __n, long double __x)
  1723. + { return __detail::__poly_legendre_p<long double>(__n, __x); }
  1724. +
  1725. + /// 5.2.1.19 Legendre polynomials.
  1726. + template<typename _Tp>
  1727. + inline typename __gnu_cxx::__promote<_Tp>::__type
  1728. + legendre(unsigned int __n, _Tp __x)
  1729. + {
  1730. + typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
  1731. + return __detail::__poly_legendre_p<__type>(__n, __x);
  1732. + }
  1733. +
  1734. + inline float
  1735. + riemann_zetaf(float __x)
  1736. + { return __detail::__riemann_zeta<float>(__x); }
  1737. +
  1738. + inline long double
  1739. + riemann_zetal(long double __x)
  1740. + { return __detail::__riemann_zeta<long double>(__x); }
  1741. +
  1742. + /// 5.2.1.20 Riemann zeta function.
  1743. + template<typename _Tp>
  1744. + inline typename __gnu_cxx::__promote<_Tp>::__type
  1745. + riemann_zeta(_Tp __x)
  1746. + {
  1747. + typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
  1748. + return __detail::__riemann_zeta<__type>(__x);
  1749. + }
  1750. +
  1751. + inline float
  1752. + sph_besself(unsigned int __n, float __x)
  1753. + { return __detail::__sph_bessel<float>(__n, __x); }
  1754. +
  1755. + inline long double
  1756. + sph_bessell(unsigned int __n, long double __x)
  1757. + { return __detail::__sph_bessel<long double>(__n, __x); }
  1758. +
  1759. + /// 5.2.1.21 Spherical Bessel functions.
  1760. + template<typename _Tp>
  1761. + inline typename __gnu_cxx::__promote<_Tp>::__type
  1762. + sph_bessel(unsigned int __n, _Tp __x)
  1763. + {
  1764. + typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
  1765. + return __detail::__sph_bessel<__type>(__n, __x);
  1766. + }
  1767. +
  1768. + inline float
  1769. + sph_legendref(unsigned int __l, unsigned int __m, float __theta)
  1770. + { return __detail::__sph_legendre<float>(__l, __m, __theta); }
  1771. +
  1772. + inline long double
  1773. + sph_legendrel(unsigned int __l, unsigned int __m, long double __theta)
  1774. + { return __detail::__sph_legendre<long double>(__l, __m, __theta); }
  1775. +
  1776. + /// 5.2.1.22 Spherical associated Legendre functions.
  1777. + template<typename _Tp>
  1778. + inline typename __gnu_cxx::__promote<_Tp>::__type
  1779. + sph_legendre(unsigned int __l, unsigned int __m, _Tp __theta)
  1780. + {
  1781. + typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
  1782. + return __detail::__sph_legendre<__type>(__l, __m, __theta);
  1783. + }
  1784. +
  1785. + inline float
  1786. + sph_neumannf(unsigned int __n, float __x)
  1787. + { return __detail::__sph_neumann<float>(__n, __x); }
  1788. +
  1789. + inline long double
  1790. + sph_neumannl(unsigned int __n, long double __x)
  1791. + { return __detail::__sph_neumann<long double>(__n, __x); }
  1792. +
  1793. + /// 5.2.1.23 Spherical Neumann functions.
  1794. + template<typename _Tp>
  1795. + inline typename __gnu_cxx::__promote<_Tp>::__type
  1796. + sph_neumann(unsigned int __n, _Tp __x)
  1797. + {
  1798. + typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
  1799. + return __detail::__sph_neumann<__type>(__n, __x);
  1800. + }
  1801. +
  1802. + /* @} */ // tr1_math_spec_func
  1803. +_GLIBCXX_END_NAMESPACE_VERSION
  1804. +}
  1805. +}
  1806. +
  1807. +#endif // _GLIBCXX_TR1_CMATH