码迷,mamicode.com
首页 > 其他好文 > 详细

Ellipse HDU - 1724(自适应辛普森积分)

时间:2017-10-22 23:37:13      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:splay   积分   class   适应   view   tar   can   names   turn   

Ellipse

HDU - 1724
emmm...快比赛了先补几个模板~
自适应辛普森积分
技术分享
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const double eps = 1e-5;
 4 double a, b, l, r;
 5 
 6 double F(double x) {
 7     //Simpson公式用到的函数
 8     return sqrt((a * a * b * b - b * b * x * x) / a / a);
 9 }
10 double simpson(double a, double b) {  //三点Simpson法,这里要求F是一个全局函数
11     double c = a + (b - a) / 2;
12     return (F(a) + 4 * F(c) + F(b))*(b - a) / 6;
13 }
14 double asr(double a, double b, double eps, double A) { //自适应Simpson公式(递归过程)。已知整个区间[a,b]上的三点Simpson值A
15     double c = a + (b - a) / 2;
16     double L = simpson(a, c), R = simpson(c, b);
17     if (fabs(L + R - A) <= 15 * eps)return L + R + (L + R - A) / 15.0;
18     return asr(a, c, eps / 2, L) + asr(c, b, eps / 2, R);
19 }
20 double asr(double a, double b, double eps) { 
21     return asr(a, b, eps, simpson(a, b));
22 }
23 
24 
25 int main(){
26     int n;
27     //freopen("in.txt", "r", stdin);
28     scanf("%d", &n);
29     for(int i = 0; i < n; i++){
30         scanf("%lf %lf %lf %lf", &a, &b, &l, &r);
31         printf("%.3lf\n", 2 *asr(l, r, eps));
32     }
33 }
View Code

 

Ellipse HDU - 1724(自适应辛普森积分)

标签:splay   积分   class   适应   view   tar   can   names   turn   

原文地址:http://www.cnblogs.com/yijiull/p/7712368.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!