Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347

    Funzionamento metodo Float.floatToRawIntBits

    Mi potreste spiegare a cosa serve questo metodo, la differenza da floatToIntBits e il suo funzionamento? Ho provato a leggere sulle api ma non ho capito molto.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Questo esempio può aiutarti a capire:

    codice:
    public class GetNan {
       public static void main(String[] args) {
          float f1 = 0.0f / 0.0f;
          float f2 = (float) Math.sqrt( -16.0d );
    
          System.out.println("Verifichiamo che i due valori siano NaN:");
          System.out.println("f1: " + f1);
          System.out.println("f2: " + f2);
          System.out.println();
    
          System.out.println("Vediamo le rappresentazioni intere dei due NaN:");
          System.out.println("f1: " + Integer.toHexString(Float.floatToIntBits(f1)));
          System.out.println("f1 (row): " + Integer.toHexString(Float.floatToRawIntBits(f1)));
          System.out.println("f2: " + Integer.toHexString(Float.floatToIntBits(f2)));
          System.out.println("f2 (row): " + Integer.toHexString(Float.floatToRawIntBits(f2)));
       }
    }
    L'output è il seguente:
    codice:
    Verifichiamo che i due valori siano NaN:
    f1: NaN
    f2: NaN
    
    Vediamo le rappresentazioni intere dei due NaN:
    f1: 7fc00000
    f1 (row): 7fc00000
    f2: 7fc00000
    f2 (row): ffc00000

    All'inizio vengono calcolati due valori NaN: il risultato della divisione 0/0 ed il calcolo della radice quadrata di un numero negativo.

    Il programma verifica che i due valori siano effettivamente NaN, stampandoli a video.
    Poi stampa le rappresentazioni intere dei due float.

    Nel primo caso, floatToIntBits e floatToRowIntBits producolo lo stesso identico risultato; ciò significa che il risultato della divisione per 0 viene rappresentato (ed è piuttosto ovvio) tramite una sequenza di bit che è la stessa usata per la rappresentazione canonica di NaN.

    Nel secondo caso, invece, floatToIntBits ritorna la rappresentazione canonica di NaN (come ci si aspetta), mentre floatToRowIntBits ritorna l'effettiva rappresentazione in memoria di quel float (che è sempre un NaN).

    Questo ci dimostra che NaN non è un valore particolare, ma è NaN qualunque sequenza di bit che non rappresenta un float secondo lo standard IEEE 754 (e ce ne sono molte di sequenze di bit che non rappresentano un float... ne è un esempio la sequenza di bit "ffc00000").

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347
    perfetto, invece se si parla di numeri reali? Ritornano lo stesso risultato?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Se per numeri reali intendi dei double e i metodi

    Double.doubleToLongBits()
    Double.doubleToRowLongBits()

    sì il discorso è esattamente lo stesso.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347
    Ah ok! Praticamente il "Raw" serve solo a dare informazioni più "di basso livello"? Scusa i termini inappropriati e grazie per la spiegazione!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.