Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / c++ / cmath @ 14

History | View | Annotate | Download (47.1 KB)

1
// -*- C++ -*-
2
//===---------------------------- cmath -----------------------------------===//
3
//
4
//                     The LLVM Compiler Infrastructure
5
//
6
// This file is dual licensed under the MIT and the University of Illinois Open
7
// Source Licenses. See LICENSE.TXT for details.
8
//
9
//===----------------------------------------------------------------------===//
10

    
11
#ifndef _LIBCPP_CMATH
12
#define _LIBCPP_CMATH
13

    
14
/*
15
    cmath synopsis
16

    
17
Macros:
18

    
19
    HUGE_VAL
20
    HUGE_VALF               // C99
21
    HUGE_VALL               // C99
22
    INFINITY                // C99
23
    NAN                     // C99
24
    FP_INFINITE             // C99
25
    FP_NAN                  // C99
26
    FP_NORMAL               // C99
27
    FP_SUBNORMAL            // C99
28
    FP_ZERO                 // C99
29
    FP_FAST_FMA             // C99
30
    FP_FAST_FMAF            // C99
31
    FP_FAST_FMAL            // C99
32
    FP_ILOGB0               // C99
33
    FP_ILOGBNAN             // C99
34
    MATH_ERRNO              // C99
35
    MATH_ERREXCEPT          // C99
36
    math_errhandling        // C99
37

    
38
namespace std
39
{
40

    
41
Types:
42

    
43
    float_t                 // C99
44
    double_t                // C99
45

    
46
// C90
47

    
48
floating_point abs(floating_point x);
49

    
50
floating_point acos (arithmetic x);
51
float          acosf(float x);
52
long double    acosl(long double x);
53

    
54
floating_point asin (arithmetic x);
55
float          asinf(float x);
56
long double    asinl(long double x);
57

    
58
floating_point atan (arithmetic x);
59
float          atanf(float x);
60
long double    atanl(long double x);
61

    
62
floating_point atan2 (arithmetic y, arithmetic x);
63
float          atan2f(float y, float x);
64
long double    atan2l(long double y, long double x);
65

    
66
floating_point ceil (arithmetic x);
67
float          ceilf(float x);
68
long double    ceill(long double x);
69

    
70
floating_point cos (arithmetic x);
71
float          cosf(float x);
72
long double    cosl(long double x);
73

    
74
floating_point cosh (arithmetic x);
75
float          coshf(float x);
76
long double    coshl(long double x);
77

    
78
floating_point exp (arithmetic x);
79
float          expf(float x);
80
long double    expl(long double x);
81

    
82
floating_point fabs (arithmetic x);
83
float          fabsf(float x);
84
long double    fabsl(long double x);
85

    
86
floating_point floor (arithmetic x);
87
float          floorf(float x);
88
long double    floorl(long double x);
89

    
90
floating_point fmod (arithmetic x, arithmetic y);
91
float          fmodf(float x, float y);
92
long double    fmodl(long double x, long double y);
93

    
94
floating_point frexp (arithmetic value, int* exp);
95
float          frexpf(float value, int* exp);
96
long double    frexpl(long double value, int* exp);
97

    
98
floating_point ldexp (arithmetic value, int exp);
99
float          ldexpf(float value, int exp);
100
long double    ldexpl(long double value, int exp);
101

    
102
floating_point log (arithmetic x);
103
float          logf(float x);
104
long double    logl(long double x);
105

    
106
floating_point log10 (arithmetic x);
107
float          log10f(float x);
108
long double    log10l(long double x);
109

    
110
floating_point modf (floating_point value, floating_point* iptr);
111
float          modff(float value, float* iptr);
112
long double    modfl(long double value, long double* iptr);
113

    
114
floating_point pow (arithmetic x, arithmetic y);
115
float          powf(float x, float y);
116
long double    powl(long double x, long double y);
117

    
118
floating_point sin (arithmetic x);
119
float          sinf(float x);
120
long double    sinl(long double x);
121

    
122
floating_point sinh (arithmetic x);
123
float          sinhf(float x);
124
long double    sinhl(long double x);
125

    
126
floating_point sqrt (arithmetic x);
127
float          sqrtf(float x);
128
long double    sqrtl(long double x);
129

    
130
floating_point tan (arithmetic x);
131
float          tanf(float x);
132
long double    tanl(long double x);
133

    
134
floating_point tanh (arithmetic x);
135
float          tanhf(float x);
136
long double    tanhl(long double x);
137

    
138
//  C99
139

    
140
bool signbit(arithmetic x);
141

    
142
int fpclassify(arithmetic x);
143

    
144
bool isfinite(arithmetic x);
145
bool isinf(arithmetic x);
146
bool isnan(arithmetic x);
147
bool isnormal(arithmetic x);
148

    
149
bool isgreater(arithmetic x, arithmetic y);
150
bool isgreaterequal(arithmetic x, arithmetic y);
151
bool isless(arithmetic x, arithmetic y);
152
bool islessequal(arithmetic x, arithmetic y);
153
bool islessgreater(arithmetic x, arithmetic y);
154
bool isunordered(arithmetic x, arithmetic y);
155

    
156
floating_point acosh (arithmetic x);
157
float          acoshf(float x);
158
long double    acoshl(long double x);
159

    
160
floating_point asinh (arithmetic x);
161
float          asinhf(float x);
162
long double    asinhl(long double x);
163

    
164
floating_point atanh (arithmetic x);
165
float          atanhf(float x);
166
long double    atanhl(long double x);
167

    
168
floating_point cbrt (arithmetic x);
169
float          cbrtf(float x);
170
long double    cbrtl(long double x);
171

    
172
floating_point copysign (arithmetic x, arithmetic y);
173
float          copysignf(float x, float y);
174
long double    copysignl(long double x, long double y);
175

    
176
floating_point erf (arithmetic x);
177
float          erff(float x);
178
long double    erfl(long double x);
179

    
180
floating_point erfc (arithmetic x);
181
float          erfcf(float x);
182
long double    erfcl(long double x);
183

    
184
floating_point exp2 (arithmetic x);
185
float          exp2f(float x);
186
long double    exp2l(long double x);
187

    
188
floating_point expm1 (arithmetic x);
189
float          expm1f(float x);
190
long double    expm1l(long double x);
191

    
192
floating_point fdim (arithmetic x, arithmetic y);
193
float          fdimf(float x, float y);
194
long double    fdiml(long double x, long double y);
195

    
196
floating_point fma (arithmetic x, arithmetic y, arithmetic z);
197
float          fmaf(float x, float y, float z);
198
long double    fmal(long double x, long double y, long double z);
199

    
200
floating_point fmax (arithmetic x, arithmetic y);
201
float          fmaxf(float x, float y);
202
long double    fmaxl(long double x, long double y);
203

    
204
floating_point fmin (arithmetic x, arithmetic y);
205
float          fminf(float x, float y);
206
long double    fminl(long double x, long double y);
207

    
208
floating_point hypot (arithmetic x, arithmetic y);
209
float          hypotf(float x, float y);
210
long double    hypotl(long double x, long double y);
211

    
212
int ilogb (arithmetic x);
213
int ilogbf(float x);
214
int ilogbl(long double x);
215

    
216
floating_point lgamma (arithmetic x);
217
float          lgammaf(float x);
218
long double    lgammal(long double x);
219

    
220
long long llrint (arithmetic x);
221
long long llrintf(float x);
222
long long llrintl(long double x);
223

    
224
long long llround (arithmetic x);
225
long long llroundf(float x);
226
long long llroundl(long double x);
227

    
228
floating_point log1p (arithmetic x);
229
float          log1pf(float x);
230
long double    log1pl(long double x);
231

    
232
floating_point log2 (arithmetic x);
233
float          log2f(float x);
234
long double    log2l(long double x);
235

    
236
floating_point logb (arithmetic x);
237
float          logbf(float x);
238
long double    logbl(long double x);
239

    
240
long lrint (arithmetic x);
241
long lrintf(float x);
242
long lrintl(long double x);
243

    
244
long lround (arithmetic x);
245
long lroundf(float x);
246
long lroundl(long double x);
247

    
248
double      nan (const char* str);
249
float       nanf(const char* str);
250
long double nanl(const char* str);
251

    
252
floating_point nearbyint (arithmetic x);
253
float          nearbyintf(float x);
254
long double    nearbyintl(long double x);
255

    
256
floating_point nextafter (arithmetic x, arithmetic y);
257
float          nextafterf(float x, float y);
258
long double    nextafterl(long double x, long double y);
259

    
260
floating_point nexttoward (arithmetic x, long double y);
261
float          nexttowardf(float x, long double y);
262
long double    nexttowardl(long double x, long double y);
263

    
264
floating_point remainder (arithmetic x, arithmetic y);
265
float          remainderf(float x, float y);
266
long double    remainderl(long double x, long double y);
267

    
268
floating_point remquo (arithmetic x, arithmetic y, int* pquo);
269
float          remquof(float x, float y, int* pquo);
270
long double    remquol(long double x, long double y, int* pquo);
271

    
272
floating_point rint (arithmetic x);
273
float          rintf(float x);
274
long double    rintl(long double x);
275

    
276
floating_point round (arithmetic x);
277
float          roundf(float x);
278
long double    roundl(long double x);
279

    
280
floating_point scalbln (arithmetic x, long ex);
281
float          scalblnf(float x, long ex);
282
long double    scalblnl(long double x, long ex);
283

    
284
floating_point scalbn (arithmetic x, int ex);
285
float          scalbnf(float x, int ex);
286
long double    scalbnl(long double x, int ex);
287

    
288
floating_point tgamma (arithmetic x);
289
float          tgammaf(float x);
290
long double    tgammal(long double x);
291

    
292
floating_point trunc (arithmetic x);
293
float          truncf(float x);
294
long double    truncl(long double x);
295

    
296
}  // std
297

    
298
*/
299

    
300
#include <__config>
301
#include <math.h>
302
#include <type_traits>
303

    
304
#ifdef _LIBCPP_MSVCRT
305
#include "support/win32/math_win32.h"
306
#endif
307

    
308
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
309
#pragma GCC system_header
310
#endif
311

    
312
// signbit
313

    
314
#ifdef signbit
315

    
316
template <class _A1>
317
_LIBCPP_ALWAYS_INLINE
318
bool
319
__libcpp_signbit(_A1 __lcpp_x) _NOEXCEPT
320
{
321
    return signbit(__lcpp_x);
322
}
323

    
324
#undef signbit
325

    
326
template <class _A1>
327
inline _LIBCPP_INLINE_VISIBILITY
328
typename std::enable_if<std::is_arithmetic<_A1>::value, bool>::type
329
signbit(_A1 __lcpp_x) _NOEXCEPT
330
{
331
    return __libcpp_signbit((typename std::__promote<_A1>::type)__lcpp_x);
332
}
333

    
334
#endif  // signbit
335

    
336
// fpclassify
337

    
338
#ifdef fpclassify
339

    
340
template <class _A1>
341
_LIBCPP_ALWAYS_INLINE
342
int
343
__libcpp_fpclassify(_A1 __lcpp_x) _NOEXCEPT
344
{
345
    return fpclassify(__lcpp_x);
346
}
347

    
348
#undef fpclassify
349

    
350
template <class _A1>
351
inline _LIBCPP_INLINE_VISIBILITY
352
typename std::enable_if<std::is_arithmetic<_A1>::value, int>::type
353
fpclassify(_A1 __lcpp_x) _NOEXCEPT
354
{
355
    return __libcpp_fpclassify((typename std::__promote<_A1>::type)__lcpp_x);
356
}
357

    
358
#endif  // fpclassify
359

    
360
// isfinite
361

    
362
#ifdef isfinite
363

    
364
template <class _A1>
365
_LIBCPP_ALWAYS_INLINE
366
bool
367
__libcpp_isfinite(_A1 __lcpp_x) _NOEXCEPT
368
{
369
    return isfinite(__lcpp_x);
370
}
371

    
372
#undef isfinite
373

    
374
template <class _A1>
375
inline _LIBCPP_INLINE_VISIBILITY
376
typename std::enable_if<std::is_arithmetic<_A1>::value, bool>::type
377
isfinite(_A1 __lcpp_x) _NOEXCEPT
378
{
379
    return __libcpp_isfinite((typename std::__promote<_A1>::type)__lcpp_x);
380
}
381

    
382
#endif  // isfinite
383

    
384
// isinf
385

    
386
#ifdef isinf
387

    
388
template <class _A1>
389
_LIBCPP_ALWAYS_INLINE
390
bool
391
__libcpp_isinf(_A1 __lcpp_x) _NOEXCEPT
392
{
393
    return isinf(__lcpp_x);
394
}
395

    
396
#undef isinf
397

    
398
template <class _A1>
399
inline _LIBCPP_INLINE_VISIBILITY
400
typename std::enable_if<std::is_arithmetic<_A1>::value, bool>::type
401
isinf(_A1 __lcpp_x) _NOEXCEPT
402
{
403
    return __libcpp_isinf((typename std::__promote<_A1>::type)__lcpp_x);
404
}
405

    
406
#endif  // isinf
407

    
408
// isnan
409

    
410
#ifdef isnan
411

    
412
template <class _A1>
413
_LIBCPP_ALWAYS_INLINE
414
bool
415
__libcpp_isnan(_A1 __lcpp_x) _NOEXCEPT
416
{
417
    return isnan(__lcpp_x);
418
}
419

    
420
#undef isnan
421

    
422
template <class _A1>
423
inline _LIBCPP_INLINE_VISIBILITY
424
typename std::enable_if<std::is_arithmetic<_A1>::value, bool>::type
425
isnan(_A1 __lcpp_x) _NOEXCEPT
426
{
427
    return __libcpp_isnan((typename std::__promote<_A1>::type)__lcpp_x);
428
}
429

    
430
#endif  // isnan
431

    
432
// isnormal
433

    
434
#ifdef isnormal
435

    
436
template <class _A1>
437
_LIBCPP_ALWAYS_INLINE
438
bool
439
__libcpp_isnormal(_A1 __lcpp_x) _NOEXCEPT
440
{
441
    return isnormal(__lcpp_x);
442
}
443

    
444
#undef isnormal
445

    
446
template <class _A1>
447
inline _LIBCPP_INLINE_VISIBILITY
448
typename std::enable_if<std::is_arithmetic<_A1>::value, bool>::type
449
isnormal(_A1 __lcpp_x) _NOEXCEPT
450
{
451
    return __libcpp_isnormal((typename std::__promote<_A1>::type)__lcpp_x);
452
}
453

    
454
#endif  // isnormal
455

    
456
// isgreater
457

    
458
#ifdef isgreater
459

    
460
template <class _A1, class _A2>
461
_LIBCPP_ALWAYS_INLINE
462
bool
463
__libcpp_isgreater(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
464
{
465
    return isgreater(__lcpp_x, __lcpp_y);
466
}
467

    
468
#undef isgreater
469

    
470
template <class _A1, class _A2>
471
inline _LIBCPP_INLINE_VISIBILITY
472
typename std::enable_if
473
<
474
    std::is_arithmetic<_A1>::value &&
475
    std::is_arithmetic<_A2>::value,
476
    bool
477
>::type
478
isgreater(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
479
{
480
    typedef typename std::__promote<_A1, _A2>::type type;
481
    return __libcpp_isgreater((type)__lcpp_x, (type)__lcpp_y);
482
}
483

    
484
#endif  // isgreater
485

    
486
// isgreaterequal
487

    
488
#ifdef isgreaterequal
489

    
490
template <class _A1, class _A2>
491
_LIBCPP_ALWAYS_INLINE
492
bool
493
__libcpp_isgreaterequal(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
494
{
495
    return isgreaterequal(__lcpp_x, __lcpp_y);
496
}
497

    
498
#undef isgreaterequal
499

    
500
template <class _A1, class _A2>
501
inline _LIBCPP_INLINE_VISIBILITY
502
typename std::enable_if
503
<
504
    std::is_arithmetic<_A1>::value &&
505
    std::is_arithmetic<_A2>::value,
506
    bool
507
>::type
508
isgreaterequal(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
509
{
510
    typedef typename std::__promote<_A1, _A2>::type type;
511
    return __libcpp_isgreaterequal((type)__lcpp_x, (type)__lcpp_y);
512
}
513

    
514
#endif  // isgreaterequal
515

    
516
// isless
517

    
518
#ifdef isless
519

    
520
template <class _A1, class _A2>
521
_LIBCPP_ALWAYS_INLINE
522
bool
523
__libcpp_isless(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
524
{
525
    return isless(__lcpp_x, __lcpp_y);
526
}
527

    
528
#undef isless
529

    
530
template <class _A1, class _A2>
531
inline _LIBCPP_INLINE_VISIBILITY
532
typename std::enable_if
533
<
534
    std::is_arithmetic<_A1>::value &&
535
    std::is_arithmetic<_A2>::value,
536
    bool
537
>::type
538
isless(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
539
{
540
    typedef typename std::__promote<_A1, _A2>::type type;
541
    return __libcpp_isless((type)__lcpp_x, (type)__lcpp_y);
542
}
543

    
544
#endif  // isless
545

    
546
// islessequal
547

    
548
#ifdef islessequal
549

    
550
template <class _A1, class _A2>
551
_LIBCPP_ALWAYS_INLINE
552
bool
553
__libcpp_islessequal(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
554
{
555
    return islessequal(__lcpp_x, __lcpp_y);
556
}
557

    
558
#undef islessequal
559

    
560
template <class _A1, class _A2>
561
inline _LIBCPP_INLINE_VISIBILITY
562
typename std::enable_if
563
<
564
    std::is_arithmetic<_A1>::value &&
565
    std::is_arithmetic<_A2>::value,
566
    bool
567
>::type
568
islessequal(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
569
{
570
    typedef typename std::__promote<_A1, _A2>::type type;
571
    return __libcpp_islessequal((type)__lcpp_x, (type)__lcpp_y);
572
}
573

    
574
#endif  // islessequal
575

    
576
// islessgreater
577

    
578
#ifdef islessgreater
579

    
580
template <class _A1, class _A2>
581
_LIBCPP_ALWAYS_INLINE
582
bool
583
__libcpp_islessgreater(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
584
{
585
    return islessgreater(__lcpp_x, __lcpp_y);
586
}
587

    
588
#undef islessgreater
589

    
590
template <class _A1, class _A2>
591
inline _LIBCPP_INLINE_VISIBILITY
592
typename std::enable_if
593
<
594
    std::is_arithmetic<_A1>::value &&
595
    std::is_arithmetic<_A2>::value,
596
    bool
597
>::type
598
islessgreater(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
599
{
600
    typedef typename std::__promote<_A1, _A2>::type type;
601
    return __libcpp_islessgreater((type)__lcpp_x, (type)__lcpp_y);
602
}
603

    
604
#endif  // islessgreater
605

    
606
// isunordered
607

    
608
#ifdef isunordered
609

    
610
template <class _A1, class _A2>
611
_LIBCPP_ALWAYS_INLINE
612
bool
613
__libcpp_isunordered(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
614
{
615
    return isunordered(__lcpp_x, __lcpp_y);
616
}
617

    
618
#undef isunordered
619

    
620
template <class _A1, class _A2>
621
inline _LIBCPP_INLINE_VISIBILITY
622
typename std::enable_if
623
<
624
    std::is_arithmetic<_A1>::value &&
625
    std::is_arithmetic<_A2>::value,
626
    bool
627
>::type
628
isunordered(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
629
{
630
    typedef typename std::__promote<_A1, _A2>::type type;
631
    return __libcpp_isunordered((type)__lcpp_x, (type)__lcpp_y);
632
}
633

    
634
#endif  // isunordered
635

    
636
_LIBCPP_BEGIN_NAMESPACE_STD
637

    
638
using ::signbit;
639
using ::fpclassify;
640
using ::isfinite;
641
using ::isinf;
642
using ::isnan;
643
using ::isnormal;
644
using ::isgreater;
645
using ::isgreaterequal;
646
using ::isless;
647
using ::islessequal;
648
using ::islessgreater;
649
using ::isunordered;
650
using ::isunordered;
651

    
652
using ::float_t;
653
using ::double_t;
654

    
655
// abs
656

    
657
#if defined(__sun__)
658
using ::abs;
659
#endif
660

    
661
#if !defined(_AIX) && !defined(__sun__)
662
inline _LIBCPP_INLINE_VISIBILITY
663
float
664
abs(float __lcpp_x) _NOEXCEPT {return fabsf(__lcpp_x);}
665

    
666
inline _LIBCPP_INLINE_VISIBILITY
667
double
668
abs(double __lcpp_x) _NOEXCEPT {return fabs(__lcpp_x);}
669

    
670
inline _LIBCPP_INLINE_VISIBILITY
671
long double
672
abs(long double __lcpp_x) _NOEXCEPT {return fabsl(__lcpp_x);}
673
#endif // !defined(_AIX)
674

    
675
#ifndef __sun__
676

    
677
// acos
678

    
679
using ::acos;
680
using ::acosf;
681

    
682
#if !(defined(_LIBCPP_MSVCRT) || defined(_AIX))
683
inline _LIBCPP_INLINE_VISIBILITY float       acos(float __lcpp_x) _NOEXCEPT       {return acosf(__lcpp_x);}
684
inline _LIBCPP_INLINE_VISIBILITY long double acos(long double __lcpp_x) _NOEXCEPT {return acosl(__lcpp_x);}
685
#endif
686

    
687
template <class _A1>
688
inline _LIBCPP_INLINE_VISIBILITY
689
typename enable_if<is_integral<_A1>::value, double>::type
690
acos(_A1 __lcpp_x) _NOEXCEPT {return acos((double)__lcpp_x);}
691

    
692
// asin
693

    
694
using ::asin;
695
using ::asinf;
696

    
697
#if !(defined(_LIBCPP_MSVCRT) || defined(_AIX))
698
inline _LIBCPP_INLINE_VISIBILITY float       asin(float __lcpp_x) _NOEXCEPT       {return asinf(__lcpp_x);}
699
inline _LIBCPP_INLINE_VISIBILITY long double asin(long double __lcpp_x) _NOEXCEPT {return asinl(__lcpp_x);}
700
#endif
701

    
702
template <class _A1>
703
inline _LIBCPP_INLINE_VISIBILITY
704
typename enable_if<is_integral<_A1>::value, double>::type
705
asin(_A1 __lcpp_x) _NOEXCEPT {return asin((double)__lcpp_x);}
706

    
707
// atan
708

    
709
using ::atan;
710
using ::atanf;
711

    
712
#if !(defined(_LIBCPP_MSVCRT) || defined(_AIX))
713
inline _LIBCPP_INLINE_VISIBILITY float       atan(float __lcpp_x) _NOEXCEPT       {return atanf(__lcpp_x);}
714
inline _LIBCPP_INLINE_VISIBILITY long double atan(long double __lcpp_x) _NOEXCEPT {return atanl(__lcpp_x);}
715
#endif
716

    
717
template <class _A1>
718
inline _LIBCPP_INLINE_VISIBILITY
719
typename enable_if<is_integral<_A1>::value, double>::type
720
atan(_A1 __lcpp_x) _NOEXCEPT {return atan((double)__lcpp_x);}
721

    
722
// atan2
723

    
724
using ::atan2;
725
using ::atan2f;
726

    
727
#if !(defined(_LIBCPP_MSVCRT) || defined(_AIX))
728
inline _LIBCPP_INLINE_VISIBILITY float       atan2(float __lcpp_y, float __lcpp_x) _NOEXCEPT             {return atan2f(__lcpp_y, __lcpp_x);}
729
inline _LIBCPP_INLINE_VISIBILITY long double atan2(long double __lcpp_y, long double __lcpp_x) _NOEXCEPT {return atan2l(__lcpp_y, __lcpp_x);}
730
#endif
731

    
732
template <class _A1, class _A2>
733
inline _LIBCPP_INLINE_VISIBILITY
734
typename __lazy_enable_if
735
<
736
    is_arithmetic<_A1>::value &&
737
    is_arithmetic<_A2>::value,
738
    __promote<_A1, _A2>
739
>::type
740
atan2(_A1 __lcpp_y, _A2 __lcpp_x) _NOEXCEPT
741
{
742
    typedef typename __promote<_A1, _A2>::type __result_type;
743
    static_assert((!(is_same<_A1, __result_type>::value &&
744
                      is_same<_A2, __result_type>::value)), "");
745
    return atan2((__result_type)__lcpp_y, (__result_type)__lcpp_x);
746
}
747

    
748
// ceil
749

    
750
using ::ceil;
751
using ::ceilf;
752

    
753
#if !(defined(_LIBCPP_MSVCRT) || defined(_AIX))
754
inline _LIBCPP_INLINE_VISIBILITY float       ceil(float __lcpp_x) _NOEXCEPT       {return ceilf(__lcpp_x);}
755
inline _LIBCPP_INLINE_VISIBILITY long double ceil(long double __lcpp_x) _NOEXCEPT {return ceill(__lcpp_x);}
756
#endif
757

    
758
template <class _A1>
759
inline _LIBCPP_INLINE_VISIBILITY
760
typename enable_if<is_integral<_A1>::value, double>::type
761
ceil(_A1 __lcpp_x) _NOEXCEPT {return ceil((double)__lcpp_x);}
762

    
763
// cos
764

    
765
using ::cos;
766
using ::cosf;
767

    
768
#if !(defined(_LIBCPP_MSVCRT) || defined(_AIX))
769
inline _LIBCPP_INLINE_VISIBILITY float       cos(float __lcpp_x) _NOEXCEPT       {return cosf(__lcpp_x);}
770
inline _LIBCPP_INLINE_VISIBILITY long double cos(long double __lcpp_x) _NOEXCEPT {return cosl(__lcpp_x);}
771
#endif
772

    
773
template <class _A1>
774
inline _LIBCPP_INLINE_VISIBILITY
775
typename enable_if<is_integral<_A1>::value, double>::type
776
cos(_A1 __lcpp_x) _NOEXCEPT {return cos((double)__lcpp_x);}
777

    
778
// cosh
779

    
780
using ::cosh;
781
using ::coshf;
782

    
783
#if !(defined(_LIBCPP_MSVCRT) || defined(_AIX))
784
inline _LIBCPP_INLINE_VISIBILITY float       cosh(float __lcpp_x) _NOEXCEPT       {return coshf(__lcpp_x);}
785
inline _LIBCPP_INLINE_VISIBILITY long double cosh(long double __lcpp_x) _NOEXCEPT {return coshl(__lcpp_x);}
786
#endif
787

    
788
template <class _A1>
789
inline _LIBCPP_INLINE_VISIBILITY
790
typename enable_if<is_integral<_A1>::value, double>::type
791
cosh(_A1 __lcpp_x) _NOEXCEPT {return cosh((double)__lcpp_x);}
792

    
793
#endif // __sun__
794
// exp
795

    
796
using ::exp;
797
using ::expf;
798

    
799
#ifndef __sun__
800

    
801
#if !(defined(_LIBCPP_MSVCRT) || defined(_AIX))
802
inline _LIBCPP_INLINE_VISIBILITY float       exp(float __lcpp_x) _NOEXCEPT       {return expf(__lcpp_x);}
803
inline _LIBCPP_INLINE_VISIBILITY long double exp(long double __lcpp_x) _NOEXCEPT {return expl(__lcpp_x);}
804
#endif
805

    
806

    
807
template <class _A1>
808
inline _LIBCPP_INLINE_VISIBILITY
809
typename enable_if<is_integral<_A1>::value, double>::type
810
exp(_A1 __lcpp_x) _NOEXCEPT {return exp((double)__lcpp_x);}
811

    
812
// fabs
813

    
814
using ::fabs;
815
using ::fabsf;
816

    
817
#if !(defined(_LIBCPP_MSVCRT) || defined(_AIX))
818
inline _LIBCPP_INLINE_VISIBILITY float       fabs(float __lcpp_x) _NOEXCEPT       {return fabsf(__lcpp_x);}
819
inline _LIBCPP_INLINE_VISIBILITY long double fabs(long double __lcpp_x) _NOEXCEPT {return fabsl(__lcpp_x);}
820
#endif
821

    
822
template <class _A1>
823
inline _LIBCPP_INLINE_VISIBILITY
824
typename enable_if<is_integral<_A1>::value, double>::type
825
fabs(_A1 __lcpp_x) _NOEXCEPT {return fabs((double)__lcpp_x);}
826

    
827
// floor
828

    
829
using ::floor;
830
using ::floorf;
831

    
832
#if !(defined(_LIBCPP_MSVCRT) || defined(_AIX))
833
inline _LIBCPP_INLINE_VISIBILITY float       floor(float __lcpp_x) _NOEXCEPT       {return floorf(__lcpp_x);}
834
inline _LIBCPP_INLINE_VISIBILITY long double floor(long double __lcpp_x) _NOEXCEPT {return floorl(__lcpp_x);}
835
#endif
836

    
837
template <class _A1>
838
inline _LIBCPP_INLINE_VISIBILITY
839
typename enable_if<is_integral<_A1>::value, double>::type
840
floor(_A1 __lcpp_x) _NOEXCEPT {return floor((double)__lcpp_x);}
841

    
842
// fmod
843

    
844
#endif //__sun__
845
using ::fmod;
846
using ::fmodf;
847
#ifndef __sun__
848

    
849
#if !(defined(_LIBCPP_MSVCRT) || defined(_AIX))
850
inline _LIBCPP_INLINE_VISIBILITY float       fmod(float __lcpp_x, float __lcpp_y) _NOEXCEPT             {return fmodf(__lcpp_x, __lcpp_y);}
851
inline _LIBCPP_INLINE_VISIBILITY long double fmod(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return fmodl(__lcpp_x, __lcpp_y);}
852
#endif
853

    
854
template <class _A1, class _A2>
855
inline _LIBCPP_INLINE_VISIBILITY
856
typename __lazy_enable_if
857
<
858
    is_arithmetic<_A1>::value &&
859
    is_arithmetic<_A2>::value,
860
    __promote<_A1, _A2>
861
>::type
862
fmod(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
863
{
864
    typedef typename __promote<_A1, _A2>::type __result_type;
865
    static_assert((!(is_same<_A1, __result_type>::value &&
866
                      is_same<_A2, __result_type>::value)), "");
867
    return fmod((__result_type)__lcpp_x, (__result_type)__lcpp_y);
868
}
869

    
870

    
871
// frexp
872

    
873
using ::frexp;
874
using ::frexpf;
875

    
876
#if !(defined(_LIBCPP_MSVCRT) || defined(_AIX))
877
inline _LIBCPP_INLINE_VISIBILITY float       frexp(float __lcpp_x, int* __lcpp_e) _NOEXCEPT       {return frexpf(__lcpp_x, __lcpp_e);}
878
inline _LIBCPP_INLINE_VISIBILITY long double frexp(long double __lcpp_x, int* __lcpp_e) _NOEXCEPT {return frexpl(__lcpp_x, __lcpp_e);}
879
#endif
880

    
881
template <class _A1>
882
inline _LIBCPP_INLINE_VISIBILITY
883
typename enable_if<is_integral<_A1>::value, double>::type
884
frexp(_A1 __lcpp_x, int* __lcpp_e) _NOEXCEPT {return frexp((double)__lcpp_x, __lcpp_e);}
885

    
886
// ldexp
887

    
888
using ::ldexp;
889
using ::ldexpf;
890

    
891
#if !(defined(_LIBCPP_MSVCRT) || defined(_AIX))
892
inline _LIBCPP_INLINE_VISIBILITY float       ldexp(float __lcpp_x, int __lcpp_e) _NOEXCEPT       {return ldexpf(__lcpp_x, __lcpp_e);}
893
inline _LIBCPP_INLINE_VISIBILITY long double ldexp(long double __lcpp_x, int __lcpp_e) _NOEXCEPT {return ldexpl(__lcpp_x, __lcpp_e);}
894
#endif
895

    
896
template <class _A1>
897
inline _LIBCPP_INLINE_VISIBILITY
898
typename enable_if<is_integral<_A1>::value, double>::type
899
ldexp(_A1 __lcpp_x, int __lcpp_e) _NOEXCEPT {return ldexp((double)__lcpp_x, __lcpp_e);}
900

    
901
// log
902

    
903
#endif // __sun__
904
using ::log;
905
using ::logf;
906
#ifndef __sun__
907

    
908
#if !(defined(_LIBCPP_MSVCRT) || defined(_AIX))
909
inline _LIBCPP_INLINE_VISIBILITY float       log(float __lcpp_x) _NOEXCEPT       {return logf(__lcpp_x);}
910
inline _LIBCPP_INLINE_VISIBILITY long double log(long double __lcpp_x) _NOEXCEPT {return logl(__lcpp_x);}
911
#endif
912

    
913
template <class _A1>
914
inline _LIBCPP_INLINE_VISIBILITY
915
typename enable_if<is_integral<_A1>::value, double>::type
916
log(_A1 __lcpp_x) _NOEXCEPT {return log((double)__lcpp_x);}
917

    
918

    
919
// log10
920

    
921
using ::log10;
922
using ::log10f;
923

    
924
#if !(defined(_LIBCPP_MSVCRT) || defined(_AIX))
925
inline _LIBCPP_INLINE_VISIBILITY float       log10(float __lcpp_x) _NOEXCEPT       {return log10f(__lcpp_x);}
926
inline _LIBCPP_INLINE_VISIBILITY long double log10(long double __lcpp_x) _NOEXCEPT {return log10l(__lcpp_x);}
927
#endif
928

    
929
template <class _A1>
930
inline _LIBCPP_INLINE_VISIBILITY
931
typename enable_if<is_integral<_A1>::value, double>::type
932
log10(_A1 __lcpp_x) _NOEXCEPT {return log10((double)__lcpp_x);}
933

    
934
// modf
935

    
936
using ::modf;
937
using ::modff;
938

    
939
#if !(defined(_LIBCPP_MSVCRT) || defined(_AIX))
940
inline _LIBCPP_INLINE_VISIBILITY float       modf(float __lcpp_x, float* __lcpp_y) _NOEXCEPT             {return modff(__lcpp_x, __lcpp_y);}
941
inline _LIBCPP_INLINE_VISIBILITY long double modf(long double __lcpp_x, long double* __lcpp_y) _NOEXCEPT {return modfl(__lcpp_x, __lcpp_y);}
942
#endif
943

    
944
// pow
945

    
946
#endif // __sun__ 
947
using ::pow;
948
using ::powf;
949

    
950
#ifndef __sun__
951

    
952
#if !(defined(_LIBCPP_MSVCRT) || defined(_AIX))
953
inline _LIBCPP_INLINE_VISIBILITY float       pow(float __lcpp_x, float __lcpp_y) _NOEXCEPT             {return powf(__lcpp_x, __lcpp_y);}
954
inline _LIBCPP_INLINE_VISIBILITY long double pow(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return powl(__lcpp_x, __lcpp_y);}
955
#endif
956

    
957
template <class _A1, class _A2>
958
inline _LIBCPP_INLINE_VISIBILITY
959
typename __lazy_enable_if
960
<
961
    is_arithmetic<_A1>::value &&
962
    is_arithmetic<_A2>::value,
963
    __promote<_A1, _A2>
964
>::type
965
pow(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
966
{
967
    typedef typename __promote<_A1, _A2>::type __result_type;
968
    static_assert((!(is_same<_A1, __result_type>::value &&
969
                      is_same<_A2, __result_type>::value)), "");
970
    return pow((__result_type)__lcpp_x, (__result_type)__lcpp_y);
971
}
972

    
973
// sin
974

    
975
using ::sin;
976
using ::sinf;
977

    
978
#if !(defined(_LIBCPP_MSVCRT) || defined(_AIX))
979
inline _LIBCPP_INLINE_VISIBILITY float       sin(float __lcpp_x) _NOEXCEPT       {return sinf(__lcpp_x);}
980
inline _LIBCPP_INLINE_VISIBILITY long double sin(long double __lcpp_x) _NOEXCEPT {return sinl(__lcpp_x);}
981
#endif
982

    
983
template <class _A1>
984
inline _LIBCPP_INLINE_VISIBILITY
985
typename enable_if<is_integral<_A1>::value, double>::type
986
sin(_A1 __lcpp_x) _NOEXCEPT {return sin((double)__lcpp_x);}
987

    
988
// sinh
989

    
990
using ::sinh;
991
using ::sinhf;
992

    
993
#if !(defined(_LIBCPP_MSVCRT) || defined(_AIX))
994
inline _LIBCPP_INLINE_VISIBILITY float       sinh(float __lcpp_x) _NOEXCEPT       {return sinhf(__lcpp_x);}
995
inline _LIBCPP_INLINE_VISIBILITY long double sinh(long double __lcpp_x) _NOEXCEPT {return sinhl(__lcpp_x);}
996
#endif
997

    
998
template <class _A1>
999
inline _LIBCPP_INLINE_VISIBILITY
1000
typename enable_if<is_integral<_A1>::value, double>::type
1001
sinh(_A1 __lcpp_x) _NOEXCEPT {return sinh((double)__lcpp_x);}
1002

    
1003
// sqrt
1004

    
1005
#endif // __sun__
1006
using ::sqrt;
1007
using ::sqrtf;
1008

    
1009

    
1010
#if !(defined(_LIBCPP_MSVCRT) || defined(__sun__) || defined(_AIX))
1011
inline _LIBCPP_INLINE_VISIBILITY float       sqrt(float __lcpp_x) _NOEXCEPT       {return sqrtf(__lcpp_x);}
1012
inline _LIBCPP_INLINE_VISIBILITY long double sqrt(long double __lcpp_x) _NOEXCEPT {return sqrtl(__lcpp_x);}
1013
#endif
1014

    
1015
template <class _A1>
1016
inline _LIBCPP_INLINE_VISIBILITY
1017
typename enable_if<is_integral<_A1>::value, double>::type
1018
sqrt(_A1 __lcpp_x) _NOEXCEPT {return sqrt((double)__lcpp_x);}
1019

    
1020
// tan
1021

    
1022
using ::tan;
1023
using ::tanf;
1024
#ifndef __sun__
1025

    
1026
#if !(defined(_LIBCPP_MSVCRT) || defined(_AIX))
1027
inline _LIBCPP_INLINE_VISIBILITY float       tan(float __lcpp_x) _NOEXCEPT       {return tanf(__lcpp_x);}
1028
inline _LIBCPP_INLINE_VISIBILITY long double tan(long double __lcpp_x) _NOEXCEPT {return tanl(__lcpp_x);}
1029
#endif
1030

    
1031
template <class _A1>
1032
inline _LIBCPP_INLINE_VISIBILITY
1033
typename enable_if<is_integral<_A1>::value, double>::type
1034
tan(_A1 __lcpp_x) _NOEXCEPT {return tan((double)__lcpp_x);}
1035

    
1036
// tanh
1037

    
1038
using ::tanh;
1039
using ::tanhf;
1040

    
1041
#if !(defined(_LIBCPP_MSVCRT) || defined(_AIX))
1042
inline _LIBCPP_INLINE_VISIBILITY float       tanh(float __lcpp_x) _NOEXCEPT       {return tanhf(__lcpp_x);}
1043
inline _LIBCPP_INLINE_VISIBILITY long double tanh(long double __lcpp_x) _NOEXCEPT {return tanhl(__lcpp_x);}
1044
#endif
1045

    
1046
template <class _A1>
1047
inline _LIBCPP_INLINE_VISIBILITY
1048
typename enable_if<is_integral<_A1>::value, double>::type
1049
tanh(_A1 __lcpp_x) _NOEXCEPT {return tanh((double)__lcpp_x);}
1050

    
1051
// acosh
1052

    
1053
#ifndef _LIBCPP_MSVCRT
1054
using ::acosh;
1055
using ::acoshf;
1056

    
1057
inline _LIBCPP_INLINE_VISIBILITY float       acosh(float __lcpp_x) _NOEXCEPT       {return acoshf(__lcpp_x);}
1058
inline _LIBCPP_INLINE_VISIBILITY long double acosh(long double __lcpp_x) _NOEXCEPT {return acoshl(__lcpp_x);}
1059

    
1060
template <class _A1>
1061
inline _LIBCPP_INLINE_VISIBILITY
1062
typename enable_if<is_integral<_A1>::value, double>::type
1063
acosh(_A1 __lcpp_x) _NOEXCEPT {return acosh((double)__lcpp_x);}
1064
#endif
1065

    
1066
// asinh
1067

    
1068
#ifndef _LIBCPP_MSVCRT
1069
using ::asinh;
1070
using ::asinhf;
1071

    
1072
inline _LIBCPP_INLINE_VISIBILITY float       asinh(float __lcpp_x) _NOEXCEPT       {return asinhf(__lcpp_x);}
1073
inline _LIBCPP_INLINE_VISIBILITY long double asinh(long double __lcpp_x) _NOEXCEPT {return asinhl(__lcpp_x);}
1074

    
1075
template <class _A1>
1076
inline _LIBCPP_INLINE_VISIBILITY
1077
typename enable_if<is_integral<_A1>::value, double>::type
1078
asinh(_A1 __lcpp_x) _NOEXCEPT {return asinh((double)__lcpp_x);}
1079
#endif
1080

    
1081
// atanh
1082

    
1083
#ifndef _LIBCPP_MSVCRT
1084
using ::atanh;
1085
using ::atanhf;
1086

    
1087
inline _LIBCPP_INLINE_VISIBILITY float       atanh(float __lcpp_x) _NOEXCEPT       {return atanhf(__lcpp_x);}
1088
inline _LIBCPP_INLINE_VISIBILITY long double atanh(long double __lcpp_x) _NOEXCEPT {return atanhl(__lcpp_x);}
1089

    
1090
template <class _A1>
1091
inline _LIBCPP_INLINE_VISIBILITY
1092
typename enable_if<is_integral<_A1>::value, double>::type
1093
atanh(_A1 __lcpp_x) _NOEXCEPT {return atanh((double)__lcpp_x);}
1094
#endif
1095

    
1096
// cbrt
1097

    
1098
#ifndef _LIBCPP_MSVCRT
1099
using ::cbrt;
1100
using ::cbrtf;
1101

    
1102
inline _LIBCPP_INLINE_VISIBILITY float       cbrt(float __lcpp_x) _NOEXCEPT       {return cbrtf(__lcpp_x);}
1103
inline _LIBCPP_INLINE_VISIBILITY long double cbrt(long double __lcpp_x) _NOEXCEPT {return cbrtl(__lcpp_x);}
1104

    
1105
template <class _A1>
1106
inline _LIBCPP_INLINE_VISIBILITY
1107
typename enable_if<is_integral<_A1>::value, double>::type
1108
cbrt(_A1 __lcpp_x) _NOEXCEPT {return cbrt((double)__lcpp_x);}
1109
#endif
1110

    
1111
// copysign
1112

    
1113
using ::copysign;
1114
using ::copysignf;
1115

    
1116
#if !defined(_VC_CRT_MAJOR_VERSION) || (_VC_CRT_MAJOR_VERSION < 12)
1117
inline _LIBCPP_INLINE_VISIBILITY float copysign(float __lcpp_x,
1118
                                                float __lcpp_y) _NOEXCEPT {
1119
  return copysignf(__lcpp_x, __lcpp_y);
1120
}
1121
inline _LIBCPP_INLINE_VISIBILITY long double
1122
copysign(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {
1123
  return copysignl(__lcpp_x, __lcpp_y);
1124
}
1125
#endif
1126

    
1127
template <class _A1, class _A2>
1128
inline _LIBCPP_INLINE_VISIBILITY
1129
typename __lazy_enable_if
1130
<
1131
    is_arithmetic<_A1>::value &&
1132
    is_arithmetic<_A2>::value,
1133
    __promote<_A1, _A2>
1134
>::type
1135
copysign(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
1136
{
1137
    typedef typename __promote<_A1, _A2>::type __result_type;
1138
    static_assert((!(is_same<_A1, __result_type>::value &&
1139
                      is_same<_A2, __result_type>::value)), "");
1140
    return copysign((__result_type)__lcpp_x, (__result_type)__lcpp_y);
1141
}
1142

    
1143
#ifndef _LIBCPP_MSVCRT
1144

    
1145
// erf
1146

    
1147
using ::erf;
1148
using ::erff;
1149

    
1150
inline _LIBCPP_INLINE_VISIBILITY float       erf(float __lcpp_x) _NOEXCEPT       {return erff(__lcpp_x);}
1151
inline _LIBCPP_INLINE_VISIBILITY long double erf(long double __lcpp_x) _NOEXCEPT {return erfl(__lcpp_x);}
1152

    
1153
template <class _A1>
1154
inline _LIBCPP_INLINE_VISIBILITY
1155
typename enable_if<is_integral<_A1>::value, double>::type
1156
erf(_A1 __lcpp_x) _NOEXCEPT {return erf((double)__lcpp_x);}
1157

    
1158
// erfc
1159

    
1160
using ::erfc;
1161
using ::erfcf;
1162

    
1163
inline _LIBCPP_INLINE_VISIBILITY float       erfc(float __lcpp_x) _NOEXCEPT       {return erfcf(__lcpp_x);}
1164
inline _LIBCPP_INLINE_VISIBILITY long double erfc(long double __lcpp_x) _NOEXCEPT {return erfcl(__lcpp_x);}
1165

    
1166
template <class _A1>
1167
inline _LIBCPP_INLINE_VISIBILITY
1168
typename enable_if<is_integral<_A1>::value, double>::type
1169
erfc(_A1 __lcpp_x) _NOEXCEPT {return erfc((double)__lcpp_x);}
1170

    
1171
// exp2
1172

    
1173
using ::exp2;
1174
using ::exp2f;
1175

    
1176
inline _LIBCPP_INLINE_VISIBILITY float       exp2(float __lcpp_x) _NOEXCEPT       {return exp2f(__lcpp_x);}
1177
inline _LIBCPP_INLINE_VISIBILITY long double exp2(long double __lcpp_x) _NOEXCEPT {return exp2l(__lcpp_x);}
1178

    
1179
template <class _A1>
1180
inline _LIBCPP_INLINE_VISIBILITY
1181
typename enable_if<is_integral<_A1>::value, double>::type
1182
exp2(_A1 __lcpp_x) _NOEXCEPT {return exp2((double)__lcpp_x);}
1183

    
1184
// expm1
1185

    
1186
using ::expm1;
1187
using ::expm1f;
1188

    
1189
inline _LIBCPP_INLINE_VISIBILITY float       expm1(float __lcpp_x) _NOEXCEPT       {return expm1f(__lcpp_x);}
1190
inline _LIBCPP_INLINE_VISIBILITY long double expm1(long double __lcpp_x) _NOEXCEPT {return expm1l(__lcpp_x);}
1191

    
1192
template <class _A1>
1193
inline _LIBCPP_INLINE_VISIBILITY
1194
typename enable_if<is_integral<_A1>::value, double>::type
1195
expm1(_A1 __lcpp_x) _NOEXCEPT {return expm1((double)__lcpp_x);}
1196

    
1197
// fdim
1198

    
1199
using ::fdim;
1200
using ::fdimf;
1201

    
1202
inline _LIBCPP_INLINE_VISIBILITY float       fdim(float __lcpp_x, float __lcpp_y) _NOEXCEPT             {return fdimf(__lcpp_x, __lcpp_y);}
1203
inline _LIBCPP_INLINE_VISIBILITY long double fdim(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return fdiml(__lcpp_x, __lcpp_y);}
1204

    
1205
template <class _A1, class _A2>
1206
inline _LIBCPP_INLINE_VISIBILITY
1207
typename __lazy_enable_if
1208
<
1209
    is_arithmetic<_A1>::value &&
1210
    is_arithmetic<_A2>::value,
1211
    __promote<_A1, _A2>
1212
>::type
1213
fdim(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
1214
{
1215
    typedef typename __promote<_A1, _A2>::type __result_type;
1216
    static_assert((!(is_same<_A1, __result_type>::value &&
1217
                      is_same<_A2, __result_type>::value)), "");
1218
    return fdim((__result_type)__lcpp_x, (__result_type)__lcpp_y);
1219
}
1220

    
1221
// fma
1222

    
1223
using ::fmaf;
1224
using ::fma;
1225

    
1226
inline _LIBCPP_INLINE_VISIBILITY float       fma(float __lcpp_x, float __lcpp_y, float __lcpp_z) _NOEXCEPT                   {return fmaf(__lcpp_x, __lcpp_y, __lcpp_z);}
1227
inline _LIBCPP_INLINE_VISIBILITY long double fma(long double __lcpp_x, long double __lcpp_y, long double __lcpp_z) _NOEXCEPT {return fmal(__lcpp_x, __lcpp_y, __lcpp_z);}
1228

    
1229
template <class _A1, class _A2, class _A3>
1230
inline _LIBCPP_INLINE_VISIBILITY
1231
typename __lazy_enable_if
1232
<
1233
    is_arithmetic<_A1>::value &&
1234
    is_arithmetic<_A2>::value &&
1235
    is_arithmetic<_A3>::value,
1236
    __promote<_A1, _A2, _A3>
1237
>::type
1238
fma(_A1 __lcpp_x, _A2 __lcpp_y, _A3 __lcpp_z) _NOEXCEPT
1239
{
1240
    typedef typename __promote<_A1, _A2, _A3>::type __result_type;
1241
    static_assert((!(is_same<_A1, __result_type>::value &&
1242
                      is_same<_A2, __result_type>::value &&
1243
                      is_same<_A3, __result_type>::value)), "");
1244
    return fma((__result_type)__lcpp_x, (__result_type)__lcpp_y, (__result_type)__lcpp_z);
1245
}
1246

    
1247
// fmax
1248

    
1249
using ::fmax;
1250
using ::fmaxf;
1251

    
1252
inline _LIBCPP_INLINE_VISIBILITY float       fmax(float __lcpp_x, float __lcpp_y) _NOEXCEPT             {return fmaxf(__lcpp_x, __lcpp_y);}
1253
inline _LIBCPP_INLINE_VISIBILITY long double fmax(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return fmaxl(__lcpp_x, __lcpp_y);}
1254

    
1255
template <class _A1, class _A2>
1256
inline _LIBCPP_INLINE_VISIBILITY
1257
typename __lazy_enable_if
1258
<
1259
    is_arithmetic<_A1>::value &&
1260
    is_arithmetic<_A2>::value,
1261
    __promote<_A1, _A2>
1262
>::type
1263
fmax(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
1264
{
1265
    typedef typename __promote<_A1, _A2>::type __result_type;
1266
    static_assert((!(is_same<_A1, __result_type>::value &&
1267
                      is_same<_A2, __result_type>::value)), "");
1268
    return fmax((__result_type)__lcpp_x, (__result_type)__lcpp_y);
1269
}
1270

    
1271
// fmin
1272

    
1273
using ::fmin;
1274
using ::fminf;
1275

    
1276
inline _LIBCPP_INLINE_VISIBILITY float       fmin(float __lcpp_x, float __lcpp_y) _NOEXCEPT             {return fminf(__lcpp_x, __lcpp_y);}
1277
inline _LIBCPP_INLINE_VISIBILITY long double fmin(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return fminl(__lcpp_x, __lcpp_y);}
1278

    
1279
template <class _A1, class _A2>
1280
inline _LIBCPP_INLINE_VISIBILITY
1281
typename __lazy_enable_if
1282
<
1283
    is_arithmetic<_A1>::value &&
1284
    is_arithmetic<_A2>::value,
1285
    __promote<_A1, _A2>
1286
>::type
1287
fmin(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
1288
{
1289
    typedef typename __promote<_A1, _A2>::type __result_type;
1290
    static_assert((!(is_same<_A1, __result_type>::value &&
1291
                      is_same<_A2, __result_type>::value)), "");
1292
    return fmin((__result_type)__lcpp_x, (__result_type)__lcpp_y);
1293
}
1294

    
1295
// hypot
1296

    
1297
using ::hypot;
1298
using ::hypotf;
1299

    
1300
inline _LIBCPP_INLINE_VISIBILITY float       hypot(float __lcpp_x, float __lcpp_y) _NOEXCEPT             {return hypotf(__lcpp_x, __lcpp_y);}
1301
inline _LIBCPP_INLINE_VISIBILITY long double hypot(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return hypotl(__lcpp_x, __lcpp_y);}
1302

    
1303
template <class _A1, class _A2>
1304
inline _LIBCPP_INLINE_VISIBILITY
1305
typename __lazy_enable_if
1306
<
1307
    is_arithmetic<_A1>::value &&
1308
    is_arithmetic<_A2>::value,
1309
    __promote<_A1, _A2>
1310
>::type
1311
hypot(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
1312
{
1313
    typedef typename __promote<_A1, _A2>::type __result_type;
1314
    static_assert((!(is_same<_A1, __result_type>::value &&
1315
                      is_same<_A2, __result_type>::value)), "");
1316
    return hypot((__result_type)__lcpp_x, (__result_type)__lcpp_y);
1317
}
1318

    
1319
// ilogb
1320

    
1321
using ::ilogb;
1322
using ::ilogbf;
1323

    
1324
inline _LIBCPP_INLINE_VISIBILITY int ilogb(float __lcpp_x) _NOEXCEPT       {return ilogbf(__lcpp_x);}
1325
inline _LIBCPP_INLINE_VISIBILITY int ilogb(long double __lcpp_x) _NOEXCEPT {return ilogbl(__lcpp_x);}
1326

    
1327
template <class _A1>
1328
inline _LIBCPP_INLINE_VISIBILITY
1329
typename enable_if<is_integral<_A1>::value, int>::type
1330
ilogb(_A1 __lcpp_x) _NOEXCEPT {return ilogb((double)__lcpp_x);}
1331

    
1332
// lgamma
1333

    
1334
using ::lgamma;
1335
using ::lgammaf;
1336

    
1337
inline _LIBCPP_INLINE_VISIBILITY float       lgamma(float __lcpp_x) _NOEXCEPT       {return lgammaf(__lcpp_x);}
1338
inline _LIBCPP_INLINE_VISIBILITY long double lgamma(long double __lcpp_x) _NOEXCEPT {return lgammal(__lcpp_x);}
1339

    
1340

    
1341
template <class _A1>
1342
inline _LIBCPP_INLINE_VISIBILITY
1343
typename enable_if<is_integral<_A1>::value, double>::type
1344
lgamma(_A1 __lcpp_x) _NOEXCEPT {return lgamma((double)__lcpp_x);}
1345

    
1346

    
1347
// llrint
1348

    
1349
using ::llrint;
1350
using ::llrintf;
1351

    
1352
inline _LIBCPP_INLINE_VISIBILITY long long llrint(float __lcpp_x) _NOEXCEPT       {return llrintf(__lcpp_x);}
1353
inline _LIBCPP_INLINE_VISIBILITY long long llrint(long double __lcpp_x) _NOEXCEPT {return llrintl(__lcpp_x);}
1354

    
1355
template <class _A1>
1356
inline _LIBCPP_INLINE_VISIBILITY
1357
typename enable_if<is_integral<_A1>::value, long long>::type
1358
llrint(_A1 __lcpp_x) _NOEXCEPT {return llrint((double)__lcpp_x);}
1359

    
1360
// llround
1361

    
1362
using ::llround;
1363
using ::llroundf;
1364

    
1365
inline _LIBCPP_INLINE_VISIBILITY long long llround(float __lcpp_x) _NOEXCEPT       {return llroundf(__lcpp_x);}
1366
inline _LIBCPP_INLINE_VISIBILITY long long llround(long double __lcpp_x) _NOEXCEPT {return llroundl(__lcpp_x);}
1367

    
1368
template <class _A1>
1369
inline _LIBCPP_INLINE_VISIBILITY
1370
typename enable_if<is_integral<_A1>::value, long long>::type
1371
llround(_A1 __lcpp_x) _NOEXCEPT {return llround((double)__lcpp_x);}
1372

    
1373
// log1p
1374

    
1375
using ::log1p;
1376
using ::log1pf;
1377

    
1378
inline _LIBCPP_INLINE_VISIBILITY float       log1p(float __lcpp_x) _NOEXCEPT       {return log1pf(__lcpp_x);}
1379
inline _LIBCPP_INLINE_VISIBILITY long double log1p(long double __lcpp_x) _NOEXCEPT {return log1pl(__lcpp_x);}
1380

    
1381
template <class _A1>
1382
inline _LIBCPP_INLINE_VISIBILITY
1383
typename enable_if<is_integral<_A1>::value, double>::type
1384
log1p(_A1 __lcpp_x) _NOEXCEPT {return log1p((double)__lcpp_x);}
1385

    
1386
// log2
1387

    
1388
using ::log2;
1389
using ::log2f;
1390

    
1391
inline _LIBCPP_INLINE_VISIBILITY float       log2(float __lcpp_x) _NOEXCEPT       {return log2f(__lcpp_x);}
1392
inline _LIBCPP_INLINE_VISIBILITY long double log2(long double __lcpp_x) _NOEXCEPT {return log2l(__lcpp_x);}
1393

    
1394
template <class _A1>
1395
inline _LIBCPP_INLINE_VISIBILITY
1396
typename enable_if<is_integral<_A1>::value, double>::type
1397
log2(_A1 __lcpp_x) _NOEXCEPT {return log2((double)__lcpp_x);}
1398

    
1399
// logb
1400

    
1401
using ::logb;
1402
using ::logbf;
1403

    
1404
inline _LIBCPP_INLINE_VISIBILITY float       logb(float __lcpp_x) _NOEXCEPT       {return logbf(__lcpp_x);}
1405
inline _LIBCPP_INLINE_VISIBILITY long double logb(long double __lcpp_x) _NOEXCEPT {return logbl(__lcpp_x);}
1406

    
1407
template <class _A1>
1408
inline _LIBCPP_INLINE_VISIBILITY
1409
typename enable_if<is_integral<_A1>::value, double>::type
1410
logb(_A1 __lcpp_x) _NOEXCEPT {return logb((double)__lcpp_x);}
1411

    
1412
// lrint
1413

    
1414
using ::lrint;
1415
using ::lrintf;
1416

    
1417
inline _LIBCPP_INLINE_VISIBILITY long lrint(float __lcpp_x) _NOEXCEPT       {return lrintf(__lcpp_x);}
1418
inline _LIBCPP_INLINE_VISIBILITY long lrint(long double __lcpp_x) _NOEXCEPT {return lrintl(__lcpp_x);}
1419

    
1420
template <class _A1>
1421
inline _LIBCPP_INLINE_VISIBILITY
1422
typename enable_if<is_integral<_A1>::value, long>::type
1423
lrint(_A1 __lcpp_x) _NOEXCEPT {return lrint((double)__lcpp_x);}
1424

    
1425
// lround
1426

    
1427
using ::lround;
1428
using ::lroundf;
1429

    
1430
inline _LIBCPP_INLINE_VISIBILITY long lround(float __lcpp_x) _NOEXCEPT       {return lroundf(__lcpp_x);}
1431
inline _LIBCPP_INLINE_VISIBILITY long lround(long double __lcpp_x) _NOEXCEPT {return lroundl(__lcpp_x);}
1432

    
1433
template <class _A1>
1434
inline _LIBCPP_INLINE_VISIBILITY
1435
typename enable_if<is_integral<_A1>::value, long>::type
1436
lround(_A1 __lcpp_x) _NOEXCEPT {return lround((double)__lcpp_x);}
1437

    
1438
#endif // _LIBCPP_MSVCRT
1439
#endif // __sun__
1440

    
1441
// nan
1442

    
1443
#ifndef _LIBCPP_MSVCRT
1444
using ::nan;
1445
using ::nanf;
1446
#endif // _LIBCPP_MSVCRT
1447

    
1448
#ifndef __sun__
1449
#ifndef _LIBCPP_MSVCRT
1450

    
1451
// nearbyint
1452

    
1453
using ::nearbyint;
1454
using ::nearbyintf;
1455

    
1456
inline _LIBCPP_INLINE_VISIBILITY float       nearbyint(float __lcpp_x) _NOEXCEPT       {return nearbyintf(__lcpp_x);}
1457
inline _LIBCPP_INLINE_VISIBILITY long double nearbyint(long double __lcpp_x) _NOEXCEPT {return nearbyintl(__lcpp_x);}
1458

    
1459
template <class _A1>
1460
inline _LIBCPP_INLINE_VISIBILITY
1461
typename enable_if<is_integral<_A1>::value, double>::type
1462
nearbyint(_A1 __lcpp_x) _NOEXCEPT {return nearbyint((double)__lcpp_x);}
1463

    
1464
// nextafter
1465

    
1466
using ::nextafter;
1467
using ::nextafterf;
1468

    
1469
inline _LIBCPP_INLINE_VISIBILITY float       nextafter(float __lcpp_x, float __lcpp_y) _NOEXCEPT             {return nextafterf(__lcpp_x, __lcpp_y);}
1470
inline _LIBCPP_INLINE_VISIBILITY long double nextafter(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return nextafterl(__lcpp_x, __lcpp_y);}
1471

    
1472
template <class _A1, class _A2>
1473
inline _LIBCPP_INLINE_VISIBILITY
1474
typename __lazy_enable_if
1475
<
1476
    is_arithmetic<_A1>::value &&
1477
    is_arithmetic<_A2>::value,
1478
    __promote<_A1, _A2>
1479
>::type
1480
nextafter(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
1481
{
1482
    typedef typename __promote<_A1, _A2>::type __result_type;
1483
    static_assert((!(is_same<_A1, __result_type>::value &&
1484
                      is_same<_A2, __result_type>::value)), "");
1485
    return nextafter((__result_type)__lcpp_x, (__result_type)__lcpp_y);
1486
}
1487

    
1488
// nexttoward
1489

    
1490
using ::nexttoward;
1491
using ::nexttowardf;
1492

    
1493
inline _LIBCPP_INLINE_VISIBILITY float       nexttoward(float __lcpp_x, long double __lcpp_y) _NOEXCEPT       {return nexttowardf(__lcpp_x, __lcpp_y);}
1494
inline _LIBCPP_INLINE_VISIBILITY long double nexttoward(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return nexttowardl(__lcpp_x, __lcpp_y);}
1495

    
1496
template <class _A1>
1497
inline _LIBCPP_INLINE_VISIBILITY
1498
typename enable_if<is_integral<_A1>::value, double>::type
1499
nexttoward(_A1 __lcpp_x, long double __lcpp_y) _NOEXCEPT {return nexttoward((double)__lcpp_x, __lcpp_y);}
1500

    
1501
// remainder
1502

    
1503
using ::remainder;
1504
using ::remainderf;
1505

    
1506
inline _LIBCPP_INLINE_VISIBILITY float       remainder(float __lcpp_x, float __lcpp_y) _NOEXCEPT             {return remainderf(__lcpp_x, __lcpp_y);}
1507
inline _LIBCPP_INLINE_VISIBILITY long double remainder(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return remainderl(__lcpp_x, __lcpp_y);}
1508

    
1509
template <class _A1, class _A2>
1510
inline _LIBCPP_INLINE_VISIBILITY
1511
typename __lazy_enable_if
1512
<
1513
    is_arithmetic<_A1>::value &&
1514
    is_arithmetic<_A2>::value,
1515
    __promote<_A1, _A2>
1516
>::type
1517
remainder(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
1518
{
1519
    typedef typename __promote<_A1, _A2>::type __result_type;
1520
    static_assert((!(is_same<_A1, __result_type>::value &&
1521
                      is_same<_A2, __result_type>::value)), "");
1522
    return remainder((__result_type)__lcpp_x, (__result_type)__lcpp_y);
1523
}
1524

    
1525
// remquo
1526

    
1527
using ::remquo;
1528
using ::remquof;
1529

    
1530
inline _LIBCPP_INLINE_VISIBILITY float       remquo(float __lcpp_x, float __lcpp_y, int* __lcpp_z) _NOEXCEPT             {return remquof(__lcpp_x, __lcpp_y, __lcpp_z);}
1531
inline _LIBCPP_INLINE_VISIBILITY long double remquo(long double __lcpp_x, long double __lcpp_y, int* __lcpp_z) _NOEXCEPT {return remquol(__lcpp_x, __lcpp_y, __lcpp_z);}
1532

    
1533
template <class _A1, class _A2>
1534
inline _LIBCPP_INLINE_VISIBILITY
1535
typename __lazy_enable_if
1536
<
1537
    is_arithmetic<_A1>::value &&
1538
    is_arithmetic<_A2>::value,
1539
    __promote<_A1, _A2>
1540
>::type
1541
remquo(_A1 __lcpp_x, _A2 __lcpp_y, int* __lcpp_z) _NOEXCEPT
1542
{
1543
    typedef typename __promote<_A1, _A2>::type __result_type;
1544
    static_assert((!(is_same<_A1, __result_type>::value &&
1545
                      is_same<_A2, __result_type>::value)), "");
1546
    return remquo((__result_type)__lcpp_x, (__result_type)__lcpp_y, __lcpp_z);
1547
}
1548

    
1549
// rint
1550

    
1551
using ::rint;
1552
using ::rintf;
1553

    
1554
inline _LIBCPP_INLINE_VISIBILITY float       rint(float __lcpp_x) _NOEXCEPT       {return rintf(__lcpp_x);}
1555
inline _LIBCPP_INLINE_VISIBILITY long double rint(long double __lcpp_x) _NOEXCEPT {return rintl(__lcpp_x);}
1556

    
1557
template <class _A1>
1558
inline _LIBCPP_INLINE_VISIBILITY
1559
typename enable_if<is_integral<_A1>::value, double>::type
1560
rint(_A1 __lcpp_x) _NOEXCEPT {return rint((double)__lcpp_x);}
1561

    
1562
// round
1563

    
1564
using ::round;
1565
using ::roundf;
1566

    
1567
inline _LIBCPP_INLINE_VISIBILITY float       round(float __lcpp_x) _NOEXCEPT       {return roundf(__lcpp_x);}
1568
inline _LIBCPP_INLINE_VISIBILITY long double round(long double __lcpp_x) _NOEXCEPT {return roundl(__lcpp_x);}
1569

    
1570
template <class _A1>
1571
inline _LIBCPP_INLINE_VISIBILITY
1572
typename enable_if<is_integral<_A1>::value, double>::type
1573
round(_A1 __lcpp_x) _NOEXCEPT {return round((double)__lcpp_x);}
1574

    
1575
// scalbln
1576

    
1577
using ::scalbln;
1578
using ::scalblnf;
1579

    
1580
inline _LIBCPP_INLINE_VISIBILITY float       scalbln(float __lcpp_x, long __lcpp_y) _NOEXCEPT       {return scalblnf(__lcpp_x, __lcpp_y);}
1581
inline _LIBCPP_INLINE_VISIBILITY long double scalbln(long double __lcpp_x, long __lcpp_y) _NOEXCEPT {return scalblnl(__lcpp_x, __lcpp_y);}
1582

    
1583
template <class _A1>
1584
inline _LIBCPP_INLINE_VISIBILITY
1585
typename enable_if<is_integral<_A1>::value, double>::type
1586
scalbln(_A1 __lcpp_x, long __lcpp_y) _NOEXCEPT {return scalbln((double)__lcpp_x, __lcpp_y);}
1587

    
1588
// scalbn
1589

    
1590
using ::scalbn;
1591
using ::scalbnf;
1592

    
1593
inline _LIBCPP_INLINE_VISIBILITY float       scalbn(float __lcpp_x, int __lcpp_y) _NOEXCEPT       {return scalbnf(__lcpp_x, __lcpp_y);}
1594
inline _LIBCPP_INLINE_VISIBILITY long double scalbn(long double __lcpp_x, int __lcpp_y) _NOEXCEPT {return scalbnl(__lcpp_x, __lcpp_y);}
1595

    
1596
template <class _A1>
1597
inline _LIBCPP_INLINE_VISIBILITY
1598
typename enable_if<is_integral<_A1>::value, double>::type
1599
scalbn(_A1 __lcpp_x, int __lcpp_y) _NOEXCEPT {return scalbn((double)__lcpp_x, __lcpp_y);}
1600

    
1601
// tgamma
1602

    
1603
using ::tgamma;
1604
using ::tgammaf;
1605

    
1606
inline _LIBCPP_INLINE_VISIBILITY float       tgamma(float __lcpp_x) _NOEXCEPT       {return tgammaf(__lcpp_x);}
1607
inline _LIBCPP_INLINE_VISIBILITY long double tgamma(long double __lcpp_x) _NOEXCEPT {return tgammal(__lcpp_x);}
1608

    
1609
template <class _A1>
1610
inline _LIBCPP_INLINE_VISIBILITY
1611
typename enable_if<is_integral<_A1>::value, double>::type
1612
tgamma(_A1 __lcpp_x) _NOEXCEPT {return tgamma((double)__lcpp_x);}
1613

    
1614
// trunc
1615

    
1616
using ::trunc;
1617
using ::truncf;
1618

    
1619
inline _LIBCPP_INLINE_VISIBILITY float       trunc(float __lcpp_x) _NOEXCEPT       {return truncf(__lcpp_x);}
1620
inline _LIBCPP_INLINE_VISIBILITY long double trunc(long double __lcpp_x) _NOEXCEPT {return truncl(__lcpp_x);}
1621

    
1622
template <class _A1>
1623
inline _LIBCPP_INLINE_VISIBILITY
1624
typename enable_if<is_integral<_A1>::value, double>::type
1625
trunc(_A1 __lcpp_x) _NOEXCEPT {return trunc((double)__lcpp_x);}
1626

    
1627
#endif // !_LIBCPP_MSVCRT
1628

    
1629
using ::acosl;
1630
using ::asinl;
1631
using ::atanl;
1632
using ::atan2l;
1633
using ::ceill;
1634
using ::cosl;
1635
using ::coshl;
1636
using ::expl;
1637
using ::fabsl;
1638
using ::floorl;
1639
using ::fmodl;
1640
using ::frexpl;
1641
using ::ldexpl;
1642
using ::logl;
1643
using ::log10l;
1644
using ::modfl;
1645
using ::powl;
1646
using ::sinl;
1647
using ::sinhl;
1648
using ::sqrtl;
1649
using ::tanl;
1650
#ifndef _LIBCPP_MSVCRT
1651
using ::tanhl;
1652
using ::acoshl;
1653
using ::asinhl;
1654
using ::atanhl;
1655
using ::cbrtl;
1656
#endif  // !_LIBCPP_MSVCRT
1657
using ::copysignl;
1658
#ifndef _LIBCPP_MSVCRT
1659
using ::erfl;
1660
using ::erfcl;
1661
using ::exp2l;
1662
using ::expm1l;
1663
using ::fdiml;
1664
using ::fmal;
1665
using ::fmaxl;
1666
using ::fminl;
1667
using ::hypotl;
1668
using ::ilogbl;
1669
using ::lgammal;
1670
using ::llrintl;
1671
using ::llroundl;
1672
using ::log1pl;
1673
using ::log2l;
1674
using ::logbl;
1675
using ::lrintl;
1676
using ::lroundl;
1677
using ::nanl;
1678
using ::nearbyintl;
1679
using ::nextafterl;
1680
using ::nexttowardl;
1681
using ::remainderl;
1682
using ::remquol;
1683
using ::rintl;
1684
using ::roundl;
1685
using ::scalblnl;
1686
using ::scalbnl;
1687
using ::tgammal;
1688
using ::truncl;
1689
#endif // !_LIBCPP_MSVCRT
1690

    
1691
#else 
1692
using ::lgamma;
1693
using ::lgammaf;
1694
#endif // __sun__
1695
_LIBCPP_END_NAMESPACE_STD
1696

    
1697
#endif  // _LIBCPP_CMATH