[Ejercicio] Sin usar tipo float

Iniciado por Miky Gonzalez, 7 Septiembre 2013, 16:13 PM

0 Miembros y 1 Visitante están viendo este tema.

Miky Gonzalez

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:


typedef struct _real {
       int entero;
       unsigned long int decimal;
} real_t;


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:


real_t declarar_real(int entero, unsigned long int decimal) {
   real_t real;    

   real.entero = entero;
   real.decimal = decimal;

   return real;
}

#define mostrar_real(a) printf("%d.%u", a.entero, a.decimal)


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).
Mi blog personal, con información acerca de programación, seguridad, desarrollo y electrónica:

EN CONSTRUCCIÓN

Alien-Z

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.

roilivethelife

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

Miky Gonzalez

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
Mi blog personal, con información acerca de programación, seguridad, desarrollo y electrónica:

EN CONSTRUCCIÓN

do-while

¡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!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!