python math domain error - sqrt

二次信任 提交于 2019-12-05 12:20:41

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"

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)
SilverInternet

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.

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...

I think the problem is that you cannot define a triangle with whatever sides the users inputs. Try to make a triangle with length of sides, 10,2 and 1. Impossible. So, sometimes the Heron's Formula cannot work, because there is no triangle.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!