Un numero razionale è definito come il quoziente di due numeri interi a e b, chiamati rispettivamente numeratore e denominatore, dove b != 0.
Nota che, matematicamente, il denominatore non può essere zero. Tuttavia, in molte implementazioni dei numeri razionali, troverai che è consentito che il denominatore sia zero, con un comportamento simile a quello dell'infinito positivo o negativo nei numeri in virgola mobile. In quei casi, il denominatore ed il numeratore generalmente non possono comunque essere entrambi zero allo stesso tempo.
Il valore assoluto |r| del numero razionale r = a/b è uguale a |a|/|b|.
La somma di due numeri razionali r₁ = a₁/b₁ e r₂ = a₂/b₂ è r₁ + r₂ = a₁/b₁ + a₂/b₂ = (a₁ * b₂ + a₂ * b₁) / (b₁ * b₂).
La differenza di due numeri razionali r₁ = a₁/b₁ e r₂ = a₂/b₂ è r₁ - r₂ = a₁/b₁ - a₂/b₂ = (a₁ * b₂ - a₂ * b₁) / (b₁ * b₂).
Il prodotto (moltiplicazione) di due numeri razionali r₁ = a₁/b₁ e r₂ = a₂/b₂ è r₁ * r₂ = (a₁ * a₂) / (b₁ * b₂).
Dividere un numero razionale r₁ = a₁/b₁ per un altro r₂ = a₂/b₂ dà r₁ / r₂ = (a₁ * b₂) / (a₂ * b₁) se a₂ non è zero.
L'elevamento a potenza di un numero razionale r = a/b ad una potenza intera non negativa n è r^n = (a^n)/(b^n).
L'elevamento a potenza di un numero razionale r = a/b ad una potenza intera negativa n è r^n = (b^m)/(a^m), dove m = |n|.
L'elevamento a potenza di un numero razionale r = a/b ad un numero reale (in virgola mobile) x è il quoziente (a^x)/(b^x), che è un numero reale.
L'elevamento a potenza di un numero reale x ad un numero razionale r = a/b è x^(a/b) = root(x^a, b), dove root(p, q) è la radice q-esima di p.
Implementa le seguenti operazioni:
L'implementazione dei numeri razionali dovrebbe sempre essere ridotta ai minimi termini.
Per esempio, 4/4 dovrebbe ridursi a 1/1, 30/60 dovrebbe ridursi a 1/2, 12/8 dovrebbe ridursi a 3/2, ecc.
Per ridurre un numero razionale r = a/b, dividi a e b per il massimo comun divisore (gcd) di a e b.
Quindi, per esempio, gcd(12, 8) = 4, per cui r = 12/8 può essere ridotto a (12/4)/(8/4) = 3/2.
La forma ridotta di un numero razionale dovrebbe essere in «forma standard» (il denominatore dovrebbe sempre essere un numero intero positivo).
Se è presente un denominatore con un numero intero negativo, moltiplica sia il numeratore sia il denominatore per -1 per garantire che si raggiunga la forma standard.
Per esempio, 3/-4 dovrebbe essere ridotto a -3/4
Presumi che il linguaggio di programmazione che stai usando non abbia un'implementazione dei numeri razionali.
Definisci una tupla rat con gli slot numerator e denominator.
<rat> deve ridurre i suoi argomenti ai minimi termini, con il
segno sul numeratore (così il denominatore è sempre positivo).
<rat> ( numerator denominator -- rat ): costruisce un numero
razionale ridotto.>rat ( pair -- rat ): costruisce un rat da { numerator denominator }.rat>pair ( rat -- pair ): restituisce { numerator denominator }.r+ ( a b -- c ), r- ( a b -- c ), r* ( a b -- c ),
r/ ( a b -- c ): aritmetica su due numeri razionali.r-abs ( a -- |a| ): valore assoluto.r^ ( a n -- a^n ): eleva un numero razionale a una potenza intera
(sono ammessi esponenti negativi).real^r ( x a -- y ): eleva un numero reale a un esponente
razionale e restituisce un numero in virgola mobile.I generici MATH: di Factor (+, -, *, /) si applicano solo
alla gerarchia matematica predefinita, quindi questo esercizio usa
nomi di parole dedicati invece di metodi su quei generici.
Iscriviti a Exercism per imparare e padroneggiare Factor con 47 concetti163 esercizi e il mentoring di persone reali, tutto gratis.