Comparing version 1.0.0 to 1.0.1
{ | ||
"name": "hfp-js", | ||
"version": "1.0.0", | ||
"version": "1.0.1", | ||
"description": "", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
@@ -1,25 +0,32 @@ | ||
export function HfpBinStringToFloat32 (str: string): number | Error { | ||
export function HfpBinStringToFloat (str: string): number | Error { | ||
if(str.length !== 32) return Error('Requires a 32 bit binary number') | ||
let bin: number = parseInt(str, 2) | ||
const sign: number = bin >>> 31 ? -1 : 1; | ||
let exp: number = (bin >>> 24 & 0x7f) - 64; | ||
let bin: number = parseInt(str, 2) | 0; | ||
// mask off the first 8 bits (those aren't used) | ||
// convert the last 24 bits | ||
let mantissa:string = (bin & 0xffffff).toString(2) | ||
// converting from number to string in js loses leading 0s | ||
// also, this is a decimal, so we have a 24 bit number, but we need 25 bit decimal | ||
// we pad left until we reach the desired 25 bits | ||
while (mantissa.length < 25) { | ||
mantissa = `0`+ mantissa | ||
let exp: number = -1; | ||
let mantissa: number = bin & 0xffffff; | ||
// protect against zeros | ||
if (mantissa == 0) return bin < 0 ? -0 : 0; | ||
while (mantissa < 0x800000) { | ||
mantissa <<= 1; exp--; | ||
} | ||
exp += 4 * (((bin >> 24) & 0x7f) - 64); | ||
const sign: number = bin & 0x80000000 | ||
const f1: number = sign | ((exp + 1023) << 20) | ((mantissa & ~0x800000) >> 3); | ||
const f0: number = (mantissa & ~0x800000) << 29; | ||
return new Float64Array(new Int32Array([f0, f1]).buffer)[0]; | ||
} | ||
let float32: number = 0 | ||
for (let i:number = 0; Math.abs(i) < mantissa.length - 1; i -= 1) { | ||
float32 += parseInt(mantissa[Math.abs(i)], 2) * Math.pow(2, i) | ||
export function HfpBinToFloat (bin: number): number | Error { | ||
let exp: number = -1; | ||
let mantissa: number = bin & 0xffffff; | ||
// protect against zeros | ||
if (mantissa == 0) return bin < 0 ? -0 : 0; | ||
while (mantissa < 0x800000) { | ||
mantissa <<= 1; exp--; | ||
} | ||
return float32 * sign * Math.pow(16, exp); | ||
exp += 4 * (((bin >> 24) & 0x7f) - 64); | ||
const sign: number = bin & 0x80000000 | ||
const f1: number = sign | ((exp + 1023) << 20) | ((mantissa & ~0x800000) >> 3); | ||
const f0: number = (mantissa & ~0x800000) << 29; | ||
return new Float64Array(new Int32Array([f0, f1]).buffer)[0]; | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
1999
29