Está en la página 1de 14

Estudio sobre

Aritmética Aproximada
v 0.1 (Nov 2010)
por Óscar Valor 火長兄 勇気 (Hichōkei Yūki)
http://hichokei.wordpress.com

Introducción
La idea parte de lo difícil que se enseña a calcular las raíces cuadradas, y ya no digo de una raíz enésima, o
que directamente ni se enseña a calcular los logaritmos si no es con calculadora. Y aquí estudio un método
en el que podemos hacer esos cálculos aproximados de una forma rapida a partir de saberse los primeros
resultados. El símil es que sabemos multiplicar dos números sean como sean de grandes, porque sabemos
multiplicar un grupo pequeño de ellos (del 1 al 10).
La idea de hacerlo aproximado viene de que es imposible representar un número con infinitos decimlaes no
periódicos (es decir, un número irracional), y que al final siempre se redondea, ya que en un ámbito prác-
tico los instrumentos de medida que se utilizan habitualmente, ya sea una regla, un metro, o una cucharilla,
un vaso, una pipeta, etc... tambien tienen un límite de precisión. Así que al final acabamos redondeando
todos los números reales convirtiéndolos en números racionales con los que sí sabemos trabajar.
Es también evidente que aprender a hacer cálculos aproximados de cabeza no nos va a resolver con gran
precisión ningún problema que necesite, pero para ello están los ordenadores, o programas como Mathemat-
ica, Matlab o incluso muchas calculadoras que hoy en día tienen una gran cantidad de dígitos y nos darán
con mucha precisión lo que queramos.
Con esto podremos resolver rápido pequeñas cuentas, con solo un papel y un lápiz. (y con la práctica,
mentalmente)

Aproximación
No vamos a entrar en detalle en cómo se calculan los tipos de errores al redondear, aunque voy a recordar
rápidamente un par de cosas y la notación que voy a utilizar.
El Error Absoluto ( A ) es la diferencia entre el número exacto (x) y su aproximación Hx'), es decir:
 A = x - x'
Y el Error Relativo (R ) es la proporción entre el Error Absoluto y el valor que estamos usando
x - x'
R =
x
Esto nos sirve para calcular cuántos dígitos de precisión vamos a usar, porque si el error de redondeo del
decimal d es de 0.5 ÿ 10-d , para tener d dígitos de precisión, el error relativo tendrá que ser menor o igual
que el de redondeo:
x - x' 10-d
R = §
x 2
Quiero recordar que el redondeo más efectivo es el que redondea hacia arriba el 5, y hacia abajo el 4, sin
acumular las cifras anteriores, es decir, utilizaremos este tipo de redondeo:
0.5 º 1 º 1.4
2 Estudio sobre Aritmética Aproximada.nb

Y sin acumular las cifras anteriores:


0.500 º 1 º 1.499
Con todo esto tenemos que poner una pequeña notación acerca de cómo vamos a llamar a los errores, y con
cuánta profundidad vamos a trabajar, Así un error en el dígito n, lo notaremos como N y diremos que es
un número con n-1 dígitos de precisión.
10-n+1
R §  N =
2
Y con esta notación vamos a decir que tanto en la suma (y resta), como en el producto (y división), como en
la potencia (y raíz y logaritmo) los errores se acumulan linealmente. Es decir, sea cualquiera de estas
operaciones representada por la operación triángulo (ò):
Hx + N L ò Hy + M L º x ò y + HN + M L
 N + M
xò y º z
Y sacamos de la ecuación anterior la relación:
N = 10 N+1
Pero hay que tener cuidado, porque la acumulación de errores te quitan una cifra sin tener que llegar a 10
(desde la propiedad de la desigualdad):
2 N º N-1
Y con ello definimos la suma de dos errores de diferente tamaño como si el error mayos abosorviera al
menor:
Para N < M ï N + M º N

Fracciones
Las fracciones tienen su forma especial de calcularla de forma exacta, con esa regla de poner una barrita
separando el numerador y el denominador. Y vamos a usarla (porque es exacta) para lo que serán nuestra
tabla de divisiones. Pero a partir de esta, nos apoyaremos y calcularemos lo siguiente con aproximaciones,
de una forma más cómoda diria yo.
Tenemos una ecuación recursiva que nos va a ayudar mucho a simplificar fracciones:
x 1 x-1 x+1
= +
y 2 y y

