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_FP
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 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
579 template<
typename _Tp>
580 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
583 {
return __x != 0 ? FP_NORMAL : FP_ZERO; }
586 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
589 {
return __builtin_isfinite(__x); }
593 {
return __builtin_isfinite(__x); }
596 isfinite(
long double __x)
597 {
return __builtin_isfinite(__x); }
600 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
601 template<
typename _Tp>
602 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
608 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
611 {
return __builtin_isinf(__x); }
615 {
return __builtin_isinf(__x); }
618 isinf(
long double __x)
619 {
return __builtin_isinf(__x); }
622 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
623 template<
typename _Tp>
624 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
630 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
633 {
return __builtin_isnan(__x); }
637 {
return __builtin_isnan(__x); }
640 isnan(
long double __x)
641 {
return __builtin_isnan(__x); }
644 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
645 template<
typename _Tp>
646 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
652 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
655 {
return __builtin_isnormal(__x); }
659 {
return __builtin_isnormal(__x); }
662 isnormal(
long double __x)
663 {
return __builtin_isnormal(__x); }
666 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
667 template<
typename _Tp>
668 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
671 {
return __x != 0 ?
true :
false; }
674 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
678 {
return __builtin_signbitf(__x); }
682 {
return __builtin_signbit(__x); }
685 signbit(
long double __x)
686 {
return __builtin_signbitl(__x); }
689 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
690 template<
typename _Tp>
691 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
694 {
return __x < 0 ?
true :
false; }
697 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
699 isgreater(
float __x,
float __y)
700 {
return __builtin_isgreater(__x, __y); }
703 isgreater(
double __x,
double __y)
704 {
return __builtin_isgreater(__x, __y); }
707 isgreater(
long double __x,
long double __y)
708 {
return __builtin_isgreater(__x, __y); }
711 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
712 template<
typename _Tp,
typename _Up>
714 __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
715 && __is_arithmetic<_Up>::__value),
bool>::__type
716 isgreater(_Tp __x, _Up __y)
718 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
719 return __builtin_isgreater(__type(__x), __type(__y));
723 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
725 isgreaterequal(
float __x,
float __y)
726 {
return __builtin_isgreaterequal(__x, __y); }
729 isgreaterequal(
double __x,
double __y)
730 {
return __builtin_isgreaterequal(__x, __y); }
733 isgreaterequal(
long double __x,
long double __y)
734 {
return __builtin_isgreaterequal(__x, __y); }
737 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
738 template<
typename _Tp,
typename _Up>
740 __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
741 && __is_arithmetic<_Up>::__value),
bool>::__type
742 isgreaterequal(_Tp __x, _Up __y)
744 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
745 return __builtin_isgreaterequal(__type(__x), __type(__y));
749 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
751 isless(
float __x,
float __y)
752 {
return __builtin_isless(__x, __y); }
755 isless(
double __x,
double __y)
756 {
return __builtin_isless(__x, __y); }
759 isless(
long double __x,
long double __y)
760 {
return __builtin_isless(__x, __y); }
763 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
764 template<
typename _Tp,
typename _Up>
766 __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
767 && __is_arithmetic<_Up>::__value),
bool>::__type
768 isless(_Tp __x, _Up __y)
770 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
771 return __builtin_isless(__type(__x), __type(__y));
775 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
777 islessequal(
float __x,
float __y)
778 {
return __builtin_islessequal(__x, __y); }
781 islessequal(
double __x,
double __y)
782 {
return __builtin_islessequal(__x, __y); }
785 islessequal(
long double __x,
long double __y)
786 {
return __builtin_islessequal(__x, __y); }
789 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
790 template<
typename _Tp,
typename _Up>
792 __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
793 && __is_arithmetic<_Up>::__value),
bool>::__type
794 islessequal(_Tp __x, _Up __y)
796 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
797 return __builtin_islessequal(__type(__x), __type(__y));
801 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
803 islessgreater(
float __x,
float __y)
804 {
return __builtin_islessgreater(__x, __y); }
807 islessgreater(
double __x,
double __y)
808 {
return __builtin_islessgreater(__x, __y); }
811 islessgreater(
long double __x,
long double __y)
812 {
return __builtin_islessgreater(__x, __y); }
815 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
816 template<
typename _Tp,
typename _Up>
818 __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
819 && __is_arithmetic<_Up>::__value),
bool>::__type
820 islessgreater(_Tp __x, _Up __y)
822 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
823 return __builtin_islessgreater(__type(__x), __type(__y));
827 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
829 isunordered(
float __x,
float __y)
830 {
return __builtin_isunordered(__x, __y); }
833 isunordered(
double __x,
double __y)
834 {
return __builtin_isunordered(__x, __y); }
837 isunordered(
long double __x,
long double __y)
838 {
return __builtin_isunordered(__x, __y); }
841 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
842 template<
typename _Tp,
typename _Up>
844 __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
845 && __is_arithmetic<_Up>::__value),
bool>::__type
846 isunordered(_Tp __x, _Up __y)
848 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
849 return __builtin_isunordered(__type(__x), __type(__y));
855 template<
typename _Tp>
856 inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
860 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
861 return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
862 FP_SUBNORMAL, FP_ZERO, __type(__f));
865 template<
typename _Tp>
866 inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
870 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
871 return __builtin_isfinite(__type(__f));
874 template<
typename _Tp>
875 inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
879 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
880 return __builtin_isinf(__type(__f));
883 template<
typename _Tp>
884 inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
888 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
889 return __builtin_isnan(__type(__f));
892 template<
typename _Tp>
893 inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
897 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
898 return __builtin_isnormal(__type(__f));
901 template<
typename _Tp>
902 inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
906 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
907 return sizeof(__type) ==
sizeof(
float)
908 ? __builtin_signbitf(__type(__f))
909 : sizeof(__type) == sizeof(double)
910 ? __builtin_signbit(__type(__f))
911 : __builtin_signbitl(__type(__f));
914 template<
typename _Tp>
915 inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
917 isgreater(_Tp __f1, _Tp __f2)
919 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
920 return __builtin_isgreater(__type(__f1), __type(__f2));
923 template<
typename _Tp>
924 inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
926 isgreaterequal(_Tp __f1, _Tp __f2)
928 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
929 return __builtin_isgreaterequal(__type(__f1), __type(__f2));
932 template<
typename _Tp>
933 inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
935 isless(_Tp __f1, _Tp __f2)
937 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
938 return __builtin_isless(__type(__f1), __type(__f2));
941 template<
typename _Tp>
942 inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
944 islessequal(_Tp __f1, _Tp __f2)
946 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
947 return __builtin_islessequal(__type(__f1), __type(__f2));
950 template<
typename _Tp>
951 inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
953 islessgreater(_Tp __f1, _Tp __f2)
955 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
956 return __builtin_islessgreater(__type(__f1), __type(__f2));
959 template<
typename _Tp>
960 inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
962 isunordered(_Tp __f1, _Tp __f2)
964 typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
965 return __builtin_isunordered(__type(__f1), __type(__f2));
970 _GLIBCXX_END_NAMESPACE_VERSION
976 #if __cplusplus >= 201103L
978 #ifdef _GLIBCXX_USE_C99_MATH_TR1
1086 namespace std _GLIBCXX_VISIBILITY(default)
1088 _GLIBCXX_BEGIN_NAMESPACE_VERSION
1200 using ::nexttowardf;
1201 using ::nexttowardl;
1236 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1239 {
return __builtin_acoshf(__x); }
1241 constexpr
long double
1242 acosh(
long double __x)
1243 {
return __builtin_acoshl(__x); }
1246 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1247 template<
typename _Tp>
1248 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1251 {
return __builtin_acosh(__x); }
1254 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1257 {
return __builtin_asinhf(__x); }
1259 constexpr
long double
1260 asinh(
long double __x)
1261 {
return __builtin_asinhl(__x); }
1264 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1265 template<
typename _Tp>
1266 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1269 {
return __builtin_asinh(__x); }
1272 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1275 {
return __builtin_atanhf(__x); }
1277 constexpr
long double
1278 atanh(
long double __x)
1279 {
return __builtin_atanhl(__x); }
1282 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1283 template<
typename _Tp>
1284 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1287 {
return __builtin_atanh(__x); }
1290 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1293 {
return __builtin_cbrtf(__x); }
1295 constexpr
long double
1296 cbrt(
long double __x)
1297 {
return __builtin_cbrtl(__x); }
1300 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1301 template<
typename _Tp>
1302 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1305 {
return __builtin_cbrt(__x); }
1308 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1310 copysign(
float __x,
float __y)
1311 {
return __builtin_copysignf(__x, __y); }
1313 constexpr
long double
1314 copysign(
long double __x,
long double __y)
1315 {
return __builtin_copysignl(__x, __y); }
1318 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1319 template<
typename _Tp,
typename _Up>
1320 constexpr
typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
1321 copysign(_Tp __x, _Up __y)
1323 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
1324 return copysign(__type(__x), __type(__y));
1328 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1331 {
return __builtin_erff(__x); }
1333 constexpr
long double
1334 erf(
long double __x)
1335 {
return __builtin_erfl(__x); }
1338 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1339 template<
typename _Tp>
1340 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1343 {
return __builtin_erf(__x); }
1346 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1349 {
return __builtin_erfcf(__x); }
1351 constexpr
long double
1352 erfc(
long double __x)
1353 {
return __builtin_erfcl(__x); }
1356 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1357 template<
typename _Tp>
1358 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1361 {
return __builtin_erfc(__x); }
1364 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1367 {
return __builtin_exp2f(__x); }
1369 constexpr
long double
1370 exp2(
long double __x)
1371 {
return __builtin_exp2l(__x); }
1374 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1375 template<
typename _Tp>
1376 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1379 {
return __builtin_exp2(__x); }
1382 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1385 {
return __builtin_expm1f(__x); }
1387 constexpr
long double
1388 expm1(
long double __x)
1389 {
return __builtin_expm1l(__x); }
1392 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1393 template<
typename _Tp>
1394 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1397 {
return __builtin_expm1(__x); }
1400 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1402 fdim(
float __x,
float __y)
1403 {
return __builtin_fdimf(__x, __y); }
1405 constexpr
long double
1406 fdim(
long double __x,
long double __y)
1407 {
return __builtin_fdiml(__x, __y); }
1410 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1411 template<
typename _Tp,
typename _Up>
1412 constexpr
typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
1413 fdim(_Tp __x, _Up __y)
1415 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
1416 return fdim(__type(__x), __type(__y));
1420 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1422 fma(
float __x,
float __y,
float __z)
1423 {
return __builtin_fmaf(__x, __y, __z); }
1425 constexpr
long double
1426 fma(
long double __x,
long double __y,
long double __z)
1427 {
return __builtin_fmal(__x, __y, __z); }
1430 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1431 template<
typename _Tp,
typename _Up,
typename _Vp>
1432 constexpr
typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type
1433 fma(_Tp __x, _Up __y, _Vp __z)
1435 typedef typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type __type;
1436 return fma(__type(__x), __type(__y), __type(__z));
1440 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1442 fmax(
float __x,
float __y)
1443 {
return __builtin_fmaxf(__x, __y); }
1445 constexpr
long double
1446 fmax(
long double __x,
long double __y)
1447 {
return __builtin_fmaxl(__x, __y); }
1450 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1451 template<
typename _Tp,
typename _Up>
1452 constexpr
typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
1453 fmax(_Tp __x, _Up __y)
1455 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
1456 return fmax(__type(__x), __type(__y));
1460 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1462 fmin(
float __x,
float __y)
1463 {
return __builtin_fminf(__x, __y); }
1465 constexpr
long double
1466 fmin(
long double __x,
long double __y)
1467 {
return __builtin_fminl(__x, __y); }
1470 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1471 template<
typename _Tp,
typename _Up>
1472 constexpr
typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
1473 fmin(_Tp __x, _Up __y)
1475 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
1476 return fmin(__type(__x), __type(__y));
1480 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1482 hypot(
float __x,
float __y)
1483 {
return __builtin_hypotf(__x, __y); }
1485 constexpr
long double
1486 hypot(
long double __x,
long double __y)
1487 {
return __builtin_hypotl(__x, __y); }
1490 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1491 template<
typename _Tp,
typename _Up>
1492 constexpr
typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
1493 hypot(_Tp __x, _Up __y)
1495 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
1496 return hypot(__type(__x), __type(__y));
1500 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1503 {
return __builtin_ilogbf(__x); }
1506 ilogb(
long double __x)
1507 {
return __builtin_ilogbl(__x); }
1510 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1511 template<
typename _Tp>
1513 typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1516 {
return __builtin_ilogb(__x); }
1519 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1522 {
return __builtin_lgammaf(__x); }
1524 constexpr
long double
1525 lgamma(
long double __x)
1526 {
return __builtin_lgammal(__x); }
1529 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1530 template<
typename _Tp>
1531 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1534 {
return __builtin_lgamma(__x); }
1537 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1540 {
return __builtin_llrintf(__x); }
1543 llrint(
long double __x)
1544 {
return __builtin_llrintl(__x); }
1547 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1548 template<
typename _Tp>
1549 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1552 {
return __builtin_llrint(__x); }
1555 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1558 {
return __builtin_llroundf(__x); }
1561 llround(
long double __x)
1562 {
return __builtin_llroundl(__x); }
1565 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1566 template<
typename _Tp>
1567 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1570 {
return __builtin_llround(__x); }
1573 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1576 {
return __builtin_log1pf(__x); }
1578 constexpr
long double
1579 log1p(
long double __x)
1580 {
return __builtin_log1pl(__x); }
1583 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1584 template<
typename _Tp>
1585 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1588 {
return __builtin_log1p(__x); }
1591 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1595 {
return __builtin_log2f(__x); }
1597 constexpr
long double
1598 log2(
long double __x)
1599 {
return __builtin_log2l(__x); }
1602 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1603 template<
typename _Tp>
1604 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1607 {
return __builtin_log2(__x); }
1610 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1613 {
return __builtin_logbf(__x); }
1615 constexpr
long double
1616 logb(
long double __x)
1617 {
return __builtin_logbl(__x); }
1620 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1621 template<
typename _Tp>
1622 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1625 {
return __builtin_logb(__x); }
1628 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1631 {
return __builtin_lrintf(__x); }
1634 lrint(
long double __x)
1635 {
return __builtin_lrintl(__x); }
1638 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1639 template<
typename _Tp>
1640 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1643 {
return __builtin_lrint(__x); }
1646 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1649 {
return __builtin_lroundf(__x); }
1652 lround(
long double __x)
1653 {
return __builtin_lroundl(__x); }
1656 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1657 template<
typename _Tp>
1658 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1661 {
return __builtin_lround(__x); }
1664 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1666 nearbyint(
float __x)
1667 {
return __builtin_nearbyintf(__x); }
1669 constexpr
long double
1670 nearbyint(
long double __x)
1671 {
return __builtin_nearbyintl(__x); }
1674 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1675 template<
typename _Tp>
1676 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1679 {
return __builtin_nearbyint(__x); }
1682 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1684 nextafter(
float __x,
float __y)
1685 {
return __builtin_nextafterf(__x, __y); }
1687 constexpr
long double
1688 nextafter(
long double __x,
long double __y)
1689 {
return __builtin_nextafterl(__x, __y); }
1692 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1693 template<
typename _Tp,
typename _Up>
1694 constexpr
typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
1695 nextafter(_Tp __x, _Up __y)
1697 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
1698 return nextafter(__type(__x), __type(__y));
1702 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1704 nexttoward(
float __x,
long double __y)
1705 {
return __builtin_nexttowardf(__x, __y); }
1707 constexpr
long double
1708 nexttoward(
long double __x,
long double __y)
1709 {
return __builtin_nexttowardl(__x, __y); }
1712 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1713 template<
typename _Tp>
1714 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1716 nexttoward(_Tp __x,
long double __y)
1717 {
return __builtin_nexttoward(__x, __y); }
1720 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1722 remainder(
float __x,
float __y)
1723 {
return __builtin_remainderf(__x, __y); }
1725 constexpr
long double
1726 remainder(
long double __x,
long double __y)
1727 {
return __builtin_remainderl(__x, __y); }
1730 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1731 template<
typename _Tp,
typename _Up>
1732 constexpr
typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
1733 remainder(_Tp __x, _Up __y)
1735 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
1736 return remainder(__type(__x), __type(__y));
1740 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1742 remquo(
float __x,
float __y,
int* __pquo)
1743 {
return __builtin_remquof(__x, __y, __pquo); }
1746 remquo(
long double __x,
long double __y,
int* __pquo)
1747 {
return __builtin_remquol(__x, __y, __pquo); }
1750 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1751 template<
typename _Tp,
typename _Up>
1752 inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
1753 remquo(_Tp __x, _Up __y,
int* __pquo)
1755 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
1756 return remquo(__type(__x), __type(__y), __pquo);
1760 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1763 {
return __builtin_rintf(__x); }
1765 constexpr
long double
1766 rint(
long double __x)
1767 {
return __builtin_rintl(__x); }
1770 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1771 template<
typename _Tp>
1772 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1775 {
return __builtin_rint(__x); }
1778 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1781 {
return __builtin_roundf(__x); }
1783 constexpr
long double
1784 round(
long double __x)
1785 {
return __builtin_roundl(__x); }
1788 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1789 template<
typename _Tp>
1790 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1793 {
return __builtin_round(__x); }
1796 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1798 scalbln(
float __x,
long __ex)
1799 {
return __builtin_scalblnf(__x, __ex); }
1801 constexpr
long double
1802 scalbln(
long double __x,
long __ex)
1803 {
return __builtin_scalblnl(__x, __ex); }
1806 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1807 template<
typename _Tp>
1808 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1810 scalbln(_Tp __x,
long __ex)
1811 {
return __builtin_scalbln(__x, __ex); }
1814 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1816 scalbn(
float __x,
int __ex)
1817 {
return __builtin_scalbnf(__x, __ex); }
1819 constexpr
long double
1820 scalbn(
long double __x,
int __ex)
1821 {
return __builtin_scalbnl(__x, __ex); }
1824 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1825 template<
typename _Tp>
1826 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1828 scalbn(_Tp __x,
int __ex)
1829 {
return __builtin_scalbn(__x, __ex); }
1832 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1835 {
return __builtin_tgammaf(__x); }
1837 constexpr
long double
1838 tgamma(
long double __x)
1839 {
return __builtin_tgammal(__x); }
1842 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1843 template<
typename _Tp>
1844 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1847 {
return __builtin_tgamma(__x); }
1850 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
1853 {
return __builtin_truncf(__x); }
1855 constexpr
long double
1856 trunc(
long double __x)
1857 {
return __builtin_truncl(__x); }
1860 #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
1861 template<
typename _Tp>
1862 constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
1865 {
return __builtin_trunc(__x); }
1868 _GLIBCXX_END_NAMESPACE_VERSION
1871 #endif // _GLIBCXX_USE_C99_MATH_TR1
complex< _Tp > sin(const complex< _Tp > &)
Return complex sine of z.
complex< _Tp > sinh(const complex< _Tp > &)
Return complex hyperbolic sine of z.
std::complex< _Tp > asin(const std::complex< _Tp > &)
asin(__z) [8.1.3].
complex< _Tp > log(const complex< _Tp > &)
Return complex natural logarithm of z.
complex< _Tp > exp(const complex< _Tp > &)
Return complex base e exponential of z.
complex< _Tp > sqrt(const complex< _Tp > &)
Return complex square root of z.
std::complex< _Tp > acosh(const std::complex< _Tp > &)
acosh(__z) [8.1.5].
ISO C++ entities toplevel namespace is std.
complex< _Tp > pow(const complex< _Tp > &, int)
Return x to the y'th power.
std::complex< _Tp > acos(const std::complex< _Tp > &)
acos(__z) [8.1.2].
complex< _Tp > tanh(const complex< _Tp > &)
Return complex hyperbolic tangent of z.
complex< _Tp > cosh(const complex< _Tp > &)
Return complex hyperbolic cosine of z.
_Tp fabs(const std::complex< _Tp > &)
fabs(__z) [8.1.8].
std::complex< _Tp > asinh(const std::complex< _Tp > &)
asinh(__z) [8.1.6].
std::complex< _Tp > atan(const std::complex< _Tp > &)
atan(__z) [8.1.4].
complex< _Tp > cos(const complex< _Tp > &)
Return complex cosine of z.
std::complex< _Tp > atanh(const std::complex< _Tp > &)
atanh(__z) [8.1.7].
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.