3.2: Números de punto flotante
- Page ID
- 113355
\( \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}}} \)
Muchos campos de la computación científica se basan en el uso de decimales y la forma estándar de almacenarlos en una computadora es con números de punto flotante. Los detalles sobre los números de punto flotante se encuentran en el Apéndice XXXX. Julia tiene números de punto flotante de 16-,32 y 64 bits llamados Float16
, Float32
y Float64
y por defecto en la mayoría de los sistemas es el Float64
.
Hay dos limitaciones para cualquier número de punto flotante. Primero, el número de dígitos almacenados en el número y en segundo lugar, los valores máximo y mínimo. Cada tipo incorporado divide el número de bits en el almacenamiento de ambos y hay un equilibrio entre estos. Una regla general es que
• Float16
almacena 4 dígitos decimales y el máximo es de aproximadamente 32,000.
• Float32
almacena 8 dígitos decimales y el máximo es aproximadamente\(10^{38}\).
• Float64
almacena 16 dígitos decimales y el máximo es de aproximadamente\(10^{307}\)
Podemos usar la función bitstring
en julia para encontrar la representación binaria. Observe que
Nuevamente, los detalles están en el Apéndice XXXXX pero, en definitiva, se almacena un número de punto flotante en notación científica con la abscisa, el exponente y el signo todos combinados.
A diferencia de los enteros, la mayoría de los números no se pueden almacenar exactamente con un número de punto flotante. Por ejemplo, 1/3 divide 1 por 3 y da como resultado un número de punto flotante cercano a la fracción\(\frac{1}{3}\). En julia esto es 0.33333333333333 y también tenga en cuenta que
Observe que hay bits distintos de cero en todo el número en este caso que no ocurrieron con 8.625. Esto se debe a que como fracción 8.625 tiene un denominador de 8, que es una potencia de 2. Si una fracción se puede escribir con tal denominador, el número en binario tiene 0s que rellena el extremo derecho del número.
¿Qué importa esto? Considera lo siguiente:
no es 1, el resultado esperado. Este es un ejemplo de las limitaciones de los números de punto flotante y 1) o bien lo tratamos o 2) usar un tipo de datos diferente (en este caso sería mejor un BigFloat
o Rational
).
Nota: Esto ocurrió porque el punto flotante más cercano a la fracción 1/9 estaba ligeramente por encima de 1/9 y sumar 9 de esos números da como resultado la cantidad extra
A menos que sepa que tiene alguna razón para elegir lo contrario, elija Float64
para la mayoría de los números de punto flotante. Todavía hay errores de desbordamiento y desbordamiento asociados a ello, pero como veremos en el Capítulo XXXXX, generalmente el error de redondeo asociado con el número de punto flotante es más perjudicial para los cálculos.