Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/libcfa/rational.c

    r9827c7ba r3d9b5da  
    1111// Created On       : Wed Apr  6 17:54:28 2016
    1212// Last Modified By : Peter A. Buhr
    13 // Last Modified On : Fri Apr  8 17:35:05 2016
    14 // Update Count     : 18
     13// Last Modified On : Thu Apr  7 17:28:03 2016
     14// Update Count     : 12
    1515//
    1616
     
    2323} // extern
    2424
    25 
    26 // constants
    27 
    2825struct Rational 0 = {0, 1};
    2926struct Rational 1 = {1, 1};
    3027
    31 
    32 // helper
    33 
    34 // Calculate greatest common denominator of two numbers, the first of which may be negative. Used to reduce rationals.
    35 static long int gcd( long int a, long int b ) {
     28// Calculate the greatest common denominator of two numbers, the first of which may be negative.  It is used to reduce
     29// rationals.
     30
     31long int gcd( long int a, long int b ) {
    3632    for ( ;; ) {                                                                                // Euclid's algorithm
    3733                long int r = a % b;
     
    4339} // gcd
    4440
    45 static long int simplify( long int *n, long int *d ) {
     41long int simplify( long int *n, long int *d ) {
    4642    if ( *d == 0 ) {
    4743                serr | "Invalid rational number construction: denominator cannot be equal to 0." | endl;
     
    5248} // Rationalnumber::simplify
    5349
    54 
    55 // constructors
    56 
    57 Rational rational() {
    58     return (Rational){ 0, 1 };
     50Rational rational() {                                                                   // constructor
     51//    r = (Rational){ 0, 1 };
     52        Rational t = { 0, 1 };
     53        return t;
    5954} // rational
    6055
    61 Rational rational( long int n ) {
    62     return (Rational){ n, 1 };
     56Rational rational( long int n ) {                                               // constructor
     57//    r = (Rational){ n, 1 };
     58        Rational t = { n, 1 };
     59        return t;
    6360} // rational
    6461
    65 Rational rational( long int n, long int d ) {
     62Rational rational( long int n, long int d ) {                   // constructor
    6663    long int t = simplify( &n, &d );                                    // simplify
    67     return (Rational){ n / t, d / t };
     64//    r = (Rational){ n / t, d / t };
     65        Rational t = { n / t, d / t };
     66        return t;
    6867} // rational
    69 
    70 
    71 // getter/setter for numerator/denominator
    7268
    7369long int numerator( Rational r ) {
     
    8379} // numerator
    8480
    85 long int denominator( Rational r ) {
    86     return r.denominator;
    87 } // denominator
    88 
    8981long int denominator( Rational r, long int d ) {
    9082    long int prev = r.denominator;
     
    9587} // denominator
    9688
    97 
    98 // comparison
    99 
    10089int ?==?( Rational l, Rational r ) {
    10190    return l.numerator * r.denominator == l.denominator * r.numerator;
     
    121110    return ! ( l < r );
    122111} // ?>=?
    123 
    124 
    125 // arithmetic
    126112
    127113Rational -?( Rational r ) {
     
    163149    return t;
    164150} // ?/?
    165 
    166 
    167 // conversion
    168151
    169152double widen( Rational r ) {
     
    205188} // narrow
    206189
    207 
    208 // I/O
    209 
    210190forall( dtype istype | istream( istype ) )
    211191istype * ?|?( istype *is, Rational *r ) {
Note: See TracChangeset for help on using the changeset viewer.