Changes in libcfa/src/rational.cfa [0087e0e:ef346f7c]
- File:
-
- 1 edited
-
libcfa/src/rational.cfa (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/rational.cfa
r0087e0e ref346f7c 10 10 // Created On : Wed Apr 6 17:54:28 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 27 08:45:59 201913 // Update Count : 1 8012 // Last Modified On : Sun Dec 23 22:56:49 2018 13 // Update Count : 170 14 14 // 15 15 … … 54 54 void ?{}( Rational(RationalImpl) & r, RationalImpl n, RationalImpl d ) { 55 55 RationalImpl t = simplify( n, d ); // simplify 56 r.[numerator, denominator] = [n / t, d / t]; 56 r.numerator = n / t; 57 r.denominator = d / t; 57 58 } // rational 58 59 … … 77 78 RationalImpl prev = r.numerator; 78 79 RationalImpl t = gcd( abs( n ), r.denominator ); // simplify 79 r.[numerator, denominator] = [n / t, r.denominator / t]; 80 r.numerator = n / t; 81 r.denominator = r.denominator / t; 80 82 return prev; 81 83 } // numerator … … 84 86 RationalImpl prev = r.denominator; 85 87 RationalImpl t = simplify( r.numerator, d ); // simplify 86 r.[numerator, denominator] = [r.numerator / t, d / t]; 88 r.numerator = r.numerator / t; 89 r.denominator = d / t; 87 90 return prev; 88 91 } // denominator … … 117 120 118 121 Rational(RationalImpl) +?( Rational(RationalImpl) r ) { 119 return (Rational(RationalImpl)){ r.numerator, r.denominator }; 122 Rational(RationalImpl) t = { r.numerator, r.denominator }; 123 return t; 120 124 } // +? 121 125 122 126 Rational(RationalImpl) -?( Rational(RationalImpl) r ) { 123 return (Rational(RationalImpl)){ -r.numerator, r.denominator }; 127 Rational(RationalImpl) t = { -r.numerator, r.denominator }; 128 return t; 124 129 } // -? 125 130 126 131 Rational(RationalImpl) ?+?( Rational(RationalImpl) l, Rational(RationalImpl) r ) { 127 132 if ( l.denominator == r.denominator ) { // special case 128 return (Rational(RationalImpl)){ l.numerator + r.numerator, l.denominator }; 133 Rational(RationalImpl) t = { l.numerator + r.numerator, l.denominator }; 134 return t; 129 135 } else { 130 return (Rational(RationalImpl)){ l.numerator * r.denominator + l.denominator * r.numerator, l.denominator * r.denominator }; 136 Rational(RationalImpl) t = { l.numerator * r.denominator + l.denominator * r.numerator, l.denominator * r.denominator }; 137 return t; 131 138 } // if 132 139 } // ?+? … … 134 141 Rational(RationalImpl) ?-?( Rational(RationalImpl) l, Rational(RationalImpl) r ) { 135 142 if ( l.denominator == r.denominator ) { // special case 136 return (Rational(RationalImpl)){ l.numerator - r.numerator, l.denominator }; 143 Rational(RationalImpl) t = { l.numerator - r.numerator, l.denominator }; 144 return t; 137 145 } else { 138 return (Rational(RationalImpl)){ l.numerator * r.denominator - l.denominator * r.numerator, l.denominator * r.denominator }; 146 Rational(RationalImpl) t = { l.numerator * r.denominator - l.denominator * r.numerator, l.denominator * r.denominator }; 147 return t; 139 148 } // if 140 149 } // ?-? 141 150 142 151 Rational(RationalImpl) ?*?( Rational(RationalImpl) l, Rational(RationalImpl) r ) { 143 return (Rational(RationalImpl)){ l.numerator * r.numerator, l.denominator * r.denominator }; 152 Rational(RationalImpl) t = { l.numerator * r.numerator, l.denominator * r.denominator }; 153 return t; 144 154 } // ?*? 145 155 146 156 Rational(RationalImpl) ?/?( Rational(RationalImpl) l, Rational(RationalImpl) r ) { 147 157 if ( r.numerator < (RationalImpl){0} ) { 148 r.[numerator, denominator] = [-r.numerator, -r.denominator]; 158 r.numerator = -r.numerator; 159 r.denominator = -r.denominator; 149 160 } // if 150 return (Rational(RationalImpl)){ l.numerator * r.denominator, l.denominator * r.numerator }; 161 Rational(RationalImpl) t = { l.numerator * r.denominator, l.denominator * r.numerator }; 162 return t; 151 163 } // ?/? 152 164 … … 155 167 forall( dtype istype | istream( istype ) | { istype & ?|?( istype &, RationalImpl & ); } ) 156 168 istype & ?|?( istype & is, Rational(RationalImpl) & r ) { 169 RationalImpl t; 157 170 is | r.numerator | r.denominator; 158 RationalImplt = simplify( r.numerator, r.denominator );171 t = simplify( r.numerator, r.denominator ); 159 172 r.numerator /= t; 160 173 r.denominator /= t; … … 172 185 } // distribution 173 186 } // distribution 174 175 forall( otype RationalImpl | arithmetic( RationalImpl ) | { RationalImpl ?\?( RationalImpl, unsigned long ); } )176 Rational(RationalImpl) ?\?( Rational(RationalImpl) x, long int y ) {177 if ( y < 0 ) {178 return (Rational(RationalImpl)){ x.denominator \ -y, x.numerator \ -y };179 } else {180 return (Rational(RationalImpl)){ x.numerator \ y, x.denominator \ y };181 } // if182 }183 187 184 188 // conversion
Note:
See TracChangeset
for help on using the changeset viewer.