三角函数:如何在不使用“数学”模块的情况下编写正弦和余弦函数的代码?
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了。
我一直在为我为 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了。