Kurzusok
/
WebAssembly
WebAssembly
/
Feladatok
/
Racionális számok
Racionális számok

Racionális számok

Közepes

Utasítások

A racionális szám két egész szám, a és b hányadosaként definiálható; a a számláló, b pedig a nevező, és b != 0.

Note

Vedd figyelembe, hogy matematikailag a nevező nem lehet nulla. A racionális számok számos implementációjában azonban azt tapasztalhatod, hogy a nevező lehet nulla, viselkedése pedig hasonló a lebegőpontos számok pozitív vagy negatív végtelenéhez. Ezekben az esetekben a nevező és a számláló általában továbbra sem lehet egyszerre nulla.

Az r = a/b racionális szám abszolútértéke, |r|, egyenlő |a|/|b|-vel.

Két racionális szám, r₁ = a₁/b₁ és r₂ = a₂/b₂ összege r₁ + r₂ = a₁/b₁ + a₂/b₂ = (a₁ * b₂ + a₂ * b₁) / (b₁ * b₂).

Két racionális szám, r₁ = a₁/b₁ és r₂ = a₂/b₂ különbsége r₁ - r₂ = a₁/b₁ - a₂/b₂ = (a₁ * b₂ - a₂ * b₁) / (b₁ * b₂).

Két racionális szám, r₁ = a₁/b₁ és r₂ = a₂/b₂ szorzata r₁ * r₂ = (a₁ * a₂) / (b₁ * b₂).

Az r₁ = a₁/b₁ racionális számot egy másik r₂ = a₂/b₂ racionális számmal elosztva r₁ / r₂ = (a₁ * b₂) / (a₂ * b₁) adódik, ha a₂ nem nulla.

Egy r = a/b racionális számot nemnegatív egész n kitevőre hatványozva r^n = (a^n)/(b^n) adódik.

Egy r = a/b racionális számot negatív egész n kitevőre hatványozva r^n = (b^m)/(a^m) adódik, ahol m = |n|.

Egy r = a/b racionális számot egy valós (lebegőpontos) x számra hatványozva a (a^x)/(b^x) hányadost kapjuk, ami valós szám.

Egy valós x számot egy r = a/b racionális számra hatványozva x^(a/b) = root(x^a, b) adódik, ahol root(p, q) a p q-adik gyöke.

Valósítsd meg a következő műveleteket:

  • két racionális szám összeadása, kivonása, szorzása és osztása,
  • abszolútérték, egy adott racionális szám hatványozása egész kitevőre, egy adott racionális szám hatványozása valós (lebegőpontos) kitevőre, egy valós szám hatványozása racionális kitevőre.

A racionális számok implementációjában a számokat mindig a lehető legegyszerűbb alakra kell egyszerűsíteni. Például a 4/4 1/1-re, a 30/60 1/2-re, a 12/8 3/2-re egyszerűsödik, stb. Egy r = a/b racionális szám egyszerűsítéséhez oszd el a-t és b-t a és b legnagyobb közös osztójával (gcd). Tehát például gcd(12, 8) = 4, így az r = 12/8 egyszerűsíthető (12/4)/(8/4) = 3/2-re. A racionális szám egyszerűsített alakjának „standard alakban” kell lennie (a nevezőnek mindig pozitív egész számnak kell lennie). Ha a nevező negatív egész számot tartalmaz, szorozd meg a számlálót és a nevezőt is -1-gyel, hogy elérd a standard alakot. Például a 3/-4 -3/4-re egyszerűsödik.

Feltételezzük, hogy a programozási nyelv, amit használsz, nem tartalmaz racionális számokra vonatkozó implementációt.

A racionális számok valós kitevőre emelése egy szám nem egész kitevőjű hatványának kiszámítását igényli, ami a WebAssemblyben natívan nem elérhető.

A x ^ y kifejezést azonban felírhatod x ^ y = exp(y * ln(x)) alakban is.

Szerencsére az exponenciális függvény és a természetes logaritmus kiszámítására különböző sorokat használhatunk.

Exponenciális függvény

Az exponenciális függvényre a legjobb megoldás egy Taylor-sor:

exp(x) ≃ 1 + x + x ^ 2 / 2! + x ^ 3 / 3! + x ^ 4 / 4! + ... + x ^ n / n!

Logaritmusfüggvény (pozitív x esetén)

Többféleképpen is hatékonyan kiszámítható a természetes logaritmus. Az egyik egy inverz hiperbolikus tangensen alapuló sor:

ln(x) / 2 ≃ y + y ^ 3 / 3 + y ^ 5 / 5 + ... + y ^ n / n where y = (x - 1) / (x + 1)

A természetes logaritmus kiszámítására egy másik Taylor-sor is használható:

ln(x) = (x - 1) - (x - 1) ^ 2 / 2 + (x  - 1) ^ 3 / 3 - (x - 1) ^ 4 / 4 ... + (x - 1) ^ n / n

Ez csak akkor pontos, ha x 0 és 2 között van. Viszont használhatjuk a ln(x) = - ln(1 / x) összefüggést is.

Egész kitevőjű hatványozás

Egész kitevőjű hatványozásnál jobb, ha szorzást, valamint ciklust vagy rekurziót használsz, teljesítménybeli és pontossági okokból egyaránt. A további teljesítménynövelés érdekében használhatod a Horner-módszert, hogy csökkentsd a szorzások számát.


Forrás

WikipediaA hivatkozás új ablakban vagy lapon nyílik meg
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
WebAssembly Exercism

Készen állsz elkezdeni a(z) Racionális számok feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) WebAssembly nyelvet 87 feladat segítségével, valódi emberi mentorálással, mindez ingyen.