Compute X^Y For Floats and Negative Values

How will you compute x^y such that it will work for floats and negative values?

💡Strategies for Solving This Problem

Power Function Implementation

Got this at Bloomberg in 2023. They wanted to see if I could handle edge cases properly, not just implement the happy path. Tests understanding of floating point, negative exponents, and numerical stability.

The Problem

Implement pow(x, y) that handles:

  • Negative bases
  • Negative exponents
  • Floating point exponents
  • Edge cases (0^0, negative^fraction)
  • Overflow/underflow

Approach 1: Naive Multiplication

For integer exponents, multiply x by itself y times:

pow(2, 5) = 2 * 2 * 2 * 2 * 2

Problems:

  • O(n) time complexity
  • Doesn't handle negative or float exponents
  • Slow for large exponents

Approach 2: Recursive Squaring (Fast Exponentiation)

For integer exponents, use divide and conquer:

pow(x, 8) = pow(x, 4) * pow(x, 4)
pow(x, 4) = pow(x, 2) * pow(x, 2)
pow(x, 2) = x * x

This reduces O(n) to O(log n). Handle odd exponents:

pow(x, 9) = x * pow(x, 8)

Approach 3: Iterative Binary Exponentiation

Same idea as recursive but iterative. Process bits of exponent from right to left. For each bit, square the result. If bit is 1, multiply by base.

Example: 2^13 where 13 = 1101 in binary

result = 1
2^1 = 2 (bit 0 is 1) → result = 2
2^2 = 4 (bit 2 is 0) → result = 2
2^4 = 16 (bit 3 is 1) → result = 2 * 16 = 32
2^8 = 256 (bit 4 is 1) → result = 32 * 256 = 8192

Handling Special Cases

Negative exponents: pow(x, -y) = 1 / pow(x, y)

Negative bases with fractions: pow(-2, 0.5) = sqrt(-2) = complex number (undefined in real numbers)

Zero cases:

  • 0^positive = 0
  • 0^0 = undefined (we'll return 1 by convention)
  • 0^negative = infinity (undefined)

Float exponents: Use logarithms: x^y = e^(y * ln(x))

At Bloomberg

I started with naive approach. Interviewer said "too slow for large exponents." Then I did recursive squaring. He asked about floating point exponents. That's when I mentioned the logarithm approach. Then we discussed edge cases for 30 minutes - negative bases, zero, overflow, etc.

Scroll to Top