29 std::cout <<
"\nList of enabled instructions' sets:\n";
32 std::cout <<
" - SSE2 instructions enabled" << std::endl;
34 std::cout <<
" - SSE2 instructions *not* enabled" << std::endl;
37 std::cout <<
" - SSE3 instructions enabled" << std::endl;
39 std::cout <<
" - SSE3 instructions *not* enabled" << std::endl;
43 std::cout <<
" - SSE4.1 instructions enabled" << std::endl;
45 std::cout <<
" - SSE4.1 instructions *not* enabled" << std::endl;
48 std::cout <<
" - AVX instructions enabled" << std::endl;
50 std::cout <<
" - AVX instructions *not* enabled" << std::endl;
65 const unsigned int arr_size){
71 int* nv =
new int[arr_size];
78 for (
unsigned int i = 0;
i < arr_size; ++
i)
79 nv[
i] = n = std::floor(
LOG2E * input[
i] + 0.5 );
83 for (
unsigned int i = 0;
i < arr_size; ++
i) {
91 x -= px * 6.93145751953125E-1;
92 x -= px * 1.42860682030941723212E-6;
123 for (
unsigned int i = 0;
i < arr_size; ++
i) {
128 u.
ll = (
long long) (n) << 52;
129 output[
i] = output[
i] * u.
d;
152 const unsigned int arr_size){
154 double*
input =
new double [arr_size];
155 double* x_arr =
new double [arr_size];
156 int* fe_arr =
new int [arr_size];
163 for (
unsigned int i = 0;
i < arr_size; ++
i) {
164 input[
i] = original_input[
i];
189 for (
unsigned int i = 0;
i < arr_size; ++
i) {
228 y -= fe * 2.121944400546905827679e-4;
232 z += fe * 0.693359375;
236 for (
unsigned int i = 0;
i < arr_size; ++
i) {
void fast_exp_vect_46(double const *input, double *output, const unsigned int arr_size)
Some tweaks to make it vectorise with gcc46.
constexpr double EXP_LIMIT
void print_instructions_info()
Print the instructions used on screen.
constexpr double LOG_UPPER_LIMIT
VDT_FORCE_INLINE double getMantExponent(double x, double &fe)
Like frexp but vectorising and the exponent is a double.
constexpr double LOG_LOWER_LIMIT
void fast_log_vect_46(double const *input, double *output, const unsigned int arr_size)
Some tweaks to make it vectorise with gcc46.
Used to switch between different type of interpretations of the data (64 bits)