三角函数:如何在不使用“数学”模块的情况下编写正弦和余弦函数的代码?

Trigonometric Functions: How do I write Sine and Cosine function's code without using `math` module?

我一直在为我为 Discord Bot 制作的模块编写代码。我一直在尝试不使用任何模块,因为它无助于导入内容。所以我想我应该自己为他们两个编写代码。

这里的问题是我真的不知道我们如何制作它们。我在网上的任何地方都找不到它们,因为到处我只看到使用了我不想使用的 math 模块。

我不知道如何与他们合作,所以我需要一些帮助。

谢谢! :)

使用 Taylor expansion 您可以获得达到所需精度的近似值。

http://hyperphysics.phy-astr.gsu.edu/hbase/tayser.html

def pow(base, exponent):
    return base ** exponent

def faktorial(n):
    value = float(1)
    for i in range(1, n+1):
        value = value * i
    return value

def cos(x):
    x = x * 3.14/180
    value = 1
    sign = -1
    n = 200 # precision
    i = 2
    while i < n:
        value = value + (pow(x, i)/faktorial(i) * sign)
        i = i + 2
        sign = sign * -1
    
    return value

def sin(x):
    x = x * 3.14/180
    value = x
    sign = -1
    n = 200 # precision
    i = 3
    while i < n:
        value = value + (pow(x, i)/faktorial(i) * sign)
        i = i + 2
        sign = sign * -1
    return value
pi = 3.1415926535897932384626433832795028841971  # Value of constant pi

def f(n):  # Factorial Function
    if n == 1 or n == 0:
        return 1
    else:
        return n * f(n - 1)

def deg(x):
    rad = x * pi/180
    return rad

def sin(x):  # Taylor Expansion of sinx
    k = 0
    sinx = 0
    while x >= pi:
        x -= pi
    if pi > x > pi / 2:
        x = pi - x
    while k < 15:
        sinx += (-1)**k * x**(2*k + 1) / f(2*k + 1)
        k += 1
    return sinx

def cos(x):
    cosx = sin(pi / 2 - x)
    return cosx

我现在改进了代码。现在它可以为您提供最多 14 位小数的准确结果。此外,我没有编写完整的泰勒表达式公式,而是使用了一个 while 循环来做到这一点。 While 循环在这里充当数学求和函数。我还缩短了 cos(x) 中的代码。这里我没有写泰勒表达式,而是用了一个sinx到cosx的换算公式。从而减少了计算过程。我对代码做了一点改动。现在你也可以用同样的精度计算大量的sinx了。