Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/rational.cfa

    r0087e0e ref346f7c  
    1010// Created On       : Wed Apr  6 17:54:28 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar 27 08:45:59 2019
    13 // Update Count     : 180
     12// Last Modified On : Sun Dec 23 22:56:49 2018
     13// Update Count     : 170
    1414//
    1515
     
    5454        void ?{}( Rational(RationalImpl) & r, RationalImpl n, RationalImpl d ) {
    5555                RationalImpl t = simplify( n, d );                              // simplify
    56                 r.[numerator, denominator] = [n / t, d / t];
     56                r.numerator = n / t;
     57                r.denominator = d / t;
    5758        } // rational
    5859
     
    7778                RationalImpl prev = r.numerator;
    7879                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;
    8082                return prev;
    8183        } // numerator
     
    8486                RationalImpl prev = r.denominator;
    8587                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;
    8790                return prev;
    8891        } // denominator
     
    117120
    118121        Rational(RationalImpl) +?( Rational(RationalImpl) r ) {
    119                 return (Rational(RationalImpl)){ r.numerator, r.denominator };
     122                Rational(RationalImpl) t = { r.numerator, r.denominator };
     123                return t;
    120124        } // +?
    121125
    122126        Rational(RationalImpl) -?( Rational(RationalImpl) r ) {
    123                 return (Rational(RationalImpl)){ -r.numerator, r.denominator };
     127                Rational(RationalImpl) t = { -r.numerator, r.denominator };
     128                return t;
    124129        } // -?
    125130
    126131        Rational(RationalImpl) ?+?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
    127132                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;
    129135                } 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;
    131138                } // if
    132139        } // ?+?
     
    134141        Rational(RationalImpl) ?-?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
    135142                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;
    137145                } 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;
    139148                } // if
    140149        } // ?-?
    141150
    142151        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;
    144154        } // ?*?
    145155
    146156        Rational(RationalImpl) ?/?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
    147157                if ( r.numerator < (RationalImpl){0} ) {
    148                         r.[numerator, denominator] = [-r.numerator, -r.denominator];
     158                        r.numerator = -r.numerator;
     159                        r.denominator = -r.denominator;
    149160                } // 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;
    151163        } // ?/?
    152164
     
    155167        forall( dtype istype | istream( istype ) | { istype & ?|?( istype &, RationalImpl & ); } )
    156168        istype & ?|?( istype & is, Rational(RationalImpl) & r ) {
     169                RationalImpl t;
    157170                is | r.numerator | r.denominator;
    158                 RationalImpl t = simplify( r.numerator, r.denominator );
     171                t = simplify( r.numerator, r.denominator );
    159172                r.numerator /= t;
    160173                r.denominator /= t;
     
    172185        } // distribution
    173186} // 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         } // if
    182 }
    183187
    184188// conversion
Note: See TracChangeset for help on using the changeset viewer.