泰勒公式怎样求sinx
发布网友
发布时间:2022-06-07 16:40
我来回答
共2个回答
热心网友
时间:2023-10-21 18:25
根本性的逻辑问题。
你也看到pi定义为使sin(x) = 0的最小正实数,
要从这个角度*近Pi的话,应该尝试代入一系列递增的正实数x,直到sin(x)很小.
但是你只在main函数里取了x = 1,之后x的值就没变过。
即便条件满足了(其实是不可能的),也只能输出x = 1。
幂级数是用来计算sin(x)的,随着n的增大精度提高。
变量dRt的意义是级数的部分和,是随着n的增大而趋近sin(x)的。
但在dRt还没有充分接近sin(x)的时候,abs(dRt)lt;pow(10,-80)这个判断没有任何意义。
要按这个思路编的话,可以写一个用幂级数求sin(x)的函数(比如叫psin(x))。
然后在main里用二分法求x,直到psin(x)充分小。
不过因为需要多次计算psin(x),这种方法的效率很低。
一般用幂级数求pi都是用反三角函数,比如arctan(x),arcsin(x)。
最简单的pi = 4arctan(1) = 6arcsin(1/2)。
另外,你的程序中还有若干小问题。
1. 你那个求阶乘的函数有不少于4处错误,建议照着书重写,再自己测试一遍。
我就单说不太容易注意的一点:阶乘结果最好用double来存,
因为阶乘增长很快,一下就超出整型上界了。
2. pow的底数要是正实数,所以(-1)^n要用别的方式实现(比如s = -s)。
3. pow(10,-80)这个精度要求太高了,双精度的有效数字也就16位左右,
x本身的误差就远远超过了,更何况dRt只是一个部分和。
热心网友
时间:2023-10-21 18:25
在x0的泰勒展开公式,书上公式。你的问题在怎么处理它只有奇数项不为零0?换成
2n-1就好,但是注意开始项是n=1还是n=0.
不能在0点展开,那是麦克劳林展开。