From ebbe60de9bf35ee1a2d73c4dea36d42713635521 Mon Sep 17 00:00:00 2001 From: Navindu Date: Thu, 31 Oct 2024 23:57:50 +0530 Subject: [PATCH] feat: added binary exponentation interative function --- maths/binary_exponentiation_iterative.ts | 40 +++++++++++++++++++ .../binary_exponentation_interative.test.ts | 21 ++++++++++ 2 files changed, 61 insertions(+) create mode 100644 maths/binary_exponentiation_iterative.ts create mode 100644 maths/test/binary_exponentation_interative.test.ts diff --git a/maths/binary_exponentiation_iterative.ts b/maths/binary_exponentiation_iterative.ts new file mode 100644 index 00000000..27559c5b --- /dev/null +++ b/maths/binary_exponentiation_iterative.ts @@ -0,0 +1,40 @@ +/** + * @function binaryExponentiationIterative + * @description Calculate the result of a number raised to the power of another number using binary exponentiation. + * @param {number} base - The base number. + * @param {number} exponent - The exponent number. + * @returns {number} - The result of the base number raised to the power of the exponent number. + * @throws {TypeError} - when base is not a number. + * @throws {TypeError} - when exponent is not a positive integer. + * @example binaryExponentiationIterative(2, 10) => 1024 + */ + +export const binaryExponentiationIterative = ( + base: number, + exponent: number +): number => { + if (typeof base !== 'number') { + throw new TypeError('base must be a number') + } + + if (!Number.isInteger(exponent) || exponent < 0) { + throw new TypeError('exponent must be a positive integer') + } + + if (exponent === 0) return 1 + if (exponent === 1) return base + if (base === 0) return 0 + if (base === 1) return 1 + + let result = 1 + + while (exponent > 0) { + if (exponent % 2 === 1) { + result *= base + } + base *= base + exponent = Math.floor(exponent / 2) + } + + return result; +} diff --git a/maths/test/binary_exponentation_interative.test.ts b/maths/test/binary_exponentation_interative.test.ts new file mode 100644 index 00000000..4ee9e67c --- /dev/null +++ b/maths/test/binary_exponentation_interative.test.ts @@ -0,0 +1,21 @@ +import { binaryExponentiationIterative } from '../binary_exponentiation_iterative' + +describe('binaryExponentiationIterative', () => { + test('should throw a TypeError when base is not a number', () => { + expect(() => + binaryExponentiationIterative('2' as unknown as number, 10) + ).toThrow(TypeError) + }) + + test('should throw a TypeError when exponent is not a positive integer', () => { + expect(() => binaryExponentiationIterative(2, -10)).toThrow(TypeError) + }) + + test('should return the result of the base number raised to the power of the exponent number', () => { + expect(binaryExponentiationIterative(2, 10)).toBe(1024) + expect(binaryExponentiationIterative(2, 0)).toBe(1) + expect(binaryExponentiationIterative(2, 1)).toBe(2) + expect(binaryExponentiationIterative(0, 10)).toBe(0) + expect(binaryExponentiationIterative(1, 10)).toBe(1) + }) +}) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy