PROBLEMA Float To Binary Java

datCubo

Nuovo Utente
4
0
Ciao, ho un dubbio riguardo ad una richiesta
Devo, in Java, realizzare un programma che converta un numero decimale float (supponiamo 5.18) in binario, seguendo le regole IEEE754
Come?
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,668
11,452
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
dovrebbe essere
Java:
float mioFloat = 5.18f;
int k = Float.floatToIntBits(mioFloat); // converte la sequenza di bit del float in un intero
String bitSeq = Integer.toBinaryString(k); // conversione in stringa della sequenza
System.out.println("Sequenza di bit del float --> " + bitSeq);
 
Ultima modifica da un moderatore:

Giacky91

Utente Attivo
793
84
CPU
Intel Core I7 - 2630QM - 2.0 GHZ
Scheda Madre
Proprietaria
HDD
500GB WD 2.5"
RAM
2 x 2GB Corsair
GPU
GeForce GT540M 1GB
Audio
Integrato
OS
Windows 10 Pro, Kali Linux 2.0

1nd33d

Utente Attivo
653
279
CPU
Intel i5 3570K @ 4,5Ghz
Dissipatore
Scythe Mugen 2
Scheda Madre
Gigabyte Z77X-UD3H
HDD
Samsung 840 PRO 256GB + Sandisk Ultra 250GB + Sandisk Plus 960GB
RAM
2x8GB Crucial Ballistix Tactical @2000Mhz CL9
GPU
XFX RX480 GTR Black Edition
Audio
Auzentech X-Fi Forte
Monitor
AOC i2369VW
PSU
Seasonic P660
Case
eh?
Periferiche
Razer Naga HEX v2
OS
Windows 10 64bit - Linux Mint 18
Questo se fosse una normale conversione binaria
Qui devo usare mantissa ed esponente, per questo ho chiesto
Non capisco cosa esattamente tu stia cercando di fare...
Un valore float in Java è già internalmente codificato in ieee754, quindi nel momento in cui lo leggi dall'input è già codificato. Se vuoi ripercorrere "manualmente" i calcoli per la rappresentazione, penso che ti basti tradurre in codice la procedura descritta qui: http://class.ece.iastate.edu/arun/Cpre305/ieee754/ie4.html
 
Ultima modifica:

1nd33d

Utente Attivo
653
279
CPU
Intel i5 3570K @ 4,5Ghz
Dissipatore
Scythe Mugen 2
Scheda Madre
Gigabyte Z77X-UD3H
HDD
Samsung 840 PRO 256GB + Sandisk Ultra 250GB + Sandisk Plus 960GB
RAM
2x8GB Crucial Ballistix Tactical @2000Mhz CL9
GPU
XFX RX480 GTR Black Edition
Audio
Auzentech X-Fi Forte
Monitor
AOC i2369VW
PSU
Seasonic P660
Case
eh?
Periferiche
Razer Naga HEX v2
OS
Windows 10 64bit - Linux Mint 18
Esattamente, ma quello che non riesco a fare è proprio la traduzione in codice
In realtà è un algoritmo piuttosto semplice, la traduzione in codice non dovrebbe impensierirti più di tanto, a meno che tu non sia proprio alle primissime armi.
Codice:
import java.lang.*;

public class IEEE754
{
  public static void main(String[] args)
  {
    float x = 5.18f;   //input
    String sgn = x > 0 ? "0" : "1";
   
    x = Math.abs(x);
    byte e = -128;       //esponente 
    while (x / Math.pow(2.,e) > 2)
      e += 1;
    //rappresentazione in stringa dell'esponente
    String esp = Integer.toBinaryString(e + 127);
    esp = new String(new char[8 - esp.length()]).replace("\0", "0") + esp;
 
    float d = (float)(x / Math.pow(2.,e) - (int)(x / Math.pow(2.,e)));   //parte decimale
 
    String man = "";   //rappresentazione in stringa della mantissa
    float sum = 0;
    for(int m = -1; m > -24; m--)
      if (sum + Math.pow(2.,m) <= d){
        sum += Math.pow(2.,m);
        man += "1";
      }
      else
        man += "0";
 
    System.out.println("segno: " + sgn);
    System.out.println("esponente: " + esp);
    System.out.println("mantissa: " + man);
  }
}
Da come output:
Codice:
segno: 0
esponente: 10000001
mantissa: 01001011100001010001111
Penso sia giusto, se non altro coincide con quanto ottengo usando questa tool: https://www.h-schmidt.net/FloatConverter/IEEE754.html
Non garantisco nulla, l'ho scritta di getto. Ho usato un metodo di Integer per ottenere la stringa binaria dell'esponente. Se vuoi fare manualmente pure quella, basta un ciclo di divisione intera per 2 essendo l'esponente un valore intero.
 
Ultima modifica:
  • Mi piace
Reazioni: datCubo

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili