E.V.E
v2023.02.15
Loading...
Searching...
No Matches
◆
sufp
eve::sufp = functor<sufp_t>
inline
constexpr
Header file
#include <eve/module/core.hpp>
Callable Signatures
namespace
eve
{
// Regular overload
constexpr
auto
sufp
(
value
auto
x
)
noexcept
;
// 1
// Lanes masking
constexpr
auto
sufp
[
conditional_expr
auto
c
](
value
auto
x
)
noexcept
;
// 2
constexpr
auto
sufp
[
logical_value
auto
m
](
value
auto
x
)
noexcept
;
// 2
// Semantic options
constexpr
auto
sufp
[kahan](
value
auto
x
)
noexcept
;
// 1
constexpr
auto
sufp
[
harrison
](
value
auto
x
)
noexcept
;
// 3
}
eve::conditional_expr
Specifies that a type is a Conditional Expression.
Definition
conditional.hpp:28
eve::logical_value
The concept logical_value<T> is satisfied if and only if T satisfies eve::value and the element type ...
Definition
value.hpp:134
eve::value
The concept value<T> is satisfied if and only if T satisfies either eve::scalar_value or eve::simd_va...
Definition
value.hpp:34
eve::sufp
constexpr auto sufp
elementwise_callable object computing the signed unit value in the first place of the input i....
Definition
sufp.hpp:84
eve::translate_t
typename decltype(detail::as_translated_type(as< T >{}))::type translate_t
Returns the final translated type of T.
Definition
translation.hpp:107
eve
EVE Main Namespace.
Definition
abi.hpp:19
Parameters
x
:
value
.
c
:
Conditional expression
masking the operation.
m
:
Logical value
masking the operation.
Return value
the signed unit value in the first place of the input. I.e. the greatest integer power of the base (2) less than or equal to |x| multiplied by the sign of x. (Kahan- definition)
The operation is performed conditionnaly
.
The same value up to a factor 2, but with faster computation. (the result is times 2 is the input is not a power of 2).
Note
invalid entries return NaN
External references
wikipedia
HAL: On various ways to split a floating-point number
Example
// revision 0
#include <eve/module/core.hpp>
#include <iostream>
int
main
()
{
eve::wide
wf0
{0.0, 1.0, 10.0, 100.0, -1.0e8, -2.0e5, -30.0, 10*
eve::mindenormal
(
eve::as
(-4.0))};
eve::wide
wi0
{0, 1, 2, 3, -1, -2, -3, -4};
eve::wide
wu0
{0
u
, 1u, 2u, 3u, 4u, 5u, 6u, 7u};
std::cout << std::hexfloat <<
"<- wf0 = "
<<
wf0
<<
"\n"
;
std::cout <<
"<- wi0 = "
<<
wi0
<<
"\n"
;
std::cout <<
"<- wu0 = "
<<
wu0
<<
"\n"
;
std::cout <<
"-> sufp(wf0) = "
<<
eve::sufp
(
wf0
) <<
"\n"
;
std::cout <<
"-> sufp[kahan](wf0) = "
<<
eve::sufp
[eve::kahan](
wf0
) <<
"\n"
;
std::cout <<
"-> sufp[harrisson](wf0) = "
<<
eve::sufp
[eve::harrisson](
wf0
) <<
"\n"
;
std::cout <<
"-> sufp[ignore_last(2)](wf0) = "
<<
eve::sufp
[
eve::ignore_last
(2)](
wf0
) <<
"\n"
;
std::cout <<
"-> sufp[wf0 != 1.0f](wf0) = "
<<
eve::sufp
[
wf0
!= 1](
wf0
) <<
"\n"
;
std::cout <<
"-> sufp(wu0) = "
<<
eve::sufp
(
wu0
) <<
"\n"
;
std::cout <<
"-> sufp[ignore_last(2)](wu0) = "
<<
eve::sufp
[
eve::ignore_last
(2)](
wu0
) <<
"\n"
;
std::cout <<
"-> sufp[wu0 != 2](wu0) = "
<<
eve::sufp
[
wu0
!= 2](
wu0
) <<
"\n"
;
std::cout <<
"-> sufp(wi0) = "
<<
eve::sufp
(
wi0
) <<
"\n"
;
std::cout <<
"-> sufp[ignore_last(2)](wi0) = "
<<
eve::sufp
[
eve::ignore_last
(2)](
wi0
) <<
"\n"
;
std::cout <<
"-> sufp[wi0 != 3](wi0) = "
<<
eve::sufp
[
wi0
!= 3](
wi0
) <<
"\n"
;
}
eve::mindenormal
constexpr auto mindenormal
Computes the smallest denormal positive value.
Definition
mindenormal.hpp:71
eve::as
Lightweight type-wrapper.
Definition
as.hpp:29
eve::ignore_last
Conditional expression ignoring the k last lanes from a eve::simd_value.
Definition
conditional.hpp:320
eve::wide
Wrapper for SIMD registers.
Definition
wide.hpp:94
eve