elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problemas con variable "double"
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problemas con variable "double"  (Leído 3,689 veces)
MauricioEsp

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Problemas con variable "double"
« en: 28 Septiembre 2016, 00:00 am »

Muy buenas tardes. Tengo un conflicto con la lectura de una variable de tipo double
necesito que la variable sea 0.100000000, que será el dato que un "robot" asignará.
El robot dará el dato 0.1, por lo que la variable debe tener el valor 0.1000000000
El problema está en que, cuando se hace este escaneo, el valor es 0.1000000001.
¿A qué se debe ésto y cómo puedo arreglarlo?
He intentado con lo siguiente:
(Intento 1)

double x;

scanf("%f", &x); (al escanear el valor es 0.1000000001

(intento 2)

double x;

scanf("%lf", &x); (al escanear el valor es 0.1000000001

Muchas gracias de antemano.





En línea

JonaLamper


Desconectado Desconectado

Mensajes: 394



Ver Perfil
Re: Problemas con variable "double"
« Respuesta #1 en: 28 Septiembre 2016, 00:39 am »

¿El valor es 0.1000000001 y tú quieres quedarte sólo con 0.1? ¿No puedes truncar el número para quedarte sólo con el primer decimal o lo estoy entendiendo mal?


En línea

Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.
MauricioEsp

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Problemas con variable "double"
« Respuesta #2 en: 28 Septiembre 2016, 00:42 am »

¿El valor es 0.1000000001 y tú quieres quedarte sólo con 0.1? ¿No puedes truncar el número para quedarte sólo con el primer decimal o lo estoy entendiendo mal?

Algo así:
El valor al escanear 0.1 es 0.1000000001, Quisiera saber a qué se debe ese molesto 1 del final y si hay forma de que, al escanear un decimal en double, éste pueda salir sin necesidad de mostrar un número al final.

Otro ejemplo es cuando intento escanear el 0.2, éste se almacena en la variable con el valor de 0.200000003, No comprendo por qué ese último número del final, ¿Puede cambiarse? Gracias de antemano.
En línea

BloodSharp


Desconectado Desconectado

Mensajes: 812


¡ Hiperfoco !


Ver Perfil WWW
Re: Problemas con variable "double"
« Respuesta #3 en: 28 Septiembre 2016, 01:02 am »

Ahí está la explicación...

http://docs.python.org.ar/tutorial/2/floatingpoint.html#error-de-representacion


B#
En línea



dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Re: Problemas con variable "double"
« Respuesta #4 en: 28 Septiembre 2016, 15:57 pm »

Y ocurre lo mismo al asignar directamente el valor en la variable??? puede que sea más un error de asignación de memoria respecto al valor númerico por la precisión de ese rango coma flotante.

es decir, intenta:

Código
  1. double x = 0.1; // no puedes asignar un valor de ceros, son inexistentes para el compilador
  2. printf(%.10f, x);
  3.  

o lo que se necesitaria seria asignar ese valor como string y luego castearlo para que puedas establecer el número de digitos permitdios después del coma flotante.

En línea


BloodSharp


Desconectado Desconectado

Mensajes: 812


¡ Hiperfoco !


Ver Perfil WWW
Re: Problemas con variable "double"
« Respuesta #5 en: 29 Septiembre 2016, 00:44 am »

Y ocurre lo mismo al asignar directamente el valor en la variable??? puede que sea más un error de asignación de memoria respecto al valor númerico por la precisión de ese rango coma flotante.
(...)
o lo que se necesitaria seria asignar ese valor como string y luego castearlo para que puedas establecer el número de digitos permitdios después del coma flotante.(...)

Es irrelevante en todos los micro-controladores/procesadores modernos se usa el estandar IEE 754 y siempre va a tener un mínimo de error de precisión dado que no se puede representar números no divisibles por 2, sin importar lenguaje de programación, tipo de arquitectura, etc...

En el caso de 0.1f:
1.0 /2-->0.5 /2-->0.25 /2-->0.125 /2-->0.0625 /2-->0.03125 /2-->0.015625 /2-->0,0078125 y podría seguir así y nunca llegar a 0.1 aunque sigas sumandos bits por derecha nunca llegarás al número exacto...


B#
« Última modificación: 29 Septiembre 2016, 00:46 am por BloodSharp » En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines