/****************************************** * C++ Sedenions * Version: 1.0.9 * Author: Douglas Wilhelm Harder * Date: 2008/03/03 * * Copyright (c) 2006-2008 by Douglas Wilhelm Harder. * All rights reserved. ******************************************/ #ifndef CA_UWATERLOO_ALUMNI_DWHARDER_SEDENION #define CA_UWATERLOO_ALUMNI_DWHARDER_SEDENION #include #include #include template class Sedenion; template std::ostream & operator << ( std::ostream &, const Sedenion & ); template Sedenion operator + ( T, const Sedenion & ); template Sedenion operator + ( long, const Sedenion & ); template Sedenion operator - ( T, const Sedenion & ); template Sedenion operator - ( long, const Sedenion & ); template Sedenion operator * ( T, const Sedenion & ); template Sedenion operator * ( long, const Sedenion & ); template Sedenion operator / ( T, const Sedenion & ); template Sedenion operator / ( long, const Sedenion & ); template bool operator == ( T, const Sedenion & ); template bool operator == ( long, const Sedenion & ); template bool operator != ( T, const Sedenion & ); template bool operator != ( long, const Sedenion & ); template T real( const Sedenion & ); template T imag_i( const Sedenion & ); template T imag_j( const Sedenion & ); template T imag_k( const Sedenion & ); template T imag_u1( const Sedenion & ); template T imag_i1( const Sedenion & ); template T imag_j1( const Sedenion & ); template T imag_k1( const Sedenion & ); template T imag_u2( const Sedenion & ); template T imag_i2( const Sedenion & ); template T imag_j2( const Sedenion & ); template T imag_k2( const Sedenion & ); template T imag_u3( const Sedenion & ); template T imag_i3( const Sedenion & ); template T imag_j3( const Sedenion & ); template T imag_k3( const Sedenion & ); template T csgn( const Sedenion & ); template T abs( const Sedenion & ); template T norm( const Sedenion & ); template T abs_imag( const Sedenion & ); template T norm_imag( const Sedenion & ); template T arg( const Sedenion & ); template Sedenion imag( const Sedenion & ); template Sedenion conj( const Sedenion & ); template Sedenion signum( const Sedenion & ); template Sedenion sqr( const Sedenion & ); template Sedenion sqrt( const Sedenion & ); template Sedenion rotate( const Sedenion &, const Sedenion & ); template Sedenion exp( const Sedenion & ); template Sedenion log( const Sedenion & ); template Sedenion log10( const Sedenion & ); template Sedenion pow( const Sedenion &, const Sedenion & ); template Sedenion pow( const Sedenion &, T ); template Sedenion inverse( const Sedenion & ); template Sedenion sin( const Sedenion & ); template Sedenion cos( const Sedenion & ); template Sedenion tan( const Sedenion & ); template Sedenion sec( const Sedenion & ); template Sedenion csc( const Sedenion & ); template Sedenion cot( const Sedenion & ); template Sedenion sinh( const Sedenion & ); template Sedenion cosh( const Sedenion & ); template Sedenion tanh( const Sedenion & ); template Sedenion sech( const Sedenion & ); template Sedenion csch( const Sedenion & ); template Sedenion coth( const Sedenion & ); template Sedenion asin( const Sedenion &, const Sedenion & = Sedenion::I ); template Sedenion acos( const Sedenion &, const Sedenion & = Sedenion::I ); template Sedenion atan( const Sedenion & ); template Sedenion asec( const Sedenion &, const Sedenion & = Sedenion::I ); template Sedenion acsc( const Sedenion &, const Sedenion & = Sedenion::I ); template Sedenion acot( const Sedenion & ); template Sedenion asinh( const Sedenion & ); template Sedenion acosh( const Sedenion &, const Sedenion & = Sedenion::I ); template Sedenion atanh( const Sedenion &, const Sedenion & = Sedenion::I ); template Sedenion asech( const Sedenion &, const Sedenion & = Sedenion::I ); template Sedenion acsch( const Sedenion & ); template Sedenion acoth( const Sedenion &, const Sedenion & = Sedenion::I ); template Sedenion bessel_J( int, const Sedenion & ); template Sedenion floor( const Sedenion & ); template Sedenion ceil( const Sedenion & ); template Sedenion horner( const Sedenion &, T *, unsigned int ); template Sedenion horner( const Sedenion &, T *, T*, unsigned int ); template class Sedenion { private: T r, i, j, k, u1, i1, j1, k1, u2, i2, j2, k2, u3, i3, j3, k3; inline static Sedenion multiplier( T, T, const Sedenion & ); inline static Sedenion make_inf( T, T ); inline static Sedenion make_i( T, T ); public: const static Sedenion ZERO; const static Sedenion ONE; const static Sedenion I; const static Sedenion J; const static Sedenion K; const static Sedenion U1; const static Sedenion I1; const static Sedenion J1; const static Sedenion K1; const static Sedenion U2; const static Sedenion I2; const static Sedenion J2; const static Sedenion K2; const static Sedenion U3; const static Sedenion I3; const static Sedenion J3; const static Sedenion K3; const static Sedenion UNITS[16]; /****************************************** * Constructor and Copy Constructor ******************************************/ Sedenion( T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T ); Sedenion( T = 0.0 ); /****************************************** * Assignment Operator ******************************************/ const Sedenion & operator = ( const T & ); /****************************************** * Mutating Arithmetic Operators ******************************************/ Sedenion & operator += ( const Sedenion & ); Sedenion & operator -= ( const Sedenion & ); Sedenion & operator *= ( const Sedenion & ); Sedenion & operator /= ( const Sedenion & ); Sedenion & operator += ( T ); Sedenion & operator -= ( T ); Sedenion & operator *= ( T ); Sedenion & operator /= ( T ); Sedenion & operator ++(); Sedenion operator ++( int ); Sedenion & operator --(); Sedenion operator --( int ); /****************************************** * Real-valued Functions ******************************************/ T real() const; T operator []( int ) const; T& operator []( int ); T imag_i() const; T imag_j() const; T imag_k() const; T imag_u1() const; T imag_i1() const; T imag_j1() const; T imag_k1() const; T imag_u2() const; T imag_i2() const; T imag_j2() const; T imag_k2() const; T imag_u3() const; T imag_i3() const; T imag_j3() const; T imag_k3() const; T csgn() const; T abs() const; T norm() const; T abs_imag() const; T norm_imag() const; T arg() const; /****************************************** * Sedenion-valued Functions ******************************************/ Sedenion imag() const; Sedenion conj() const; Sedenion operator * () const; Sedenion signum() const; Sedenion sqr() const; Sedenion sqrt() const; Sedenion rotate( const Sedenion & ) const; /****************************************** * Boolean-valued Functions ******************************************/ bool is_imaginary() const; bool is_inf() const; bool is_nan() const; bool is_neg_inf() const; bool is_pos_inf() const; bool is_real() const; bool is_real_inf() const; bool is_zero() const; /****************************************** * Exponential and Logarithmic Functions ******************************************/ Sedenion exp() const; Sedenion log() const; Sedenion log10() const; Sedenion pow( const Sedenion & ) const; Sedenion pow( T ) const; Sedenion inverse() const; /****************************************** * Trigonometric and Hyperbolic Functions ******************************************/ Sedenion sin() const; Sedenion cos() const; Sedenion tan() const; Sedenion sec() const; Sedenion csc() const; Sedenion cot() const; Sedenion sinh() const; Sedenion cosh() const; Sedenion tanh() const; Sedenion sech() const; Sedenion csch() const; Sedenion coth() const; Sedenion asin( const Sedenion & = I ) const; Sedenion acos( const Sedenion & = I ) const; Sedenion atan() const; Sedenion asec( const Sedenion & = I ) const; Sedenion acsc( const Sedenion & = I ) const; Sedenion acot() const; Sedenion asinh() const; Sedenion acosh( const Sedenion & = I ) const; Sedenion atanh( const Sedenion & = I ) const; Sedenion asech( const Sedenion & = I ) const; Sedenion acsch() const; Sedenion acoth( const Sedenion & = I ) const; Sedenion bessel_J( int ) const; /****************************************** * Integer Functions ******************************************/ Sedenion ceil() const; Sedenion floor() const; /****************************************** * Horner's Rule ******************************************/ Sedenion horner( T *, unsigned int ) const; Sedenion horner( T *, T *, unsigned int ) const; /****************************************** * Random Factories ******************************************/ static Sedenion random(); static Sedenion random_imag(); static Sedenion random_real(); /****************************************** * Binary Arithmetic Operators ******************************************/ Sedenion operator + ( const Sedenion & ) const; Sedenion operator + ( T ) const; Sedenion operator - ( const Sedenion & ) const; Sedenion operator - ( T ) const; Sedenion operator * ( const Sedenion & ) const; Sedenion operator * ( T ) const; Sedenion operator / ( const Sedenion & ) const; Sedenion operator / ( T ) const; /****************************************** * Unary Arithmetic Operators ******************************************/ Sedenion operator - () const; /****************************************** * Binary Boolean Operators ******************************************/ bool operator == ( const Sedenion & ) const; bool operator == ( T ) const; bool operator != ( const Sedenion & ) const; bool operator != ( T ) const; }; #endif