Why does math.sqrt result in ValueError: math domain error?
dns, math, python, sqrt
Solution
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"
Problem
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 <module> s = sqrt(d*(d-a)*(d-b)*(d-c)) ValueError: math domain error ``` See also: Why does math.log result in ValueError: math domain error? for the equivalent problem using `math.log`; Python math domain error using math.acos function for the equivalent problem using `math.acos`.