3.1: Enteros
- Page ID
- 113364
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)
( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\id}{\mathrm{id}}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\kernel}{\mathrm{null}\,}\)
\( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\)
\( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\)
\( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)
\( \newcommand{\vectorA}[1]{\vec{#1}} % arrow\)
\( \newcommand{\vectorAt}[1]{\vec{\text{#1}}} % arrow\)
\( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vectorC}[1]{\textbf{#1}} \)
\( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)
\( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)
\( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)Enteros
Recordemos que matemáticamente, un entero es un número de conteo (1,2,3,...) junto con 0 y los números de conteo negativos (−1, −2, −3,.). Pensando matemáticamente, no hay un entero más grande (o más pequeño), sin embargo, en realidad si estamos almacenando un número en una computadora (que es un dispositivo finito), debe haber un límite en los enteros más pequeños y mayores que se van a almacenar. Prácticamente hablando, limitaremos un entero a algún número de bits y los tamaños estándar son 8, 16, 32, 64 y 128.
Enteros sin signo
Primero, examinaremos los enteros sin signo y típicamente estos se consideran los enteros no negativos (0,1,2,3,...). Por ejemplo, los enteros sin signo de 8 bits tienen un total de números\(2^8 = 256\) no negativos y como el más pequeño es 0, el más grande es 255.
En julia, los tipos de datos para enteros sin signo son Uint8, UInt16, UIint32, UInt64
y UInt128
. Podemos obtener el valor más pequeño y mayor para estos con las funciones typemin
y typemax
.
El Apéndice XXXX abarca muchos de los detalles de los enteros de representación en binario y la realización de operaciones básicas. Vamos a cubrir el un nivel superficial de representación entera y operaciones aquí en este capítulo, pero para aquellos con ganas de más profundidad ver Apéndice XXX
En julia, podemos usar la función bitstring
para dar la representación binaria de enteros y puntos flotantes. Por ejemplo
y
Del mismo modo, los enteros sin signo con más bits funcionan igual con el mayor rango de enteros. Por ejemplo
que es una cadena de longitud 64.
Enteros firmados
En julia, los enteros firmados son Int8, Int16, Iint32, Int64
e Int128
. Además, hay un tipo entero Int
que por defecto es el entero de tamaño del tamaño entero típico en su máquina. Esto es generalmente Int64
.
Veamos en detalle acerca de los enteros con signo de 8 bits. Los valores más grandes y más pequeños que se pueden almacenar con Int8 se pueden encontrar con
Bascialmente los números entre 0 y 127 son idénticos entre Int8 y UInt8.
Desbordamiento y subdesbordamiento de operaciones de enteros
Nuevamente, a diferencia de los enteros matemáticos, cualquier entero basado en computadora tiene valores máximos y mínimos. En resumen, si una operación da como resultado un número por encima del máximo, entonces hay un error de desbordamiento y menos del mínimo hay un error de subdesbordamiento.
Aquí hay un ejemplo sencillo con enteros de 8 bits. Let
y
La suma de 95 y 70 es 165 y por encima del valor máximo para Int8
. Sin embargo, entrando
devuelve un resultado extraño. Quizás esperábamos un error. ¿Qué acaba de pasar? Si quieres saber por qué surgió el valor de -91, indícate en los detalles en el Capítulo XXX, pero la razón por la que no hubo error de desbordamiento es que julia no comprueba automáticamente dichos errores, debido a que hay gastos generales en la comprobación, lo que ralentizará las operaciones.
Si quieres verificar, hay un conjunto de operaciones que comprobarán, por lo tanto:
Vaya a la documentación de julia en checked_add que inicia una lista de funciones que verificarán sobre y subdesbordamiento. Si hay alguna posibilidad de errores de desbordamiento/ subdesbordamiento, entonces los resultados pueden ser incorrectos. Tenga esto en cuenta ya que en el Capítulo XXXX escribiremos pruebas para el código.