Tracks
/
Elixir
Elixir
/
Temario
/
Números de punto flotante
Nú

Números de punto flotante en Elixir

8 ejercicios

Acerca de Números de punto flotante

En Elixir hay dos tipos diferentes de números: los enteros y los números de punto flotante.

Los números de punto flotante son números con uno o más dígitos detrás del separador decimal. Usan el formato de punto flotante de doble precisión de 64 bits.

float = 3.45
# => 3.45

Elixir también admite la notación científica para los números de punto flotante.

1.25e-2
# => 0.0125

Errores de redondeo

Los números de punto flotante son famosos por sus errores de redondeo.

0.1 + 0.2
# => 0.30000000000000004

Sin embargo, ese tipo de errores no son exclusivos de Elixir. Ocurren en todos los lenguajes de programación. Esto se debe a que todos los datos en nuestras computadoras se almacenan y se procesan como código binario. En binario, solo se pueden expresar con exactitud las fracciones cuyo denominador se puede expresar como 2^n (por ejemplo, 1/4, 3/8, 5/16). Las demás fracciones se expresan como estimaciones.

# 3/4
Float.ratio(0.75)
# => {3, 4}

# 3/5
Float.ratio(0.6)
# => {5404319552844595, 9007199254740992}

Puedes aprender más sobre este problema en 0.30000000000000004.com. La página Float Toy tiene una explicación gráfica muy buena de cómo los bits de un número de punto flotante se convierten en un valor de punto flotante real.

Comparación

Los enteros y los números de punto flotante se pueden considerar iguales (==) si tienen el mismo valor. Sin embargo, al ser de tipos diferentes, nunca son estrictamente iguales (===).

1 == 1.0
# => true

1 === 1.0
# => false

Conversión

Los enteros y los números de punto flotante se pueden mezclar en una sola expresión aritmética. Usar un número de punto flotante en una expresión garantiza que el resultado también sea un número de punto flotante.

2 * 3
# => 6

2 * 3.0
# => 6.0

Los números de punto flotante se pueden redondear (round), redondear hacia arriba (ceil) o redondear hacia abajo (floor).

Para redondear un número de punto flotante y obtener otro número de punto flotante, usa las funciones del módulo Float (Float.round, Float.ceil, Float.floor). Para obtener un entero en su lugar, usa las funciones del módulo Kernel (round, ceil, floor).

Otra forma de convertir un número de punto flotante en un entero es cortar su parte decimal con trunc.

Float.ceil(5.2)
# => 6.0

ceil(5.2)
# => 6

trunc(5.2)
# => 5
Editar en GitHub El enlace se abre en una ventana o pestaña nueva

Aprende Números de punto flotante

La práctica está bloqueada

Desbloquea 4 ejercicios más para practicar Números de punto flotante