Changes in libcfa/src/rational.hfa [541dbc09:5dc4c7e]
- File:
-
- 1 edited
-
libcfa/src/rational.hfa (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/rational.hfa
r541dbc09 r5dc4c7e 12 12 // Created On : Wed Apr 6 17:56:25 2016 13 13 // Last Modified By : Peter A. Buhr 14 // Last Modified On : Mon Jun 5 22:49:05 202315 // Update Count : 11 914 // Last Modified On : Tue Jul 20 17:45:29 2021 15 // Update Count : 118 16 16 // 17 17 … … 19 19 20 20 #include "iostream.hfa" 21 #include "math.trait.hfa" // arithmetic21 #include "math.trait.hfa" // Arithmetic 22 22 23 23 // implementation 24 24 25 forall( T | arithmetic( T ) ) {26 struct rational {25 forall( T | Arithmetic( T ) ) { 26 struct Rational { 27 27 T numerator, denominator; // invariant: denominator > 0 28 }; // rational28 }; // Rational 29 29 30 30 // constructors 31 31 32 void ?{}( rational(T) & r );33 void ?{}( rational(T) & r, zero_t );34 void ?{}( rational(T) & r, one_t );35 void ?{}( rational(T) & r, T n );36 void ?{}( rational(T) & r, T n, T d );32 void ?{}( Rational(T) & r ); 33 void ?{}( Rational(T) & r, zero_t ); 34 void ?{}( Rational(T) & r, one_t ); 35 void ?{}( Rational(T) & r, T n ); 36 void ?{}( Rational(T) & r, T n, T d ); 37 37 38 38 // numerator/denominator getter 39 39 40 T numerator( rational(T) r );41 T denominator( rational(T) r );42 [ T, T ] ?=?( & [ T, T ] dest, rational(T) src );40 T numerator( Rational(T) r ); 41 T denominator( Rational(T) r ); 42 [ T, T ] ?=?( & [ T, T ] dest, Rational(T) src ); 43 43 44 44 // numerator/denominator setter 45 45 46 T numerator( rational(T) r, T n );47 T denominator( rational(T) r, T d );46 T numerator( Rational(T) r, T n ); 47 T denominator( Rational(T) r, T d ); 48 48 49 49 // comparison 50 50 51 int ?==?( rational(T) l, rational(T) r );52 int ?!=?( rational(T) l, rational(T) r );53 int ?!=?( rational(T) l, zero_t ); // => !54 int ?<?( rational(T) l, rational(T) r );55 int ?<=?( rational(T) l, rational(T) r );56 int ?>?( rational(T) l, rational(T) r );57 int ?>=?( rational(T) l, rational(T) r );51 int ?==?( Rational(T) l, Rational(T) r ); 52 int ?!=?( Rational(T) l, Rational(T) r ); 53 int ?!=?( Rational(T) l, zero_t ); // => ! 54 int ?<?( Rational(T) l, Rational(T) r ); 55 int ?<=?( Rational(T) l, Rational(T) r ); 56 int ?>?( Rational(T) l, Rational(T) r ); 57 int ?>=?( Rational(T) l, Rational(T) r ); 58 58 59 59 // arithmetic 60 60 61 rational(T) +?( rational(T) r );62 rational(T) -?( rational(T) r );63 rational(T) ?+?( rational(T) l, rational(T) r );64 rational(T) ?+=?( rational(T) & l, rational(T) r );65 rational(T) ?+=?( rational(T) & l, one_t ); // => ++?, ?++66 rational(T) ?-?( rational(T) l, rational(T) r );67 rational(T) ?-=?( rational(T) & l, rational(T) r );68 rational(T) ?-=?( rational(T) & l, one_t ); // => --?, ?--69 rational(T) ?*?( rational(T) l, rational(T) r );70 rational(T) ?*=?( rational(T) & l, rational(T) r );71 rational(T) ?/?( rational(T) l, rational(T) r );72 rational(T) ?/=?( rational(T) & l, rational(T) r );61 Rational(T) +?( Rational(T) r ); 62 Rational(T) -?( Rational(T) r ); 63 Rational(T) ?+?( Rational(T) l, Rational(T) r ); 64 Rational(T) ?+=?( Rational(T) & l, Rational(T) r ); 65 Rational(T) ?+=?( Rational(T) & l, one_t ); // => ++?, ?++ 66 Rational(T) ?-?( Rational(T) l, Rational(T) r ); 67 Rational(T) ?-=?( Rational(T) & l, Rational(T) r ); 68 Rational(T) ?-=?( Rational(T) & l, one_t ); // => --?, ?-- 69 Rational(T) ?*?( Rational(T) l, Rational(T) r ); 70 Rational(T) ?*=?( Rational(T) & l, Rational(T) r ); 71 Rational(T) ?/?( Rational(T) l, Rational(T) r ); 72 Rational(T) ?/=?( Rational(T) & l, Rational(T) r ); 73 73 74 74 // I/O 75 75 forall( istype & | istream( istype ) | { istype & ?|?( istype &, T & ); } ) 76 istype & ?|?( istype &, rational(T) & );76 istype & ?|?( istype &, Rational(T) & ); 77 77 78 78 forall( ostype & | ostream( ostype ) | { ostype & ?|?( ostype &, T ); } ) { 79 ostype & ?|?( ostype &, rational(T) );80 void ?|?( ostype &, rational(T) );79 ostype & ?|?( ostype &, Rational(T) ); 80 void ?|?( ostype &, Rational(T) ); 81 81 } // distribution 82 82 } // distribution 83 83 84 forall( T | arithmetic( T ) | { T ?\?( T, unsigned long ); } ) {85 rational(T) ?\?( rational(T) x, long int y );86 rational(T) ?\=?( rational(T) & x, long int y );84 forall( T | Arithmetic( T ) | { T ?\?( T, unsigned long ); } ) { 85 Rational(T) ?\?( Rational(T) x, long int y ); 86 Rational(T) ?\=?( Rational(T) & x, long int y ); 87 87 } // distribution 88 88 89 89 // conversion 90 forall( T | arithmetic( T ) | { double convert( T ); } )91 double widen( rational(T) r );92 forall( T | arithmetic( T ) | { double convert( T ); T convert( double );} )93 rational(T) narrow( double f, T md );90 forall( T | Arithmetic( T ) | { double convert( T ); } ) 91 double widen( Rational(T) r ); 92 forall( T | Arithmetic( T ) | { double convert( T ); T convert( double );} ) 93 Rational(T) narrow( double f, T md ); 94 94 95 95 // Local Variables: //
Note:
See TracChangeset
for help on using the changeset viewer.