Project

General

Profile

Statistics
| Revision:

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

History | View | Annotate | Download (47.1 KB)

1 13 up20180614
// -*- 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