Verständnisfrage von Code



  • **Edit:
    **Omg... Ich ess grad mein Müsli und denk mir nur "das war doch *= oder?" 💡 ./ 😮

    Ok, das ist mir jetzt wirklich peinlich...

    template <typename IntType>
    rational<IntType>& rational<IntType>::operator*= (const rational<IntType>& r)
    {
        // Protect against self-modification
        IntType r_num = r.num;
        IntType r_den = r.den;
        // Avoid overflow and preserve normalization
        IntType gcd1 = math::gcd(num, r_den);
        IntType gcd2 = math::gcd(r_num, den);
        num = (num/gcd1) * (r_num/gcd2);
        den = (den/gcd2) * (r_den/gcd1);
        return *this;
    }
    

    Der Code ist so exact aus boost::rational (was ich zur Zeit studiere, um mit meiner eigenen Version zu vergleichen):
    Sagen wir ich rechne

    1/3 += 1/4:
    
    num = 1
    den = 3
    r_num =  1
    r_den = 4
    
    gcd1 = gcd(1, 4) = 1
    gcd2 = gcd(1, 3) = 1
    
    num = (1/1) * (1/1) = 1
    den = (3/1) * (4/1) = 12
    
    = 1/12
    Wobei 1/3 + 1/4 = 4/12 + 3/12 = 7/12
    

    Bitte helft mir, was mache ich da falsch?



  • Du rechnest += und liest den Code für *=



  • Ich weiß das ist noch etwas früh, aber ich würde gerne den Thread für den 'dümmsten Thread des Jahres' contest eintragen 😃
    ~edit: falscher smiley~


Anmelden zum Antworten