E.V.E
v2023.02.15
Loading...
Searching...
No Matches
◆
sufp
auto 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
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{0u, 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::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:353
eve::wide
Wrapper for SIMD registers.
Definition
wide.hpp:94
eve