github.com/bananabytelabs/wazero@v0.0.0-20240105073314-54b22a776da8/internal/ieee754/ieee754.go (about)

     1  package ieee754
     2  
     3  import (
     4  	"encoding/binary"
     5  	"io"
     6  	"math"
     7  )
     8  
     9  // DecodeFloat32 decodes a float32 in IEEE 754 binary representation.
    10  // See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#floating-point%E2%91%A2
    11  func DecodeFloat32(buf []byte) (float32, error) {
    12  	if len(buf) < 4 {
    13  		return 0, io.ErrUnexpectedEOF
    14  	}
    15  
    16  	raw := binary.LittleEndian.Uint32(buf[:4])
    17  	return math.Float32frombits(raw), nil
    18  }
    19  
    20  // DecodeFloat64 decodes a float64 in IEEE 754 binary representation.
    21  // See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#floating-point%E2%91%A2
    22  func DecodeFloat64(buf []byte) (float64, error) {
    23  	if len(buf) < 8 {
    24  		return 0, io.ErrUnexpectedEOF
    25  	}
    26  
    27  	raw := binary.LittleEndian.Uint64(buf)
    28  	return math.Float64frombits(raw), nil
    29  }