【问题标题】:Python's trigonmetric function return unexpected valuesPython三角函数返回意外值
【发布时间】:2011-12-13 00:59:11
【问题描述】:
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 计算器,但我想添加一些三角函数。

【问题讨论】:

    标签: python math trigonometry


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      Python 的 sin 和 cos 采用弧度而不是度数。您可以使用 math.radians 函数进行转换。基本上,你使用了错误的单位。

      【讨论】:

      • 我所知道的每种语言都使用弧度作为三角函数,无一例外。
      • @duffymo,我曾经使用过一个使用 0-256 sorta-degrees 的库。但是是的,几乎所有东西都使用弧度。
      • 嗯?请找到它的链接。我写过 Fortran、Pascal、C、C++、Java、Python - 都使用弧度。
      • 谢谢,我不熟悉 Allegro。
      【解决方案3】:

      大多数数学函数,包括 Python 的数学函数,都使用radians 作为trigonometric routines 的度量。

      比较:

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

      【讨论】:

        【解决方案4】:

        您正在使用度数,但 sin 函数需要 radians(请参阅文档:help(math.sin))。 90° 是?/2。

        >>> import math
        >>> math.sin(math.pi/2)
        1.0
        >>> math.radians(90) - math.pi/2
        0.0
        

        【讨论】:

          【解决方案5】:

          在调用math.sin之前将您的输入从度数转换为弧度数

          【讨论】:

            【解决方案6】:
                    var = math.degrees(math.sin(b))
            

            这段代码没有做你认为它做的事。它采用b 的sin,然后将答案(弧度不是!)从弧度转换为度数。

            90 弧度的sin 是.894。 .894 弧度是 51 度。所以这就是你得到这个答案的原因,但这都是错误的。

            你可能想要:

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

            【讨论】:

            • 我得到 0.0156031852817 时,我如何获得返回学位?
            • @user1080694 正弦值在数学上不是度数或弧度,它是一个周期函数,将在 -1 和 1 之间以 2*pi 的周期振荡。正弦的倒数可以以度为单位,但在 python 中,math.asine 函数将以弧度返回,然后您可以使用 math.degrees 将其转换为度
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-01-09
            • 1970-01-01
            • 2014-02-07
            • 1970-01-01
            • 2011-11-28
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多