/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Variable float

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
davidmp



Registrado: 19 Sep 2007
Mensajes: 3

MensajePublicado: 19/09/2007 2:03 pm
Título: Variable float

Hola,

Al crear en una variable de tipo float con valor 99.99 y sacarla por pantalla obtengo el valor 99.989998. ¿Alguien podria explicarme esto? Utilizo Borland Turboc++.

Un saludo.
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 241
Ubicación: Cono Sur

MensajePublicado: 19/09/2007 2:42 pm
Título:

Hola

Debes especificarle la cantidad de decimales que quieres visualizar, de lo contrario tu compilador agregará por defecto todos los decimales posibles.
Código:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    float valor=99.99;
    printf("Valor: %.2f\n\n", valor);
    system("PAUSE");
    return EXIT_SUCCESS;
}


Un saludo
Volver arriba
davidmp



Registrado: 19 Sep 2007
Mensajes: 3

MensajePublicado: 19/09/2007 3:30 pm
Título:

Si, efectivamente, al acotar el numero de decimales el resultado obtenido es el deseado. Aun asi me resulta curioso que, caso de no hacerlo, modifique ciertos decimales o incluso la parte entera (como cuando declaro el valor de la variable como 99.999999, y obtengo el resultado 100.000000 al mostrarla por pantalla). Supongo que sera algun "procedimiento" del coprocesador matematico, o algo por el estilo.

Un saludo.
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 241
Ubicación: Cono Sur

MensajePublicado: 19/09/2007 7:57 pm
Título:

Es natural que el compilador aproxime el número decimal, sobre todo si se trabja con tantas posiciones decimales como es el caso de 99.999999
Naturalmente este número tenderá a 100.00

Un saludo.
Volver arriba
david_celta



Registrado: 02 Jun 2005
Mensajes: 45

MensajePublicado: 19/09/2007 9:13 pm
Título:

Si, es cierto, aunque esta sentencia es para c, pero igual en c++ funciona

>>> printf("Valor: %0.2f\n", valor); <<<

En c++ ademas hay una libreria llamada iomanip.h que junto a iostream.h se encarga de hacer eso para que lo agregues a cout<< con ios::precision(int) o algo parecido a eso, si es que se usara cout<< en vez de printf()

... y lo del compilador también.

- esto es solo una idea, hay que verificarla -
_________________
Este es un bloque de texto que se puede agregar a los mensajes que publique. Texto Compilado en C++. 0 errors y 1 un warning.
Volver arriba
Karman



Registrado: 15 Oct 2005
Mensajes: 308

MensajePublicado: 20/09/2007 9:22 am
Título:

Cita:

me resulta curioso que, caso de no hacerlo, modifique ciertos decimales o incluso la parte entera (como cuando declaro el valor de la variable como 99.999999, y obtengo el resultado 100.000000 al mostrarla por pantalla)


Te lo explico: un float es un tipo de varible de poca presición por las siguientes caraterísticas: solamente utiliza 4bytes
las expresiones decimales en el PC se expresan [num.exp], lo que deja poco espacio para el número en si (en realidad para la presición).

por ejemplo: si quisieras almacenar el número 100.10000001 fijate 2 cosas:

un entero que tb tiene 4 bytes solo soporta hasta el número: 2147483648
entonces se ve que:

10010000001
2147483648

el número no cabería en el tipo de variable, pero si a eso le agregas el espacio que se utiliza para el exponente ves que lo que el procesador hace es lo siguiente:

1001,exp -1

permitiendo que el número quepa en el tipo de variable(quitando presición), si desearas más presición tendrías que utilizar variables del tipo double o long double

S2
_________________
www.inexinferis.co.nr

-. Karman .-
Volver arriba
davidmp



Registrado: 19 Sep 2007
Mensajes: 3

MensajePublicado: 21/09/2007 10:12 am
Título:

Ok, mil gracias a todos.

Un saludo.
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com