2016-03-04 78 views
0

我不知道为什么,但每次我尝试运行这个时,我都会在这个函数上出现错误的数学域。任何帮助,将不胜感激。为什么使用正弦时存在数学域错误?

def lawofsinsang(A,B,a,b): 
    if not A and B: 
     if a and b: 
      return (math.asin((((math.sin(B)) * a)/b))) 
    else: 
     return A 

for i in range(0,6): 
    angA = lawofsinsang(angA,angB,sideA,sideB) 
    angA = lawofsinsang(angA,angC,sideA,sideC) 
    angB = lawofsinsang(angB,angA,sideB,sideA) 
    angB = lawofsinsang(angB,angC,sideB,sideC) 
    angC = lawofsinsang(angC,angA,sideC,sideA) 
    angC = lawofsinsang(angC,angB,sideC,sideB) 

行,所以我更新的代码,而不是一个域错误,math.asin只是什么都不做。新返回低于:

math.asin(((math.sin(B)) * a)/b) 
+0

也许不是你的问题,但你肯定你的意思是'如果不是和B',不'如果不是,不B'? – Carcigenicate

+0

对不起,我应该添加更多的上下文。我想检查以确保没有角度A,但是有一个角度B以及一个边a和一个边b。我想用正弦法来找到角度A的测量。 –

+0

好的,对不起。这只是一个常见问题。 – Carcigenicate

回答

0

传递给asin(反正弦)的参数必须是在区间[-1,1]。如果不是,你会得到一个域错误。

+0

好吧,我打破了数学,我发现我得到一个约-657的数字,但是当我添加'math.asin'时,它没有改变数字。 –

0

我发现了这个问题。 sin函数期望参数已经以弧度表示,而我一直在使用度数。新代码如下:

def lawofsinsang(A,B,a,b): 
    if not A and B: 
     if a and b: 
      return math.degrees(math.asin(((math.sin(math.radians(B))) * a)/b)) 
    else: 
     return A 
相关问题