Tracks
/
WebAssembly
WebAssembly
/
Ejercicios
/
Números racionales
Números racionales

Números racionales

Intermedia

Instrucciones

Un número racional se define como el cociente de dos enteros a y b, llamados numerador y denominador, respectivamente, donde b != 0.

Note

Ten en cuenta que, matemáticamente, el denominador no puede ser cero. Sin embargo, en muchas implementaciones de números racionales, encontrarás que se permite que el denominador sea cero, con un comportamiento similar al infinito positivo o negativo de los números de punto flotante. En esos casos, por lo general el denominador y el numerador tampoco pueden ser ambos cero a la vez.

El valor absoluto |r| del número racional r = a/b es igual a |a|/|b|.

La suma de dos números racionales r₁ = a₁/b₁ y r₂ = a₂/b₂ es r₁ + r₂ = a₁/b₁ + a₂/b₂ = (a₁ * b₂ + a₂ * b₁) / (b₁ * b₂).

La diferencia de dos números racionales r₁ = a₁/b₁ y r₂ = a₂/b₂ es r₁ - r₂ = a₁/b₁ - a₂/b₂ = (a₁ * b₂ - a₂ * b₁) / (b₁ * b₂).

El producto (multiplicación) de dos números racionales r₁ = a₁/b₁ y r₂ = a₂/b₂ es r₁ * r₂ = (a₁ * a₂) / (b₁ * b₂).

Dividir un número racional r₁ = a₁/b₁ entre otro r₂ = a₂/b₂ es r₁ / r₂ = (a₁ * b₂) / (a₂ * b₁) si a₂ no es cero.

La potenciación de un número racional r = a/b a una potencia entera no negativa n es r^n = (a^n)/(b^n).

La potenciación de un número racional r = a/b a una potencia entera negativa n es r^n = (b^m)/(a^m), donde m = |n|.

La potenciación de un número racional r = a/b a un número real (de punto flotante) x es el cociente (a^x)/(b^x), que es un número real.

La potenciación de un número real x a un número racional r = a/b es x^(a/b) = root(x^a, b), donde root(p, q) es la raíz q-ésima de p.

Implementa las siguientes operaciones:

  • la suma, la resta, la multiplicación y la división de dos números racionales,
  • el valor absoluto, la potenciación de un número racional dado a una potencia entera, la potenciación de un número racional dado a una potencia real (de punto flotante), la potenciación de un número real a un número racional.

Tu implementación de números racionales siempre debe estar reducida a su mínima expresión. Por ejemplo, 4/4 debe reducirse a 1/1, 30/60 debe reducirse a 1/2, 12/8 debe reducirse a 3/2, etc. Para reducir un número racional r = a/b, divide a y b entre el máximo común divisor (mcd) de a y b. Así, por ejemplo, gcd(12, 8) = 4, entonces r = 12/8 se puede reducir a (12/4)/(8/4) = 3/2. La forma reducida de un número racional debe estar en «forma estándar» (el denominador siempre debe ser un entero positivo). Si hay un denominador con un entero negativo, multiplica tanto el numerador como el denominador por -1 para garantizar que se alcance la forma estándar. Por ejemplo, 3/-4 debe reducirse a -3/4

Asume que el lenguaje de programación que estás usando no tiene una implementación de números racionales.

La exponenciación de números racionales con un número real requiere calcular un número elevado a una potencia no entera, una funcionalidad que no está disponible de forma nativa en WebAssembly.

Sin embargo, también puedes expresar x ^ y como x ^ y = exp(y * ln(x)).

Y por suerte, se pueden usar distintas series para calcular la exponencial y el logaritmo natural.

Función exponencial

La mejor solución para la exponencial es una serie de Taylor:

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

Función logaritmo (para x positiva)

Hay varias maneras de calcular de forma eficiente un logaritmo natural. Una de ellas es una serie basada en una tangente hiperbólica inversa:

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

También existe otra serie de Taylor para calcular el logaritmo natural:

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

Solo es precisa para x entre 0 y 2. Sin embargo, también podemos usar ln(x) = - ln(1 / x)

Exponente entero

Para la exponenciación con exponentes enteros, es mejor usar la multiplicación y un bucle o la recursión, tanto por motivos de rendimiento como de precisión. Para un rendimiento extra, se puede usar el método de Horner para reducir el número de multiplicaciones.


Fuente

WikipediaEl enlace se abre en una ventana o pestaña nueva
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
WebAssembly Exercism

¿Todo listo para empezar Números racionales?

Regístrate en Exercism para aprender y dominar WebAssembly con 87 ejercicios y mentoría humana real, todo gratis.