# Redondeo

$\newcommand{\RR}{\mathbb{R}}$
$\newcommand{\FF}{\mathbb{F}}$

Tenemos una representación del conjunto no-numerable $\RR$ a través del conjunto finito $\FF$. ¿Cómo podemos pasar de un número real a un número flotante, si el número real no es exactamente representable (lo cual es el caso para ¡*casi todos* los números reales!)? Extenderemos para este fin los números reales y los flotantes con $\pm \infty$, y hablaremos de los reales extendidos $\RR^* := \RR \cup \{-\infty, +\infty \}$  y $\FF^* := \FF \cup \{-\infty, +\infty \}$.

Un mapeo $\bigcirc: \RR^* \to \FF^*$ es una *operación de redondeo* si 

- Para toda $x \in \FF^*$, $\bigcirc(x) = x$.
- Si $x, y \in \RR^*$, y $x \le y$, entonces $\bigcirc(x) \le \bigcirc(y)$.

Es decir, el redondeo deja invariantes los números representables en el sistema de punto flotante, y preserva el orden.

Utilizaremos dos modos de redondeo: $\bigtriangleup$, que redondea para arriba (hacia $+\infty$), y $\bigtriangledown$, que redondea para abajo (hacia $-\infty$). Se definen como sigue:

- $\bigtriangleup \! (x) := \min \{y \in \FF^*: y \ge x \}$
- $\bigtriangledown(x) := \max \{y \in \FF^*: y \le x \}$

Hablamos de $x$ redondeado para arriba y $x$ redondeado para abajo, respectivamente; estos dos modos de redondeo se llaman modos de redondeo *dirigidos*.

Nota que no es evidente cómo implementar estas operaciones en la computadora, ya que ¡*no podemos representar los números reales originales*!

[1] (i) Si tuviéramos un número real positivo $x$ (es decir, con  precisión infinita), ¿cómo podríamos encontrar $\bigtriangleup(x)$ y $\bigtriangledown(x)$?

(ii) Encuentra $\bigtriangleup(0.1)$ y $\bigtriangledown(0.1)$ para aritmética flotante de IEEE. ¿En cuánto difieren? ¿Qué podemos decir sobre el *error de redondeo*?

[2] Haz de nuevo el ejercicio anterior para $x=1.1$ y para $x=10.1$.

[3] ¿Qué pasa con $\bigtriangleup(x)$ y $\bigtriangledown(x)$ si $x \in \FF^*$?

[4] ¿Cuál es la relación entre $\bigtriangleup(-x)$ y $\bigtriangledown(x)$?


Existen otros modos de redondeo además de los redondeos arriba mencionados:

- Redondeo a cero (truncamiento): $\square_z(x) = {\rm sign}(x) \max\{y \in \FF^*: y\leq |x| \}$

- Redondeo al más cercano (*round to nearest*): como su nombre lo indica, se redondea al número de punto flotante más cercano, usando $\bigtriangleup(x)$ o $\bigtriangledown(x)$ según sea el caso. Definiendo $\mu = (\bigtriangleup(x) + \bigtriangledown(x))/2$, entonces:

\begin{equation}
\square_n(x) = \left\{
\begin{array}{1 1}
\bigtriangledown(x), &x\in[\bigtriangledown(x),\mu)\\
\bigtriangleup(x),   &x\in[\mu,\bigtriangleup(x)].\\
\end{array}
\right.
\end{equation}

- Redondeo al más cercano *parejo* (*round to nearest even*): es parecido al modo anterior *logrando* que el redondeo hacia arriba y hacia abajo ocurran con la misma probabilidad. (La sutileza en la definición de $\square_n(x)$ está en que la definición involucra un intervalo cerrado y uno semicerrado.) Este redondeo involucra en la definición la paridad del último dígito de la representación de punto flotante de $\bigtriangleup(x)$ y $\bigtriangledown(x)$. Este modo de redondeo es el modo más común.

## Aritmética de punto flotante

¿Cómo podemos hacer aritmética en el mundo de punto flotante?

[5] Encuentra unos ejemplos de pares de  números $x , y \in \FF$ tal que $x \oplus y \notin \FF$. (Aquí, $\FF$ denota a los flotantes de doble precisión de IEEE, y $\oplus$ es alguna operación aritmética entre $x$ y $y$.)

[6] ¿Qué podemos hacer al respecto?

[7] En los reales tenemos que, si se cumple $x+y = x+y'$, entonces $y = y'$. ¿Se cumple esto entre los números de punto flotante? Si tu respuesta es **no**, da un ejemplo.

[8] Analiza el caso de iterar el mapeo $f:[0,1] \to [0,1]$ dado por $f(x) = 3x \mathrm{\ mod\ } 1$, con la condición inicial $x_0 = \frac{1}{10}$:

1. ¿Qué pasa analíticamente?
2. ¿Qué pasa numéricamente?
3. ¿Qué pasa si consideras una condición inicial $x_0$ arbitraria?

[Nota: $\mathrm{mod\ } 1$ quiere decir que sólo consideramos la parte fraccionaria entre $0$ y $1$ de la respuesta en cada paso.]

## Aplicando redondeo para obtener resultados garantizados

Ya estamos en condiciones para empezar a hacer cálculos útiles.

Siguiendo al libro de Tucker, consideremos la suma infinita

$$S = \sum_{n=1}^\infty \frac{1}{n^2}.$$

Se sabe que $S = \frac{\pi^2}{6}$.

[9] Calcula $S$ numéricamente de manera ingenua. 

Para calcular $S$ de forma numérica pero *garantizada*, tenemos dos tareas: debemos lidiar con la suma infinita, y luego garantizar que el resultado realmente contenga el valor verdadero.

[10] Sea la cola de la suma $T_N := \sum_{n=N+1}^\infty \frac{1}{n^2}$. Utiliza un argumento geométrico para mostrar que

$$\int_{N+1}^\infty \frac{1}{x^2} dx < T_N < \int_{N+1}^\infty \frac{1}{(x-1)^2} dx,$$

y así encuentra cotas para $T_N$.

[11] Usa redondeo para abajo y arriba para calcular cotas para la parte inicial $S_N := \sum_{n=1}^N n^{-2}$.

[Para cambiar el modo del redondeo en Julia, usamos

    set_rounding(Float64, RoundUp)
    
]

[12] Utiliza tus dos últimos resultados para dar cotas *rigurosas* (es decir, garantizadas) para $S$.

Verifica que el valor verdadero sí esté contenido adentro de tus cotas.

[13] Repite el cálculo con `BigFloat` para obtener más precisión.

[En Julia, para cambiar la precisión de los `BigFloat`, usamos

    set_bigfloat_precision(100).
    
]

e61108ebf6794465fc3081432e926f680fd3e6c1
ipynb
Jupyter Notebook
notebooks/05. Redondeo_IPython3.ipynb
dpsanders/MetodosNumericosAvanzados
57ed97526afa7f922a43a34dfdc2509274431034
MIT
2015-02-15T17:46:09.000Z
2020-03-12T02:50:44.000Z
notebooks/05. Redondeo_IPython3.ipynb
dpsanders/MetodosNumericosAvanzados
57ed97526afa7f922a43a34dfdc2509274431034
MIT
notebooks/05. Redondeo_IPython3.ipynb
dpsanders/MetodosNumericosAvanzados
57ed97526afa7f922a43a34dfdc2509274431034
MIT
2015-02-15T16:55:23.000Z
2021-08-03T03:43:01.000Z
Qwen/Qwen-72B
1. YES
2. YES