Vai al contenuto

Gestione numeri in formato floating 16 bit

Vai all indice del manuale di programmazione
Tipo: Funzione
Libreria LogicLab: eLLabMathsLib
Libreria Codesys: Non disponibile

La mezza precisione (Chiamata FP16 o float16) è un formato numerico binario a virgola mobile che occupa 16 bit. È destinato alla memorizzazione di valori in virgola mobile in applicazioni in cui non è essenziale una maggiore precisione, in particolare nell’elaborazione delle immagini e nelle reti neurali.

Float16To32, Float 16-bit to 32-bit conversion

Descrizione

Value (WORD) Valore in formato Float16 da convertire.
La funzione ritorna (REAL) valore convertito in formato IEE754.

Immagine funzione Float16To32

Esempi

Come utilizzare gli esempi
ST_Float16To32: Eseguite alcune conversioni di esempio.

LogicLab (Ptp179, ST_Float16To32)
PROGRAM ST_Float16To32
VAR
    PZValue : REAL; (* Positive zero value *)
    SPSNumber : REAL; (* Smallest positive subnormal number *)
    LSNumber : REAL; (* Largest subnormal number *)
    SPNumber : REAL; (* Smallest positive number *)
    OneThird : REAL; (* One third value *)
    LNLessOne : REAL; (* Largest number less than one *)
    OValue : REAL; (* One value *)
    SNLargerOne : REAL; (* Smallest number larger than one *)
    LNNumber : REAL; (* Largest normal number *)
    PInfinity : REAL; (* Positive infinity *)
    NZValue : REAL; (* Negative zero value *)
    NExample : REAL; (* Negative example number *)
    NInfinity : REAL; (* Negative infinity *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_Float16To32"
// *****************************************************************************
// Executes some conversions.
// -----------------------------------------------------------------------------

    PZValue:=Float16To32(16#0000); //0.0
    SPSNumber:=Float16To32(16#0001); //0.000000059604645
    LSNumber:=Float16To32(16#03FF); //0.000060975552
    SPNumber:=Float16To32(16#0400); //0.00006103515625
    OneThird:=Float16To32(16#3555); //0.33325195
    LNLessOne:=Float16To32(16#3BFF); //0.99951172
    OValue:=Float16To32(16#3C00); //1.0
    SNLargerOne:=Float16To32(16#3C01); //1.00097656
    LNNumber:=Float16To32(16#7BFF); //65504.0
    PInfinity:=Float16To32(16#7C00); //Positive infinity
    NZValue:=Float16To32(16#8000); //-0.0
    NExample:=Float16To32(16#C000); //-2.0
    NInfinity:=Float16To32(16#FC00); //Negative infinity

// [End of file]

Float32To16, Float 32-bit to 16-bit conversion

Descrizione

Value (REAL) Valore in formato IEE754 da convertire.
La funzione ritorna (WORD) valore convertito in formato Float16.

Immagine funzione Float32To16

Esempi

Come utilizzare gli esempi
ST_Float32To16: Eseguite alcune conversioni di esempio.

LogicLab (Ptp179, ST_Float32To16)
PROGRAM ST_Float32To16
VAR
    PZValue : WORD; (* Positive zero value *)
    SPSNumber : WORD; (* Smallest positive subnormal number *)
    LSNumber : WORD; (* Largest subnormal number *)
    SPNumber : WORD; (* Smallest positive number *)
    OneThird : WORD; (* One third value *)
    LNLessOne : WORD; (* Largest number less than one *)
    OValue : WORD; (* One value *)
    SNLargerOne : WORD; (* Smallest number larger than one *)
    LNNumber : WORD; (* Largest normal number *)
    PInfinity : WORD; (* Positive infinity *)
    NZValue : WORD; (* Negative zero value *)
    NExample : WORD; (* Negative example number *)
    NInfinity : WORD; (* Negative infinity *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_Float32To16"
// *****************************************************************************
// Executes some conversions.
// -----------------------------------------------------------------------------

    PZValue:=Float32To16(0.0); //0.0
    SPSNumber:=Float32To16(0.000000059604645); //16#001
    LSNumber:=Float32To16(0.000060975552); //16#03FF
    SPNumber:=Float32To16(0.00006103515625); //16#0400
    OneThird:=Float32To16(0.33325195); //16#3555
    LNLessOne:=Float32To16(0.99951172); //16#3BFF
    OValue:=Float32To16(1.0); //16#3C00
    SNLargerOne:=Float32To16(1.00097656); //16#3C01
    LNNumber:=Float32To16(65504.0); //16#7BFF
//    PInfinity:=Float32To16(inf); //16#7C00
    NZValue:=Float32To16(-0.0); //16#8000
    NExample:=Float32To16(-2.0); //16#C000
//    NInfinity:=Float32To16(-inf); //16#FC00

// [End of file]
Was this article helpful?