| "use strict"; |
| |
| Object.defineProperty(exports, "__esModule", { |
| value: true |
| }); |
| exports.default = parse; |
| |
| function parse(input) { |
| input = input.toUpperCase(); |
| var splitIndex = input.indexOf("P"); |
| var mantissa, exponent; |
| |
| if (splitIndex !== -1) { |
| mantissa = input.substring(0, splitIndex); |
| exponent = parseInt(input.substring(splitIndex + 1)); |
| } else { |
| mantissa = input; |
| exponent = 0; |
| } |
| |
| var dotIndex = mantissa.indexOf("."); |
| |
| if (dotIndex !== -1) { |
| var integerPart = parseInt(mantissa.substring(0, dotIndex), 16); |
| var sign = Math.sign(integerPart); |
| integerPart = sign * integerPart; |
| var fractionLength = mantissa.length - dotIndex - 1; |
| var fractionalPart = parseInt(mantissa.substring(dotIndex + 1), 16); |
| var fraction = fractionLength > 0 ? fractionalPart / Math.pow(16, fractionLength) : 0; |
| |
| if (sign === 0) { |
| if (fraction === 0) { |
| mantissa = sign; |
| } else { |
| if (Object.is(sign, -0)) { |
| mantissa = -fraction; |
| } else { |
| mantissa = fraction; |
| } |
| } |
| } else { |
| mantissa = sign * (integerPart + fraction); |
| } |
| } else { |
| mantissa = parseInt(mantissa, 16); |
| } |
| |
| return mantissa * (splitIndex !== -1 ? Math.pow(2, exponent) : 1); |
| } |