What causes the problem?
from math import sqrt
print "a : "
a = float[raw_input[]]
print "b : "
b = float[raw_input[]]
print "c : "
c = float[raw_input[]]
d = [a + b + c]/2
s = sqrt[d*[d-a]*[d-b]*[d-c]]
print "a+b+c =", a, b, c
print "Distr. =", d*2, "Area =", s
Error:
Traceback [most recent call last]:
File "C:/Python27/fájlok/háromszög terület2.py", line 11, in
s = sqrt[d*[d-a]*[d-b]*[d-c]]
ValueError: math domain error
Bhargav Rao
47.3k27 gold badges122 silver badges137 bronze badges
asked Mar 31, 2015 at 18:36
2
The problem is that the Heron's formula holds good only when the sum of the two numbers are greater than the third. You need to check that explicitly.
A better way as you are using a code to do that is by using Exception handling
try:
s = sqrt[d*[d-a]*[d-b]*[d-c]]
print "a+b+c =", a, b, c
print "Distr. =", d*2, "Area =", s
except ValueError:
print "Please enter 3 valid sides"
If you want to do it without try
block you can do it as
delta = [d*[d-a]*[d-b]*[d-c]]
if delta>0:
s = sqrt[delta]
print "a+b+c =", a, b, c
print "Distr. =", d*2, "Area =", s
else:
print "Please enter 3 valid sides"
answered Mar 31, 2015 at 18:40
Bhargav RaoBhargav Rao
47.3k27 gold badges122 silver badges137 bronze badges
2
sqrt
gives that error when you try to use it with a negative number. sqrt[-4]
gives that error because the result is a complex number.
For that, you need cmath
:
>>> from cmath import sqrt
>>> sqrt[-4]
2j
>>> sqrt[4]
[2+0j]
answered Mar 31, 2015 at 18:46
aneroidaneroid
12.5k3 gold badges38 silver badges61 bronze badges
I got the same error with my code until I used cmath
instead of math
like aneroid said:
import sys
import random
import cmath
x = random.randint[1, 100]
y = random.randint[1, 100]
a = 2 * x * cmath.sqrt[1 - x * 2 - y * 2]
b = 2 * cmath.sqrt[1 - x * 2 - y * 2]
c = 1 - 2 * [x * 2 + y * 2]
print [ 'The point on the sphere is: ', [a, b, c] ]
This way ran my code properly.
aneroid
12.5k3 gold badges38 silver badges61 bronze badges
answered Dec 21, 2016 at 1:01
2
Use cmath instead..
import cmath
num=cmath.sqrt[your_number]
print[num]
Now regardless of whether the number is negetive or positive you will get a result...
answered Feb 18, 2018 at 15:49
4
You come across a special ValueError when working with Python’s math module. It is ValueError: math domain error. Python raises this error when you try to do something that is not mathematically possible or mathematically defined.
To solve a domain error in Python, passing a valid input for which the function can calculate a numerical output. The math domain error occurs when you’ve passed an undefined input into the math function. For example, you are doing a log of a number less than or equal to zero. That’s mathematically undefined, so Python’s log function raises an exception.
from math import log print[log[-1]]
Output
Traceback [most recent call last]: File "/Users/krunal/Desktop/code/pyt/database/app.py", line 3, in print[log[-1]] ValueError: math domain error
And we get the ValueError: math domain error.
Whenever you are getting the math domain error for either reason, you are trying to use a negative number inside the log function or a zero value.
Logarithms decide the base after being given a number and the power it was raised to.
The log[0] means that something raised to the power of 2 is 0. An exponent can never result in 0*, which means that log[0] has no answer, thus throwing the math domain error.
The domain of a function is the set of all possible input values. If Python throws the ValueError: math domain error, you’ve passed an undefined input into the math function.
In our case, don’t calculate the log of a negative number or zero, and it will resolve the error.
There are various scenarios in which this error can occur. Let’s see some of them one by one.
Python sqrt: Math domain error
To calculate the square root of a number in Python, use math.sqrt[] method.
The math domain error appears if you pass a negative argument into the math.sqrt[] function.
It’s mathematically impossible to calculate the square root of a negative number without using complex numbers.
from math import sqrt print[sqrt[-1]]
Output
Traceback [most recent call last]: File "/Users/krunal/Desktop/code/pyt/database/app.py", line 3, in print[sqrt[-1]] ValueError: math domain error
The square root of a negative number is not mathematically possible. That’s why it throws an error.
Python pow: Math domain error
The math domain error for the math.pow[a,b] function to calculate a**b arises if you pass the negative base value into it and try to calculate a negative power.
from math import pow print[pow[-1, 0.5]]
Output
Traceback [most recent call last]: File "/Users/krunal/Desktop/code/pyt/database/app.py", line 3, in print[pow[-1, 0.5]] ValueError: math domain error
And we get the ValueError.
That is it for this tutorial.
See also
String Indices must be Integers in Python
Python expected an indented block Error
Python cannot import name
Return outside function Python
Python ValueError