Rappresenta numeri in virgola mobile in bytecode

3

In che modo tipicamente i linguaggi interpretati rappresentano i numeri in virgola mobile nel loro bytecode? Ad esempio, supponiamo di avere un programma Java con la linea

double a = 3.0;

Che aspetto ha il 3.0 nel bytecode del programma? Vedo due possibilità:

1) Scrivere la rappresentazione a livello di bit del numero in memoria nel bytecode, e quindi semplicemente rileggerlo in memoria quando ne abbiamo bisogno. Ci sono probabilmente problemi con la portabilità qui (la dimensione di double su macchine diverse può variare, quindi come possiamo memorizzare un numero in bytecode in modo portabile?).

2) Scrivi una rappresentazione canonica del numero nel bytecode che può essere decodificato al momento dell'esecuzione del programma. La stringa letterale 3.0 potrebbe servire a questo scopo qui, ma poi stiamo sprecando tempo di esecuzione per l'analisi di un numero in virgola mobile durante il runtime.

Quindi la mia domanda è: quale strategia è più comune / efficiente / migliore? Puoi sentirti libero di citare esempi tratti da diversi linguaggi interpretati che compili fino al bytecode (Python, Lua, ecc.), O semplicemente indicarmi la direzione di alcune risorse di alcuni articoli pertinenti se è necessario (sono stato Googling piuttosto bit, ma poche macchine virtuali sono ben documentate).

    
posta Ricky Stewart 07.07.2013 - 04:20
fonte

1 risposta

6

La maggior parte delle lingue fa qualcosa come # 1, cioè, specifica una codifica binaria particolare , ma detta codifica è quasi invariabilmente IEEE-754 perché questo è lo standard in virgola mobile implementato dalla maggior parte delle architetture. Un numero a virgola mobile IEEE-754 a "doppia precisione" è definito come 64 bit.

Esempi:

  • Il formato di file di classe Java specifica la codifica di floating- i valori dei punti memorizzati nella tabella costante e come operandi immediati alle istruzioni:

    The high_bytes and low_bytes items of the CONSTANT_Double_info structure together represent the double value in IEEE 754 floating-point double format (§2.3.2). The bytes of each item are stored in big-endian (high byte first) order.

  • Lua VM assume anche i float IEEE-754:

    Number is the Lua number data type, normally an IEEE 754 64-bit double.

risposta data 07.07.2013 - 04:30
fonte

Leggi altre domande sui tag