- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
到目前为止,我正在尝试编写一个程序来使用泰勒级数计算 cos(x) 函数,我得到了这个:
int factorial(int a){
if(a < 0)
return 0;
else if(a==0 || a==1)
return 1;
else
return a*(factorial(a-1));
}
double Tserie(float angle, int repetitions){
double series = 0.0;
float i;
for(i = 0.0; i < repeticiones; i++){
series += (pow(-1, i) * pow(angle, 2*i))/factorial(2*i);
printf("%f\n", (pow(-1, i) * pow(angle, 2*i))/factorial(2*i));
}
return series;
在我的示例中,我使用 angle = 90 和 repetitions = 20 来计算 cos(90),但它没有用,我只是不断获得接近无穷大的值,我们将不胜感激任何帮助。
最佳答案
一方面,角度以弧度为单位,因此对于 90 度角,您需要通过 M_PI/2
。
此外,对于像阶乘这样微不足道的东西,您应该避免使用递归函数,迭代编写它需要 1/4 的工作量,而且性能会好得多。您实际上什至不需要它,您可以将阶乘保存在一个临时变量中,并在每一步将它乘以 2*i*(2*i-1)
。请记住,在此步骤中,您将很快遇到可表示性/精度墙。
您也不需要实际调用 pow
来获得 i
的 -1 次幂,一个简单的 i%2?1:-1
就足够了。这样它会更快,并且不会随着 i
的增加而失去精度。
哦,不要让 i
float
,它是一个整数,让它成为一个整数。你的精度泄漏了很多,为什么让它变得更糟..
最重要的是,您将 cos
近似为 0,但将其称为 pi/2
。这样做你会得到非常高的错误。
关于c - C 中的泰勒级数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7212158/
考虑函数 y=1/((1-x^5)(1-x^7)(1-x^11)) WolframAlpha 在几秒钟内计算出 MacLaurin 级数展开的前 1000 个元素: https://www.wolfr
(C) 计算序列 y = x - x3/3! + x5/5! - x7/7! + ..... 其中停止标准是 | xi/i! | #include int fact(int x){ if(x
我是一名优秀的程序员,十分优秀!