- 注册时间
- 2009-5-22
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 38608
- 在线时间
- 小时
|
发表于 2010-4-6 18:45:25
|
显示全部楼层
本帖最后由 KeyTo9_Fans 于 2010-4-6 18:54 编辑
$-1912.8$左右,与mathe大师的结果不同。
不同的初值得到的结果在$0.2$的范围内波动。
代码如下:- #include<cstdio>
- #include<cmath>
-
- double l,r,m,a,o;
- int c;
-
- bool le()
- {
- int i;
- for(i=1;i<2009;i++)
- {
- o=m+i;
- if(o<0&&i%2<1)o=-o;
- if(o>0)
- {
- o=log(o)*i;
- if(c>0)
- if(o-a>50)a=o;
- else a+=log(1+exp(o-a));
- else
- if(o>a)
- {
- a=o+log(1-exp(a-o));
- c=1;
- }
- else a+=log(1-exp(o-a));
- }
- else
- {
- o=log(-o)*i;
- if(c<0)
- if(o-a>50)a=o;
- else a+=log(1+exp(o-a));
- else
- if(o>a)
- {
- a=o+log(1-exp(a-o));
- c=0;
- }
- else a+=log(1-exp(o-a));
- }
- }
- o=log(m+2009)*2009;
- return a<o;
- }
-
- int main()
- {
- while(scanf("%lf%lf",&l,&r))
- {
- while(r-l>1e-12)
- {
- m=(l+r)/2;
- a=-99;
- c=1;
- if(le())r=m;
- else l=m;
- }
- printf("%.12lf\n",m);
- }
- return 0;
- }
复制代码 输入:- -1921 -1900
- -1923 -1900
- -1927 -1900
- -1933 -1900
- -1941 -1900
复制代码 输出:- -1912.790128348574
- -1912.892583608714
- -1912.849117857050
- -1912.820758136436
- -1912.913848905687
复制代码 Fans不知道程序是否有误,让mathe大师来找找看
#####
把程序稍微修改了一下,答案就稳定了。- #include<cstdio>
- #include<cmath>
-
- double l,r,m,a,o;
- int c;
-
- bool le()
- {
- int i;
- for(i=1;i<2009;i++)
- {
- o=m+i;
- if(o<0&&i%2<1)o=-o;
- if(o>0)
- {
- o=log(o)*i;
- if(c>0)
- if(o-a>50)a=o;
- else a+=log(1+exp(o-a));
- else
- if(o>a)
- {
- a=o+log(1-exp(a-o));
- c=1;
- }
- else a+=log(1-exp(o-a));
- }
- else
- {
- o=log(-o)*i;
- if(c<0)
- if(o-a>50)a=o;
- else a+=log(1+exp(o-a));
- else
- if(o>a)
- {
- a=o+log(1-exp(a-o));
- c=0;
- }
- else a+=log(1-exp(o-a));
- }
- }
- return c<0;
- }
-
- int main()
- {
- while(scanf("%lf%lf",&l,&r))
- {
- while(r-l>1e-12)
- {
- m=(l+r)/2;
- a=log(m+2009)*2009;
- c=-1;
- if(le())r=m;
- else l=m;
- }
- printf("%.12lf\n",m);
- }
- return 0;
- }
复制代码 输入:- -1921 -1900
- -1923 -1900
- -1927 -1900
- -1933 -1900
- -1941 -1900
复制代码 输出:- -1911.796052920040
- -1911.796052920040
- -1911.796052920040
- -1911.796052920041
- -1911.796052920041
复制代码 |
|