Saltar al contenido principal
LibreTexts Español

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

    bitstring(Float16(8.625))
    "0100100001010000"

    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

    bitstring(1/3)
    "0011111111010101010101010101010101010101010101010101010101010101"

    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:

      1/9+1/9+1/9+1/9+1/9+1/9+1/9+1/9+1/9
    1.0000000000000002

    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.


    This page titled 3.2: Números de punto flotante is shared under a CC BY-NC-SA license and was authored, remixed, and/or curated by Peter Staab.