Subversion Repositories Kolibri OS

Rev

Rev 5134 | Details | Compare with Previous | Last modification | View Log | RSS feed

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