1 // -*- C++ -*-
2 //===---------------------------- math.h ----------------------------------===//
3 //
4 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5 // See https://llvm.org/LICENSE.txt for license information.
6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #ifndef _LIBCPP_MATH_H
11 #define _LIBCPP_MATH_H
12 
13 /*
14     math.h synopsis
15 
16 Macros:
17 
18     HUGE_VAL
19     HUGE_VALF               // C99
20     HUGE_VALL               // C99
21     INFINITY                // C99
22     NAN                     // C99
23     FP_INFINITE             // C99
24     FP_NAN                  // C99
25     FP_NORMAL               // C99
26     FP_SUBNORMAL            // C99
27     FP_ZERO                 // C99
28     FP_FAST_FMA             // C99
29     FP_FAST_FMAF            // C99
30     FP_FAST_FMAL            // C99
31     FP_ILOGB0               // C99
32     FP_ILOGBNAN             // C99
33     MATH_ERRNO              // C99
34     MATH_ERREXCEPT          // C99
35     math_errhandling        // C99
36 
37 Types:
38 
39     float_t                 // C99
40     double_t                // C99
41 
42 // C90
43 
44 floating_point abs(floating_point x);
45 
46 floating_point acos (arithmetic x);
47 float          acosf(float x);
48 long double    acosl(long double x);
49 
50 floating_point asin (arithmetic x);
51 float          asinf(float x);
52 long double    asinl(long double x);
53 
54 floating_point atan (arithmetic x);
55 float          atanf(float x);
56 long double    atanl(long double x);
57 
58 floating_point atan2 (arithmetic y, arithmetic x);
59 float          atan2f(float y, float x);
60 long double    atan2l(long double y, long double x);
61 
62 floating_point ceil (arithmetic x);
63 float          ceilf(float x);
64 long double    ceill(long double x);
65 
66 floating_point cos (arithmetic x);
67 float          cosf(float x);
68 long double    cosl(long double x);
69 
70 floating_point cosh (arithmetic x);
71 float          coshf(float x);
72 long double    coshl(long double x);
73 
74 floating_point exp (arithmetic x);
75 float          expf(float x);
76 long double    expl(long double x);
77 
78 floating_point fabs (arithmetic x);
79 float          fabsf(float x);
80 long double    fabsl(long double x);
81 
82 floating_point floor (arithmetic x);
83 float          floorf(float x);
84 long double    floorl(long double x);
85 
86 floating_point fmod (arithmetic x, arithmetic y);
87 float          fmodf(float x, float y);
88 long double    fmodl(long double x, long double y);
89 
90 floating_point frexp (arithmetic value, int* exp);
91 float          frexpf(float value, int* exp);
92 long double    frexpl(long double value, int* exp);
93 
94 floating_point ldexp (arithmetic value, int exp);
95 float          ldexpf(float value, int exp);
96 long double    ldexpl(long double value, int exp);
97 
98 floating_point log (arithmetic x);
99 float          logf(float x);
100 long double    logl(long double x);
101 
102 floating_point log10 (arithmetic x);
103 float          log10f(float x);
104 long double    log10l(long double x);
105 
106 floating_point modf (floating_point value, floating_point* iptr);
107 float          modff(float value, float* iptr);
108 long double    modfl(long double value, long double* iptr);
109 
110 floating_point pow (arithmetic x, arithmetic y);
111 float          powf(float x, float y);
112 long double    powl(long double x, long double y);
113 
114 floating_point sin (arithmetic x);
115 float          sinf(float x);
116 long double    sinl(long double x);
117 
118 floating_point sinh (arithmetic x);
119 float          sinhf(float x);
120 long double    sinhl(long double x);
121 
122 floating_point sqrt (arithmetic x);
123 float          sqrtf(float x);
124 long double    sqrtl(long double x);
125 
126 floating_point tan (arithmetic x);
127 float          tanf(float x);
128 long double    tanl(long double x);
129 
130 floating_point tanh (arithmetic x);
131 float          tanhf(float x);
132 long double    tanhl(long double x);
133 
134 //  C99
135 
136 bool signbit(arithmetic x);
137 
138 int fpclassify(arithmetic x);
139 
140 bool isfinite(arithmetic x);
141 bool isinf(arithmetic x);
142 bool isnan(arithmetic x);
143 bool isnormal(arithmetic x);
144 
145 bool isgreater(arithmetic x, arithmetic y);
146 bool isgreaterequal(arithmetic x, arithmetic y);
147 bool isless(arithmetic x, arithmetic y);
148 bool islessequal(arithmetic x, arithmetic y);
149 bool islessgreater(arithmetic x, arithmetic y);
150 bool isunordered(arithmetic x, arithmetic y);
151 
152 floating_point acosh (arithmetic x);
153 float          acoshf(float x);
154 long double    acoshl(long double x);
155 
156 floating_point asinh (arithmetic x);
157 float          asinhf(float x);
158 long double    asinhl(long double x);
159 
160 floating_point atanh (arithmetic x);
161 float          atanhf(float x);
162 long double    atanhl(long double x);
163 
164 floating_point cbrt (arithmetic x);
165 float          cbrtf(float x);
166 long double    cbrtl(long double x);
167 
168 floating_point copysign (arithmetic x, arithmetic y);
169 float          copysignf(float x, float y);
170 long double    copysignl(long double x, long double y);
171 
172 floating_point erf (arithmetic x);
173 float          erff(float x);
174 long double    erfl(long double x);
175 
176 floating_point erfc (arithmetic x);
177 float          erfcf(float x);
178 long double    erfcl(long double x);
179 
180 floating_point exp2 (arithmetic x);
181 float          exp2f(float x);
182 long double    exp2l(long double x);
183 
184 floating_point expm1 (arithmetic x);
185 float          expm1f(float x);
186 long double    expm1l(long double x);
187 
188 floating_point fdim (arithmetic x, arithmetic y);
189 float          fdimf(float x, float y);
190 long double    fdiml(long double x, long double y);
191 
192 floating_point fma (arithmetic x, arithmetic y, arithmetic z);
193 float          fmaf(float x, float y, float z);
194 long double    fmal(long double x, long double y, long double z);
195 
196 floating_point fmax (arithmetic x, arithmetic y);
197 float          fmaxf(float x, float y);
198 long double    fmaxl(long double x, long double y);
199 
200 floating_point fmin (arithmetic x, arithmetic y);
201 float          fminf(float x, float y);
202 long double    fminl(long double x, long double y);
203 
204 floating_point hypot (arithmetic x, arithmetic y);
205 float          hypotf(float x, float y);
206 long double    hypotl(long double x, long double y);
207 
208 int ilogb (arithmetic x);
209 int ilogbf(float x);
210 int ilogbl(long double x);
211 
212 floating_point lgamma (arithmetic x);
213 float          lgammaf(float x);
214 long double    lgammal(long double x);
215 
216 long long llrint (arithmetic x);
217 long long llrintf(float x);
218 long long llrintl(long double x);
219 
220 long long llround (arithmetic x);
221 long long llroundf(float x);
222 long long llroundl(long double x);
223 
224 floating_point log1p (arithmetic x);
225 float          log1pf(float x);
226 long double    log1pl(long double x);
227 
228 floating_point log2 (arithmetic x);
229 float          log2f(float x);
230 long double    log2l(long double x);
231 
232 floating_point logb (arithmetic x);
233 float          logbf(float x);
234 long double    logbl(long double x);
235 
236 long lrint (arithmetic x);
237 long lrintf(float x);
238 long lrintl(long double x);
239 
240 long lround (arithmetic x);
241 long lroundf(float x);
242 long lroundl(long double x);
243 
244 double      nan (const char* str);
245 float       nanf(const char* str);
246 long double nanl(const char* str);
247 
248 floating_point nearbyint (arithmetic x);
249 float          nearbyintf(float x);
250 long double    nearbyintl(long double x);
251 
252 floating_point nextafter (arithmetic x, arithmetic y);
253 float          nextafterf(float x, float y);
254 long double    nextafterl(long double x, long double y);
255 
256 floating_point nexttoward (arithmetic x, long double y);
257 float          nexttowardf(float x, long double y);
258 long double    nexttowardl(long double x, long double y);
259 
260 floating_point remainder (arithmetic x, arithmetic y);
261 float          remainderf(float x, float y);
262 long double    remainderl(long double x, long double y);
263 
264 floating_point remquo (arithmetic x, arithmetic y, int* pquo);
265 float          remquof(float x, float y, int* pquo);
266 long double    remquol(long double x, long double y, int* pquo);
267 
268 floating_point rint (arithmetic x);
269 float          rintf(float x);
270 long double    rintl(long double x);
271 
272 floating_point round (arithmetic x);
273 float          roundf(float x);
274 long double    roundl(long double x);
275 
276 floating_point scalbln (arithmetic x, long ex);
277 float          scalblnf(float x, long ex);
278 long double    scalblnl(long double x, long ex);
279 
280 floating_point scalbn (arithmetic x, int ex);
281 float          scalbnf(float x, int ex);
282 long double    scalbnl(long double x, int ex);
283 
284 floating_point tgamma (arithmetic x);
285 float          tgammaf(float x);
286 long double    tgammal(long double x);
287 
288 floating_point trunc (arithmetic x);
289 float          truncf(float x);
290 long double    truncl(long double x);
291 
292 */
293 
294 #include <__config>
295 
296 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
297 #pragma GCC system_header
298 #endif
299 
300 #define _LIBCPP_STDLIB_INCLUDE_NEXT
301 #include <stdlib.h>
302 
303 #include_next <math.h>
304 
305 #ifdef __cplusplus
306 
307 // We support including .h headers inside 'extern "C"' contexts, so switch
308 // back to C++ linkage before including these C++ headers.
309 extern "C++" {
310 
311 #include <type_traits>
312 #include <limits>
313 
314 // signbit
315 
316 #ifdef signbit
317 
318 template <class _A1>
319 _LIBCPP_INLINE_VISIBILITY
320 bool
321 __libcpp_signbit(_A1 __lcpp_x) _NOEXCEPT
322 {
323     return signbit(__lcpp_x);
324 }
325 
326 #undef signbit
327 
328 template <class _A1>
329 inline _LIBCPP_INLINE_VISIBILITY
330 typename std::enable_if<std::is_floating_point<_A1>::value, bool>::type
331 signbit(_A1 __lcpp_x) _NOEXCEPT
332 {
333     return __libcpp_signbit((typename std::__promote<_A1>::type)__lcpp_x);
334 }
335 
336 template <class _A1>
337 inline _LIBCPP_INLINE_VISIBILITY
338 typename std::enable_if<
339     std::is_integral<_A1>::value && std::is_signed<_A1>::value, bool>::type
340 signbit(_A1 __lcpp_x) _NOEXCEPT
341 { return __lcpp_x < 0; }
342 
343 template <class _A1>
344 inline _LIBCPP_INLINE_VISIBILITY
345 typename std::enable_if<
346     std::is_integral<_A1>::value && !std::is_signed<_A1>::value, bool>::type
347 signbit(_A1) _NOEXCEPT
348 { return false; }
349 
350 #elif defined(_LIBCPP_MSVCRT)
351 
352 template <typename _A1>
353 inline _LIBCPP_INLINE_VISIBILITY
354 typename std::enable_if<std::is_floating_point<_A1>::value, bool>::type
355 signbit(_A1 __lcpp_x) _NOEXCEPT
356 {
357   return ::signbit(static_cast<typename std::__promote<_A1>::type>(__lcpp_x));
358 }
359 
360 template <class _A1>
361 inline _LIBCPP_INLINE_VISIBILITY
362 typename std::enable_if<
363     std::is_integral<_A1>::value && std::is_signed<_A1>::value, bool>::type
364 signbit(_A1 __lcpp_x) _NOEXCEPT
365 { return __lcpp_x < 0; }
366 
367 template <class _A1>
368 inline _LIBCPP_INLINE_VISIBILITY
369 typename std::enable_if<
370     std::is_integral<_A1>::value && !std::is_signed<_A1>::value, bool>::type
371 signbit(_A1) _NOEXCEPT
372 { return false; }
373 
374 #endif  // signbit
375 
376 // fpclassify
377 
378 #ifdef fpclassify
379 
380 template <class _A1>
381 _LIBCPP_INLINE_VISIBILITY
382 int
383 __libcpp_fpclassify(_A1 __lcpp_x) _NOEXCEPT
384 {
385     return fpclassify(__lcpp_x);
386 }
387 
388 #undef fpclassify
389 
390 template <class _A1>
391 inline _LIBCPP_INLINE_VISIBILITY
392 typename std::enable_if<std::is_floating_point<_A1>::value, int>::type
393 fpclassify(_A1 __lcpp_x) _NOEXCEPT
394 {
395     return __libcpp_fpclassify((typename std::__promote<_A1>::type)__lcpp_x);
396 }
397 
398 template <class _A1>
399 inline _LIBCPP_INLINE_VISIBILITY
400 typename std::enable_if<std::is_integral<_A1>::value, int>::type
401 fpclassify(_A1 __lcpp_x) _NOEXCEPT
402 { return __lcpp_x == 0 ? FP_ZERO : FP_NORMAL; }
403 
404 #elif defined(_LIBCPP_MSVCRT)
405 
406 template <typename _A1>
407 inline _LIBCPP_INLINE_VISIBILITY
408 typename std::enable_if<std::is_floating_point<_A1>::value, bool>::type
409 fpclassify(_A1 __lcpp_x) _NOEXCEPT
410 {
411   return ::fpclassify(static_cast<typename std::__promote<_A1>::type>(__lcpp_x));
412 }
413 
414 template <class _A1>
415 inline _LIBCPP_INLINE_VISIBILITY
416 typename std::enable_if<std::is_integral<_A1>::value, int>::type
417 fpclassify(_A1 __lcpp_x) _NOEXCEPT
418 { return __lcpp_x == 0 ? FP_ZERO : FP_NORMAL; }
419 
420 #endif  // fpclassify
421 
422 // isfinite
423 
424 #ifdef isfinite
425 
426 template <class _A1>
427 _LIBCPP_INLINE_VISIBILITY
428 bool
429 __libcpp_isfinite(_A1 __lcpp_x) _NOEXCEPT
430 {
431     return isfinite(__lcpp_x);
432 }
433 
434 #undef isfinite
435 
436 template <class _A1>
437 inline _LIBCPP_INLINE_VISIBILITY
438 typename std::enable_if<
439     std::is_arithmetic<_A1>::value && std::numeric_limits<_A1>::has_infinity,
440     bool>::type
441 isfinite(_A1 __lcpp_x) _NOEXCEPT
442 {
443     return __libcpp_isfinite((typename std::__promote<_A1>::type)__lcpp_x);
444 }
445 
446 template <class _A1>
447 inline _LIBCPP_INLINE_VISIBILITY
448 typename std::enable_if<
449     std::is_arithmetic<_A1>::value && !std::numeric_limits<_A1>::has_infinity,
450     bool>::type
451 isfinite(_A1) _NOEXCEPT
452 { return true; }
453 
454 #endif  // isfinite
455 
456 // isinf
457 
458 #ifdef isinf
459 
460 template <class _A1>
461 _LIBCPP_INLINE_VISIBILITY
462 bool
463 __libcpp_isinf(_A1 __lcpp_x) _NOEXCEPT
464 {
465     return isinf(__lcpp_x);
466 }
467 
468 #undef isinf
469 
470 template <class _A1>
471 inline _LIBCPP_INLINE_VISIBILITY
472 typename std::enable_if<
473     std::is_arithmetic<_A1>::value && std::numeric_limits<_A1>::has_infinity,
474     bool>::type
475 isinf(_A1 __lcpp_x) _NOEXCEPT
476 {
477     return __libcpp_isinf((typename std::__promote<_A1>::type)__lcpp_x);
478 }
479 
480 template <class _A1>
481 inline _LIBCPP_INLINE_VISIBILITY
482 typename std::enable_if<
483     std::is_arithmetic<_A1>::value && !std::numeric_limits<_A1>::has_infinity,
484     bool>::type
485 isinf(_A1) _NOEXCEPT
486 { return false; }
487 
488 #ifdef _LIBCPP_PREFERRED_OVERLOAD
489 inline _LIBCPP_INLINE_VISIBILITY
490 bool
491 isinf(float __lcpp_x) _NOEXCEPT { return __libcpp_isinf(__lcpp_x); }
492 
493 inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
494 bool
495 isinf(double __lcpp_x) _NOEXCEPT { return __libcpp_isinf(__lcpp_x); }
496 
497 inline _LIBCPP_INLINE_VISIBILITY
498 bool
499 isinf(long double __lcpp_x) _NOEXCEPT { return __libcpp_isinf(__lcpp_x); }
500 #endif
501 
502 #endif  // isinf
503 
504 // isnan
505 
506 #ifdef isnan
507 
508 template <class _A1>
509 _LIBCPP_INLINE_VISIBILITY
510 bool
511 __libcpp_isnan(_A1 __lcpp_x) _NOEXCEPT
512 {
513 #if __has_builtin(__builtin_isnan)
514     return __builtin_isnan(__lcpp_x);
515 #else
516     return isnan(__lcpp_x);
517 #endif
518 }
519 
520 #undef isnan
521 
522 template <class _A1>
523 inline _LIBCPP_INLINE_VISIBILITY
524 typename std::enable_if<std::is_floating_point<_A1>::value, bool>::type
525 isnan(_A1 __lcpp_x) _NOEXCEPT
526 {
527     return __libcpp_isnan((typename std::__promote<_A1>::type)__lcpp_x);
528 }
529 
530 template <class _A1>
531 inline _LIBCPP_INLINE_VISIBILITY
532 typename std::enable_if<std::is_integral<_A1>::value, bool>::type
533 isnan(_A1) _NOEXCEPT
534 { return false; }
535 
536 #ifdef _LIBCPP_PREFERRED_OVERLOAD
537 inline _LIBCPP_INLINE_VISIBILITY
538 bool
539 isnan(float __lcpp_x) _NOEXCEPT { return __libcpp_isnan(__lcpp_x); }
540 
541 inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
542 bool
543 isnan(double __lcpp_x) _NOEXCEPT { return __libcpp_isnan(__lcpp_x); }
544 
545 inline _LIBCPP_INLINE_VISIBILITY
546 bool
547 isnan(long double __lcpp_x) _NOEXCEPT { return __libcpp_isnan(__lcpp_x); }
548 #endif
549 
550 #endif  // isnan
551 
552 // isnormal
553 
554 #ifdef isnormal
555 
556 template <class _A1>
557 _LIBCPP_INLINE_VISIBILITY
558 bool
559 __libcpp_isnormal(_A1 __lcpp_x) _NOEXCEPT
560 {
561     return isnormal(__lcpp_x);
562 }
563 
564 #undef isnormal
565 
566 template <class _A1>
567 inline _LIBCPP_INLINE_VISIBILITY
568 typename std::enable_if<std::is_floating_point<_A1>::value, bool>::type
569 isnormal(_A1 __lcpp_x) _NOEXCEPT
570 {
571     return __libcpp_isnormal((typename std::__promote<_A1>::type)__lcpp_x);
572 }
573 
574 template <class _A1>
575 inline _LIBCPP_INLINE_VISIBILITY
576 typename std::enable_if<std::is_integral<_A1>::value, bool>::type
577 isnormal(_A1 __lcpp_x) _NOEXCEPT
578 { return __lcpp_x != 0; }
579 
580 #endif  // isnormal
581 
582 // isgreater
583 
584 #ifdef isgreater
585 
586 template <class _A1, class _A2>
587 _LIBCPP_INLINE_VISIBILITY
588 bool
589 __libcpp_isgreater(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
590 {
591     return isgreater(__lcpp_x, __lcpp_y);
592 }
593 
594 #undef isgreater
595 
596 template <class _A1, class _A2>
597 inline _LIBCPP_INLINE_VISIBILITY
598 typename std::enable_if
599 <
600     std::is_arithmetic<_A1>::value &&
601     std::is_arithmetic<_A2>::value,
602     bool
603 >::type
604 isgreater(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
605 {
606     typedef typename std::__promote<_A1, _A2>::type type;
607     return __libcpp_isgreater((type)__lcpp_x, (type)__lcpp_y);
608 }
609 
610 #endif  // isgreater
611 
612 // isgreaterequal
613 
614 #ifdef isgreaterequal
615 
616 template <class _A1, class _A2>
617 _LIBCPP_INLINE_VISIBILITY
618 bool
619 __libcpp_isgreaterequal(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
620 {
621     return isgreaterequal(__lcpp_x, __lcpp_y);
622 }
623 
624 #undef isgreaterequal
625 
626 template <class _A1, class _A2>
627 inline _LIBCPP_INLINE_VISIBILITY
628 typename std::enable_if
629 <
630     std::is_arithmetic<_A1>::value &&
631     std::is_arithmetic<_A2>::value,
632     bool
633 >::type
634 isgreaterequal(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
635 {
636     typedef typename std::__promote<_A1, _A2>::type type;
637     return __libcpp_isgreaterequal((type)__lcpp_x, (type)__lcpp_y);
638 }
639 
640 #endif  // isgreaterequal
641 
642 // isless
643 
644 #ifdef isless
645 
646 template <class _A1, class _A2>
647 _LIBCPP_INLINE_VISIBILITY
648 bool
649 __libcpp_isless(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
650 {
651     return isless(__lcpp_x, __lcpp_y);
652 }
653 
654 #undef isless
655 
656 template <class _A1, class _A2>
657 inline _LIBCPP_INLINE_VISIBILITY
658 typename std::enable_if
659 <
660     std::is_arithmetic<_A1>::value &&
661     std::is_arithmetic<_A2>::value,
662     bool
663 >::type
664 isless(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
665 {
666     typedef typename std::__promote<_A1, _A2>::type type;
667     return __libcpp_isless((type)__lcpp_x, (type)__lcpp_y);
668 }
669 
670 #endif  // isless
671 
672 // islessequal
673 
674 #ifdef islessequal
675 
676 template <class _A1, class _A2>
677 _LIBCPP_INLINE_VISIBILITY
678 bool
679 __libcpp_islessequal(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
680 {
681     return islessequal(__lcpp_x, __lcpp_y);
682 }
683 
684 #undef islessequal
685 
686 template <class _A1, class _A2>
687 inline _LIBCPP_INLINE_VISIBILITY
688 typename std::enable_if
689 <
690     std::is_arithmetic<_A1>::value &&
691     std::is_arithmetic<_A2>::value,
692     bool
693 >::type
694 islessequal(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
695 {
696     typedef typename std::__promote<_A1, _A2>::type type;
697     return __libcpp_islessequal((type)__lcpp_x, (type)__lcpp_y);
698 }
699 
700 #endif  // islessequal
701 
702 // islessgreater
703 
704 #ifdef islessgreater
705 
706 template <class _A1, class _A2>
707 _LIBCPP_INLINE_VISIBILITY
708 bool
709 __libcpp_islessgreater(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
710 {
711     return islessgreater(__lcpp_x, __lcpp_y);
712 }
713 
714 #undef islessgreater
715 
716 template <class _A1, class _A2>
717 inline _LIBCPP_INLINE_VISIBILITY
718 typename std::enable_if
719 <
720     std::is_arithmetic<_A1>::value &&
721     std::is_arithmetic<_A2>::value,
722     bool
723 >::type
724 islessgreater(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
725 {
726     typedef typename std::__promote<_A1, _A2>::type type;
727     return __libcpp_islessgreater((type)__lcpp_x, (type)__lcpp_y);
728 }
729 
730 #endif  // islessgreater
731 
732 // isunordered
733 
734 #ifdef isunordered
735 
736 template <class _A1, class _A2>
737 _LIBCPP_INLINE_VISIBILITY
738 bool
739 __libcpp_isunordered(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
740 {
741     return isunordered(__lcpp_x, __lcpp_y);
742 }
743 
744 #undef isunordered
745 
746 template <class _A1, class _A2>
747 inline _LIBCPP_INLINE_VISIBILITY
748 typename std::enable_if
749 <
750     std::is_arithmetic<_A1>::value &&
751     std::is_arithmetic<_A2>::value,
752     bool
753 >::type
754 isunordered(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
755 {
756     typedef typename std::__promote<_A1, _A2>::type type;
757     return __libcpp_isunordered((type)__lcpp_x, (type)__lcpp_y);
758 }
759 
760 #endif  // isunordered
761 
762 // abs
763 
764 #undef abs
765 #undef labs
766 #ifndef _LIBCPP_HAS_NO_LONG_LONG
767 #undef llabs
768 #endif
769 
770 // MSVCRT already has the correct prototype in <stdlib.h> if __cplusplus is defined
771 #if !defined(_LIBCPP_MSVCRT) && !defined(__sun__) && !defined(_AIX)
772 inline _LIBCPP_INLINE_VISIBILITY long abs(long __x) _NOEXCEPT {
773   return ::labs(__x);
774 }
775 #ifndef _LIBCPP_HAS_NO_LONG_LONG
776 inline _LIBCPP_INLINE_VISIBILITY long long abs(long long __x) _NOEXCEPT {
777   return ::llabs(__x);
778 }
779 #endif // _LIBCPP_HAS_NO_LONG_LONG
780 #endif // !defined(_LIBCPP_MSVCRT) && !defined(__sun__) && !defined(_AIX)
781 
782 
783 #if !(defined(_AIX) || defined(__sun__))
784 inline _LIBCPP_INLINE_VISIBILITY float abs(float __lcpp_x) _NOEXCEPT {
785   return ::fabsf(__lcpp_x);
786 }
787 
788 inline _LIBCPP_INLINE_VISIBILITY double abs(double __lcpp_x) _NOEXCEPT {
789   return ::fabs(__lcpp_x);
790 }
791 
792 inline _LIBCPP_INLINE_VISIBILITY long double
793 abs(long double __lcpp_x) _NOEXCEPT {
794   return ::fabsl(__lcpp_x);
795 }
796 #endif // !(defined(_AIX) || defined(__sun__))
797 
798 // div
799 
800 #undef div
801 #undef ldiv
802 #ifndef _LIBCPP_HAS_NO_LONG_LONG
803 #undef lldiv
804 #endif
805 
806 // MSVCRT already has the correct prototype in <stdlib.h> if __cplusplus is defined
807 #if !defined(_LIBCPP_MSVCRT) && !defined(__sun__) && !defined(_AIX)
808 inline _LIBCPP_INLINE_VISIBILITY ldiv_t div(long __x, long __y) _NOEXCEPT {
809   return ::ldiv(__x, __y);
810 }
811 #ifndef _LIBCPP_HAS_NO_LONG_LONG
812 inline _LIBCPP_INLINE_VISIBILITY lldiv_t div(long long __x,
813                                              long long __y) _NOEXCEPT {
814   return ::lldiv(__x, __y);
815 }
816 #endif // _LIBCPP_HAS_NO_LONG_LONG
817 #endif // _LIBCPP_MSVCRT / __sun__ / _AIX
818 
819 // acos
820 
821 #if !(defined(_AIX) || defined(__sun__))
822 inline _LIBCPP_INLINE_VISIBILITY float       acos(float __lcpp_x) _NOEXCEPT       {return ::acosf(__lcpp_x);}
823 inline _LIBCPP_INLINE_VISIBILITY long double acos(long double __lcpp_x) _NOEXCEPT {return ::acosl(__lcpp_x);}
824 #endif
825 
826 template <class _A1>
827 inline _LIBCPP_INLINE_VISIBILITY
828 typename std::enable_if<std::is_integral<_A1>::value, double>::type
829 acos(_A1 __lcpp_x) _NOEXCEPT {return ::acos((double)__lcpp_x);}
830 
831 // asin
832 
833 #if !(defined(_AIX) || defined(__sun__))
834 inline _LIBCPP_INLINE_VISIBILITY float       asin(float __lcpp_x) _NOEXCEPT       {return ::asinf(__lcpp_x);}
835 inline _LIBCPP_INLINE_VISIBILITY long double asin(long double __lcpp_x) _NOEXCEPT {return ::asinl(__lcpp_x);}
836 #endif
837 
838 template <class _A1>
839 inline _LIBCPP_INLINE_VISIBILITY
840 typename std::enable_if<std::is_integral<_A1>::value, double>::type
841 asin(_A1 __lcpp_x) _NOEXCEPT {return ::asin((double)__lcpp_x);}
842 
843 // atan
844 
845 #if !(defined(_AIX) || defined(__sun__))
846 inline _LIBCPP_INLINE_VISIBILITY float       atan(float __lcpp_x) _NOEXCEPT       {return ::atanf(__lcpp_x);}
847 inline _LIBCPP_INLINE_VISIBILITY long double atan(long double __lcpp_x) _NOEXCEPT {return ::atanl(__lcpp_x);}
848 #endif
849 
850 template <class _A1>
851 inline _LIBCPP_INLINE_VISIBILITY
852 typename std::enable_if<std::is_integral<_A1>::value, double>::type
853 atan(_A1 __lcpp_x) _NOEXCEPT {return ::atan((double)__lcpp_x);}
854 
855 // atan2
856 
857 #if !(defined(_AIX) || defined(__sun__))
858 inline _LIBCPP_INLINE_VISIBILITY float       atan2(float __lcpp_y, float __lcpp_x) _NOEXCEPT             {return ::atan2f(__lcpp_y, __lcpp_x);}
859 inline _LIBCPP_INLINE_VISIBILITY long double atan2(long double __lcpp_y, long double __lcpp_x) _NOEXCEPT {return ::atan2l(__lcpp_y, __lcpp_x);}
860 #endif
861 
862 template <class _A1, class _A2>
863 inline _LIBCPP_INLINE_VISIBILITY
864 typename std::_EnableIf
865 <
866     std::is_arithmetic<_A1>::value &&
867     std::is_arithmetic<_A2>::value,
868     std::__promote<_A1, _A2>
869 >::type
870 atan2(_A1 __lcpp_y, _A2 __lcpp_x) _NOEXCEPT
871 {
872     typedef typename std::__promote<_A1, _A2>::type __result_type;
873     static_assert((!(std::_IsSame<_A1, __result_type>::value &&
874                      std::_IsSame<_A2, __result_type>::value)), "");
875     return ::atan2((__result_type)__lcpp_y, (__result_type)__lcpp_x);
876 }
877 
878 // ceil
879 
880 #if !(defined(_AIX) || defined(__sun__))
881 inline _LIBCPP_INLINE_VISIBILITY float       ceil(float __lcpp_x) _NOEXCEPT       {return ::ceilf(__lcpp_x);}
882 inline _LIBCPP_INLINE_VISIBILITY long double ceil(long double __lcpp_x) _NOEXCEPT {return ::ceill(__lcpp_x);}
883 #endif
884 
885 template <class _A1>
886 inline _LIBCPP_INLINE_VISIBILITY
887 typename std::enable_if<std::is_integral<_A1>::value, double>::type
888 ceil(_A1 __lcpp_x) _NOEXCEPT {return ::ceil((double)__lcpp_x);}
889 
890 // cos
891 
892 #if !(defined(_AIX) || defined(__sun__))
893 inline _LIBCPP_INLINE_VISIBILITY float       cos(float __lcpp_x) _NOEXCEPT       {return ::cosf(__lcpp_x);}
894 inline _LIBCPP_INLINE_VISIBILITY long double cos(long double __lcpp_x) _NOEXCEPT {return ::cosl(__lcpp_x);}
895 #endif
896 
897 template <class _A1>
898 inline _LIBCPP_INLINE_VISIBILITY
899 typename std::enable_if<std::is_integral<_A1>::value, double>::type
900 cos(_A1 __lcpp_x) _NOEXCEPT {return ::cos((double)__lcpp_x);}
901 
902 // cosh
903 
904 #if !(defined(_AIX) || defined(__sun__))
905 inline _LIBCPP_INLINE_VISIBILITY float       cosh(float __lcpp_x) _NOEXCEPT       {return ::coshf(__lcpp_x);}
906 inline _LIBCPP_INLINE_VISIBILITY long double cosh(long double __lcpp_x) _NOEXCEPT {return ::coshl(__lcpp_x);}
907 #endif
908 
909 template <class _A1>
910 inline _LIBCPP_INLINE_VISIBILITY
911 typename std::enable_if<std::is_integral<_A1>::value, double>::type
912 cosh(_A1 __lcpp_x) _NOEXCEPT {return ::cosh((double)__lcpp_x);}
913 
914 // exp
915 
916 #if !(defined(_AIX) || defined(__sun__))
917 inline _LIBCPP_INLINE_VISIBILITY float       exp(float __lcpp_x) _NOEXCEPT       {return ::expf(__lcpp_x);}
918 inline _LIBCPP_INLINE_VISIBILITY long double exp(long double __lcpp_x) _NOEXCEPT {return ::expl(__lcpp_x);}
919 #endif
920 
921 template <class _A1>
922 inline _LIBCPP_INLINE_VISIBILITY
923 typename std::enable_if<std::is_integral<_A1>::value, double>::type
924 exp(_A1 __lcpp_x) _NOEXCEPT {return ::exp((double)__lcpp_x);}
925 
926 // fabs
927 
928 #if !(defined(_AIX) || defined(__sun__))
929 inline _LIBCPP_INLINE_VISIBILITY float       fabs(float __lcpp_x) _NOEXCEPT       {return ::fabsf(__lcpp_x);}
930 inline _LIBCPP_INLINE_VISIBILITY long double fabs(long double __lcpp_x) _NOEXCEPT {return ::fabsl(__lcpp_x);}
931 #endif
932 
933 template <class _A1>
934 inline _LIBCPP_INLINE_VISIBILITY
935 typename std::enable_if<std::is_integral<_A1>::value, double>::type
936 fabs(_A1 __lcpp_x) _NOEXCEPT {return ::fabs((double)__lcpp_x);}
937 
938 // floor
939 
940 #if !(defined(_AIX) || defined(__sun__))
941 inline _LIBCPP_INLINE_VISIBILITY float       floor(float __lcpp_x) _NOEXCEPT       {return ::floorf(__lcpp_x);}
942 inline _LIBCPP_INLINE_VISIBILITY long double floor(long double __lcpp_x) _NOEXCEPT {return ::floorl(__lcpp_x);}
943 #endif
944 
945 template <class _A1>
946 inline _LIBCPP_INLINE_VISIBILITY
947 typename std::enable_if<std::is_integral<_A1>::value, double>::type
948 floor(_A1 __lcpp_x) _NOEXCEPT {return ::floor((double)__lcpp_x);}
949 
950 // fmod
951 
952 #if !(defined(_AIX) || defined(__sun__))
953 inline _LIBCPP_INLINE_VISIBILITY float       fmod(float __lcpp_x, float __lcpp_y) _NOEXCEPT             {return ::fmodf(__lcpp_x, __lcpp_y);}
954 inline _LIBCPP_INLINE_VISIBILITY long double fmod(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::fmodl(__lcpp_x, __lcpp_y);}
955 #endif
956 
957 template <class _A1, class _A2>
958 inline _LIBCPP_INLINE_VISIBILITY
959 typename std::_EnableIf
960 <
961     std::is_arithmetic<_A1>::value &&
962     std::is_arithmetic<_A2>::value,
963     std::__promote<_A1, _A2>
964 >::type
965 fmod(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
966 {
967     typedef typename std::__promote<_A1, _A2>::type __result_type;
968     static_assert((!(std::_IsSame<_A1, __result_type>::value &&
969                      std::_IsSame<_A2, __result_type>::value)), "");
970     return ::fmod((__result_type)__lcpp_x, (__result_type)__lcpp_y);
971 }
972 
973 // frexp
974 
975 #if !(defined(_AIX) || defined(__sun__))
976 inline _LIBCPP_INLINE_VISIBILITY float       frexp(float __lcpp_x, int* __lcpp_e) _NOEXCEPT       {return ::frexpf(__lcpp_x, __lcpp_e);}
977 inline _LIBCPP_INLINE_VISIBILITY long double frexp(long double __lcpp_x, int* __lcpp_e) _NOEXCEPT {return ::frexpl(__lcpp_x, __lcpp_e);}
978 #endif
979 
980 template <class _A1>
981 inline _LIBCPP_INLINE_VISIBILITY
982 typename std::enable_if<std::is_integral<_A1>::value, double>::type
983 frexp(_A1 __lcpp_x, int* __lcpp_e) _NOEXCEPT {return ::frexp((double)__lcpp_x, __lcpp_e);}
984 
985 // ldexp
986 
987 #if !(defined(_AIX) || defined(__sun__))
988 inline _LIBCPP_INLINE_VISIBILITY float       ldexp(float __lcpp_x, int __lcpp_e) _NOEXCEPT       {return ::ldexpf(__lcpp_x, __lcpp_e);}
989 inline _LIBCPP_INLINE_VISIBILITY long double ldexp(long double __lcpp_x, int __lcpp_e) _NOEXCEPT {return ::ldexpl(__lcpp_x, __lcpp_e);}
990 #endif
991 
992 template <class _A1>
993 inline _LIBCPP_INLINE_VISIBILITY
994 typename std::enable_if<std::is_integral<_A1>::value, double>::type
995 ldexp(_A1 __lcpp_x, int __lcpp_e) _NOEXCEPT {return ::ldexp((double)__lcpp_x, __lcpp_e);}
996 
997 // log
998 
999 #if !(defined(_AIX) || defined(__sun__))
1000 inline _LIBCPP_INLINE_VISIBILITY float       log(float __lcpp_x) _NOEXCEPT       {return ::logf(__lcpp_x);}
1001 inline _LIBCPP_INLINE_VISIBILITY long double log(long double __lcpp_x) _NOEXCEPT {return ::logl(__lcpp_x);}
1002 #endif
1003 
1004 template <class _A1>
1005 inline _LIBCPP_INLINE_VISIBILITY
1006 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1007 log(_A1 __lcpp_x) _NOEXCEPT {return ::log((double)__lcpp_x);}
1008 
1009 // log10
1010 
1011 #if !(defined(_AIX) || defined(__sun__))
1012 inline _LIBCPP_INLINE_VISIBILITY float       log10(float __lcpp_x) _NOEXCEPT       {return ::log10f(__lcpp_x);}
1013 inline _LIBCPP_INLINE_VISIBILITY long double log10(long double __lcpp_x) _NOEXCEPT {return ::log10l(__lcpp_x);}
1014 #endif
1015 
1016 template <class _A1>
1017 inline _LIBCPP_INLINE_VISIBILITY
1018 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1019 log10(_A1 __lcpp_x) _NOEXCEPT {return ::log10((double)__lcpp_x);}
1020 
1021 // modf
1022 
1023 #if !(defined(_AIX) || defined(__sun__))
1024 inline _LIBCPP_INLINE_VISIBILITY float       modf(float __lcpp_x, float* __lcpp_y) _NOEXCEPT             {return ::modff(__lcpp_x, __lcpp_y);}
1025 inline _LIBCPP_INLINE_VISIBILITY long double modf(long double __lcpp_x, long double* __lcpp_y) _NOEXCEPT {return ::modfl(__lcpp_x, __lcpp_y);}
1026 #endif
1027 
1028 // pow
1029 
1030 #if !(defined(_AIX) || defined(__sun__))
1031 inline _LIBCPP_INLINE_VISIBILITY float       pow(float __lcpp_x, float __lcpp_y) _NOEXCEPT             {return ::powf(__lcpp_x, __lcpp_y);}
1032 inline _LIBCPP_INLINE_VISIBILITY long double pow(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::powl(__lcpp_x, __lcpp_y);}
1033 #endif
1034 
1035 template <class _A1, class _A2>
1036 inline _LIBCPP_INLINE_VISIBILITY
1037 typename std::_EnableIf
1038 <
1039     std::is_arithmetic<_A1>::value &&
1040     std::is_arithmetic<_A2>::value,
1041     std::__promote<_A1, _A2>
1042 >::type
1043 pow(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
1044 {
1045     typedef typename std::__promote<_A1, _A2>::type __result_type;
1046     static_assert((!(std::_IsSame<_A1, __result_type>::value &&
1047                      std::_IsSame<_A2, __result_type>::value)), "");
1048     return ::pow((__result_type)__lcpp_x, (__result_type)__lcpp_y);
1049 }
1050 
1051 // sin
1052 
1053 #if !(defined(_AIX) || defined(__sun__))
1054 inline _LIBCPP_INLINE_VISIBILITY float       sin(float __lcpp_x) _NOEXCEPT       {return ::sinf(__lcpp_x);}
1055 inline _LIBCPP_INLINE_VISIBILITY long double sin(long double __lcpp_x) _NOEXCEPT {return ::sinl(__lcpp_x);}
1056 #endif
1057 
1058 template <class _A1>
1059 inline _LIBCPP_INLINE_VISIBILITY
1060 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1061 sin(_A1 __lcpp_x) _NOEXCEPT {return ::sin((double)__lcpp_x);}
1062 
1063 // sinh
1064 
1065 #if !(defined(_AIX) || defined(__sun__))
1066 inline _LIBCPP_INLINE_VISIBILITY float       sinh(float __lcpp_x) _NOEXCEPT       {return ::sinhf(__lcpp_x);}
1067 inline _LIBCPP_INLINE_VISIBILITY long double sinh(long double __lcpp_x) _NOEXCEPT {return ::sinhl(__lcpp_x);}
1068 #endif
1069 
1070 template <class _A1>
1071 inline _LIBCPP_INLINE_VISIBILITY
1072 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1073 sinh(_A1 __lcpp_x) _NOEXCEPT {return ::sinh((double)__lcpp_x);}
1074 
1075 // sqrt
1076 
1077 #if !(defined(_AIX) || defined(__sun__))
1078 inline _LIBCPP_INLINE_VISIBILITY float       sqrt(float __lcpp_x) _NOEXCEPT       {return ::sqrtf(__lcpp_x);}
1079 inline _LIBCPP_INLINE_VISIBILITY long double sqrt(long double __lcpp_x) _NOEXCEPT {return ::sqrtl(__lcpp_x);}
1080 #endif
1081 
1082 template <class _A1>
1083 inline _LIBCPP_INLINE_VISIBILITY
1084 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1085 sqrt(_A1 __lcpp_x) _NOEXCEPT {return ::sqrt((double)__lcpp_x);}
1086 
1087 // tan
1088 
1089 #if !(defined(_AIX) || defined(__sun__))
1090 inline _LIBCPP_INLINE_VISIBILITY float       tan(float __lcpp_x) _NOEXCEPT       {return ::tanf(__lcpp_x);}
1091 inline _LIBCPP_INLINE_VISIBILITY long double tan(long double __lcpp_x) _NOEXCEPT {return ::tanl(__lcpp_x);}
1092 #endif
1093 
1094 template <class _A1>
1095 inline _LIBCPP_INLINE_VISIBILITY
1096 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1097 tan(_A1 __lcpp_x) _NOEXCEPT {return ::tan((double)__lcpp_x);}
1098 
1099 // tanh
1100 
1101 #if !(defined(_AIX) || defined(__sun__))
1102 inline _LIBCPP_INLINE_VISIBILITY float       tanh(float __lcpp_x) _NOEXCEPT       {return ::tanhf(__lcpp_x);}
1103 inline _LIBCPP_INLINE_VISIBILITY long double tanh(long double __lcpp_x) _NOEXCEPT {return ::tanhl(__lcpp_x);}
1104 #endif
1105 
1106 template <class _A1>
1107 inline _LIBCPP_INLINE_VISIBILITY
1108 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1109 tanh(_A1 __lcpp_x) _NOEXCEPT {return ::tanh((double)__lcpp_x);}
1110 
1111 // acosh
1112 
1113 inline _LIBCPP_INLINE_VISIBILITY float       acosh(float __lcpp_x) _NOEXCEPT       {return ::acoshf(__lcpp_x);}
1114 inline _LIBCPP_INLINE_VISIBILITY long double acosh(long double __lcpp_x) _NOEXCEPT {return ::acoshl(__lcpp_x);}
1115 
1116 template <class _A1>
1117 inline _LIBCPP_INLINE_VISIBILITY
1118 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1119 acosh(_A1 __lcpp_x) _NOEXCEPT {return ::acosh((double)__lcpp_x);}
1120 
1121 // asinh
1122 
1123 inline _LIBCPP_INLINE_VISIBILITY float       asinh(float __lcpp_x) _NOEXCEPT       {return ::asinhf(__lcpp_x);}
1124 inline _LIBCPP_INLINE_VISIBILITY long double asinh(long double __lcpp_x) _NOEXCEPT {return ::asinhl(__lcpp_x);}
1125 
1126 template <class _A1>
1127 inline _LIBCPP_INLINE_VISIBILITY
1128 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1129 asinh(_A1 __lcpp_x) _NOEXCEPT {return ::asinh((double)__lcpp_x);}
1130 
1131 // atanh
1132 
1133 inline _LIBCPP_INLINE_VISIBILITY float       atanh(float __lcpp_x) _NOEXCEPT       {return ::atanhf(__lcpp_x);}
1134 inline _LIBCPP_INLINE_VISIBILITY long double atanh(long double __lcpp_x) _NOEXCEPT {return ::atanhl(__lcpp_x);}
1135 
1136 template <class _A1>
1137 inline _LIBCPP_INLINE_VISIBILITY
1138 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1139 atanh(_A1 __lcpp_x) _NOEXCEPT {return ::atanh((double)__lcpp_x);}
1140 
1141 // cbrt
1142 
1143 inline _LIBCPP_INLINE_VISIBILITY float       cbrt(float __lcpp_x) _NOEXCEPT       {return ::cbrtf(__lcpp_x);}
1144 inline _LIBCPP_INLINE_VISIBILITY long double cbrt(long double __lcpp_x) _NOEXCEPT {return ::cbrtl(__lcpp_x);}
1145 
1146 template <class _A1>
1147 inline _LIBCPP_INLINE_VISIBILITY
1148 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1149 cbrt(_A1 __lcpp_x) _NOEXCEPT {return ::cbrt((double)__lcpp_x);}
1150 
1151 // copysign
1152 
1153 inline _LIBCPP_INLINE_VISIBILITY float copysign(float __lcpp_x,
1154                                                 float __lcpp_y) _NOEXCEPT {
1155   return ::copysignf(__lcpp_x, __lcpp_y);
1156 }
1157 inline _LIBCPP_INLINE_VISIBILITY long double
1158 copysign(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {
1159   return ::copysignl(__lcpp_x, __lcpp_y);
1160 }
1161 
1162 template <class _A1, class _A2>
1163 inline _LIBCPP_INLINE_VISIBILITY
1164 typename std::_EnableIf
1165 <
1166     std::is_arithmetic<_A1>::value &&
1167     std::is_arithmetic<_A2>::value,
1168     std::__promote<_A1, _A2>
1169 >::type
1170 copysign(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
1171 {
1172     typedef typename std::__promote<_A1, _A2>::type __result_type;
1173     static_assert((!(std::_IsSame<_A1, __result_type>::value &&
1174                      std::_IsSame<_A2, __result_type>::value)), "");
1175     return ::copysign((__result_type)__lcpp_x, (__result_type)__lcpp_y);
1176 }
1177 
1178 // erf
1179 
1180 inline _LIBCPP_INLINE_VISIBILITY float       erf(float __lcpp_x) _NOEXCEPT       {return ::erff(__lcpp_x);}
1181 inline _LIBCPP_INLINE_VISIBILITY long double erf(long double __lcpp_x) _NOEXCEPT {return ::erfl(__lcpp_x);}
1182 
1183 template <class _A1>
1184 inline _LIBCPP_INLINE_VISIBILITY
1185 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1186 erf(_A1 __lcpp_x) _NOEXCEPT {return ::erf((double)__lcpp_x);}
1187 
1188 // erfc
1189 
1190 inline _LIBCPP_INLINE_VISIBILITY float       erfc(float __lcpp_x) _NOEXCEPT       {return ::erfcf(__lcpp_x);}
1191 inline _LIBCPP_INLINE_VISIBILITY long double erfc(long double __lcpp_x) _NOEXCEPT {return ::erfcl(__lcpp_x);}
1192 
1193 template <class _A1>
1194 inline _LIBCPP_INLINE_VISIBILITY
1195 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1196 erfc(_A1 __lcpp_x) _NOEXCEPT {return ::erfc((double)__lcpp_x);}
1197 
1198 // exp2
1199 
1200 inline _LIBCPP_INLINE_VISIBILITY float       exp2(float __lcpp_x) _NOEXCEPT       {return ::exp2f(__lcpp_x);}
1201 inline _LIBCPP_INLINE_VISIBILITY long double exp2(long double __lcpp_x) _NOEXCEPT {return ::exp2l(__lcpp_x);}
1202 
1203 template <class _A1>
1204 inline _LIBCPP_INLINE_VISIBILITY
1205 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1206 exp2(_A1 __lcpp_x) _NOEXCEPT {return ::exp2((double)__lcpp_x);}
1207 
1208 // expm1
1209 
1210 inline _LIBCPP_INLINE_VISIBILITY float       expm1(float __lcpp_x) _NOEXCEPT       {return ::expm1f(__lcpp_x);}
1211 inline _LIBCPP_INLINE_VISIBILITY long double expm1(long double __lcpp_x) _NOEXCEPT {return ::expm1l(__lcpp_x);}
1212 
1213 template <class _A1>
1214 inline _LIBCPP_INLINE_VISIBILITY
1215 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1216 expm1(_A1 __lcpp_x) _NOEXCEPT {return ::expm1((double)__lcpp_x);}
1217 
1218 // fdim
1219 
1220 inline _LIBCPP_INLINE_VISIBILITY float       fdim(float __lcpp_x, float __lcpp_y) _NOEXCEPT             {return ::fdimf(__lcpp_x, __lcpp_y);}
1221 inline _LIBCPP_INLINE_VISIBILITY long double fdim(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::fdiml(__lcpp_x, __lcpp_y);}
1222 
1223 template <class _A1, class _A2>
1224 inline _LIBCPP_INLINE_VISIBILITY
1225 typename std::_EnableIf
1226 <
1227     std::is_arithmetic<_A1>::value &&
1228     std::is_arithmetic<_A2>::value,
1229     std::__promote<_A1, _A2>
1230 >::type
1231 fdim(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
1232 {
1233     typedef typename std::__promote<_A1, _A2>::type __result_type;
1234     static_assert((!(std::_IsSame<_A1, __result_type>::value &&
1235                      std::_IsSame<_A2, __result_type>::value)), "");
1236     return ::fdim((__result_type)__lcpp_x, (__result_type)__lcpp_y);
1237 }
1238 
1239 // fma
1240 
1241 inline _LIBCPP_INLINE_VISIBILITY float       fma(float __lcpp_x, float __lcpp_y, float __lcpp_z) _NOEXCEPT                   {return ::fmaf(__lcpp_x, __lcpp_y, __lcpp_z);}
1242 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);}
1243 
1244 template <class _A1, class _A2, class _A3>
1245 inline _LIBCPP_INLINE_VISIBILITY
1246 typename std::_EnableIf
1247 <
1248     std::is_arithmetic<_A1>::value &&
1249     std::is_arithmetic<_A2>::value &&
1250     std::is_arithmetic<_A3>::value,
1251     std::__promote<_A1, _A2, _A3>
1252 >::type
1253 fma(_A1 __lcpp_x, _A2 __lcpp_y, _A3 __lcpp_z) _NOEXCEPT
1254 {
1255     typedef typename std::__promote<_A1, _A2, _A3>::type __result_type;
1256     static_assert((!(std::_IsSame<_A1, __result_type>::value &&
1257                      std::_IsSame<_A2, __result_type>::value &&
1258                      std::_IsSame<_A3, __result_type>::value)), "");
1259     return ::fma((__result_type)__lcpp_x, (__result_type)__lcpp_y, (__result_type)__lcpp_z);
1260 }
1261 
1262 // fmax
1263 
1264 inline _LIBCPP_INLINE_VISIBILITY float       fmax(float __lcpp_x, float __lcpp_y) _NOEXCEPT             {return ::fmaxf(__lcpp_x, __lcpp_y);}
1265 inline _LIBCPP_INLINE_VISIBILITY long double fmax(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::fmaxl(__lcpp_x, __lcpp_y);}
1266 
1267 template <class _A1, class _A2>
1268 inline _LIBCPP_INLINE_VISIBILITY
1269 typename std::_EnableIf
1270 <
1271     std::is_arithmetic<_A1>::value &&
1272     std::is_arithmetic<_A2>::value,
1273     std::__promote<_A1, _A2>
1274 >::type
1275 fmax(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
1276 {
1277     typedef typename std::__promote<_A1, _A2>::type __result_type;
1278     static_assert((!(std::_IsSame<_A1, __result_type>::value &&
1279                      std::_IsSame<_A2, __result_type>::value)), "");
1280     return ::fmax((__result_type)__lcpp_x, (__result_type)__lcpp_y);
1281 }
1282 
1283 // fmin
1284 
1285 inline _LIBCPP_INLINE_VISIBILITY float       fmin(float __lcpp_x, float __lcpp_y) _NOEXCEPT             {return ::fminf(__lcpp_x, __lcpp_y);}
1286 inline _LIBCPP_INLINE_VISIBILITY long double fmin(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::fminl(__lcpp_x, __lcpp_y);}
1287 
1288 template <class _A1, class _A2>
1289 inline _LIBCPP_INLINE_VISIBILITY
1290 typename std::_EnableIf
1291 <
1292     std::is_arithmetic<_A1>::value &&
1293     std::is_arithmetic<_A2>::value,
1294     std::__promote<_A1, _A2>
1295 >::type
1296 fmin(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
1297 {
1298     typedef typename std::__promote<_A1, _A2>::type __result_type;
1299     static_assert((!(std::_IsSame<_A1, __result_type>::value &&
1300                      std::_IsSame<_A2, __result_type>::value)), "");
1301     return ::fmin((__result_type)__lcpp_x, (__result_type)__lcpp_y);
1302 }
1303 
1304 // hypot
1305 
1306 inline _LIBCPP_INLINE_VISIBILITY float       hypot(float __lcpp_x, float __lcpp_y) _NOEXCEPT             {return ::hypotf(__lcpp_x, __lcpp_y);}
1307 inline _LIBCPP_INLINE_VISIBILITY long double hypot(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::hypotl(__lcpp_x, __lcpp_y);}
1308 
1309 template <class _A1, class _A2>
1310 inline _LIBCPP_INLINE_VISIBILITY
1311 typename std::_EnableIf
1312 <
1313     std::is_arithmetic<_A1>::value &&
1314     std::is_arithmetic<_A2>::value,
1315     std::__promote<_A1, _A2>
1316 >::type
1317 hypot(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
1318 {
1319     typedef typename std::__promote<_A1, _A2>::type __result_type;
1320     static_assert((!(std::_IsSame<_A1, __result_type>::value &&
1321                      std::_IsSame<_A2, __result_type>::value)), "");
1322     return ::hypot((__result_type)__lcpp_x, (__result_type)__lcpp_y);
1323 }
1324 
1325 // ilogb
1326 
1327 inline _LIBCPP_INLINE_VISIBILITY int ilogb(float __lcpp_x) _NOEXCEPT       {return ::ilogbf(__lcpp_x);}
1328 inline _LIBCPP_INLINE_VISIBILITY int ilogb(long double __lcpp_x) _NOEXCEPT {return ::ilogbl(__lcpp_x);}
1329 
1330 template <class _A1>
1331 inline _LIBCPP_INLINE_VISIBILITY
1332 typename std::enable_if<std::is_integral<_A1>::value, int>::type
1333 ilogb(_A1 __lcpp_x) _NOEXCEPT {return ::ilogb((double)__lcpp_x);}
1334 
1335 // lgamma
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 template <class _A1>
1341 inline _LIBCPP_INLINE_VISIBILITY
1342 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1343 lgamma(_A1 __lcpp_x) _NOEXCEPT {return ::lgamma((double)__lcpp_x);}
1344 
1345 // llrint
1346 
1347 inline _LIBCPP_INLINE_VISIBILITY long long llrint(float __lcpp_x) _NOEXCEPT       {return ::llrintf(__lcpp_x);}
1348 inline _LIBCPP_INLINE_VISIBILITY long long llrint(long double __lcpp_x) _NOEXCEPT {return ::llrintl(__lcpp_x);}
1349 
1350 template <class _A1>
1351 inline _LIBCPP_INLINE_VISIBILITY
1352 typename std::enable_if<std::is_integral<_A1>::value, long long>::type
1353 llrint(_A1 __lcpp_x) _NOEXCEPT {return ::llrint((double)__lcpp_x);}
1354 
1355 // llround
1356 
1357 inline _LIBCPP_INLINE_VISIBILITY long long llround(float __lcpp_x) _NOEXCEPT       {return ::llroundf(__lcpp_x);}
1358 inline _LIBCPP_INLINE_VISIBILITY long long llround(long double __lcpp_x) _NOEXCEPT {return ::llroundl(__lcpp_x);}
1359 
1360 template <class _A1>
1361 inline _LIBCPP_INLINE_VISIBILITY
1362 typename std::enable_if<std::is_integral<_A1>::value, long long>::type
1363 llround(_A1 __lcpp_x) _NOEXCEPT {return ::llround((double)__lcpp_x);}
1364 
1365 // log1p
1366 
1367 inline _LIBCPP_INLINE_VISIBILITY float       log1p(float __lcpp_x) _NOEXCEPT       {return ::log1pf(__lcpp_x);}
1368 inline _LIBCPP_INLINE_VISIBILITY long double log1p(long double __lcpp_x) _NOEXCEPT {return ::log1pl(__lcpp_x);}
1369 
1370 template <class _A1>
1371 inline _LIBCPP_INLINE_VISIBILITY
1372 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1373 log1p(_A1 __lcpp_x) _NOEXCEPT {return ::log1p((double)__lcpp_x);}
1374 
1375 // log2
1376 
1377 inline _LIBCPP_INLINE_VISIBILITY float       log2(float __lcpp_x) _NOEXCEPT       {return ::log2f(__lcpp_x);}
1378 inline _LIBCPP_INLINE_VISIBILITY long double log2(long double __lcpp_x) _NOEXCEPT {return ::log2l(__lcpp_x);}
1379 
1380 template <class _A1>
1381 inline _LIBCPP_INLINE_VISIBILITY
1382 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1383 log2(_A1 __lcpp_x) _NOEXCEPT {return ::log2((double)__lcpp_x);}
1384 
1385 // logb
1386 
1387 inline _LIBCPP_INLINE_VISIBILITY float       logb(float __lcpp_x) _NOEXCEPT       {return ::logbf(__lcpp_x);}
1388 inline _LIBCPP_INLINE_VISIBILITY long double logb(long double __lcpp_x) _NOEXCEPT {return ::logbl(__lcpp_x);}
1389 
1390 template <class _A1>
1391 inline _LIBCPP_INLINE_VISIBILITY
1392 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1393 logb(_A1 __lcpp_x) _NOEXCEPT {return ::logb((double)__lcpp_x);}
1394 
1395 // lrint
1396 
1397 inline _LIBCPP_INLINE_VISIBILITY long lrint(float __lcpp_x) _NOEXCEPT       {return ::lrintf(__lcpp_x);}
1398 inline _LIBCPP_INLINE_VISIBILITY long lrint(long double __lcpp_x) _NOEXCEPT {return ::lrintl(__lcpp_x);}
1399 
1400 template <class _A1>
1401 inline _LIBCPP_INLINE_VISIBILITY
1402 typename std::enable_if<std::is_integral<_A1>::value, long>::type
1403 lrint(_A1 __lcpp_x) _NOEXCEPT {return ::lrint((double)__lcpp_x);}
1404 
1405 // lround
1406 
1407 inline _LIBCPP_INLINE_VISIBILITY long lround(float __lcpp_x) _NOEXCEPT       {return ::lroundf(__lcpp_x);}
1408 inline _LIBCPP_INLINE_VISIBILITY long lround(long double __lcpp_x) _NOEXCEPT {return ::lroundl(__lcpp_x);}
1409 
1410 template <class _A1>
1411 inline _LIBCPP_INLINE_VISIBILITY
1412 typename std::enable_if<std::is_integral<_A1>::value, long>::type
1413 lround(_A1 __lcpp_x) _NOEXCEPT {return ::lround((double)__lcpp_x);}
1414 
1415 // nan
1416 
1417 // nearbyint
1418 
1419 inline _LIBCPP_INLINE_VISIBILITY float       nearbyint(float __lcpp_x) _NOEXCEPT       {return ::nearbyintf(__lcpp_x);}
1420 inline _LIBCPP_INLINE_VISIBILITY long double nearbyint(long double __lcpp_x) _NOEXCEPT {return ::nearbyintl(__lcpp_x);}
1421 
1422 template <class _A1>
1423 inline _LIBCPP_INLINE_VISIBILITY
1424 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1425 nearbyint(_A1 __lcpp_x) _NOEXCEPT {return ::nearbyint((double)__lcpp_x);}
1426 
1427 // nextafter
1428 
1429 inline _LIBCPP_INLINE_VISIBILITY float       nextafter(float __lcpp_x, float __lcpp_y) _NOEXCEPT             {return ::nextafterf(__lcpp_x, __lcpp_y);}
1430 inline _LIBCPP_INLINE_VISIBILITY long double nextafter(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::nextafterl(__lcpp_x, __lcpp_y);}
1431 
1432 template <class _A1, class _A2>
1433 inline _LIBCPP_INLINE_VISIBILITY
1434 typename std::_EnableIf
1435 <
1436     std::is_arithmetic<_A1>::value &&
1437     std::is_arithmetic<_A2>::value,
1438     std::__promote<_A1, _A2>
1439 >::type
1440 nextafter(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
1441 {
1442     typedef typename std::__promote<_A1, _A2>::type __result_type;
1443     static_assert((!(std::_IsSame<_A1, __result_type>::value &&
1444                      std::_IsSame<_A2, __result_type>::value)), "");
1445     return ::nextafter((__result_type)__lcpp_x, (__result_type)__lcpp_y);
1446 }
1447 
1448 // nexttoward
1449 
1450 inline _LIBCPP_INLINE_VISIBILITY float       nexttoward(float __lcpp_x, long double __lcpp_y) _NOEXCEPT       {return ::nexttowardf(__lcpp_x, __lcpp_y);}
1451 inline _LIBCPP_INLINE_VISIBILITY long double nexttoward(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::nexttowardl(__lcpp_x, __lcpp_y);}
1452 
1453 template <class _A1>
1454 inline _LIBCPP_INLINE_VISIBILITY
1455 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1456 nexttoward(_A1 __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::nexttoward((double)__lcpp_x, __lcpp_y);}
1457 
1458 // remainder
1459 
1460 inline _LIBCPP_INLINE_VISIBILITY float       remainder(float __lcpp_x, float __lcpp_y) _NOEXCEPT             {return ::remainderf(__lcpp_x, __lcpp_y);}
1461 inline _LIBCPP_INLINE_VISIBILITY long double remainder(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::remainderl(__lcpp_x, __lcpp_y);}
1462 
1463 template <class _A1, class _A2>
1464 inline _LIBCPP_INLINE_VISIBILITY
1465 typename std::_EnableIf
1466 <
1467     std::is_arithmetic<_A1>::value &&
1468     std::is_arithmetic<_A2>::value,
1469     std::__promote<_A1, _A2>
1470 >::type
1471 remainder(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
1472 {
1473     typedef typename std::__promote<_A1, _A2>::type __result_type;
1474     static_assert((!(std::_IsSame<_A1, __result_type>::value &&
1475                      std::_IsSame<_A2, __result_type>::value)), "");
1476     return ::remainder((__result_type)__lcpp_x, (__result_type)__lcpp_y);
1477 }
1478 
1479 // remquo
1480 
1481 inline _LIBCPP_INLINE_VISIBILITY float       remquo(float __lcpp_x, float __lcpp_y, int* __lcpp_z) _NOEXCEPT             {return ::remquof(__lcpp_x, __lcpp_y, __lcpp_z);}
1482 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);}
1483 
1484 template <class _A1, class _A2>
1485 inline _LIBCPP_INLINE_VISIBILITY
1486 typename std::_EnableIf
1487 <
1488     std::is_arithmetic<_A1>::value &&
1489     std::is_arithmetic<_A2>::value,
1490     std::__promote<_A1, _A2>
1491 >::type
1492 remquo(_A1 __lcpp_x, _A2 __lcpp_y, int* __lcpp_z) _NOEXCEPT
1493 {
1494     typedef typename std::__promote<_A1, _A2>::type __result_type;
1495     static_assert((!(std::_IsSame<_A1, __result_type>::value &&
1496                      std::_IsSame<_A2, __result_type>::value)), "");
1497     return ::remquo((__result_type)__lcpp_x, (__result_type)__lcpp_y, __lcpp_z);
1498 }
1499 
1500 // rint
1501 
1502 inline _LIBCPP_INLINE_VISIBILITY float       rint(float __lcpp_x) _NOEXCEPT       {return ::rintf(__lcpp_x);}
1503 inline _LIBCPP_INLINE_VISIBILITY long double rint(long double __lcpp_x) _NOEXCEPT {return ::rintl(__lcpp_x);}
1504 
1505 template <class _A1>
1506 inline _LIBCPP_INLINE_VISIBILITY
1507 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1508 rint(_A1 __lcpp_x) _NOEXCEPT {return ::rint((double)__lcpp_x);}
1509 
1510 // round
1511 
1512 inline _LIBCPP_INLINE_VISIBILITY float       round(float __lcpp_x) _NOEXCEPT       {return ::roundf(__lcpp_x);}
1513 inline _LIBCPP_INLINE_VISIBILITY long double round(long double __lcpp_x) _NOEXCEPT {return ::roundl(__lcpp_x);}
1514 
1515 template <class _A1>
1516 inline _LIBCPP_INLINE_VISIBILITY
1517 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1518 round(_A1 __lcpp_x) _NOEXCEPT {return ::round((double)__lcpp_x);}
1519 
1520 // scalbln
1521 
1522 inline _LIBCPP_INLINE_VISIBILITY float       scalbln(float __lcpp_x, long __lcpp_y) _NOEXCEPT       {return ::scalblnf(__lcpp_x, __lcpp_y);}
1523 inline _LIBCPP_INLINE_VISIBILITY long double scalbln(long double __lcpp_x, long __lcpp_y) _NOEXCEPT {return ::scalblnl(__lcpp_x, __lcpp_y);}
1524 
1525 template <class _A1>
1526 inline _LIBCPP_INLINE_VISIBILITY
1527 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1528 scalbln(_A1 __lcpp_x, long __lcpp_y) _NOEXCEPT {return ::scalbln((double)__lcpp_x, __lcpp_y);}
1529 
1530 // scalbn
1531 
1532 inline _LIBCPP_INLINE_VISIBILITY float       scalbn(float __lcpp_x, int __lcpp_y) _NOEXCEPT       {return ::scalbnf(__lcpp_x, __lcpp_y);}
1533 inline _LIBCPP_INLINE_VISIBILITY long double scalbn(long double __lcpp_x, int __lcpp_y) _NOEXCEPT {return ::scalbnl(__lcpp_x, __lcpp_y);}
1534 
1535 template <class _A1>
1536 inline _LIBCPP_INLINE_VISIBILITY
1537 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1538 scalbn(_A1 __lcpp_x, int __lcpp_y) _NOEXCEPT {return ::scalbn((double)__lcpp_x, __lcpp_y);}
1539 
1540 // tgamma
1541 
1542 inline _LIBCPP_INLINE_VISIBILITY float       tgamma(float __lcpp_x) _NOEXCEPT       {return ::tgammaf(__lcpp_x);}
1543 inline _LIBCPP_INLINE_VISIBILITY long double tgamma(long double __lcpp_x) _NOEXCEPT {return ::tgammal(__lcpp_x);}
1544 
1545 template <class _A1>
1546 inline _LIBCPP_INLINE_VISIBILITY
1547 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1548 tgamma(_A1 __lcpp_x) _NOEXCEPT {return ::tgamma((double)__lcpp_x);}
1549 
1550 // trunc
1551 
1552 inline _LIBCPP_INLINE_VISIBILITY float       trunc(float __lcpp_x) _NOEXCEPT       {return ::truncf(__lcpp_x);}
1553 inline _LIBCPP_INLINE_VISIBILITY long double trunc(long double __lcpp_x) _NOEXCEPT {return ::truncl(__lcpp_x);}
1554 
1555 template <class _A1>
1556 inline _LIBCPP_INLINE_VISIBILITY
1557 typename std::enable_if<std::is_integral<_A1>::value, double>::type
1558 trunc(_A1 __lcpp_x) _NOEXCEPT {return ::trunc((double)__lcpp_x);}
1559 
1560 } // extern "C++"
1561 
1562 #endif // __cplusplus
1563 
1564 #else // _LIBCPP_MATH_H
1565 
1566 // This include lives outside the header guard in order to support an MSVC
1567 // extension which allows users to do:
1568 //
1569 // #define _USE_MATH_DEFINES
1570 // #include <math.h>
1571 //
1572 // and receive the definitions of mathematical constants, even if <math.h>
1573 // has previously been included.
1574 #if defined(_LIBCPP_MSVCRT) && defined(_USE_MATH_DEFINES)
1575 #include_next <math.h>
1576 #endif
1577 
1578 #endif  // _LIBCPP_MATH_H
1579