or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

index.md
tile.json

index.mddocs/

0

# IEEE754

1

2

IEEE754 is a lightweight JavaScript library for reading and writing IEEE754 floating point numbers from/to Buffer objects or array-like structures. It implements the IEEE Standard for Floating-Point Arithmetic (IEEE 754) with precise control over floating-point number encoding and decoding, supporting different endianness, mantissa lengths, and byte counts.

3

4

## Package Information

5

6

- **Package Name**: ieee754

7

- **Package Type**: npm

8

- **Language**: JavaScript

9

- **Installation**: `npm install ieee754`

10

11

## Core Imports

12

13

```javascript

14

const ieee754 = require('ieee754');

15

```

16

17

For ES modules:

18

19

```javascript

20

import * as ieee754 from 'ieee754';

21

```

22

23

## Basic Usage

24

25

```javascript

26

const ieee754 = require('ieee754');

27

28

// Create a buffer to work with

29

const buffer = Buffer.alloc(4);

30

31

// Write a 32-bit float (single precision)

32

const value = 42.42;

33

ieee754.write(buffer, value, 0, true, 23, 4);

34

35

// Read the 32-bit float back

36

const readValue = ieee754.read(buffer, 0, true, 23, 4);

37

console.log(readValue); // 42.42000007629395

38

39

// Working with 64-bit doubles

40

const doubleBuffer = Buffer.alloc(8);

41

const doubleValue = 12345.123456789;

42

43

// Write a 64-bit double (double precision)

44

ieee754.write(doubleBuffer, doubleValue, 0, true, 52, 8);

45

46

// Read the 64-bit double back

47

const readDouble = ieee754.read(doubleBuffer, 0, true, 52, 8);

48

console.log(readDouble); // 12345.123456789

49

```

50

51

## Architecture

52

53

IEEE754 implements low-level binary operations for floating-point number encoding and decoding:

54

55

- **Binary Representation**: Converts floating-point numbers to/from their binary IEEE754 representation

56

- **Configurable Precision**: Supports different mantissa lengths and byte counts for various precision levels

57

- **Endianness Control**: Handles both little-endian and big-endian byte ordering

58

- **Standards Compliance**: Follows IEEE 754 specification including special value handling (Infinity, NaN, denormalized numbers)

59

60

## Capabilities

61

62

### Reading IEEE754 Numbers

63

64

Reads an IEEE754 floating point number from a buffer or array-like object.

65

66

```javascript { .api }

67

/**

68

* Reads an IEEE754 floating point number from a buffer

69

* @param {Buffer|Uint8Array|Array} buffer - Buffer or array-like object containing the data

70

* @param {number} offset - Offset into the buffer to start reading

71

* @param {boolean} isLE - Whether to use little-endian byte order

72

* @param {number} mLen - Mantissa length in bits

73

* @param {number} nBytes - Number of bytes to read

74

* @returns {number} The parsed floating point value

75

*/

76

function read(buffer, offset, isLE, mLen, nBytes);

77

```

78

79

**Usage Examples:**

80

81

```javascript

82

const ieee754 = require('ieee754');

83

84

// Read a 32-bit float (single precision)

85

const buffer32 = Buffer.from([0x42, 0x28, 0xF5, 0xC3]); // Little-endian representation

86

const float32 = ieee754.read(buffer32, 0, true, 23, 4);

87

88

// Read a 64-bit double (double precision)

89

const buffer64 = Buffer.alloc(8);

90

buffer64.writeDoubleLE(3.141592653589793, 0);

91

const float64 = ieee754.read(buffer64, 0, true, 52, 8);

92

93

// Read big-endian format

94

const bigEndianBuffer = Buffer.from([0xC3, 0xF5, 0x28, 0x42]);

95

const bigEndianFloat = ieee754.read(bigEndianBuffer, 0, false, 23, 4);

96

```

97

98

### Writing IEEE754 Numbers

99

100

Writes an IEEE754 floating point number to a buffer or array-like object.

101

102

