MCPcopy Create free account
hub / github.com/RobTillaart/Arduino / f16tof32

Method f16tof32

libraries/float16/float16.cpp:175–213  ·  view source on GitHub ↗

///////////////////////////////////////////////////// CORE CONVERSION

Source from the content-addressed store, hash-verified

173// CORE CONVERSION
174//
175float float16::f16tof32(uint16_t _value) const
176{
177 uint16_t sgn, man;
178 int exp;
179 double f;
180
181 sgn = (_value & 0x8000) > 0;
182 exp = (_value & 0x7C00) >> 10;
183 man = (_value & 0x03FF);
184
185 // ZERO
186 if ((_value & 0x7FFF) == 0)
187 {
188 return sgn ? -0 : 0;
189 }
190 // NAN & INF
191 if (exp == 0x001F)
192 {
193 if (man == 0) return sgn ? -INFINITY : INFINITY;
194 else return NAN;
195 }
196
197 // SUBNORMAL/NORMAL
198 if (exp == 0) f = 0;
199 else f = 1;
200
201 // PROCESS MANTISSE
202 for (int i = 9; i >= 0; i--)
203 {
204 f *= 2;
205 if (man & (1 << i)) f = f + 1;
206 }
207 f = f * pow(2.0, exp - 25);
208 if (exp == 0)
209 {
210 f = f * pow(2.0, -13); // 5.96046447754e-8;
211 }
212 return sgn ? -f : f;
213}
214
215uint16_t float16::f32tof16(float f) const
216{

Callers 1

printToMethod · 0.95

Calls

no outgoing calls

Tested by

no test coverage detected