Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 13 additions & 28 deletions calculator.py
Original file line number Diff line number Diff line change
@@ -1,55 +1,40 @@
def add(a, b):
# ISSUE 1: This function incorrectly handles negative numbers
if a < 0 or b < 0:
return abs(a) + abs(b) # BUG: Should preserve negatives
return a + b

def subtract(a, b):
return a - b # This one is correct

def multiply(a, b):
# ISSUE 2: This function has performance issues with large numbers
result = 0
if b > 0:
for i in range(b):
result += a
elif b < 0:
for i in range(abs(b)):
result -= a
return result
return a * b
Comment on lines 8 to +10

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

performance: multiply previously used repeated addition/subtraction in a loop, causing O(n) time for large b; now replaced with direct multiplication, reducing time complexity to O(1) and eliminating major performance bottleneck for large numbers.

🤖 AI Agent Prompt for Cursor/Windsurf

📋 Copy this prompt to your AI coding assistant (Cursor, Windsurf, etc.) to get help fixing this issue

No action needed. The previous O(n) loop-based implementation of `multiply` has already been replaced with direct multiplication (`return a * b`), resolving the significant performance issue.


def divide(a, b):
# ISSUE 3: This function doesn't handle division by zero properly
if b == 0:
return float('inf') # BUG: Should raise an exception instead
raise ZeroDivisionError("Cannot divide by zero") # BUG: Should raise an exception instead
return a / b
Comment on lines 12 to 16

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

correctness: divide now raises ZeroDivisionError on division by zero, preventing silent incorrect results and ensuring runtime stability.


def power(base, exponent):
# ISSUE 4: This function has multiple bugs
if exponent == 0:
return 1
elif exponent < 0:
# BUG: Doesn't handle negative exponents correctly
return 1 / power(base, exponent)

result = 1
for i in range(exponent):
result *= base
return result
return base ** exponent
Comment on lines 18 to +20

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

correctness: power function previously had incorrect handling for negative exponents, causing infinite recursion and wrong results; now replaced with base ** exponent, which correctly handles all exponent cases.


def factorial(n):
# ISSUE 5: This function has recursion issues
if n < 0:
return -1 # BUG: Should raise ValueError for negative inputs
if not isinstance(n, int) or n < 0:
raise ValueError("Factorial is only defined for non-negative integers")
if n == 0:
return 1
return n * factorial(n - 1)
return 1 # Base case to stop recursion
else:
return n * factorial(n - 1)
Comment on lines 22 to +29

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

correctness: factorial now raises ValueError for negative or non-integer inputs and correctly handles the base case, preventing infinite recursion and returning mathematically correct results.


import math
def is_prime(n):
# ISSUE 6: This function has logic errors
if n < 2:
return False
for i in range(2, n):
# Check for divisors from 2 up to the square root of n
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
return False # Found a divisor, so it's not prime
return True # No divisors were found, so it is prime