Problema C++

Muy buenas, tengo un problemilla con un programa en C++. Queremos hacer un programa que calcule el limite de los numeros FLOAT. Hemos intentado algo parecido con este programilla, pero no tira:
(error al compilar)

#include
float main ()
{
float a;
float b;
float i;
int ema;
i=1;
int epsilon(float i);

{
a = (i/2);
b = (i*2);
if(1 != (1+i)) return a; else return b;
}
ema = epsilon (i);
printf ("Epsilon-en balioa: %f", ema);
getchar();
}


Si se os ocurre la manera de solucionarlo decidlo PLZ. Un saludo. :D
No puedes declarar una función dentro del main.
Creo que puedes utilizar directamente el MAX_FLOAT...
La cuestion es que tengo que descubrir el limite de los numeros float, no puedo utilizar max_float o eso. Voy a probar a sacar la funcion del main. Gracias a to2, os comento lo que consiga. talue!

EDIT:
he probado a sacar la funcion del main y ya compila, aunque no calcula el maximo de float, tal vez sea un fallo en el algoritmo principal. Si se os ocurre algo mejor decidme plz. TAlue!
Otra sugerencia, si declaras main como float main(), que no sé porqué, deberías terminar con un return.

Normalmente se declara int main() para acabar con return 0; así comunica al SO que ha finalizado la ejecución correctamente.

Ahora mismo no se me ocurre cómo calcular el máximo( sería llegar al desbordamiento...), pero entienedo que ese cófigo no funcione, tendría que estar escrito de una forma parecida a esta:

#include
float epsilon(float i) // Sin ; Si haces return de un float, la cabecera debe ser float.
{
float a; //Se declaran dentro de la función, no fuera. Si los declaras en main
float b; // no serán modificados dentro de la función a menos de que pases punteros.

a = (i/2);
b = (i*2);

if(1 != (1+i)) return a; else return b; //No acabo de entender lo que haces, si i = 0
// devuelves b, en caso contrario a.
}

int main (void)
{
float i;
float ema;

i=1;
ema = epsilon (i); //Llama 1 sola vez a la función, por lo que devolverá siempre 0.5,
//ya que i != 0
printf ("Epsilon-en balioa: %f", ema);
getchar();
return 0;

}

Además, esto es c no c++ xDD

Bueno, acabo comentandote algunas pistas para llegar a terminarlo:
· Crea un bucle while que vaya modificando los valores hasta llegar al máximo
while( a != max){
a = a*2;
} //por ejemplo
· Utilizando sizeof(float) sabrás cuantos bytes utiliza un float n memoria, cualquier otro número que sobrepase ese tamaño ya no será float
imaginemos una variable num cualquiera, si sizeof(num) > sizeof(float) ese número sobrepasa el máximo del float...

No se me ocurre mucho más para ayudar... Un saludo!
Muchas gracias Kunshi, probare lo que has sugerido de ese while. De todas formas creo que ya tenemos la solucion al problemilla. Gracias a todos lo que habeis respondido [toctoc] [toctoc] [toctoc] [toctoc] [toctoc] habeis sido de gran ayuda. Un saludo [beer]
5 respuestas