(Solution) ValueError: math domain error in Python

While working with mathematical functions using the math module in python we might come across the “ValueError math domain error” error. Python throws this error whenever we try to do some mathematical operations on undefined values or negative numbers.

For example, we might get this error if we try to find out the square root of a negative number in the program.

Let’s understand why this “math error” occurs in different math module functions in a python program.

What is a math domain error?

The python math domain error occurs whenever we try to calculate or do some math operations on some mathematically undefined values. i.e the values upon which the mathematical operations cannot be performed.

The error occurs with different functions provided by the math modules, for example in sqrt, pow, acos, and log functions.

How to fix math domain error in python?

The easy way to fix the ValueError math domain error is by providing the correct values to the math functions in python.

For example, not using a negative or zero value when finding the square root of a number using sqrt() function. Or not using zero or negative values to find the log using math log() function.

Python math domain error: sqrt

We can calculate the square root of a number using the sqrt() function of the math module.

Now, let’s see what we get if we try to get the square root of a negative number in python.

from math import sqrt

print(sqrt(-1))

Output:

Traceback (most recent call last):
  File "main.py", line 3, in <module>
    print(sqrt(-1))
ValueError: math domain error

As you can see, if the number is zero or a negative number, it throws the “ValueError: math domain error ” error in our terminal.

Solution

To fix this error:

  1. Do not use zero or negative values for calculation with sqrt() function.
  2. If we need to find the square root of a negative number we have to use the cmath module instead of the math module.
from cmath import sqrt

print(sqrt(-2)) #1.4142135623730951j

Note: The cmath is an in-built python module that is used to do mathematical tasks for complex numbers. It can accept int, float, and complex numbers as input. Go to cmath — Mathematical functions for complex numbers Python 3.10.7 documentation to see all the functions available.

Python math domain error: pow

The pow function of the math module returns the value of the base number raised to a power in python.

Now when we try to calculate the power of a negative number, the program will throw the “math domain error” in our terminal.

Example:

from math import pow
e = -1.4
print(pow(-3, e))

Output:

Traceback (most recent call last):
  File "main.py", line 3, in <module>
    print(pow(-3, e))
ValueError: math domain error

A negative number raised to a fractional power cannot be a real number (it’s a complex number).

And since complex numbers are not defined in python, so we get the math error.

Solution:

The solution to this error is:

  1. Do not use any negative value to calculate the pow
  2. If you need to calculate the negative base number, use the cmath module in python.
from cmath import exp,log
e = -1.4
print(exp(e * log(-3)))

Python math domain error: acos

We might get the math domain error using the acos() function when we try to pass a value that is undefined – i.e any value outside the range of 1 and -1.

from math import acos

print(acos(3))

Output:

ValueError: math domain error

As you can see, when we try to input a number that is not in the acos range, it throws us the error.

Solution:

To avoid this error in acos() or even in asin() function in math module, keep the input value within the range of -1 and 1.

Python math domain error: log

When using the log() function in python, we come across the error when we try to find the log of a negative number or zero.

from math import log
print(log(-3))

Output:

ValueError: math domain error

Since we cannot find the logarithm of a negative number we get the error in our terminal.

Solution:

  1. To avoid this error in log() function avoid using zero or a negative number as the input value.
  2. And if you need to find the log of a negative value, use the cmath module of python

Conclusion: Here, we have learned about the math domain error while using the math module in python. Found out why this error occurs in some functions like sqrt(), acos(), pow() and log() and its fixes to avoid the error.

Scroll to Top