Saltar al contenido

¿Por qué pierdo precisión al convertir float32 a float64?

Hola usuario de nuestra página, hallamos la solución a tu búsqueda, has scroll y la obtendrás aquí.

Solución:

nunca perder precisión al convertir de un float (es decir, float32) a un double (flotador64). el anterior deber ser un subconjunto de este último.

Tiene más que ver con la precisión predeterminada del formateador de salida.

El IEEE754 más cercano float a 359.9 es

359.899993896484375

El IEEE754 más cercano double a 359.9 es

359.8999999999999772626324556767940521240234375

El IEEE754 más cercano double al 359.899993896484375 es

359.899993896484375

(es decir, es lo mismo, debido a la regla de subconjunto que ya he mencionado).

Entonces puedes ver eso float64(a) es lo mismo que float64(359.899993896484375) cual es 359.899993896484375. Esto explica esa salida, aunque su formateador está redondeando los últimos 2 dígitos.

Esto me ayudó a entender la respuesta de @FaceyMcFaceFace:

var a float32 = math.Pi
fmt.Println(a)
fmt.Println(float64(a))
fmt.Println(float64(math.Pi))

3.1415927
3.1415927410125732
3.141592653589793

https://play.golang.org/p/-bAQLqjlLG

Recuerda algo, que te concedemos glosar si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *