/****************************************** * C++ Trigintaduonions * 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_TRIGINTADUONION #define CA_UWATERLOO_ALUMNI_DWHARDER_TRIGINTADUONION #include #include #include template class Trigintaduonion; template std::ostream & operator << ( std::ostream &, const Trigintaduonion & ); template Trigintaduonion operator + ( T, const Trigintaduonion & ); template Trigintaduonion operator + ( long, const Trigintaduonion & ); template Trigintaduonion operator - ( T, const Trigintaduonion & ); template Trigintaduonion operator - ( long, const Trigintaduonion & ); template Trigintaduonion operator * ( T, const Trigintaduonion & ); template Trigintaduonion operator * ( long, const Trigintaduonion & ); template Trigintaduonion operator / ( T, const Trigintaduonion & ); template Trigintaduonion operator / ( long, const Trigintaduonion & ); template bool operator == ( T, const Trigintaduonion & ); template bool operator == ( long, const Trigintaduonion & ); template bool operator != ( T, const Trigintaduonion & ); template bool operator != ( long, const Trigintaduonion & ); template T real( const Trigintaduonion & ); template T imag_i( const Trigintaduonion & ); template T imag_j( const Trigintaduonion & ); template T imag_k( const Trigintaduonion & ); template T imag_u1( const Trigintaduonion & ); template T imag_i1( const Trigintaduonion & ); template T imag_j1( const Trigintaduonion & ); template T imag_k1( const Trigintaduonion & ); template T imag_u2( const Trigintaduonion & ); template T imag_i2( const Trigintaduonion & ); template T imag_j2( const Trigintaduonion & ); template T imag_k2( const Trigintaduonion & ); template T imag_u3( const Trigintaduonion & ); template T imag_i3( const Trigintaduonion & ); template T imag_j3( const Trigintaduonion & ); template T imag_k3( const Trigintaduonion & ); template T csgn( const Trigintaduonion & ); template T abs( const Trigintaduonion & ); template T norm( const Trigintaduonion & ); template T abs_imag( const Trigintaduonion & ); template T norm_imag( const Trigintaduonion & ); template T arg( const Trigintaduonion & ); template Trigintaduonion imag( const Trigintaduonion & ); template Trigintaduonion conj( const Trigintaduonion & ); template Trigintaduonion signum( const Trigintaduonion & ); template Trigintaduonion sqr( const Trigintaduonion & ); template Trigintaduonion sqrt( const Trigintaduonion & ); template Trigintaduonion rotate( const Trigintaduonion &, const Trigintaduonion & ); template Trigintaduonion exp( const Trigintaduonion & ); template Trigintaduonion log( const Trigintaduonion & ); template Trigintaduonion log10( const Trigintaduonion & ); template Trigintaduonion pow( const Trigintaduonion &, const Trigintaduonion & ); template Trigintaduonion pow( const Trigintaduonion &, T ); template Trigintaduonion inverse( const Trigintaduonion & ); template Trigintaduonion sin( const Trigintaduonion & ); template Trigintaduonion cos( const Trigintaduonion & ); template Trigintaduonion tan( const Trigintaduonion & ); template Trigintaduonion sec( const Trigintaduonion & ); template Trigintaduonion csc( const Trigintaduonion & ); template Trigintaduonion cot( const Trigintaduonion & ); template Trigintaduonion sinh( const Trigintaduonion & ); template Trigintaduonion cosh( const Trigintaduonion & ); template Trigintaduonion tanh( const Trigintaduonion & ); template Trigintaduonion sech( const Trigintaduonion & ); template Trigintaduonion csch( const Trigintaduonion & ); template Trigintaduonion coth( const Trigintaduonion & ); template Trigintaduonion asin( const Trigintaduonion &, const Trigintaduonion & = Trigintaduonion::I ); template Trigintaduonion acos( const Trigintaduonion &, const Trigintaduonion & = Trigintaduonion::I ); template Trigintaduonion atan( const Trigintaduonion & ); template Trigintaduonion asec( const Trigintaduonion &, const Trigintaduonion & = Trigintaduonion::I ); template Trigintaduonion acsc( const Trigintaduonion &, const Trigintaduonion & = Trigintaduonion::I ); template Trigintaduonion acot( const Trigintaduonion & ); template Trigintaduonion asinh( const Trigintaduonion & ); template Trigintaduonion acosh( const Trigintaduonion &, const Trigintaduonion & = Trigintaduonion::I ); template Trigintaduonion atanh( const Trigintaduonion &, const Trigintaduonion & = Trigintaduonion::I ); template Trigintaduonion asech( const Trigintaduonion &, const Trigintaduonion & = Trigintaduonion::I ); template Trigintaduonion acsch( const Trigintaduonion & ); template Trigintaduonion acoth( const Trigintaduonion &, const Trigintaduonion & = Trigintaduonion::I ); template Trigintaduonion bessel_J( int, const Trigintaduonion & ); template Trigintaduonion floor( const Trigintaduonion & ); template Trigintaduonion ceil( const Trigintaduonion & ); template Trigintaduonion horner( const Trigintaduonion &, T *, unsigned int ); template Trigintaduonion horner( const Trigintaduonion &, T *, T *, unsigned int ); template class Trigintaduonion { private: T r, i, j, k, u1, i1, j1, k1, u2, i2, j2, k2, u3, i3, j3, k3, u4, i4, j4, k4, u5, i5, j5, k5, u6, i6, j6, k6, u7, i7, j7, k7; inline static Trigintaduonion multiplier( T, T, const Trigintaduonion & ); inline static Trigintaduonion make_inf( T, T ); inline static Trigintaduonion make_i( T, T ); public: const static Trigintaduonion ZERO; const static Trigintaduonion ONE; const static Trigintaduonion I; const static Trigintaduonion J; const static Trigintaduonion K; const static Trigintaduonion U1; const static Trigintaduonion I1; const static Trigintaduonion J1; const static Trigintaduonion K1; const static Trigintaduonion U2; const static Trigintaduonion I2; const static Trigintaduonion J2; const static Trigintaduonion K2; const static Trigintaduonion U3; const static Trigintaduonion I3; const static Trigintaduonion J3; const static Trigintaduonion K3; const static Trigintaduonion U4; const static Trigintaduonion I4; const static Trigintaduonion J4; const static Trigintaduonion K4; const static Trigintaduonion U5; const static Trigintaduonion I5; const static Trigintaduonion J5; const static Trigintaduonion K5; const static Trigintaduonion U6; const static Trigintaduonion I6; const static Trigintaduonion J6; const static Trigintaduonion K6; const static Trigintaduonion U7; const static Trigintaduonion I7; const static Trigintaduonion J7; const static Trigintaduonion K7; const static Trigintaduonion UNITS[32]; /****************************************** * Constructor and Copy Constructor ******************************************/ Trigintaduonion( T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T ); Trigintaduonion( T = 0.0 ); /****************************************** * Assignment Operator ******************************************/ const Trigintaduonion & operator = ( T ); /****************************************** * Mutating Arithmetic Operators ******************************************/ Trigintaduonion & operator += ( const Trigintaduonion & ); Trigintaduonion & operator -= ( const Trigintaduonion & ); Trigintaduonion & operator *= ( const Trigintaduonion & ); Trigintaduonion & operator /= ( const Trigintaduonion & ); Trigintaduonion & operator += ( T ); Trigintaduonion & operator -= ( T ); Trigintaduonion & operator *= ( T ); Trigintaduonion & operator /= ( T ); Trigintaduonion & operator ++(); Trigintaduonion operator ++( int ); Trigintaduonion & operator --(); Trigintaduonion 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 imag_u4() const; T imag_i4() const; T imag_j4() const; T imag_k4() const; T imag_u5() const; T imag_i5() const; T imag_j5() const; T imag_k5() const; T imag_u6() const; T imag_i6() const; T imag_j6() const; T imag_k6() const; T imag_u7() const; T imag_i7() const; T imag_j7() const; T imag_k7() const; T csgn() const; T abs() const; T norm() const; T abs_imag() const; T norm_imag() const; T arg() const; /****************************************** * Trigintaduonion-valued Functions ******************************************/ Trigintaduonion imag() const; Trigintaduonion conj() const; Trigintaduonion operator * () const; Trigintaduonion signum() const; Trigintaduonion sqr() const; Trigintaduonion sqrt() const; Trigintaduonion rotate( const Trigintaduonion & ) 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 ******************************************/ Trigintaduonion exp() const; Trigintaduonion log() const; Trigintaduonion log10() const; Trigintaduonion pow( const Trigintaduonion & ) const; Trigintaduonion pow( T ) const; Trigintaduonion inverse() const; /****************************************** * Trigonometric and Hyperbolic Functions ******************************************/ Trigintaduonion sin() const; Trigintaduonion cos() const; Trigintaduonion tan() const; Trigintaduonion sec() const; Trigintaduonion csc() const; Trigintaduonion cot() const; Trigintaduonion sinh() const; Trigintaduonion cosh() const; Trigintaduonion tanh() const; Trigintaduonion sech() const; Trigintaduonion csch() const; Trigintaduonion coth() const; Trigintaduonion asin( const Trigintaduonion & = I ) const; Trigintaduonion acos( const Trigintaduonion & = I ) const; Trigintaduonion atan() const; Trigintaduonion asec( const Trigintaduonion & = I ) const; Trigintaduonion acsc( const Trigintaduonion & = I ) const; Trigintaduonion acot() const; Trigintaduonion asinh() const; Trigintaduonion acosh( const Trigintaduonion & = I ) const; Trigintaduonion atanh( const Trigintaduonion & = I ) const; Trigintaduonion asech( const Trigintaduonion & = I ) const; Trigintaduonion acsch() const; Trigintaduonion acoth( const Trigintaduonion & = I ) const; Trigintaduonion bessel_J( int ) const; /****************************************** * Integer Functions ******************************************/ Trigintaduonion ceil() const; Trigintaduonion floor() const; /****************************************** * Horner's Rule ******************************************/ Trigintaduonion horner( T *, unsigned int ) const; Trigintaduonion horner( T *, T *, unsigned int ) const; /****************************************** * Random Factories ******************************************/ static Trigintaduonion random(); static Trigintaduonion random_imag(); static Trigintaduonion random_real(); /****************************************** * Binary Arithmetic Operators ******************************************/ Trigintaduonion operator + ( const Trigintaduonion & ) const; Trigintaduonion operator + ( T ) const; Trigintaduonion operator - ( const Trigintaduonion & ) const; Trigintaduonion operator - ( T ) const; Trigintaduonion operator * ( const Trigintaduonion & ) const; Trigintaduonion operator * ( T ) const; Trigintaduonion operator / ( const Trigintaduonion & ) const; Trigintaduonion operator / ( T ) const; /****************************************** * Unary Arithmetic Operators ******************************************/ Trigintaduonion operator - () const; /****************************************** * Binary Boolean Operators ******************************************/ bool operator == ( const Trigintaduonion & ) const; bool operator == ( T ) const; bool operator != ( const Trigintaduonion & ) const; bool operator != ( T ) const; }; #endif