```javascript { .api }

103

/**

104

* Writes an IEEE754 floating point number to a buffer

105

* @param {Buffer|Uint8Array|Array} buffer - Buffer or array-like object to write to

106

* @param {number} value - The floating point value to write

107

* @param {number} offset - Offset into the buffer to start writing

108

* @param {boolean} isLE - Whether to use little-endian byte order

109

* @param {number} mLen - Mantissa length in bits

110

* @param {number} nBytes - Number of bytes to write

111

* @returns {void} Modifies the buffer in-place

112

*/

113

function write(buffer, value, offset, isLE, mLen, nBytes);

114

```

115

116

**Usage Examples:**

117

118

```javascript

119

const ieee754 = require('ieee754');

120

121

// Write a 32-bit float (single precision)

122

const buffer32 = Buffer.alloc(4);

123

ieee754.write(buffer32, 42.42, 0, true, 23, 4);

124

125

// Write a 64-bit double (double precision)

126

const buffer64 = Buffer.alloc(8);

127

ieee754.write(buffer64, 3.141592653589793, 0, true, 52, 8);

128

129

// Write in big-endian format

130

const bigEndianBuffer = Buffer.alloc(4);

131

ieee754.write(bigEndianBuffer, 123.456, 0, false, 23, 4);

132

133

// Write special values

134

const specialBuffer = Buffer.alloc(4);

135

ieee754.write(specialBuffer, Infinity, 0, true, 23, 4);

136

ieee754.write(specialBuffer, -Infinity, 0, true, 23, 4);

137

ieee754.write(specialBuffer, NaN, 0, true, 23, 4);

138

```

139

140

## Common Patterns

141

142

### Standard IEEE754 Formats

143

144

```javascript

145

const ieee754 = require('ieee754');

146

147

// 32-bit single precision float (IEEE 754 binary32)

148

// mLen: 23 (mantissa bits), nBytes: 4 (total bytes)

149

const buffer32 = Buffer.alloc(4);

150

ieee754.write(buffer32, 1.5, 0, true, 23, 4);

151

const value32 = ieee754.read(buffer32, 0, true, 23, 4);

152

153

// 64-bit double precision float (IEEE 754 binary64)

154

// mLen: 52 (mantissa bits), nBytes: 8 (total bytes)

155

const buffer64 = Buffer.alloc(8);

156

ieee754.write(buffer64, 1.5, 0, true, 52, 8);

157

const value64 = ieee754.read(buffer64, 0, true, 52, 8);

158

```

159

160

### Endianness Handling

161

162

```javascript

163

const ieee754 = require('ieee754');

164

const buffer = Buffer.alloc(4);

165

const value = 42.0;

166

167

// Little-endian (most common on x86/x64)

168

ieee754.write(buffer, value, 0, true, 23, 4);

169

const littleEndian = ieee754.read(buffer, 0, true, 23, 4);

170

171

// Big-endian (network byte order)

172

ieee754.write(buffer, value, 0, false, 23, 4);

173

const bigEndian = ieee754.read(buffer, 0, false, 23, 4);

174

```

175

176

### Working with Typed Arrays

177

178

```javascript

179

const ieee754 = require('ieee754');

180

181

// Works with Uint8Array and other typed arrays

182

const uint8Array = new Uint8Array(4);

183

ieee754.write(uint8Array, 3.14159, 0, true, 23, 4);

184

const result = ieee754.read(uint8Array, 0, true, 23, 4);

185

```

186

187

## Error Handling

188

189

The library handles IEEE754 special values correctly:

190

191

- **Infinity**: Positive and negative infinity values are preserved

192

- **NaN**: Not-a-Number values are handled appropriately

193

- **Zero**: Both positive and negative zero are supported

194

- **Denormalized numbers**: Subnormal values are handled according to IEEE754 specification

195

196

```javascript

197

const ieee754 = require('ieee754');

198

const buffer = Buffer.alloc(4);

199

200

// Special values

201

ieee754.write(buffer, Infinity, 0, true, 23, 4);

202

console.log(ieee754.read(buffer, 0, true, 23, 4)); // Infinity

203

204

ieee754.write(buffer, -Infinity, 0, true, 23, 4);

205

console.log(ieee754.read(buffer, 0, true, 23, 4)); // -Infinity

206

207

ieee754.write(buffer, NaN, 0, true, 23, 4);

208

console.log(ieee754.read(buffer, 0, true, 23, 4)); // NaN

209

```