Podríamos decir con palabras, que un número está entre el anterior y el siguiente. Esta proporción la vamos
a utilizar muchísimo de aquí en adelante, aunque sólo es una igualdad en este caso, en los demás será una
aproximación, y jugaremos con esta y con los decimales para calcular cualquier número.
De aquí también sale otra ecuación para simplificar los divisores:
x 1 x x 1 1 1 1
º + ñ º +
y 2 y-1 y+1 y 2 y-1 y+1
Estudio sobre Aritmética Aproximada.nb 3

J y−1 + N− y
1 x x x
2 y+1
Plot3DB x
, 8x, 1, 1000<, 8y, 1, 1000<, ClippingStyle → None,
y

Exclusions → None, Mesh → 84, 8<, PlotPoints → 50,


PerformanceGoal → "Quality", WorkingPrecision → 100F

Esta ecuacíon ya empieza a darnos problemas, xq no es exacta, es sólo aproximada. Parto de la idea de que
para calcular un número aproximado, vamos a coger sólo 3 dígitos significativos. Y elijo 3 por varios
motivos. El primero es que cuanto menos decimales más rápido será el cálculo puesto que multiplicar 3
dígitos por 3 dígitos siempre es más lento que 2 dígitos por 2. Pero el mínimo tiene que ser representativo,
sino podríamos no calcular nada directamente, así que observando la notación científica, suele usarse un
número con dos decimales, de la forma 1, 23 ÿ 10n (1'23  n) y la idea de estos dos decimales (más la pate
entera) está bastante extendida, así que nos vamos a limitar a esto.
Ahora tenemos que estudiar cuándo podemos usar esta fórmula. Las fórmulas que he expuesto están pen-
sadas para trabajar conla propiedad que dice: "cualquier número [natural] se puede descomponer como
producto de números primos" Y con ello, vamos a juntarlo con la regla de aproximación que lleva un
número real a uno racional, y de ahí con la definición de racionales que cualquier número con números
decimales se puede representar como una fracción de números enteros. Y que los números enteros, se
pueden convertir en naturales cogiendo su valor absoluto.
Con estas reglas, hemos simplificado todo de un tirón, y nos dedicamos a trabajar con naturales, como nos
gusta a nosotros. Ahora vamos a ver cuando esta equivalenca tiene un error de 3 decimales:

J y−1 + N− y
1 1 1 1
2 y+1 10−3
NSolveB == F
1êy 2
88y → 44.7325<, 8y → − 44.7325<<

El resultado nos dice que esta fórmula ofrece 3 decimales de precisión en la fracción siguiente a 1/44.
Vamos a hacer una prueba con la primera fracción prima mayor que 45:
1 1 1 1
In[1]:= PrintBNB F, "\n", NB + FF
47 2 46 48
0.0212766
0.0212862
4 Estudio sobre Aritmética Aproximada.nb

Y efectivamente, ahí aparecen nuestras 2 cifras significativas (Si vemos el redoneo), que expresadas en
notación científica sería 5'9e-2 Así que nuestra tabla de divisiones tendrá que ser la de todos los números
primos menores que 13, y tendrán que tener 3 cifras significativas, para evitar que al multiplicar dos frac-
ciones, perdamos una cifra (por las propiedades que hemos descrito antes).
Para ver un ejemplo de cómo trabaja el algoritmo: (Donde pone N lo hago para marcar que podemos tomar
otro camino más corto que seguir el algoritmo como autómatas, y más adelante lo desarollo).
Estudio sobre Aritmética Aproximada.nb 5

1.
1997
1. 1 1
+
2 1996 1998
1. 1 1
+
4 998 999
1. 1 1 1 1
+ +
4 998 2 998 1000
1. 2 1 1
+ +
8 998 998 1000
1. 3 1
+
16 499 500
1. 1 3 3 1
+ +
16 2 498 500 500
1. 3 3 2
+ +
32 498 500 500
1. 3 5
+
64 249 250
1. 1 1
NB + F
64 83 5 ∗ 10
1. 1 3 3 5
+ +
64 2 248 250 250
1. 3 3 10
+ +
2 ^ 7 248 250 250
1. 3 13
+
2 ^ 8 124 125
1 3 13
NB + F
2 ^ 8 31 ∗ 4 5 ^ 3
1. 3 1 13 13
+ +
2 ^ 8 124 2 124 126
1. 6 13 13
+ +
2 ^ 9 124 124 126
1. 19 13
+
2 ^ 10 62 63
1. 19 1 13 13
+ +
2 ^ 10 62 2 62 64
1. 38 + 13 13
+
2 ^ 11 62 64
1. 51 13
+
2 ^ 12 31 32
0.000500751  0.000500751  0.000500751  0.000500752  0.000500752 
0.000500752  0.000500753  0.000500753  0.000500753  0.000500753 
0.000500756  0.000500756  0.000500756  0.000500756  0.000500782 
0.000500782  0.000500782  0.000500833  0.000500833  0.000500833
6 Estudio sobre Aritmética Aproximada.nb

