39 #pragma GCC system_header
46 #ifndef _GLIBCXX_CMATH
47 #define _GLIBCXX_CMATH 1
75 namespace std _GLIBCXX_VISIBILITY(default)
77 _GLIBCXX_BEGIN_NAMESPACE_VERSION
79 #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
80 inline _GLIBCXX_CONSTEXPR
double
82 {
return __builtin_fabs(__x); }
85 #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
86 inline _GLIBCXX_CONSTEXPR
float
88 {
return __builtin_fabsf(__x); }
90 inline _GLIBCXX_CONSTEXPR
long double
92 {
return __builtin_fabsl(__x); }
95 template<
typename _Tp>
96 inline _GLIBCXX_CONSTEXPR
97 typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
100 {
return __builtin_fabs(__x); }
104 #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
105 inline _GLIBCXX_CONSTEXPR
float
107 {
return __builtin_acosf(__x); }
109 inline _GLIBCXX_CONSTEXPR
long double
110 acos(
long double __x)
111 {
return __builtin_acosl(__x); }
114 template<
typename _Tp>
115 inline _GLIBCXX_CONSTEXPR
116 typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
119 {
return __builtin_acos(__x); }
123 #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
124 inline _GLIBCXX_CONSTEXPR
float
126 {
return __builtin_asinf(__x); }
128 inline _GLIBCXX_CONSTEXPR
long double
129 asin(
long double __x)
130 {
return __builtin_asinl(__x); }
133 template<
typename _Tp>
134 inline _GLIBCXX_CONSTEXPR
135 typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
138 {
return __builtin_asin(__x); }
142 #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
143 inline _GLIBCXX_CONSTEXPR
float
145 {
return __builtin_atanf(__x); }
147 inline _GLIBCXX_CONSTEXPR
long double
148 atan(
long double __x)
149 {
return __builtin_atanl(__x); }
152 template<
typename _Tp>
153 inline _GLIBCXX_CONSTEXPR
154 typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
157 {
return __builtin_atan(__x); }
161 #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
162 inline _GLIBCXX_CONSTEXPR
float
163 atan2(
float __y,
float __x)
164 {
return __builtin_atan2f(__y, __x); }
166 inline _GLIBCXX_CONSTEXPR
long double
167 atan2(
long double __y,
long double __x)
168 {
return __builtin_atan2l(__y, __x); }
171 template<
typename _Tp,
typename _Up>
172 inline _GLIBCXX_CONSTEXPR
173 typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
174 atan2(_Tp __y, _Up __x)
176 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
177 return atan2(__type(__y), __type(__x));
182 #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
183 inline _GLIBCXX_CONSTEXPR
float
185 {
return __builtin_ceilf(__x); }
187 inline _GLIBCXX_CONSTEXPR
long double
188 ceil(
long double __x)
189 {
return __builtin_ceill(__x); }
192 template<
typename _Tp>
193 inline _GLIBCXX_CONSTEXPR
194 typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
197 {
return __builtin_ceil(__x); }
201 #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
202 inline _GLIBCXX_CONSTEXPR
float
204 {
return __builtin_cosf(__x); }
206 inline _GLIBCXX_CONSTEXPR
long double
208 {
return __builtin_cosl(__x); }
211 template<
typename _Tp>
212 inline _GLIBCXX_CONSTEXPR
213 typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
216 {
return __builtin_cos(__x); }
220 #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
221 inline _GLIBCXX_CONSTEXPR
float
223 {
return __builtin_coshf(__x); }
225 inline _GLIBCXX_CONSTEXPR
long double
226 cosh(
long double __x)
227 {
return __builtin_coshl(__x); }
230 template<
typename _Tp>
231 inline _GLIBCXX_CONSTEXPR
232 typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
235 {
return __builtin_cosh(__x); }
239 #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
240 inline _GLIBCXX_CONSTEXPR
float
242 {
return __builtin_expf(__x); }
244 inline _GLIBCXX_CONSTEXPR
long double
246 {
return __builtin_expl(__x); }
249 template<
typename _Tp>
250 inline _GLIBCXX_CONSTEXPR
251 typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
254 {
return __builtin_exp(__x); }
258 #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
259 inline _GLIBCXX_CONSTEXPR
float
261 {
return __builtin_fabsf(__x); }
263 inline _GLIBCXX_CONSTEXPR
long double
264 fabs(
long double __x)
265 {
return __builtin_fabsl(__x); }
268 template<
typename _Tp>
269 inline _GLIBCXX_CONSTEXPR
270 typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
273 {
return __builtin_fabs(__x); }
277 #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
278 inline _GLIBCXX_CONSTEXPR
float
280 {
return __builtin_floorf(__x); }
282 inline _GLIBCXX_CONSTEXPR
long double
283 floor(
long double __x)
284 {
return __builtin_floorl(__x); }
287 template<
typename _Tp>
288 inline _GLIBCXX_CONSTEXPR
289 typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
292 {
return __builtin_floor(__x); }
296 #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
297 inline _GLIBCXX_CONSTEXPR
float
298 fmod(
float __x,
float __y)
299 {
return __builtin_fmodf(__x, __y); }
301 inline _GLIBCXX_CONSTEXPR
long double
302 fmod(
long double __x,
long double __y)
303 {
return __builtin_fmodl(__x, __y); }
306 template<
typename _Tp,
typename _Up>
307 inline _GLIBCXX_CONSTEXPR
308 typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
309 fmod(_Tp __x, _Up __y)
311 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
312 return fmod(__type(__x), __type(__y));
317 #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
319 frexp(
float __x,
int* __exp)
320 {
return __builtin_frexpf(__x, __exp); }
323 frexp(
long double __x,
int* __exp)
324 {
return __builtin_frexpl(__x, __exp); }
327 template<
typename _Tp>
328 inline _GLIBCXX_CONSTEXPR
329 typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
331 frexp(_Tp __x,
int* __exp)
332 {
return __builtin_frexp(__x, __exp); }
336 #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
337 inline _GLIBCXX_CONSTEXPR
float
338 ldexp(
float __x,
int __exp)
339 {
return __builtin_ldexpf(__x, __exp); }
341 inline _GLIBCXX_CONSTEXPR
long double
342 ldexp(
long double __x,
int __exp)
343 {
return __builtin_ldexpl(__x, __exp); }
346 template<
typename _Tp>
347 inline _GLIBCXX_CONSTEXPR
348 typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
350 ldexp(_Tp __x,
int __exp)
351 {
return __builtin_ldexp(__x, __exp); }
355 #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
356 inline _GLIBCXX_CONSTEXPR
float
358 {
return __builtin_logf(__x); }
360 inline _GLIBCXX_CONSTEXPR
long double
362 {
return __builtin_logl(__x); }
365 template<
typename _Tp>
366 inline _GLIBCXX_CONSTEXPR
367 typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
370 {
return __builtin_log(__x); }
374 #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
375 inline _GLIBCXX_CONSTEXPR
float
377 {
return __builtin_log10f(__x); }
379 inline _GLIBCXX_CONSTEXPR
long double
380 log10(
long double __x)
381 {
return __builtin_log10l(__x); }
384 template<
typename _Tp>
385 inline _GLIBCXX_CONSTEXPR
386 typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
389 {
return __builtin_log10(__x); }
393 #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
395 modf(
float __x,
float* __iptr)
396 {
return __builtin_modff(__x, __iptr); }
399 modf(
long double __x,
long double* __iptr)
400 {
return __builtin_modfl(__x, __iptr); }
405 #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
406 inline _GLIBCXX_CONSTEXPR
float
407 pow(
float __x,
float __y)
408 {
return __builtin_powf(__x, __y); }
410 inline _GLIBCXX_CONSTEXPR
long double
411 pow(
long double __x,
long double __y)
412 {
return __builtin_powl(__x, __y); }
414 #if __cplusplus < 201103L
418 pow(
double __x,
int __i)
419 {
return __builtin_powi(__x, __i); }
422 pow(
float __x,
int __n)
423 {
return __builtin_powif(__x, __n); }
426 pow(
long double __x,
int __n)
427 {
return __builtin_powil(__x, __n); }
431 template<
typename _Tp,
typename _Up>
432 inline _GLIBCXX_CONSTEXPR
433 typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
434 pow(_Tp __x, _Up __y)
436 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
437 return pow(__type(__x), __type(__y));
442 #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
443 inline _GLIBCXX_CONSTEXPR
float
445 {
return __builtin_sinf(__x); }
447 inline _GLIBCXX_CONSTEXPR
long double
449 {
return __builtin_sinl(__x); }
452 template<
typename _Tp>
453 inline _GLIBCXX_CONSTEXPR
454 typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
457 {
return __builtin_sin(__x); }
461 #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
462 inline _GLIBCXX_CONSTEXPR
float
464 {
return __builtin_sinhf(__x); }
466 inline _GLIBCXX_CONSTEXPR
long double
467 sinh(
long double __x)
468 {
return __builtin_sinhl(__x); }
471 template<
typename _Tp>
472 inline _GLIBCXX_CONSTEXPR
473 typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
476 {
return __builtin_sinh(__x); }
480 #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
481 inline _GLIBCXX_CONSTEXPR
float
483 {
return __builtin_sqrtf(__x); }
485 inline _GLIBCXX_CONSTEXPR
long double
486 sqrt(
long double __x)
487 {
return __builtin_sqrtl(__x); }
490 template<
typename _Tp>
491 inline _GLIBCXX_CONSTEXPR
492 typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
495 {
return __builtin_sqrt(__x); }
499 #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
500 inline _GLIBCXX_CONSTEXPR
float
502 {
return __builtin_tanf(__x); }
504 inline _GLIBCXX_CONSTEXPR
long double
506 {
return __builtin_tanl(__x); }
509 template<
typename _Tp>
510 inline _GLIBCXX_CONSTEXPR
511 typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
514 {
return __builtin_tan(__x); }
518 #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
519 inline _GLIBCXX_CONSTEXPR
float
521 {
return __builtin_tanhf(__x); }
523 inline _GLIBCXX_CONSTEXPR
long double
524 tanh(
long double __x)
525 {
return __builtin_tanhl(__x); }
528 template<
typename _Tp>
529 inline _GLIBCXX_CONSTEXPR
530 typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
533 {
return __builtin_tanh(__x); }
535 _GLIBCXX_END_NAMESPACE_VERSION
538 #if _GLIBCXX_USE_C99_MATH
539 #if !_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC
549 #undef isgreaterequal
555 namespace std _GLIBCXX_VISIBILITY(default)
557 _GLIBCXX_BEGIN_NAMESPACE_VERSION
559 #if __cplusplus >= 201103L
561 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
563 fpclassify(
float __x)
564 {
return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
565 FP_SUBNORMAL, FP_ZERO, __x); }
568 fpclassify(
double __x)
569 {
return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
570 FP_SUBNORMAL, FP_ZERO, __x); }
573 fpclassify(
long double __x)
574 {
return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
575 FP_SUBNORMAL, FP_ZERO, __x); }
578 template<
typename _Tp>
579 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
582 {
return __x != 0 ? FP_NORMAL : FP_ZERO; }
584 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
587 {
return __builtin_isfinite(__x); }
591 {
return __builtin_isfinite(__x); }
594 isfinite(
long double __x)
595 {
return __builtin_isfinite(__x); }
598 template<
typename _Tp>
599 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
604 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
607 {
return __builtin_isinf(__x); }
611 {
return __builtin_isinf(__x); }
614 isinf(
long double __x)
615 {
return __builtin_isinf(__x); }
618 template<
typename _Tp>
619 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
624 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
627 {
return __builtin_isnan(__x); }
631 {
return __builtin_isnan(__x); }
634 isnan(
long double __x)
635 {
return __builtin_isnan(__x); }
638 template<
typename _Tp>
639 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
644 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
647 {
return __builtin_isnormal(__x); }
651 {
return __builtin_isnormal(__x); }
654 isnormal(
long double __x)
655 {
return __builtin_isnormal(__x); }
658 template<
typename _Tp>
659 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
662 {
return __x != 0 ?
true :
false; }
664 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
668 {
return __builtin_signbitf(__x); }
672 {
return __builtin_signbit(__x); }
675 signbit(
long double __x)
676 {
return __builtin_signbitl(__x); }
679 template<
typename _Tp>
680 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
683 {
return __x < 0 ?
true :
false; }
685 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
687 isgreater(
float __x,
float __y)
688 {
return __builtin_isgreater(__x, __y); }
691 isgreater(
double __x,
double __y)
692 {
return __builtin_isgreater(__x, __y); }
695 isgreater(
long double __x,
long double __y)
696 {
return __builtin_isgreater(__x, __y); }
699 template<
typename _Tp,
typename _Up>
701 __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
702 && __is_arithmetic<_Up>::__value),
bool>::__type
703 isgreater(_Tp __x, _Up __y)
705 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
706 return __builtin_isgreater(__type(__x), __type(__y));
709 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
711 isgreaterequal(
float __x,
float __y)
712 {
return __builtin_isgreaterequal(__x, __y); }
715 isgreaterequal(
double __x,
double __y)
716 {
return __builtin_isgreaterequal(__x, __y); }
719 isgreaterequal(
long double __x,
long double __y)
720 {
return __builtin_isgreaterequal(__x, __y); }
723 template<
typename _Tp,
typename _Up>
725 __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
726 && __is_arithmetic<_Up>::__value),
bool>::__type
727 isgreaterequal(_Tp __x, _Up __y)
729 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
730 return __builtin_isgreaterequal(__type(__x), __type(__y));
733 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
735 isless(
float __x,
float __y)
736 {
return __builtin_isless(__x, __y); }
739 isless(
double __x,
double __y)
740 {
return __builtin_isless(__x, __y); }
743 isless(
long double __x,
long double __y)
744 {
return __builtin_isless(__x, __y); }
747 template<
typename _Tp,
typename _Up>
749 __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
750 && __is_arithmetic<_Up>::__value),
bool>::__type
751 isless(_Tp __x, _Up __y)
753 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
754 return __builtin_isless(__type(__x), __type(__y));
757 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
759 islessequal(
float __x,
float __y)
760 {
return __builtin_islessequal(__x, __y); }
763 islessequal(
double __x,
double __y)
764 {
return __builtin_islessequal(__x, __y); }
767 islessequal(
long double __x,
long double __y)
768 {
return __builtin_islessequal(__x, __y); }
771 template<
typename _Tp,
typename _Up>
773 __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
774 && __is_arithmetic<_Up>::__value),
bool>::__type
775 islessequal(_Tp __x, _Up __y)
777 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
778 return __builtin_islessequal(__type(__x), __type(__y));
781 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
783 islessgreater(
float __x,
float __y)
784 {
return __builtin_islessgreater(__x, __y); }
787 islessgreater(
double __x,
double __y)
788 {
return __builtin_islessgreater(__x, __y); }
791 islessgreater(
long double __x,
long double __y)
792 {
return __builtin_islessgreater(__x, __y); }
795 template<
typename _Tp,
typename _Up>
797 __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
798 && __is_arithmetic<_Up>::__value),
bool>::__type
799 islessgreater(_Tp __x, _Up __y)
801 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
802 return __builtin_islessgreater(__type(__x), __type(__y));
805 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
807 isunordered(
float __x,
float __y)
808 {
return __builtin_isunordered(__x, __y); }
811 isunordered(
double __x,
double __y)
812 {
return __builtin_isunordered(__x, __y); }
815 isunordered(
long double __x,
long double __y)
816 {
return __builtin_isunordered(__x, __y); }
819 template<
typename _Tp,
typename _Up>
821 __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
822 && __is_arithmetic<_Up>::__value),
bool>::__type
823 isunordered(_Tp __x, _Up __y)
825 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
826 return __builtin_isunordered(__type(__x), __type(__y));
831 template<
typename _Tp>
832 inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
836 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
837 return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
838 FP_SUBNORMAL, FP_ZERO, __type(__f));
841 template<
typename _Tp>
842 inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
846 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
847 return __builtin_isfinite(__type(__f));
850 template<
typename _Tp>
851 inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
855 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
856 return __builtin_isinf(__type(__f));
859 template<
typename _Tp>
860 inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
864 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
865 return __builtin_isnan(__type(__f));
868 template<
typename _Tp>
869 inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
873 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
874 return __builtin_isnormal(__type(__f));
877 template<
typename _Tp>
878 inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
882 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
883 return sizeof(__type) ==
sizeof(
float)
884 ? __builtin_signbitf(__type(__f))
885 : sizeof(__type) == sizeof(double)
886 ? __builtin_signbit(__type(__f))
887 : __builtin_signbitl(__type(__f));
890 template<
typename _Tp>
891 inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
893 isgreater(_Tp __f1, _Tp __f2)
895 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
896 return __builtin_isgreater(__type(__f1), __type(__f2));
899 template<
typename _Tp>
900 inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
902 isgreaterequal(_Tp __f1, _Tp __f2)
904 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
905 return __builtin_isgreaterequal(__type(__f1), __type(__f2));
908 template<
typename _Tp>
909 inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
911 isless(_Tp __f1, _Tp __f2)
913 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
914 return __builtin_isless(__type(__f1), __type(__f2));
917 template<
typename _Tp>
918 inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
920 islessequal(_Tp __f1, _Tp __f2)
922 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
923 return __builtin_islessequal(__type(__f1), __type(__f2));
926 template<
typename _Tp>
927 inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
929 islessgreater(_Tp __f1, _Tp __f2)
931 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
932 return __builtin_islessgreater(__type(__f1), __type(__f2));
935 template<
typename _Tp>
936 inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
938 isunordered(_Tp __f1, _Tp __f2)
940 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
941 return __builtin_isunordered(__type(__f1), __type(__f2));
946 _GLIBCXX_END_NAMESPACE_VERSION
952 #if __cplusplus >= 201103L
954 #ifdef _GLIBCXX_USE_C99_MATH_TR1
1062 namespace std _GLIBCXX_VISIBILITY(default)
1064 _GLIBCXX_BEGIN_NAMESPACE_VERSION
1176 using ::nexttowardf;
1177 using ::nexttowardl;
1212 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1215 {
return __builtin_acoshf(__x); }
1217 constexpr
long double
1218 acosh(
long double __x)
1219 {
return __builtin_acoshl(__x); }
1222 template<
typename _Tp>
1223 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1226 {
return __builtin_acosh(__x); }
1228 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1231 {
return __builtin_asinhf(__x); }
1233 constexpr
long double
1234 asinh(
long double __x)
1235 {
return __builtin_asinhl(__x); }
1238 template<
typename _Tp>
1239 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1242 {
return __builtin_asinh(__x); }
1244 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1247 {
return __builtin_atanhf(__x); }
1249 constexpr
long double
1250 atanh(
long double __x)
1251 {
return __builtin_atanhl(__x); }
1254 template<
typename _Tp>
1255 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1258 {
return __builtin_atanh(__x); }
1260 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1263 {
return __builtin_cbrtf(__x); }
1265 constexpr
long double
1266 cbrt(
long double __x)
1267 {
return __builtin_cbrtl(__x); }
1270 template<
typename _Tp>
1271 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1274 {
return __builtin_cbrt(__x); }
1276 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1278 copysign(
float __x,
float __y)
1279 {
return __builtin_copysignf(__x, __y); }
1281 constexpr
long double
1282 copysign(
long double __x,
long double __y)
1283 {
return __builtin_copysignl(__x, __y); }
1286 template<
typename _Tp,
typename _Up>
1287 constexpr
typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
1288 copysign(_Tp __x, _Up __y)
1290 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
1291 return copysign(__type(__x), __type(__y));
1294 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1297 {
return __builtin_erff(__x); }
1299 constexpr
long double
1300 erf(
long double __x)
1301 {
return __builtin_erfl(__x); }
1304 template<
typename _Tp>
1305 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1308 {
return __builtin_erf(__x); }
1310 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1313 {
return __builtin_erfcf(__x); }
1315 constexpr
long double
1316 erfc(
long double __x)
1317 {
return __builtin_erfcl(__x); }
1320 template<
typename _Tp>
1321 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1324 {
return __builtin_erfc(__x); }
1326 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1329 {
return __builtin_exp2f(__x); }
1331 constexpr
long double
1332 exp2(
long double __x)
1333 {
return __builtin_exp2l(__x); }
1336 template<
typename _Tp>
1337 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1340 {
return __builtin_exp2(__x); }
1342 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1345 {
return __builtin_expm1f(__x); }
1347 constexpr
long double
1348 expm1(
long double __x)
1349 {
return __builtin_expm1l(__x); }
1352 template<
typename _Tp>
1353 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1356 {
return __builtin_expm1(__x); }
1358 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1360 fdim(
float __x,
float __y)
1361 {
return __builtin_fdimf(__x, __y); }
1363 constexpr
long double
1364 fdim(
long double __x,
long double __y)
1365 {
return __builtin_fdiml(__x, __y); }
1368 template<
typename _Tp,
typename _Up>
1369 constexpr
typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
1370 fdim(_Tp __x, _Up __y)
1372 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
1373 return fdim(__type(__x), __type(__y));
1376 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1378 fma(
float __x,
float __y,
float __z)
1379 {
return __builtin_fmaf(__x, __y, __z); }
1381 constexpr
long double
1382 fma(
long double __x,
long double __y,
long double __z)
1383 {
return __builtin_fmal(__x, __y, __z); }
1386 template<
typename _Tp,
typename _Up,
typename _Vp>
1387 constexpr
typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type
1388 fma(_Tp __x, _Up __y, _Vp __z)
1390 typedef typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type __type;
1391 return fma(__type(__x), __type(__y), __type(__z));
1394 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1396 fmax(
float __x,
float __y)
1397 {
return __builtin_fmaxf(__x, __y); }
1399 constexpr
long double
1400 fmax(
long double __x,
long double __y)
1401 {
return __builtin_fmaxl(__x, __y); }
1404 template<
typename _Tp,
typename _Up>
1405 constexpr
typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
1406 fmax(_Tp __x, _Up __y)
1408 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
1409 return fmax(__type(__x), __type(__y));
1412 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1414 fmin(
float __x,
float __y)
1415 {
return __builtin_fminf(__x, __y); }
1417 constexpr
long double
1418 fmin(
long double __x,
long double __y)
1419 {
return __builtin_fminl(__x, __y); }
1422 template<
typename _Tp,
typename _Up>
1423 constexpr
typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
1424 fmin(_Tp __x, _Up __y)
1426 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
1427 return fmin(__type(__x), __type(__y));
1430 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1432 hypot(
float __x,
float __y)
1433 {
return __builtin_hypotf(__x, __y); }
1435 constexpr
long double
1436 hypot(
long double __x,
long double __y)
1437 {
return __builtin_hypotl(__x, __y); }
1440 template<
typename _Tp,
typename _Up>
1441 constexpr
typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
1442 hypot(_Tp __x, _Up __y)
1444 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
1445 return hypot(__type(__x), __type(__y));
1448 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1451 {
return __builtin_ilogbf(__x); }
1454 ilogb(
long double __x)
1455 {
return __builtin_ilogbl(__x); }
1458 template<
typename _Tp>
1460 typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1463 {
return __builtin_ilogb(__x); }
1465 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1468 {
return __builtin_lgammaf(__x); }
1470 constexpr
long double
1471 lgamma(
long double __x)
1472 {
return __builtin_lgammal(__x); }
1475 template<
typename _Tp>
1476 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1479 {
return __builtin_lgamma(__x); }
1481 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1484 {
return __builtin_llrintf(__x); }
1487 llrint(
long double __x)
1488 {
return __builtin_llrintl(__x); }
1491 template<
typename _Tp>
1492 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1495 {
return __builtin_llrint(__x); }
1497 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1500 {
return __builtin_llroundf(__x); }
1503 llround(
long double __x)
1504 {
return __builtin_llroundl(__x); }
1507 template<
typename _Tp>
1508 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1511 {
return __builtin_llround(__x); }
1513 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1516 {
return __builtin_log1pf(__x); }
1518 constexpr
long double
1519 log1p(
long double __x)
1520 {
return __builtin_log1pl(__x); }
1523 template<
typename _Tp>
1524 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1527 {
return __builtin_log1p(__x); }
1529 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1533 {
return __builtin_log2f(__x); }
1535 constexpr
long double
1536 log2(
long double __x)
1537 {
return __builtin_log2l(__x); }
1540 template<
typename _Tp>
1541 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1544 {
return __builtin_log2(__x); }
1546 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1549 {
return __builtin_logbf(__x); }
1551 constexpr
long double
1552 logb(
long double __x)
1553 {
return __builtin_logbl(__x); }
1556 template<
typename _Tp>
1557 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1560 {
return __builtin_logb(__x); }
1562 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1565 {
return __builtin_lrintf(__x); }
1568 lrint(
long double __x)
1569 {
return __builtin_lrintl(__x); }
1572 template<
typename _Tp>
1573 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1576 {
return __builtin_lrint(__x); }
1578 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1581 {
return __builtin_lroundf(__x); }
1584 lround(
long double __x)
1585 {
return __builtin_lroundl(__x); }
1588 template<
typename _Tp>
1589 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1592 {
return __builtin_lround(__x); }
1594 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1596 nearbyint(
float __x)
1597 {
return __builtin_nearbyintf(__x); }
1599 constexpr
long double
1600 nearbyint(
long double __x)
1601 {
return __builtin_nearbyintl(__x); }
1604 template<
typename _Tp>
1605 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1608 {
return __builtin_nearbyint(__x); }
1610 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1612 nextafter(
float __x,
float __y)
1613 {
return __builtin_nextafterf(__x, __y); }
1615 constexpr
long double
1616 nextafter(
long double __x,
long double __y)
1617 {
return __builtin_nextafterl(__x, __y); }
1620 template<
typename _Tp,
typename _Up>
1621 constexpr
typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
1622 nextafter(_Tp __x, _Up __y)
1624 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
1625 return nextafter(__type(__x), __type(__y));
1628 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1630 nexttoward(
float __x,
long double __y)
1631 {
return __builtin_nexttowardf(__x, __y); }
1633 constexpr
long double
1634 nexttoward(
long double __x,
long double __y)
1635 {
return __builtin_nexttowardl(__x, __y); }
1638 template<
typename _Tp>
1639 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1641 nexttoward(_Tp __x,
long double __y)
1642 {
return __builtin_nexttoward(__x, __y); }
1644 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1646 remainder(
float __x,
float __y)
1647 {
return __builtin_remainderf(__x, __y); }
1649 constexpr
long double
1650 remainder(
long double __x,
long double __y)
1651 {
return __builtin_remainderl(__x, __y); }
1654 template<
typename _Tp,
typename _Up>
1655 constexpr
typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
1656 remainder(_Tp __x, _Up __y)
1658 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
1659 return remainder(__type(__x), __type(__y));
1662 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1664 remquo(
float __x,
float __y,
int* __pquo)
1665 {
return __builtin_remquof(__x, __y, __pquo); }
1668 remquo(
long double __x,
long double __y,
int* __pquo)
1669 {
return __builtin_remquol(__x, __y, __pquo); }
1672 template<
typename _Tp,
typename _Up>
1673 inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
1674 remquo(_Tp __x, _Up __y,
int* __pquo)
1676 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
1677 return remquo(__type(__x), __type(__y), __pquo);
1680 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1683 {
return __builtin_rintf(__x); }
1685 constexpr
long double
1686 rint(
long double __x)
1687 {
return __builtin_rintl(__x); }
1690 template<
typename _Tp>
1691 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1694 {
return __builtin_rint(__x); }
1696 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1699 {
return __builtin_roundf(__x); }
1701 constexpr
long double
1702 round(
long double __x)
1703 {
return __builtin_roundl(__x); }
1706 template<
typename _Tp>
1707 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1710 {
return __builtin_round(__x); }
1712 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1714 scalbln(
float __x,
long __ex)
1715 {
return __builtin_scalblnf(__x, __ex); }
1717 constexpr
long double
1718 scalbln(
long double __x,
long __ex)
1719 {
return __builtin_scalblnl(__x, __ex); }
1722 template<
typename _Tp>
1723 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1725 scalbln(_Tp __x,
long __ex)
1726 {
return __builtin_scalbln(__x, __ex); }
1728 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1730 scalbn(
float __x,
int __ex)
1731 {
return __builtin_scalbnf(__x, __ex); }
1733 constexpr
long double
1734 scalbn(
long double __x,
int __ex)
1735 {
return __builtin_scalbnl(__x, __ex); }
1738 template<
typename _Tp>
1739 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1741 scalbn(_Tp __x,
int __ex)
1742 {
return __builtin_scalbn(__x, __ex); }
1744 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1747 {
return __builtin_tgammaf(__x); }
1749 constexpr
long double
1750 tgamma(
long double __x)
1751 {
return __builtin_tgammal(__x); }
1754 template<
typename _Tp>
1755 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1758 {
return __builtin_tgamma(__x); }
1760 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
1763 {
return __builtin_truncf(__x); }
1765 constexpr
long double
1766 trunc(
long double __x)
1767 {
return __builtin_truncl(__x); }
1770 template<
typename _Tp>
1771 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1774 {
return __builtin_trunc(__x); }
1776 _GLIBCXX_END_NAMESPACE_VERSION
1779 #endif // _GLIBCXX_USE_C99_MATH_TR1
complex< _Tp > cos(const complex< _Tp > &)
Return complex cosine of z.
complex< _Tp > sinh(const complex< _Tp > &)
Return complex hyperbolic sine of z.
std::complex< _Tp > asinh(const std::complex< _Tp > &)
asinh(__z) [8.1.6].
std::complex< _Tp > acos(const std::complex< _Tp > &)
acos(__z) [8.1.2].
std::complex< _Tp > atan(const std::complex< _Tp > &)
atan(__z) [8.1.4].
complex< _Tp > exp(const complex< _Tp > &)
Return complex base e exponential of z.
complex< _Tp > log(const complex< _Tp > &)
Return complex natural logarithm of z.
complex< _Tp > pow(const complex< _Tp > &, int)
Return x to the y'th power.
_Tp fabs(const std::complex< _Tp > &)
fabs(__z) [8.1.8].
complex< _Tp > sin(const complex< _Tp > &)
Return complex sine of z.
std::complex< _Tp > atanh(const std::complex< _Tp > &)
atanh(__z) [8.1.7].
complex< _Tp > sqrt(const complex< _Tp > &)
Return complex square root of z.
complex< _Tp > tanh(const complex< _Tp > &)
Return complex hyperbolic tangent of z.
complex< _Tp > cosh(const complex< _Tp > &)
Return complex hyperbolic cosine of z.
complex< _Tp > tan(const complex< _Tp > &)
Return complex tangent of z.
complex< _Tp > log10(const complex< _Tp > &)
Return complex base 10 logarithm of z.
_Tp abs(const complex< _Tp > &)
Return magnitude of z.
std::complex< _Tp > asin(const std::complex< _Tp > &)
asin(__z) [8.1.3].
std::complex< _Tp > acosh(const std::complex< _Tp > &)
acosh(__z) [8.1.5].