diff --git a/source/numerics.tex b/source/numerics.tex index a50d6c17bc..87d1156287 100644 --- a/source/numerics.tex +++ b/source/numerics.tex @@ -16573,8 +16573,6 @@ template using @\exposidnc{deduced-vec-t} = \seebelownc@; // \expos -template using @\exposidnc{make-compatible-simd-t} = \seebelownc@; // \expos - template concept @\defexposconceptnc{simd-vec-type}@ = // \expos @\libconcept{same_as}@> && @@ -16600,13 +16598,9 @@ concept @\defexposconceptnc{simd-complex}@ = // \expos @\exposconcept{simd-vec-type}@ && @\libconcept{same_as}@>>; -template +template concept @\defexposconceptnc{math-floating-point}@ = // \expos - (@\exposconceptnc{simd-floating-point}<\exposidnc{deduced-vec-t}@> || ...); - -template - requires @\exposconceptnc{math-floating-point}@ - using @\exposidnc{math-common-simd-t} = \seebelownc@; // \expos + @\exposconceptnc{simd-floating-point}<\exposidnc{deduced-vec-t}@>; template concept @\exposconceptnc{reduction-binary-operation} = \seebelownc@; // \expos @@ -16673,74 +16667,7 @@ Let \tcode{x} denote an lvalue of type \tcode{const T}. \pnum -\tcode{\exposid{deduced-vec-t}} is an alias for -\begin{itemize} - \item - \tcode{decltype(x + x)}, if the type of \tcode{x + x} is an enabled - specialization of \tcode{basic_vec}; otherwise - \item - \tcode{void}. -\end{itemize} -\end{itemdescr} - -\begin{itemdecl} -template using @\exposid{make-compatible-simd-t}@ = @\seebelow@; -\end{itemdecl} - -\begin{itemdescr} -\pnum -Let \tcode{x} denote an lvalue of type \tcode{const T}. - -\pnum -\tcode{\exposid{make-compatible-simd-t}} is an alias for -\begin{itemize} - \item - \tcode{\exposid{deduced-vec-t}}, if that type is not \tcode{void}, - otherwise - \item - \tcode{vec}. -\end{itemize} -\end{itemdescr} - -\begin{itemdecl} -template - requires @\exposconcept{math-floating-point}@ - using @\exposid{math-common-simd-t}@ = @\seebelow@; -\end{itemdecl} - -\begin{itemdescr} -\pnum -Let \tcode{T0} denote \tcode{Ts...[0]}. -Let \tcode{T1} denote \tcode{Ts...[1]}. -Let \tcode{TRest} denote a pack such that \tcode{T0, T1, TRest...} is equivalent -to \tcode{Ts...}. - -\pnum -Let \tcode{\exposid{math-common-simd-t}} be an alias for -\begin{itemize} - \item - \tcode{\exposid{deduced-vec-t}}, if \tcode{sizeof...(Ts)} equals $1$; - otherwise - \item - \tcode{common_type_t<\exposid{deduced-vec-t}, - \exposid{deduced-vec-t}>}, if \tcode{sizeof...(Ts)} equals $2$ and - \tcode{\exposconcept{math-floating-point} \&\& - \exposconcept{math-floating-point}} is \tcode{true}; otherwise - \item - \tcode{common_type_t<\exposid{deduced-vec-t}, T1>}, if - \tcode{sizeof...(Ts)} equals $2$ and - \tcode{\exposconceptx{math-floating-\brk{}point}{math-floating-point}<\brk{}T0>} - is \tcode{true}; otherwise - \item - \tcode{common_type_t>}, if - \tcode{sizeof...(Ts)} equals $2$; otherwise - \item - \tcode{common_type_t<\exposid{math-common-simd-t}, TRest...>}, if - \tcode{\exposid{math-common-simd-t}} is valid and denotes a type; - otherwise - \item - \tcode{common_type_t<\exposid{math-common-simd-t}, T0, T1>}. -\end{itemize} +\tcode{\exposid{deduced-vec-t}} is an alias for \tcode{decltype(x + x)}. \end{itemdescr} \begin{itemdecl} @@ -17101,8 +17028,12 @@ template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ acos(const V& x); template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ asin(const V& x); template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ atan(const V& x); - template - constexpr @\exposid{math-common-simd-t}@ atan2(const V0& y, const V1& x); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ atan2(const V& y, const V& x); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ atan2(const @\exposid{deduced-vec-t}@& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ atan2(const V& x, const @\exposid{deduced-vec-t}@& y); template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ cos(const V& x); template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ sin(const V& x); template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ tan(const V& x); @@ -17140,12 +17071,35 @@ constexpr basic_vec abs(const basic_vec& j); template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ abs(const V& j); template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ fabs(const V& x); - template - constexpr @\exposid{math-common-simd-t}@ hypot(const V0& x, const V1& y); - template - constexpr @\exposid{math-common-simd-t}@ hypot(const V0& x, const V1& y, const V2& z); - template - constexpr @\exposid{math-common-simd-t}@ pow(const V0& x, const V1& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ hypot(const V& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ hypot(const @\exposid{deduced-vec-t}@& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ hypot(const V& x, const @\exposid{deduced-vec-t}@& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ hypot(const V& x, const V& y, const V& z); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ hypot(const @\exposid{deduced-vec-t}@& x, const V& y, const V& z); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ hypot(const V& x, const @\exposid{deduced-vec-t}@& y, const V& z); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ hypot(const V& x, const V& y, const @\exposid{deduced-vec-t}@& z); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ hypot(const @\exposid{deduced-vec-t}@& x, const @\exposid{deduced-vec-t}@& y + const V& z); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ hypot(const @\exposid{deduced-vec-t}@& x, const V& y + const @\exposid{deduced-vec-t}@& z); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ hypot(const V& x, const @\exposid{deduced-vec-t}@& y + const @\exposid{deduced-vec-t}@& z); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ pow(const V& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ pow(const @\exposid{deduced-vec-t}@& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ pow(const V& x, const @\exposid{deduced-vec-t}@& y); template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ sqrt(const V& x); template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ erf(const V& x); template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ erfc(const V& x); @@ -17167,28 +17121,92 @@ constexpr rebind_t> llround(const V& x); template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ trunc(const V& x); - template - constexpr @\exposid{math-common-simd-t}@ fmod(const V0& x, const V1& y); - template - constexpr @\exposid{math-common-simd-t}@ remainder(const V0& x, const V1& y); - template - constexpr @\exposid{math-common-simd-t}@ - remquo(const V0& x, const V1& y, rebind_t>* quo); - template - constexpr @\exposid{math-common-simd-t}@ copysign(const V0& x, const V1& y); - template - constexpr @\exposid{math-common-simd-t}@ nextafter(const V0& x, const V1& y); - template - constexpr @\exposid{math-common-simd-t}@ fdim(const V0& x, const V1& y); - template - constexpr @\exposid{math-common-simd-t}@ fmax(const V0& x, const V1& y); - template - constexpr @\exposid{math-common-simd-t}@ fmin(const V0& x, const V1& y); - template - constexpr @\exposid{math-common-simd-t}@ fma(const V0& x, const V1& y, const V2& z); - template - constexpr @\exposid{math-common-simd-t}@ - lerp(const V0& a, const V1& b, const V2& t) noexcept; + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fmod(const V& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fmod(const @\exposid{deduced-vec-t}@& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fmod(const V& x, const @\exposid{deduced-vec-t}@& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ remainder(const V& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ remainder(const @\exposid{deduced-vec-t}@& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ remainder(const V& x, const @\exposid{deduced-vec-t}@& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ + remquo(const V& x, const V& y, rebind_t>* quo); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ + remquo(const @\exposid{deduced-vec-t}@& x, const V& y, rebind_t>* quo); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ + remquo(const V& x, const @\exposid{deduced-vec-t}@& y, rebind_t>* quo); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ copysign(const V& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ copysign(const @\exposid{deduced-vec-t}@& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ copysign(const V& x, const @\exposid{deduced-vec-t}@& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ nextafter(const V& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ nextafter(const @\exposid{deduced-vec-t}@& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ nextafter(const V& x, const @\exposid{deduced-vec-t}@& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fdim(const V& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fdim(const @\exposid{deduced-vec-t}@& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fdim(const V& x, const @\exposid{deduced-vec-t}@& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fmax(const V& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fmax(const @\exposid{deduced-vec-t}@& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fmax(const V& x, const @\exposid{deduced-vec-t}@& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fmin(const V& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fmin(const @\exposid{deduced-vec-t}@& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fmin(const V& x, const @\exposid{deduced-vec-t}@& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fma(const V& x, const V& y, const V& z); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fma(const @\exposid{deduced-vec-t}@& x, const V& y, const V& z); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fma(const V& x, const @\exposid{deduced-vec-t}@& y, const V& z); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fma(const V& x, const V& y, const @\exposid{deduced-vec-t}@& z); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fma(const @\exposid{deduced-vec-t}@& x, const @\exposid{deduced-vec-t}@& y + const V& z); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fma(const @\exposid{deduced-vec-t}@& x, const V& y + const @\exposid{deduced-vec-t}@& z); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fma(const V& x, const @\exposid{deduced-vec-t}@& y + const @\exposid{deduced-vec-t}@& z); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ + lerp(const V& a, const V& b, const V& t) noexcept; + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ lerp(const @\exposid{deduced-vec-t}@& x, const V& y, const V& z); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ lerp(const V& x, const @\exposid{deduced-vec-t}@& y, const V& z); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ lerp(const V& x, const V& y, const @\exposid{deduced-vec-t}@& z); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ lerp(const @\exposid{deduced-vec-t}@& x, const @\exposid{deduced-vec-t}@& y + const V& z); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ lerp(const @\exposid{deduced-vec-t}@& x, const V& y + const @\exposid{deduced-vec-t}@& z); + template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ lerp(const V& x, const @\exposid{deduced-vec-t}@& y + const @\exposid{deduced-vec-t}@& z); template<@\exposconcept{math-floating-point}@ V> constexpr rebind_t> fpclassify(const V& x); template<@\exposconcept{math-floating-point}@ V> @@ -17201,50 +17219,130 @@ constexpr typename @\exposid{deduced-vec-t}@::mask_type isnormal(const V& x); template<@\exposconcept{math-floating-point}@ V> constexpr typename @\exposid{deduced-vec-t}@::mask_type signbit(const V& x); - template - constexpr typename @\exposid{math-common-simd-t}@::mask_type - isgreater(const V0& x, const V1& y); - template - constexpr typename @\exposid{math-common-simd-t}@::mask_type - isgreaterequal(const V0& x, const V1& y); - template - constexpr typename @\exposid{math-common-simd-t}@::mask_type - isless(const V0& x, const V1& y); - template - constexpr typename @\exposid{math-common-simd-t}@::mask_type - islessequal(const V0& x, const V1& y); - template - constexpr typename @\exposid{math-common-simd-t}@::mask_type - islessgreater(const V0& x, const V1& y); - template - constexpr typename @\exposid{math-common-simd-t}@::mask_type - isunordered(const V0& x, const V1& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + isgreater(const V& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + isgreater(const @\exposid{deduced-vec-t}@& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + isgreater(const V& x, const @\exposid{deduced-vec-t}@& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + isgreaterequal(const V& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + isgreaterequal(const @\exposid{deduced-vec-t}@& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + isgreaterequal(const V& x, const @\exposid{deduced-vec-t}@& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + isless(const V& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + isless(const @\exposid{deduced-vec-t}@& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + isless(const V& x, const @\exposid{deduced-vec-t}@& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + islessequal(const V& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + islessequal(const @\exposid{deduced-vec-t}@& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + islessequal(const V& x, const @\exposid{deduced-vec-t}@& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + islessgreater(const V& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + islessgreater(const @\exposid{deduced-vec-t}@& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + islessgreater(const V& x, const @\exposid{deduced-vec-t}@& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + isunordered(const V& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + isunordered(const @\exposid{deduced-vec-t}@& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + isunordered(const V& x, const @\exposid{deduced-vec-t}@& y); template<@\exposconcept{math-floating-point}@ V> @\exposid{deduced-vec-t}@ assoc_laguerre(const rebind_t>& n, const rebind_t>& m, const V& x); template<@\exposconcept{math-floating-point}@ V> @\exposid{deduced-vec-t}@ assoc_legendre(const rebind_t>& l, const rebind_t>& m, const V& x); - template - @\exposid{math-common-simd-t}@ beta(const V0& x, const V1& y); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ beta(const V& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ beta(const @\exposid{deduced-vec-t}@& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ beta(const V& x, const @\exposid{deduced-vec-t}@& y); template<@\exposconcept{math-floating-point}@ V> @\exposid{deduced-vec-t}@ comp_ellint_1(const V& k); template<@\exposconcept{math-floating-point}@ V> @\exposid{deduced-vec-t}@ comp_ellint_2(const V& k); - template - @\exposid{math-common-simd-t}@ comp_ellint_3(const V0& k, const V1& nu); - template - @\exposid{math-common-simd-t}@ cyl_bessel_i(const V0& nu, const V1& x); - template - @\exposid{math-common-simd-t}@ cyl_bessel_j(const V0& nu, const V1& x); - template - @\exposid{math-common-simd-t}@ cyl_bessel_k(const V0& nu, const V1& x); - template - @\exposid{math-common-simd-t}@ cyl_neumann(const V0& nu, const V1& x); - template - @\exposid{math-common-simd-t}@ ellint_1(const V0& k, const V1& phi); - template - @\exposid{math-common-simd-t}@ ellint_2(const V0& k, const V1& phi); - template - @\exposid{math-common-simd-t}@ ellint_3(const V0& k, const V1& nu, const V2& phi); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ comp_ellint_3(const V& k, const V& nu); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ comp_ellint_3(const @\exposid{deduced-vec-t}@& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ comp_ellint_3(const V& x, const @\exposid{deduced-vec-t}@& y); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ cyl_bessel_i(const V& nu, const V& x); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ cyl_bessel_i(const @\exposid{deduced-vec-t}@& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ cyl_bessel_i(const V& x, const @\exposid{deduced-vec-t}@& y); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ cyl_bessel_j(const V& nu, const V& x); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ cyl_bessel_j(const @\exposid{deduced-vec-t}@& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ cyl_bessel_j(const V& x, const @\exposid{deduced-vec-t}@& y); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ cyl_bessel_k(const V& nu, const V& x); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ cyl_bessel_k(const @\exposid{deduced-vec-t}@& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ cyl_bessel_k(const V& x, const @\exposid{deduced-vec-t}@& y); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ cyl_neumann(const V& nu, const V& x); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ cyl_neumann(const @\exposid{deduced-vec-t}@& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ cyl_neumann(const V& x, const @\exposid{deduced-vec-t}@& y); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ ellint_1(const V& k, const V& phi); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ ellint_1(const @\exposid{deduced-vec-t}@& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ ellint_1(const V& x, const @\exposid{deduced-vec-t}@& y); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ ellint_2(const V& k, const V& phi); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ ellint_2(const @\exposid{deduced-vec-t}@& x, const V& y); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ ellint_2(const V& x, const @\exposid{deduced-vec-t}@& y); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ ellint_3(const V& k, const V& nu, const V& phi); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ ellint_3(const @\exposid{deduced-vec-t}@& x, const V& y, const V& z); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ ellint_3(const V& x, const @\exposid{deduced-vec-t}@& y, const V& z); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ ellint_3(const V& x, const V& y, const @\exposid{deduced-vec-t}@& z); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ ellint_3(const @\exposid{deduced-vec-t}@& x, const @\exposid{deduced-vec-t}@& y, const V& z); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ ellint_3(const @\exposid{deduced-vec-t}@& x, const V& y, const @\exposid{deduced-vec-t}@& z); + template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ ellint_3(const V& x, const @\exposid{deduced-vec-t}@& y, const @\exposid{deduced-vec-t}@& z); template<@\exposconcept{math-floating-point}@ V> @\exposid{deduced-vec-t}@ expint(const V& x); template<@\exposconcept{math-floating-point}@ V> @\exposid{deduced-vec-t}@ hermite(const rebind_t>& n, const V& x); @@ -19781,10 +19879,6 @@ \rSec3[simd.math]{Mathematical functions} \indexlibrarymember{ilogb}{simd} -\indexlibrarymember{ldexp}{simd} -\indexlibrarymember{scalbn}{simd} -\indexlibrarymember{scalbln}{simd} -\indexlibrarymember{abs}{simd} \indexlibrarymember{abs}{simd} \indexlibrarymember{fabs}{simd} \indexlibrarymember{ceil}{simd} @@ -19820,15 +19914,6 @@ \begin{itemdecl} template<@\exposconcept{math-floating-point}@ V> constexpr rebind_t> ilogb(const V& x); -template<@\exposconcept{math-floating-point}@ V> - constexpr @\exposid{deduced-vec-t}@ ldexp(const V& x, const rebind_t>& exp); -template<@\exposconcept{math-floating-point}@ V> - constexpr @\exposid{deduced-vec-t}@ scalbn(const V& x, const rebind_t>& n); -template<@\exposconcept{math-floating-point}@ V> - constexpr @\exposid{deduced-vec-t}@ - scalbln(const V& x, const rebind_t>& n); -template<@\libconcept{signed_integral}@ T, class Abi> - constexpr basic_vec abs(const basic_vec& j); template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ abs(const V& j); template<@\exposconcept{math-floating-point}@ V> @@ -19851,24 +19936,67 @@ constexpr rebind_t> lround(const V& x); template<@\exposconcept{math-floating-point}@ V> constexpr rebind_t> llround(const V& x); -template - constexpr @\exposid{math-common-simd-t}@ fmod(const V0& x, const V1& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fmod(const V& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fmod(const @\exposid{deduced-vec-t}@& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fmod(const V& x, const @\exposid{deduced-vec-t}@& y); template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ trunc(const V& x); -template - constexpr @\exposid{math-common-simd-t}@ remainder(const V0& x, const V1& y); -template - constexpr @\exposid{math-common-simd-t}@ copysign(const V0& x, const V1& y); -template - constexpr @\exposid{math-common-simd-t}@ nextafter(const V0& x, const V1& y); -template - constexpr @\exposid{math-common-simd-t}@ fdim(const V0& x, const V1& y); -template - constexpr @\exposid{math-common-simd-t}@ fmax(const V0& x, const V1& y); -template - constexpr @\exposid{math-common-simd-t}@ fmin(const V0& x, const V1& y); -template - constexpr @\exposid{math-common-simd-t}@ fma(const V0& x, const V1& y, const V2& z); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ remainder(const V& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ remainder(const @\exposid{deduced-vec-t}@& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ remainder(const V& x, const @\exposid{deduced-vec-t}@& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ copysign(const V& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ copysign(const @\exposid{deduced-vec-t}@& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ copysign(const V& x, const @\exposid{deduced-vec-t}@& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ nextafter(const V& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ nextafter(const @\exposid{deduced-vec-t}@& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ nextafter(const V& x, const @\exposid{deduced-vec-t}@& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fdim(const V& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fdim(const @\exposid{deduced-vec-t}@& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fdim(const V& x, const @\exposid{deduced-vec-t}@& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fmax(const V& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fmax(const @\exposid{deduced-vec-t}@& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fmax(const V& x, const @\exposid{deduced-vec-t}@& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fmin(const V& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fmin(const @\exposid{deduced-vec-t}@& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fmin(const V& x, const @\exposid{deduced-vec-t}@& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fma(const V& x, const V& y, const V& z); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fma(const @\exposid{deduced-vec-t}@& x, const V& y, const V& z); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fma(const V& x, const @\exposid{deduced-vec-t}@& y, const V& z); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ fma(const V& x, const V& y, const @\exposid{deduced-vec-t}@& z); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ + fma(const @\exposid{deduced-vec-t}@& x, const @\exposid{deduced-vec-t}@& y, const V& z); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ + fma(const @\exposid{deduced-vec-t}@& x, const V& y, const @\exposid{deduced-vec-t}@& z); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ + fma(const V& x, const @\exposid{deduced-vec-t}@& y, const @\exposid{deduced-vec-t}@& z); template<@\exposconcept{math-floating-point}@ V> constexpr rebind_t> fpclassify(const V& x); template<@\exposconcept{math-floating-point}@ V> @@ -19881,19 +20009,57 @@ constexpr typename @\exposid{deduced-vec-t}@::mask_type isnormal(const V& x); template<@\exposconcept{math-floating-point}@ V> constexpr typename @\exposid{deduced-vec-t}@::mask_type signbit(const V& x); -template - constexpr typename @\exposid{math-common-simd-t}@::mask_type isgreater(const V0& x, const V1& y); -template - constexpr typename @\exposid{math-common-simd-t}@::mask_type - isgreaterequal(const V0& x, const V1& y); -template - constexpr typename @\exposid{math-common-simd-t}@::mask_type isless(const V0& x, const V1& y); -template - constexpr typename @\exposid{math-common-simd-t}@::mask_type islessequal(const V0& x, const V1& y); -template - constexpr typename @\exposid{math-common-simd-t}@::mask_type islessgreater(const V0& x, const V1& y); -template - constexpr typename @\exposid{math-common-simd-t}@::mask_type isunordered(const V0& x, const V1& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type isgreater(const V& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type isgreater(const @\exposid{deduced-vec-t}@& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type isgreater(const V& x, const @\exposid{deduced-vec-t}@& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + isgreaterequal(const V& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + @ constexpr typename @\exposid{deduced-vec-t}@@::mask_type + isgreaterequal(const @\exposid{deduced-vec-t}@& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + isgreaterequal(const V& x, const @\exposid{deduced-vec-t}@& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + isless(const V& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + isless(const @\exposid{deduced-vec-t}@& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + isless(const V& x, const @\exposid{deduced-vec-t}@& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + islessequal(const V& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + islessequal(const @\exposid{deduced-vec-t}@& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + islessequal(const V& x, const @\exposid{deduced-vec-t}@& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + islessgreater(const V& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + islessgreater(const @\exposid{deduced-vec-t}@& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + islessgreater(const V& x, const @\exposid{deduced-vec-t}@& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + isunordered(const V& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + isunordered(const @\exposid{deduced-vec-t}@& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr typename @\exposid{deduced-vec-t}@::mask_type + isunordered(const V& x, const @\exposid{deduced-vec-t}@& y); \end{itemdecl} \begin{itemdescr} @@ -19903,9 +20069,9 @@ Let \tcode{\placeholder{math-func-vec}} denote: \begin{codeblock} template -Ret @\placeholder{math-func-vec}@(Args... args) { +Ret @\placeholder{math-func-vec}@(const Args&... args) { return Ret([&](@\exposid{simd-size-type}@ i) { - return @\placeholder{math-func}@(@\exposid{make-compatible-simd-t}@(args)[i]...); + return @\placeholder{math-func}(\exposid{deduced-vec-t}@(args)[i]...); }); } \end{codeblock} @@ -19913,7 +20079,7 @@ \pnum \returns A value \tcode{ret} of type \tcode{Ret}, that is element-wise equal to the -result of calling \tcode{\placeholder{math-func-vec}} with the arguments of the above +result of calling \tcode{\placeholder{math-func-vec}} with the parameters of the above functions. If in an invocation of a scalar overload of \tcode{\placeholder{math-func}} for index \tcode{i} in \tcode{\placeholder{math-func-vec}} a domain, pole, or range error would @@ -19924,6 +20090,64 @@ It is unspecified whether \tcode{errno}\iref{errno} is accessed. \end{itemdescr} +\indexlibrarymember{ldexp}{simd} +\indexlibrarymember{scalbn}{simd} +\indexlibrarymember{scalbln}{simd} +\begin{itemdecl} +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ ldexp(const V& x, const rebind_t>& exp); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ scalbn(const V& x, const rebind_t>& n); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ + scalbln(const V& x, const rebind_t>& n); +\end{itemdecl} + +\begin{itemdescr} +\pnum +Let \tcode{Ret} be \tcode{\exposid{deduced-vec-t}}. +Let \tcode{\placeholder{math-func}} denote the name of the function template. +Let \tcode{\placeholder{math-func-vec}} denote: +\begin{codeblock} +Ret @\placeholder{math-func-vec}@(const @\exposid{deduced-vec-t}@& a, const auto& b) { + return Ret([&](@\exposid{simd-size-type}@ i) { + return @\placeholder{math-func}@(a[i], b[i]); + }); +} +\end{codeblock} + +\pnum +\returns +A value \tcode{ret} of type \tcode{Ret}, that is element-wise equal to the +result of calling \tcode{\placeholder{math-func-vec}} with the parameters of the above +functions. +If in an invocation of a scalar overload of \tcode{\placeholder{math-func}} for index +\tcode{i} in \tcode{\placeholder{math-func-vec}} a domain, pole, or range error would +occur, the value of \tcode{ret[i]} is unspecified. + +\pnum +\remarks +It is unspecified whether \tcode{errno}\iref{errno} is accessed. +\end{itemdescr} + +\indexlibrarymember{abs}{simd} +\begin{itemdecl} +template<@\libconcept{signed_integral}@ T, class Abi> + constexpr basic_vec abs(const basic_vec& j); +\end{itemdecl} + +\begin{itemdescr} +\pnum +\expects +\tcode{all_of(j >= -numeric_limits::max())} is \tcode{true}. + +\pnum +\returns +An object where the $i^{\textrm{th}}$ element is initialized to the result of +\tcode{std::abs(j[$i$])} for all $i$ in the range \range{0}{j.size()}. + +\end{itemdescr} + \indexlibrarymember{acos}{simd} \indexlibrarymember{asin}{simd} \indexlibrarymember{atan}{simd} @@ -19955,8 +20179,6 @@ \indexlibrarymember{lgamma}{simd} \indexlibrarymember{tgamma}{simd} \indexlibrarymember{lerp}{simd} -\indexlibrarymember{assoc_laguerre}{simd} -\indexlibrarymember{assoc_legendre}{simd} \indexlibrarymember{beta}{simd} \indexlibrarymember{comp_ellint_1}{simd} \indexlibrarymember{comp_ellint_2}{simd} @@ -19969,19 +20191,16 @@ \indexlibrarymember{ellint_2}{simd} \indexlibrarymember{ellint_3}{simd} \indexlibrarymember{expint}{simd} -\indexlibrarymember{hermite}{simd} -\indexlibrarymember{laguerre}{simd} -\indexlibrarymember{legendre}{simd} -\indexlibrarymember{riemann_zeta}{simd} -\indexlibrarymember{sph_bessel}{simd} -\indexlibrarymember{sph_legendre}{simd} -\indexlibrarymember{sph_neumann}{simd} \begin{itemdecl} template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ acos(const V& x); template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ asin(const V& x); template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ atan(const V& x); -template - constexpr @\exposid{math-common-simd-t}@ atan2(const V0& y, const V1& x); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ atan2(const V& y, const V& x); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ atan2(const @\exposid{deduced-vec-t}@& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ atan2(const V& x, const @\exposid{deduced-vec-t}@& y); template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ cos(const V& x); template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ sin(const V& x); template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ tan(const V& x); @@ -20000,61 +20219,123 @@ template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ log2(const V& x); template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ logb(const V& x); template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ cbrt(const V& x); -template - constexpr @\exposid{math-common-simd-t}@ hypot(const V0& x, const V1& y); -template - constexpr @\exposid{math-common-simd-t}@ hypot(const V0& x, const V1& y, const V2& z); -template - constexpr @\exposid{math-common-simd-t}@ pow(const V0& x, const V1& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ hypot(const V& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ hypot(const @\exposid{deduced-vec-t}@& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ hypot(const V& x, const @\exposid{deduced-vec-t}@& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ hypot(const V& x, const V& y, const V& z); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ hypot(const @\exposid{deduced-vec-t}@& x, const V& y, const V& z); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ hypot(const V& x, const @\exposid{deduced-vec-t}@& y, const V& z); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ hypot(const V& x, const V& y, const @\exposid{deduced-vec-t}@& z); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ + hypot(const @\exposid{deduced-vec-t}@& x, const @\exposid{deduced-vec-t}@& y, const V& z); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ + hypot(const @\exposid{deduced-vec-t}@& x, const V& y, const @\exposid{deduced-vec-t}@& z); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ + hypot(const V& x, const @\exposid{deduced-vec-t}@& y, const @\exposid{deduced-vec-t}@& z); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ pow(const V& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ pow(const @\exposid{deduced-vec-t}@& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ pow(const V& x, const @\exposid{deduced-vec-t}@& y); template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ sqrt(const V& x); template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ erf(const V& x); template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ erfc(const V& x); template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ lgamma(const V& x); template<@\exposconcept{math-floating-point}@ V> constexpr @\exposid{deduced-vec-t}@ tgamma(const V& x); -template - constexpr @\exposid{math-common-simd-t}@ lerp(const V0& a, const V1& b, const V2& t) noexcept; template<@\exposconcept{math-floating-point}@ V> - @\exposid{deduced-vec-t}@ assoc_laguerre(const rebind_t>& n, const - rebind_t>& m, const V& x); + constexpr @\exposid{deduced-vec-t}@ lerp(const V& a, const V& b, const V& t) noexcept; +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ lerp(const @\exposid{deduced-vec-t}@& x, const V& y, const V& z); template<@\exposconcept{math-floating-point}@ V> - @\exposid{deduced-vec-t}@ assoc_legendre(const rebind_t>& l, const - rebind_t>& m, const V& x); -template - @\exposid{math-common-simd-t}@ beta(const V0& x, const V1& y); + constexpr @\exposid{deduced-vec-t}@ lerp(const V& x, const @\exposid{deduced-vec-t}@& y, const V& z); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ lerp(const V& x, const V& y, const @\exposid{deduced-vec-t}@& z); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ + lerp(const @\exposid{deduced-vec-t}@& x, const @\exposid{deduced-vec-t}@& y, const V& z); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ + lerp(const @\exposid{deduced-vec-t}@& x, const V& y, const @\exposid{deduced-vec-t}@& z); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ + lerp(const V& x, const @\exposid{deduced-vec-t}@& y, const @\exposid{deduced-vec-t}@& z); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ beta(const V& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ beta(const @\exposid{deduced-vec-t}@& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ beta(const V& x, const @\exposid{deduced-vec-t}@& y); template<@\exposconcept{math-floating-point}@ V> @\exposid{deduced-vec-t}@ comp_ellint_1(const V& k); template<@\exposconcept{math-floating-point}@ V> @\exposid{deduced-vec-t}@ comp_ellint_2(const V& k); -template - @\exposid{math-common-simd-t}@ comp_ellint_3(const V0& k, const V1& nu); -template - @\exposid{math-common-simd-t}@ cyl_bessel_i(const V0& nu, const V1& x); -template - @\exposid{math-common-simd-t}@ cyl_bessel_j(const V0& nu, const V1& x); -template - @\exposid{math-common-simd-t}@ cyl_bessel_k(const V0& nu, const V1& x); -template - @\exposid{math-common-simd-t}@ cyl_neumann(const V0& nu, const V1& x); -template - @\exposid{math-common-simd-t}@ ellint_1(const V0& k, const V1& phi); -template - @\exposid{math-common-simd-t}@ ellint_2(const V0& k, const V1& phi); -template - @\exposid{math-common-simd-t}@ ellint_3(const V0& k, const V1& nu, const V2& phi); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ comp_ellint_3(const V& k, const V& nu); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ comp_ellint_3(const @\exposid{deduced-vec-t}@& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ comp_ellint_3(const V& x, const @\exposid{deduced-vec-t}@& y); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ cyl_bessel_i(const V& nu, const V& x); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ cyl_bessel_i(const @\exposid{deduced-vec-t}@& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ cyl_bessel_i(const V& x, const @\exposid{deduced-vec-t}@& y); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ cyl_bessel_j(const V& nu, const V& x); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ cyl_bessel_j(const @\exposid{deduced-vec-t}@& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ cyl_bessel_j(const V& x, const @\exposid{deduced-vec-t}@& y); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ cyl_bessel_k(const V& nu, const V& x); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ cyl_bessel_k(const @\exposid{deduced-vec-t}@& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ cyl_bessel_k(const V& x, const @\exposid{deduced-vec-t}@& y); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ cyl_neumann(const V& nu, const V& x); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ cyl_neumann(const @\exposid{deduced-vec-t}@& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ cyl_neumann(const V& x, const @\exposid{deduced-vec-t}@& y); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ ellint_1(const V& k, const V& phi); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ ellint_1(const @\exposid{deduced-vec-t}@& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ ellint_1(const V& x, const @\exposid{deduced-vec-t}@& y); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ ellint_2(const V& k, const V& phi); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ ellint_2(const @\exposid{deduced-vec-t}@& x, const V& y); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ ellint_2(const V& x, const @\exposid{deduced-vec-t}@& y); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ ellint_3(const V& k, const V& nu, const V& phi); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ ellint_3(const @\exposid{deduced-vec-t}@& x, const V& y, const V& z); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ ellint_3(const V& x, const @\exposid{deduced-vec-t}@& y, const V& z); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ ellint_3(const V& x, const V& y, const @\exposid{deduced-vec-t}@& z); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ ellint_3(const @\exposid{deduced-vec-t}@& x, const @\exposid{deduced-vec-t}@& y, const V& z); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ ellint_3(const @\exposid{deduced-vec-t}@& x, const V& y, const @\exposid{deduced-vec-t}@& z); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ ellint_3(const V& x, const @\exposid{deduced-vec-t}@& y, const @\exposid{deduced-vec-t}@& z); template<@\exposconcept{math-floating-point}@ V> @\exposid{deduced-vec-t}@ expint(const V& x); -template<@\exposconcept{math-floating-point}@ V> @\exposid{deduced-vec-t}@ hermite(const rebind_t>& n, const V& x); -template<@\exposconcept{math-floating-point}@ V> @\exposid{deduced-vec-t}@ laguerre(const rebind_t>& n, const V& x); -template<@\exposconcept{math-floating-point}@ V> @\exposid{deduced-vec-t}@ legendre(const rebind_t>& l, const V& x); template<@\exposconcept{math-floating-point}@ V> @\exposid{deduced-vec-t}@ riemann_zeta(const V& x); -template<@\exposconcept{math-floating-point}@ V> @\exposid{deduced-vec-t}@ sph_bessel(const rebind_t>& n, const V& x); -template<@\exposconcept{math-floating-point}@ V> - @\exposid{deduced-vec-t}@ sph_legendre(const rebind_t>& l, - const rebind_t>& m, - const V& theta); -template<@\exposconcept{math-floating-point}@ V> @\exposid{deduced-vec-t}@ sph_neumann(const rebind_t>& n, const V& x); \end{itemdecl} \begin{itemdescr} @@ -20064,9 +20345,9 @@ Let \tcode{\placeholder{math-func-vec}} denote: \begin{codeblock} template -Ret @\placeholder{math-func-vec}@(Args... args) { +Ret @\placeholder{math-func-vec}@(const Args&... args) { return Ret([&](@\exposid{simd-size-type}@ i) { - return @\placeholder{math-func}@(@\exposid{make-compatible-simd-t}@(args)[i]...); + return @\placeholder{math-func}(\exposid{deduced-vec-t}@(args)[i]...); }); } \end{codeblock} @@ -20074,7 +20355,7 @@ \pnum \returns A value \tcode{ret} of type \tcode{Ret}, that is element-wise approximately -equal to the result of calling \tcode{\placeholder{math-func-vec}} with the arguments +equal to the result of calling \tcode{\placeholder{math-func-vec}} with the parameters of the above functions. If in an invocation of a scalar overload of \tcode{\placeholder{math-func}} for index \tcode{i} in \tcode{\placeholder{math-func-vec}} a domain, pole, or range error would @@ -20085,6 +20366,74 @@ It is unspecified whether \tcode{errno}\iref{errno} is accessed. \end{itemdescr} +\indexlibrarymember{assoc_laguerre}{simd} +\indexlibrarymember{assoc_legendre}{simd} +\indexlibrarymember{sph_legendre}{simd} +\begin{itemdecl} +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ assoc_laguerre(const rebind_t>& n, + const rebind_t>& m, const V& x); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ assoc_legendre(const rebind_t>& l, + const rebind_t>& m, const V& x); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ sph_legendre(const rebind_t>& l, + const rebind_t>& m, const V& theta); +\end{itemdecl} + +\begin{itemdescr} +\pnum +Let \tcode{\placeholder{math-func}} denote the name of the function template. +Let \tcode{\placeholder{math-func-vec}} denote: +\begin{codeblock} +auto @\placeholder{math-func-vec}@(const auto& a, const auto& b, const @\exposid{deduced-vec-t}@& c) { + return @\exposid{deduced-vec-t}@([&](@\exposid{simd-size-type}@ i) { + return std::@\placeholder{math-func}@(a[i], b[i], c[i]); + }); +} +\end{codeblock} + +\pnum +\returns +An object that is element-wise approximately equal to the result of calling +\tcode{\placeholder{math-func-vec}} with the parameters of the above functions. +\end{itemdescr} + +\indexlibrarymember{hermite}{simd} +\indexlibrarymember{laguerre}{simd} +\indexlibrarymember{legendre}{simd} +\indexlibrarymember{riemann_zeta}{simd} +\indexlibrarymember{sph_bessel}{simd} +\indexlibrarymember{sph_neumann}{simd} +\begin{itemdecl} +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ hermite(const rebind_t>& n, const V& x); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ laguerre(const rebind_t>& n, const V& x); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ legendre(const rebind_t>& l, const V& x); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ sph_bessel(const rebind_t>& n, const V& x); +template<@\exposconcept{math-floating-point}@ V> + @\exposid{deduced-vec-t}@ sph_neumann(const rebind_t>& n, const V& x); +\end{itemdecl} + +\begin{itemdescr} +\pnum +Let \tcode{\placeholder{math-func}} denote the name of the function template. +Let \tcode{\placeholder{math-func-vec}} denote: +\begin{codeblock} +auto @\placeholder{math-func-vec}@(const auto& a, const @\exposid{deduced-vec-t}@& b) { + return @\exposid{deduced-vec-t}@([&](@\exposid{simd-size-type}@ i) { return std::@\placeholder{math-func}@(a[i], b[i]); }); +\} +\end{codeblock} + +\pnum +\returns +An object that is element-wise approximately equal to the result of calling +\tcode{\placeholder{math-func-vec}} with the parameters of the above functions. +\end{itemdescr} + \indexlibrarymember{frexp}{simd} \begin{itemdecl} template<@\exposconcept{math-floating-point}@ V> @@ -20097,10 +20446,10 @@ Let \tcode{\placeholder{frexp-vec}} denote: \begin{codeblock} template -pair> @\placeholder{frexp-vec}@(const V& x) { +pair> @\placeholder{frexp-vec}@(const @\exposid{deduced-vec-t}@& x) { int r1[Ret::size()]; Ret r0([&](@\exposid{simd-size-type}@ i) { - return frexp(@\exposid{make-compatible-simd-t}@(x)[i], &r1[i]); + return frexp(x[i], &r1[i]); }); return {r0, rebind_t(r1)}; } @@ -20118,29 +20467,34 @@ \tcode{ret.first}. \end{itemdescr} -\indexlibrarymember{remquo}{simd} \begin{itemdecl} -template - constexpr @\exposid{math-common-simd-t}@ remquo(const V0& x, const V1& y, - rebind_t>* quo); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ remquo(const V& x, const V& y, + rebind_t@>* quo); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ + remquo(const @\exposid{deduced-vec-t}@& x, const V& y, rebind_t>* quo); +template<@\exposconcept{math-floating-point}@ V> + constexpr @\exposid{deduced-vec-t}@ + remquo(const V& x, const @\exposid{deduced-vec-t}@& y, rebind_t>* quo); \end{itemdecl} \begin{itemdescr} \pnum -Let \tcode{Ret} be \tcode{\exposid{math-common-simd-t}}. +Let \tcode{V0} be \tcode{\exposid{deduced-vec-t}}. Let \tcode{\placeholder{remquo-vec}} denote: \begin{codeblock} -template -pair> @\placeholder{remquo-vec}@(const V0& x, const V1& y) { - int r1[Ret::size()]; - Ret r0([&](@\exposid{simd-size-type}@ i) { - return remquo(@\exposid{make-compatible-simd-t}@(x)[i], - @\exposid{make-compatible-simd-t}@(y)[i], &r1[i]); + +pair> @\placeholder{remquo-vec}@(const V0& x, const V0& y) { + int r1[V0::size()]; + V0 r0([&](@\exposid{simd-size-type}@ i) { + return remquo(x[i], + y[i], &r1[i]); }); - return {r0, rebind_t(r1)}; + return {r0, rebind_t(r1)}; } \end{codeblock} -Let \tcode{ret} be a value of type \tcode{pair>} +Let \tcode{ret} be a value of type \tcode{pair>} that is the same value as the result of calling \tcode{\placeholder{remquo-vec}(x, y)}. If in an invocation of a scalar overload of \tcode{remquo} for index \tcode{i}