1 1 1 1 1 1 1 1. 1 1
NB + → ≈ + ≈ + →
64 83 5 ∗ 10 83 2 82 84 4 41 2∗3∗7
1. 1. 1 1 1
+ + F
64 4 41 2 ∗ 3 ∗ 7 5 ∗ 10
0.000500753 → 0.0120482 ≈ 0.0120499 ≈ 0.0120499 → 0.00050078

Ahora vamos a utilizar otra equivalencia cuya convergencia es mucho más rápida, pero es para cifras más
altas:
x x 1 1
º ñ º
y y+1 y y+1
1 1
y
− y+1
Plot3DB , 8x, 1, 1000<, 8y, 1, 1000<, ClippingStyle → None,
1êy
Exclusions → None, Mesh → 84, 8<, PlotPoints → 50,
PerformanceGoal → "Quality", WorkingPrecision → 100F

Esta ecuación si es chula, porque te permite simplificar de una manera muchísimo más cómoda cualquier
número primo bastante alto (o algún impar que te moleste y no quieras calcular si es primo o no). Veamos
cuando es cierta:
1 1
y
− y+1 10−3
NSolveB == F
1êy 2
88y → 1999.<<

Es cierta a partir de 2000 con 3 decimales exactos. Con este método habría que tener cuidado porque se
puede cogiendo tendencia de irse hacia un lado si siempre sumas o siempre restas cuando lo haces recursiva-
mente. Así que cada vez que se haga, una vez se le suma 1, y otra vez se le resta 1. Y la primera vez sería
muy interesante sumarle o restarle 1 para que el divisor sea como mínimo múltiplo de 4.
Conclusiones de las fracciones
x 1 x x
ª + 4 Para x > 45 (1)
y 2 y-1 y+1
x x
ª 4 Para x > 2000 (2)
y y+1
Estudio sobre Aritmética Aproximada.nb 7

Raíces Cuadradas
En las raíces cuadradas, podemos hacer la misma suposición por aproximación de que la ráiz de un número
primo es la media entre la raíz del anterior y el siguiente. y también tiene un compartamiento bueno porque
converge, y cuanto más grnde es el número, menos precisión pierde
x+1 + x−1
x ≈
2
x+1 + x−1
x − 2
PlotB , 8x, 15, 1000<, Exclusions → None, PlotPoints → 50,
x
PerformanceGoal → "Quality", WorkingPrecision → 100F

8. µ 10-6

6. µ 10-6

4. µ 10-6

2. µ 10-6

200 400 600 800 1000

Veamos cuando nos interesa detener la recursividad para mantener los 3 decimales que queremos
x+1 + x−1
x − 2 10−3
NSolveB == F
x 2

88x → − 15.8213<, 8x → 15.8213<<

La raíz se comporta mejor que la inversa, porque ya aumenta la precisión para cualquier número mayor que
15, por lo que solo hay que mirarse hasta raíz de 13. Veamos un ejemplo
8 Estudio sobre Aritmética Aproximada.nb

991.
1
J 990 + 992 N
2.
2
J 495 + 496 N
2.
2 1
J 494 + 496 N + 496
2. 2
2
J 494 + 3 496 N
4.
2
J 247 + 3 248 N
4.
1 1
J 246 + 248 N + 3 248
2. 2
1
J 246 + 7 248 N
4.
2
J 123 + 7 124 N
4.
2
J 122 + 15 124 N
8.
1
J 61 + 15 62 N
4.
1
J 60 + 31 62 N
8.
2
J 30 + 31 31 N
8.
2
J2 30 + 31 J 30 + 32 NN
16.
1
J33 15 + 31 16 N
8.
1
J33 5 3 + 31 ∗ 4N
8.
Y buscando un acelerador más rápido, vemos que también tenemos la fórmula de aproximar un primo a su
anterior (o posterior) dependiendo de cuál de los dos es múltiplo de 4 para sacar el 2 fuera. para números
mayores de 1000:
x ≈ x−1

