Computes elementwise the dot product of the coordinates of the corresponding element.
Returns the dot product of z0 and z1. If z0 and z1 are floating point this is equivalent to z0*z1. Arguments can be a mix of floting or Cayley-Dicson values.
#include <kyosu/kyosu.hpp>
#include <eve/wide.hpp>
#include <iostream>
int main()
{
using e_t = float;
using we_t = eve::wide<float, eve::fixed<2>>;
using wc_t = eve::wide<kyosu::complex_t<float>, eve::fixed<2>>;
using wq_t = eve::wide<kyosu::quaternion_t<float>, eve::fixed<2>>;
std::cout << "Real: "<< "\n";
e_t e0(1);
e_t e1(2);
std::cout << e0 <<
", " << e1 <<
" -> " <<
dot(e0, e1) <<
"\n";
we_t we0(e0);
we_t we1(e1);
std::cout << we0 <<
", " << we1 <<
" -> " <<
dot(we0, we1) <<
"\n";
std::cout << "Complex: "<< "\n";
c_t c0(1, 5);
c_t c1(5, 9);
std::cout << c0 <<
", " << c1 <<
" -> " <<
dot(c0, c1) <<
"\n";
wc_t wc0(c0);
wc_t wc1(c1);
std::cout << wc0 <<
", " << wc1 <<
" -> " <<
dot(wc0, wc1) <<
"\n";
std::cout << "Quaternion: "<< "\n";
q_t q0(1, 5, 2, 3);
q_t q1(5, 9, 6, 7);
std::cout << q0 <<
", " << q1 <<
" -> " <<
dot(q0, q1) <<
"\n";
wq_t wq0(q0);
wq_t wq1(q1);
std::cout << wq0 <<
", " << wq1 <<
" -> " <<
dot(wq0, wq1) <<
"\n";
std::cout << wq0 <<
", " << q1 <<
" -> " <<
dot(wq0, q1) <<
"\n";
std::cout << wq0 <<
", " << c1 <<
" -> " <<
dot(wq0, c1) <<
"\n";
std::cout << wq0 <<
", " << e1 <<
" -> " <<
dot(wq0, e1) <<
"\n";
std::cout << q0 <<
", " << we1 <<
" -> " <<
dot(q0, we1) <<
"\n";
return 0;
}
as_cayley_dickson_n_t< 4, T > quaternion_t
Type alias for quaternion numbers.
Definition: quaternion.hpp:27
as_cayley_dickson_n_t< 2, T > complex_t
Type alias for complex numbers.
Definition: complex.hpp:27