UNPKG

functionfoundry

Version:
43 lines (34 loc) 1.81 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = oct2dec; var _error = require('./error'); var _error2 = _interopRequireDefault(_error); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // OCT2DEC converts a octal value into a decimal value. function oct2dec(octalNumber) { // Credits: Based on implementation found in https://gist.github.com/ghalimi/4525876#file-oct2dec-js // Return error.when number passed in is not octal or has more than 10 digits if (!/^[0-7]{1,10}$/.test(octalNumber)) return _error2.default.num; // Convert octal number to decimal number var nonNegativeDecimalNumber = parseInt(octalNumber, 8); // Returns the corresponding decimal number // Two's Complement Decimal Range: -(2^N-1) to (2^N-1 - 1) where N=30 (N = number of bits) and ^ means raised to the power of // 2^N-1 = 2^(30 - 1) = 2^29 = 536870912 // 2^N-1 - 1 = 536870912 - 1 = 536870911 // 2^N = 2^30 = 1073741824 // Two's Complement Decimal Range: [-536870912,536870911] // Largest octal number allowed: 7777777777 which in decimal is 1073741823 = 2^N - 1 // Case 1: Negative Range // if nonNegativeDecimalNumber >= 2^N-1, then return (nonNegativeNumber - 2^N) // Smallest Number: 2^N-1 - 2^N = 2^N-1 - 2*2^N-1 = 2^N-1 * (1 - 2) = 2^N-1 * (-1) = -2^N-1 // Largest Number: (2^N - 1) - (2^N) = (2^N - 2^N) - 1 = -1 // Range: [-2^N-1, -1] = [-536870912, -1] // // Smallest octal number allowed: 0 which in decimal is 0 // Case 2: Non-Negative Range // Range: [0, 2^N-1 - 1] = [0, 536870911] return nonNegativeDecimalNumber >= 536870912 ? nonNegativeDecimalNumber - 1073741824 : nonNegativeDecimalNumber; } // Copyright 2015 JC Fisher module.exports = exports['default'];