【发布时间】:2021-08-12 08:55:34
【问题描述】:
我使用Taylors series 来计算一个数字的余弦值,对于小数字,该函数会返回准确的结果,例如cos(5) 给出0.28366218546322663。但是对于较大的数字,它会返回不准确的结果,例如 cos(1000) 给出 1.2194074101485173e+225
def factorial(n):
c = n
for i in range(n-1, 0, -1):
c *= i
return c
def cos(x, i=100):
c = 2
n = 0
for i in range(i):
if i % 2 == 0:
n += ((x**c) / factorial(c))
else:
n -= ((x**c) / factorial(c))
c += 2
return 1 - n
我尝试使用round(cos(1000), 8) put 它仍然返回一个用科学计数法写的数字1.2194074101485173e+225 和e+ 部分。 math.cos(1000) 给出 0.5623790762907029,我怎样才能将我的数字四舍五入,使其与 math.cos 方法相同?
【问题讨论】:
-
"
round(cos(1000), 8)put 它仍然返回一个用科学记数法写的数字1.2194074101485173e+225" 实际上并没有。科学记数法就是……一种记数法。round的结果是一个浮点数,其大小不是十进制计数法、科学计数法或任何其他计数法。这是您打印值的方式的结果。 -
看看余弦的多项式展开。 1000/6.2... > 100,所以你的多项式不能收敛到远离零的答案。您需要将参数取模 2pi
-
您担心科学记数法,但完全忽略了一个事实,即您的数字是 10^255 的倍数
-
@Jared。我已经更新了我的答案。
标签: python python-3.x math taylor-series