关于一个计算定积分的程序的bug
yuanfeng2019/10/18数学 IP:湖南

18687.png

请问这个的值是多少?


我需要写一个程序计算这个

我怀疑我积错了

这个程序在大部分情况都可以正常工作,但有时候会出错

#include<bits stdc++.h>
using namespace std;
int main()
{       long double a,b,c,d,l,r;
        //scanf("%0.9f %0.9f %0.9f %0.9f %0.9f %0.9f",&a,&b,&c,&d,&r,&l);
        scanf ("%10Lf %10Lf %10Lf %10Lf %10Lf %10Lf",&a,&b,&c,&d,&r,&l);
  //      printf("%.10f %.10f %.10f %.10f %.10f %.10f",a,b,c,d,r,l);
		long double R=c/a*(a*r+b)+(d-b*c/a)*log(a*r+b);
		long double L=c/a*(a*l+b)+(d-b*c/a)*log(a*l+b);
        printf("%.6Lf\n",(L-R)/a);
        return 0;
}</bits>

比如输入0.1 1 1 1 -1 0的时候是对的

输入0.3 -4 -4 0 14 34时也是对的

但输入-2 3.8 2.5 -9 2 3时就错了


所以应该积错了

大佬帮我积下吧

[修改于 5年2个月前 - 2019/10/18 15:59:36]

来自:数理化 / 数学
24
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
yuanfeng 作者
5年1个月前 IP:湖南
865231
引用hello1world发表于1楼的内容
从逻辑来看本身没错,在取第三组数时(a*r+b),(a*l+b)为负值,负数再log一下是虚数(复数...

是的,是这个问题,谢谢了

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
yuanfeng作者
5年1个月前 IP:湖南
865232
引用hello1world发表于1楼的内容
从逻辑来看本身没错,在取第三组数时(a*r+b),(a*l+b)为负值,负数再log一下是虚数(复数...

这个特判一下就行了吧,我去试试

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
yuanfeng作者
5年1个月前 IP:湖南
865239
引用hello1world发表于5楼的内容
没明白你的意思,如果可以的话希望能把最后成功的程序帖出来看看.第三组数据2-3区间是有积分结果的,约...

可是按照我积出来的式子来看确实会出现负数的对数的情况,你是怎么积的?


引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
yuanfeng作者
5年1个月前 IP:湖南
865240
引用hello1world发表于7楼的内容
仔细想想好象也确实没什么,可以自己判断一下自己写个log负数的功能,而且对于这个函数来看可以象上面r...

问题是这个积分存在结果

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
yuanfeng作者
5年1个月前 IP:湖南
865241
引用yuanfeng发表于8楼的内容
可是按照我积出来的式子来看确实会出现负数的对数的情况,你是怎么积的?

可以了,正确的代码我发下面

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
yuanfeng作者
5年1个月前 IP:湖南
865242
#include<bits stdc++.h>
using namespace std;
int main()
{       double a,b,c,d,l,r,R,L;
        scanf("%lf%lf%lf%lf%lf%lf", &a, &b, &c, &d, &l, &r);
        if(a!=0)
        {R=c*r/a+(d/a-b*c/(a*a))*log(fabs(a*r+b));
        L=c*l/a+(d/a-b*c/(a*a))*log(fabs(a*l+b));}
        else
        {R=((c*r*r)/(2*b)+(d*r)/b);
        L=((c*l*l)/(2*b)+(d*l)/b);    }
//        cout<<(a*r+b)<<" "<<(a*l+b);         printf("%.6lf\n",(r-l));         return 0; }< pre></(a*r+b)<<" "<<(a*l+b);></bits>


引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
yuanfeng作者
5年1个月前 IP:湖南
865243
引用yuanfeng发表于11楼的内容

这个是正确的代码,特判一下就行了

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
yuanfeng作者
5年1个月前 IP:湖南
865265
引用hello1world发表于15楼的内容
这确实是和k/x一样,当初好象不那么重视这个,不大记得了,好象当初高中讲极限,和行列式(矩阵)运算但...

我是搞信竞的,要学这个

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
yuanfeng作者
5年1个月前 IP:湖南
865315
引用UIC发表于18楼的内容
你是哪里的?我考完初赛,准备退役。。。

湖南,话说你过了为什么不搞复赛

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
yuanfeng作者
5年1个月前 IP:湖南
865328
引用UIC发表于20楼的内容
目前不知道分数线,应该没过。而且我要专心搞物理

50以上就够吧。。。

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
yuanfeng作者
5年1个月前 IP:湖南
865353
引用UIC发表于22楼的内容
我浙江的。。这儿都贼高,平均都有68

我67.。。。。

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}