Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Miky Gonzalez en 7 Septiembre 2013, 16:13 pm



Título: [Ejercicio] Sin usar tipo float
Publicado por: Miky Gonzalez en 7 Septiembre 2013, 16:13 pm
Supongamos por un momento que debes hacer un programa que calcule, lo más exactamente posible, una media, o cálculos, que de seguro, tendrán decimales. Sólo hay una pega, no puedes usar el tipo float bajo ningún concepto.

Lo mejor para este ejercicio sería crear un archivo de cabezera que incluya estructura para crear tu propio tipo float basandote en tipos enteros. Hacer eso es muy facil:

Código
  1. typedef struct _real {
  2.        int entero;
  3.        unsigned long int decimal;
  4. } real_t;
  5.  

Pero se deben crear tambien unas funciones que nos permita actuar con sencillez, como si de un tipo entero se tratase. Puedes empezar por estas funciones:

Código
  1. real_t declarar_real(int entero, unsigned long int decimal) {
  2.    real_t real;    
  3.  
  4.    real.entero = entero;
  5.    real.decimal = decimal;
  6.  
  7.    return real;
  8. }
  9.  
  10. #define mostrar_real(a) printf("%d.%u", a.entero, a.decimal)
  11.  

Lo que se pide en este ejercicio, para quienes quieran hacerlo para practicar sus conocimientos:
Crear funciones de suma y resta de numeros tipo real, al igual que funciones de multiplicación y división.
Si has echo lo anterior, prueba a modificar la estructura para que admita un número ilimitado de decimales (podrías hacerlo con una matriz dinámica).


Título: Re: [Ejercicio] Sin usar tipo float
Publicado por: Alien-Z en 7 Septiembre 2013, 18:10 pm
La idea está perfectamente planteada, pero te dejo una anotación:

Si estás trabajando en C++ existe una técnica especialmente diseñada para lo que intentas hacer: sobrecarga de operadores. Esto permite que al crear un tipo nuevo, para utilizar con él operaciones primitivas, defines tú mismo la implementación de los operadores; aqui tienes una explicación completa y con ejemplos: http://c.conclase.net/curso/?cap=022

En C lamentablemente no existe tal cosa y hay que hacerlo con funciones.

Un saludo.


Título: Re: [Ejercicio] Sin usar tipo float
Publicado por: roilivethelife en 7 Septiembre 2013, 20:31 pm
Como apunte, hay procesadores de sistemas embebidos, donde se usa punto fijo,que vendria a ser lo que pide el ejercicio.

Y en aplicaciones que requieran mucho rendimiento a veces se cambia el float por punto fijo.

Un saludo


Título: Re: [Ejercicio] Sin usar tipo float
Publicado por: Miky Gonzalez en 8 Septiembre 2013, 16:00 pm
Entiendo lo que quieren decir, gracias por comentar.

Anotando, el ejercicio es puesto para C, no soy amigo de C++. Y la idea esque el que quiera lo utilice si no tiene nada que hacer e incluso podria sacar una libreria propia de numeros reales de tamaño ilimitado (aka GMP).

Saludos


Título: Re: [Ejercicio] Sin usar tipo float
Publicado por: do-while en 10 Septiembre 2013, 19:31 pm
¡Buenas!

Otra alternativa es utilizar números racionales. Con racionales puedes aproximar un número real todo lo que quieras (es decir, puedes cometer un error todo lo pequeño que quieras).

¡Saludos!