x − x−1 10−3
NSolveB == F
x 2
Estudio sobre Aritmética Aproximada.nb 9

88x → 1000.2500625156289`<<
x+1 + x−1
x − 2
PlotB , 8x, 1000, 100 000<, Exclusions → None,
x
PlotPoints → 50, PerformanceGoal → "Quality", WorkingPrecision → 100F

882. → 1000.25<<

8. µ 10-10

6. µ 10-10

4. µ 10-10

2. µ 10-10

20 000 40 000 60 000 80 000 100 000

Conclusiones de las raíces cuadradas


x+1 + x−1
x ≈ 4 Para x > 15 (3)
2

x ≈ x−1 4 Para x > 1000 (4)

Logaritmos
La regla fundamental con la que vamos a jugar con los logaritmos es la de poder descomponer un pro-
ducto, en la suma de logaritmos, es decir
Log@a * bD = Log@aD + Lob@bD
Esta fórmula es la que nos permite descomponer también un número dentro del logaritmo en factores
primos y simplificar. Y con la misma idea que llevamos arrastrando desde el principio, veamos cómo se
comporta esta aproximación:
Log@x - 1D + Log@x + 1D
Log@xD º
2
Log@x−1D+Log@x+1D
Log@xD − 2. 10−3
FindRootB  , 8x, 10<F
Log@xD 2
82. → 18.5225<
10 Estudio sobre Aritmética Aproximada.nb

Log@x+1D+Log@x−1D
Log@xD − 2.
PlotB , 8x, 1, 100<, Exclusions → None,
Log@xD
PlotPoints → 50, PerformanceGoal → "Quality"F

0.0012

0.0010

0.0008

0.0006

0.0004

0.0002

20 40 60 80 100

Tenemos que funciona converge y que la precisión funciona a partir de 18, por lo que tendremos que hacer
nuestra tabla de logaritmos de los números primos del 2 al 17 para tener 3 decimales. Veamos un ejemplo:
Log@337.D
1.
HLog@336D + Log@338DL
2
1.
HLog@2 ∗ 168D + Log@2 ∗ 169DL
2
1.
HLog@168D + Log@169D + 2 Log@2DL
2
1. 1
Log@168D + HLog@168D + Log@170DL + Log@2D
2 2
1.
H3 Log@168D + Log@170DL + Log@2D
4
1.
H3 Log@2 ∗ 84D + Log@2 ∗ 85DL + Log@2D
4
1.
H3 Log@84D + Log@85D + 4 Log@2DL + Log@2D
4
1. 1
3 Log@84D + HLog@84D + Log@86DL + 2 Log@2D
4 2
1.
H6 Log@84D + Log@84D + Log@86DL + 2 Log@2D
8
1.
H7 Log@2 ∗ 42D + Log@2 ∗ 43DL + 2 Log@2D
8
1. 1
7 Log@42D + HLog@42D + Log@44DL + 3 Log@2D
8 2
1.
H15 Log@42D + Log@44DL + 3 Log@2D
16
1.
H15 Log@21D + Log@22DL + 4 Log@2D
16
1.
H15 HLog@3D + Log@7DL + Log@2D + Log@11DL + 4 Log@2D
16
Estudio sobre Aritmética Aproximada.nb 11

Y ahora buscamos un acelerador del logaritmo, más potente para quitar números primos grandes, que es
esta ecuación:
Log@xD º Log@x - 1D

Log@xD − Log@x − 1D 10−3


FindRootB  , 8x, 100<F
Log@xD 2
82. → 343.085<

Log@xD − Log@x − 1D
PlotB , 8x, 343, 30 000<, Exclusions → None,
Log@xD
PlotPoints → 50, PerformanceGoal → "Quality"F

0.00004

0.00003

0.00002

0.00001

5000 10 000 15 000 20 000 25 000 30 000

Conclusiones de los Logaritmos


Log@x - 1D + Log@x + 1D
Log@xD º 4 Para x > 18 (5)
2
Log@xD º Log@x - 1D 4 Para x > 350 (6)

Raíces Enésimas
Para una raíz de tamaño cualquiera, tendremos que usar la propiedad de los exponentes de donde se deduce
la propiedad para las raíces
axy = Hax L y
xy y x
a = a
Si realizamos el estudio además de que no se comporta del todo bien, el algoritmo final para calcular varias
veces la raíz de un número, que te sale decimal, y luego vuelves a recalcularlo como la raíz de otra fracción,
que son dos raíces (la del numerador y el denominador) y así recursivamente, nos ayuda a buscar una
alternativa a la escuacion que usaríamos por inercia, que seria:
n+1 n-1

n x + x
x º
2
Nos vamos a basar en la regla de los Logaritmos, (y con lo dicho anteriormente, podremos calcularlos sin
problemas), que dice que:
12 Estudio sobre Aritmética Aproximada.nb

n Log@xD
x = ‰^
n
Y existe una propiedad de e que para calcular su valor, hay una sucesión infinita de fracciones que nos lo
resuelve, y se puede extender para calcular como suma de fracciones e elevado a cualquier número menor
que 1:

1
‰=‚
i=0
i!

xi
‰ =‚
x
Para x < 1
i=0
i!

Ahora veamos cómo converge esta función para un número finito de iteraciones (como se divide por el
factorial, vamos a ver cómo se comporta hasta 6! porque

ForBnum = 1, num < 7, ++num,

xi 10−3
PrintBnum, " : ", FindRootB x − SumB , 8i, 0, num<F  x , 8x, 1<FFF
i! 2
1 : 82. → 0.031961<

2 : 82. → 0.149704<

3 : 82. → 0.35519<

4 : 82. → 0.632491<

5 : 82. → 0.967188<

6 : 82. → 1.34836<

Un número más que aceptable en vista de estos resultados será hacer la sumatoria hasta factorial de 5 (120)
que nos sirve para números menores de 967, y primos mayores que éste sólo hay: 971,977,983,991,997, a
donde generalmente sólo sacaremos 2 dígitos significativos por redondeo, pero es un error más que acept-
able, que sólo afecta a 5 números de 1000. (Y el límite está en 1000 porque usando la precisión de 3 cifras,
no vamos a elevar un número a nada superior a 1/999).
Veamos un ejemplo de cómo se comporta:
Estudio sobre Aritmética Aproximada.nb 13

xi
x − SumB i! , 8i, 0, 5<F
PlotB , 8x, 0, 1<, ClippingStyle → None,
x
Exclusions → None, Mesh → 84, 8<, PlotPoints → 50,
PerformanceGoal → "Quality", WorkingPrecision → 100F

0.0006

0.0005

0.0004

0.0003

0.0002

0.0001

0.2 0.4 0.6 0.8 1.0

Se puede ver que diverge, y por eso lo controlamos para números inferiores a 1, que se quedan por debajo
10-3
de 0.005 = 2
para x < 1.
883
Apliquemos la fórmula para calcular, por ejemplo, 7 877
883
7. 877
883 Log@7D
^ → Log@7.D
877.
883 ∗ 1.946
^ → 883 ∗ 1.946
877.
1718. 1718. 1718. 1718.
^ → FloorB F→ − FloorB F
877. 877. 877. 877.
^ H1 + 0.959L
∗ ^ H0.959L
∗ ^ H0.959L
5 0.959i
∗ ‚
i=0
i!

0.9592 0.9593 0.9594 0.9595


∗ 1 + 0.959 + + + + → 0.9592
2 6 24 120
0.92 0.92 ∗ 0.959 0.922 0.9595
∗ 1 + 0.959 + + + + → 0.922 → 0.92 ∗ 0.959
2 6 24 120
0.92 0.882 0.846 0.846 ∗ 0.959
∗ 1 + 0.959 + + + +
→ 0.846 ∗ 0.959
2 6 120 24
0.92 0.882
0.811 0.92 0.846
0.882 0.846 0.811
∗ 1 + 0.959 + + + + → → → →
2 6 24 120 2 6 24 120
∗ H1 + 0.959 + 0.46 + 0.147 + 0.0353 + 0.00676L →
1 + 0.959 + 0.46 + 0.147 + 0.0353 + 0.00676
2.718 ∗ 2.61
883
7.93979 ≈ 7.9398 ≈ 7. 877 ≈ 7.09381
14 Estudio sobre Aritmética Aproximada.nb

En este ejemplo incluso se obtienen 5 decimales significativos (y eso que se ha operado con 3 dígitos). Así
que de aquí sacamos la conclusión de:
5
xi
x =‚
n
(7)
i=0
i!

Donde si n>1000 se redondea la fracción 1/n de forma que sólo tenga 3 dígitos para calcular después el
logaritmo.

También podría gustarte