Python的三角函数返回意外的值

4
import math
print "python calculator"
print "calc or eval"
while 0 == 0:
    check = raw_input() #(experimental evaluation or traditional calculator)
    if check == "eval":
        a = raw_input("operator\n") #operator
        if a == "+":
            b = input("arg1\n") #inarg1
            c = input("arg2\n") #inarg2
            z = b + c
            print z
        elif a == "-":
            b = input("arg1\n") #inarg1
            c = input("arg2") #inarg2
            z = b - c
            print z
        elif a == "/":
            b = input("arg1\n") #inarg1
            c = input("arg2\n") #inarg2
            z = b / c
            print z
        elif a == "*":
            b = input("arg1\n") #inarg1
            c = input("arg2]n") #inarg2
            z = b * c
            print z
        elif a == "^":
            b = input("arg1\n") #inarg1
            c = input("arg2\n") #inarg2
            z = b ** c
        elif a == "sin":
            b = input("arg1\n") #inarg1
            var = math.degrees(math.sin(b))
            print var
        elif a == "asin":
            b = input("arg1\n") #inarg1
            var = math.degrees(math.asin(b))
            print var
        elif a == "cos":
            b = input("arg1\n") #inarg1
            var = math.degrees(math.cos(b))
            print var
        elif a == "acos":
            b = input("arg1\n") #inarg1
            var = math.degrees(math.acos(b))
            print var
        elif a == "tan":
            b = input("arg1\n") #inarg1
            var = math.degrees(math.tan(b))
            print var
        elif a == "atan":
            b = input("arg1\n") #inarg1
            var = math.degrees(math.atan(b))
            print var
    elif check == "calc" :
        x = input() #takes input as expression
        print x #prints expression's result

90度的正弦不是等于1吗? 但是这里显示的大约是51.2? 谷歌计算器也会出现这种情况? 顺便说一下:这是我的Python计算器。

            b = input("arg1\n") #inarg1
            var = math.degrees(math.sin(b))
            print var

这个问题涉及到三角函数和其他函数的计算。

虽然这只是一个简单的Python计算器,但我想添加一些三角函数。

6个回答

10

您不需要将sin()的返回值转换为度数 -- 返回值不是一个角度。相反,您需要将参数转换为弧度,因为math.sin()期望弧度:

>>> math.sin(math.radians(90))
1.0

3

Python中的sin和cos函数接受弧度而非角度。你可以使用math.radians函数进行转换。基本上,你正在使用错误的单位。


我所知道的每种编程语言在三角函数中都使用弧度,毫无例外。 - duffymo
@duffymo,我曾经使用过一个库,它使用了0-256度的近似角度。但是,基本上任何东西都使用弧度。 - Winston Ewert
哎?请找到链接。我已经写过Fortran、Pascal、C、C++、Java、Python——它们都使用弧度。 - duffymo
1
@duffymo,这是链接:http://alleg.sourceforge.net/stabledocs/en/alleg032.html#Fixed%20point%20trig - Winston Ewert
谢谢,我不熟悉 Allegro。 - duffymo

3

大多数数学函数,包括Python的数学函数,使用弧度作为三角函数例程的度量单位。

对比:

>>> math.sin(90)
0.8939966636005579
>>> math.sin(3.1415926535)
8.979318433952318e-11
>>> math.cos(180)
-0.5984600690578581
>>> math.cos(2*3.1415926535)
1.0
>>> 

2
在调用 math.sin 之前,将您的输入从角度转换为弧度。

2
你使用的单位是度,但 sin 函数需要弧度作为参数(参见文档:help(math.sin))。90° 相当于 π/2。
>>> import math
>>> math.sin(math.pi/2)
1.0
>>> math.radians(90) - math.pi/2
0.0

2
        var = math.degrees(math.sin(b))

这段代码并不做你想象的那样。它计算了 b 的正弦值,然后将该答案(不是弧度!)从弧度转换为角度。

90 弧度的正弦值是 .894。.894 弧度等于 51 度。所以你得到了那个答案,但是它是错误的。

你可能想要:

        var = math.sin(math.radians(b))

我在执行该操作时得到了0.0156031852817,如何将其转换为角度并返回? - user1080694
1
@user1080694 正弦函数的值在数学上不是度数或弧度,它是一个周期性函数,在2*pi的周期内会在-1和1之间振荡。正弦函数的反函数可以用度数表示,但在Python中,math.asine函数将返回弧度值,您可以使用math.degrees将其转换为度数。 - TimothyAWiseman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接