De Float a coma flotante

CrIpI

Bueno primero no se si este es el apartado correcto para poner esta duda , si eso perdonen.

Tengo que realizar un programa que pase de float a binario en representacion de coma flotante.

Introduzco un numero de tipo float y uso este metodo Float.floatToIntBits para convertirlo a que? xk a lo mejor me sale un numero asi 1075167887

Supuestamente esta en hezadecimal pero en hexadecimal hay letras tambien y nunca aparece.

Sabeis como puedo mostrar por pantalla el numero en coma flotante? Como esta representado eso?

Hobbes

Explicate un poquito anda, que no es por nada, pero float significa "coma flotante".

Supongo que lo que quieres es pasar un numero en tipo float a un numero en notación de coma flotante. Es decir el numero 234,532 expresarlo como signo, exponente, mantisa.

CrIpI

#2 exacto y sorry no sabia k float significara coma flotante XD pero es lo k tu as dixo exactamente

Hobbes

Dime en que lenguaje lo estás haciendo, también dime si tienes que hacerlo con una determinada precisión o con la que tiene el tipo de datos Float.

CrIpI

Joer k gilipollas soy, lo tengo k acer en java.

No me ha dicho en que rango hay que hacerlo pero no pondra numeros complicados.

son 1 bit de signo , 7 de exponente y 24 de mantisa no?

Yo tenia algo asi:

int signo = (binario & 0x80000000)>> 31;
int exponente = (binario & 0x7F800000)>> 23;
int mantisa = (binario & 0x007FFFFF);

Hobbes

Vale, estoy viendo la api, te devuelve un numero hexadecimal y supongo que quieres el numero en binario, separando signo, exponente y mantisa.

Una vez leido el numero, le pasas int numero=Float.floatToIntBits(float numero), te da un integer.

Luego String binario= Integer.toBinaryString(numero.toString());

Ya tienes un String donde tienes la representación en binario del numero, luego ya separas según el estandar ieee 754 (el primero signo, los 6 siguientes exponente y el resto mantisa).

CrIpI

despues ago un and con lo k t pasao y punto no?

En la linea de:

String binario= Integer.toBinaryString(numero.toString());

Me pone que String no puede invocar primitiva de tipo int o algo asi sabes xk es?

Hobbes

Supongo que te refieres a como separar el signo, el exponente y la mantisa.

Es más sencillo, el binario ya lo tienes como un dato de tipo String, la ventaja es que todos los Strings son un array de char ( char[] ).

Entonces según wikipedia tenemos que los numero en ieee 754 son de la siguente forma:

Primer bit es de signo.
Los 8 siguientes son de exponente.
Los 23 restantes son de mantisa.

Bien, pues si quieres mostrar el signo haces println("signo"+binario[0]);

Para el exponente haces primero un bucle for

string auxiliar="";
for(int i=0;i<8;i++){
auxiliar=binario[i+1];
}

Y lo mismo para la mantisa.

EDIT: Si, porque he mirado la api antigua, quita el .toString() (es un error de tipos, el compilador esperaba un tipo int y le has pasado un string).

CrIpI

Ya creo que lo resolvi. Muchas gracias Hobbes por todo :D

Usuarios habituales

  • CrIpI
  • Hobbes