Fortran Coder

查看: 2792|回复: 6
打印 上一主题 下一主题

[求助] 老哥们能不能看一下我的代码为什么运行速度这么慢

[复制链接]

159

帖子

2

主题

1

精华

大师

Vim

F 币
961 元
贡献
469 点

规矩勋章

楼主
发表于 2023-2-21 18:02:37 | 显示全部楼层
do while(i<x)
这里应该是i<1.0,如果 i<x 计算量翻了10亿倍

你这里用的单精度,可能在很大的x的时候会损失精度(i=i+s这一步,当i和s的比值大于10**7的时候,一般加法就会损失精度)
另外他这里用的是梯形法,你这算是矩形法,按理说精度差一点

159

帖子

2

主题

1

精华

大师

Vim

F 币
961 元
贡献
469 点

规矩勋章

沙发
发表于 2023-2-21 19:01:33 | 显示全部楼层
本帖最后由 Transpose 于 2023-2-21 19:03 编辑

取中间值就是梯形法

原函数是 atan(x),x=1就是pi/4,x=无穷 就是pi/2
另外这个积分区间[0,1)积分值是pi/4,最后乘以4就是pi了,没问题
如果积分区间是[0,无穷],那么积分值是pi/2,最后就需要乘以2,但是用数值的办法比较难精确算出来

你可以做一个换元,在[1,无穷]的时候令 t=1/x ,换完之后也就变回[0,1]了



您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-6 00:56

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表