免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3087 | 回复: 3
打印 上一主题 下一主题

[数值计算] shell 和 c 效率相差这么多? [复制链接]

论坛徽章:
3
天蝎座
日期:2013-11-11 10:18:392015年亚洲杯之沙特阿拉伯
日期:2015-04-06 15:51:08CU十四周年纪念徽章
日期:2017-01-07 22:56:29
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2019-11-12 17:35 |只看该作者 |倒序浏览
本帖最后由 aqbssh 于 2019-11-12 17:50 编辑

最近业务清淡,玩个枚举的游戏,同样的需求,N算到200以内,用 shell 和c完成,没想到运行时间相差悬殊,有没有人帮忙解释一下原因?代码是乱凑的,
more wmnf.sh
#!/bin/bash
# 计算 N 以内的完美立方数
N=200 ; a=b=c=d=2
echo "现在为您计算 N 以内的完美立方数"
read -p  "请输入 N 的最大取值范围:" N
echo $N
for((a=2;a<=N; a++))
do
        for((b=2;b<a;b++))
        do
                for((c=b;c<a;c++))
                do
                        for((d=c;d<a;d++))
                        do
                        if((a*a*a == b*b*b + c*c*c + d*d*d ))
                        then
                        echo "大数=$a , 三个小字= $b, $c, $d"  
                        fi                                                               
                        done
                done                        
        done
done        


more src/wmnf.c
#include<stdio.h>
#include<math.h>
int main (){
long int N=500;
printf("现在为您计算 N 以内的完美立方数\n请输入 N 的最大取值范围:\n";
scanf("%ld",&N);
for(long int a = 2;a <= N; a++)
        for(long int b=2;b<a;b++)
                for(long int c=b;c<a;c++)
                        for(long int d=c;d<a;d++)
                        if(a*a*a == b*b*b + c*c*c + d*d*d )
                        printf("大数= %ld , 三个小数字= %ld, %ld, %ld \n" , a, b, c, d);
return 0;
}
下面是执行的结果:

time ./wmnf.sh >/dev/null
请输入 N 的最大取值范围:200

real        6m24.463s
user        6m6.420s
sys        0m9.562s

time  ./src/wmnf
real        0m2.480s
user        0m0.143s
sys        0m0.001s





论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
2 [报告]
发表于 2019-11-13 00:13 |只看该作者
感觉汇编可以更快,虽然我不太懂

论坛徽章:
13
CU大牛徽章
日期:2013-04-17 11:20:3615-16赛季CBA联赛之吉林
日期:2017-05-25 16:45:4715-16赛季CBA联赛之福建
日期:2017-03-13 11:33:442017金鸡报晓
日期:2017-02-08 10:39:422017金鸡报晓
日期:2017-01-10 15:13:29IT运维版块每日发帖之星
日期:2016-03-15 06:20:01IT运维版块每日发帖之星
日期:2015-10-02 06:20:00CU十二周年纪念徽章
日期:2013-10-24 15:41:34CU大牛徽章
日期:2013-09-18 15:15:45CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-04-17 11:46:39CU大牛徽章
日期:2013-04-17 11:46:28
3 [报告]
发表于 2019-11-14 22:39 |只看该作者
这个很正常啊,因为shell中很多操作实际上是要建立新进程的,这样就有很多额外的进程建立调用开支,然后还涉及进程间数据传递,这个开销也比较大。

论坛徽章:
0
4 [报告]
发表于 2019-11-18 14:58 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP