哪个程序更好?为什么?

heyan_lch 2006-12-07 03:49:50
第一道题
程序1
for(i=0; i<100; i++)
{
dosomething1();
dosomething2();
}
程序2
for(i=0; i<100; i++)
{
dosomething1();
}
for(i=0; i<100; i++)
{
dosomething2();
}

第二道题
程序1
void f(double a1, double a2, double b1, double b2, double &y1, double &y2)
{
y1=a1/b1;
y2=a2/b2;
}
void f(double a1, double a2, double b1, double b2, double &y1, double &y2)
{
double temp=1.0/(b1*b2)
y1=a1*b2*temp;
y2=a2*b1*temp;
}
...全文
330 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanxiaojin 2006-12-14
  • 打赏
  • 举报
回复
楼上的说法有问题啊,看“更多的条件分支语句,意味着效率的下降”,第一题恰恰是分支多啊!

我的答案:
第一题:2好
1看起来内容更紧凑,但是如果是内容无关的话,就是有问题了,如果分开了循环更容易维护,更合情合理。在执行速度上,由于1应该需要更多的一次性空间,包括栈和堆都有可能,2则会少,所以时间问题可以不考虑,事实上也不会有严重的差别!
第二题:1好
因为2降低了除以0的可能性,尽管它需要一个临时变量!
iamwangyong 2006-12-11
  • 打赏
  • 举报
回复
前提:两种方法都是正确的情况下

第一题:1好,原因:CPU在做循环的时候会有分支预测技术,所以更多的条件分支语句,意味着效率的下降.

第二题:2好.这个有点不确定.CPU中除法的指令流水线更高,需要更多的周期,许多除法器都是乘法器做的. 指令并行或者流水执行的话将除法提前运行,效率更高,用时更少.要考虑溢出的问提,1会更好.但是题目这么出了,我觉的应该不会溢出,这也是为什么要加前提原因.
softwarewander 2006-12-11
  • 打赏
  • 举报
回复
lz有没有答案阿?
softwarewander 2006-12-07
  • 打赏
  • 举报
回复
第一个
要看dosomething1();是什么操作了
如果是一般的操作那么显然是第一个好,
如果是调用函数(且对内存的需求比较大的时候,又有操作系统换页,及命中等因素考虑进来的话)那么显然是第二种会快很多。

第二个:
对于浮点数的运算从精度和运算效率方面考虑 我觉得都是2 好
因为计算机做除运算的时间大大的多余乘法。
如果a1,b1都很大 那么 y1=a1*b2*temp;比之y1=a1/b1;节约出来的时间也应该比单个double temp=1.0/(b1*b2) 时间还要多。

Holmescn 2006-12-07
  • 打赏
  • 举报
回复
第一个,个人觉得,如果dosomething1()和dosomething2()没有关系的话,应该是2好一些,主要考虑到可以并行运算,提高cpu利用率。已经是双核时代了嘛。
第二个,是1好一点,2个人觉得有点失误就是,b1*b2有可能溢出,这样会影响到结果,至于精度,不觉得有什么关系,谢谢!
lann64 2006-12-07
  • 打赏
  • 举报
回复
要说精度,第2种的精度比第一种只会更低,不会更高。
jixingzhong 2006-12-07
  • 打赏
  • 举报
回复
由于没有实际遇到这样的情况,
所以不好定论,
一般,我觉得第一题 应该是 1 好,
减少了循环过程,
因为函数体都是必须执行的,而且每一次都是 完整执行,
所以两个函数在一起连续执行没有什么影响 ...

第二个,
我考虑了一下,
这样增加运算数据,
对于浮点数运算,可能是出于增加精度的考虑,
但是这里采用的是 同一个级别的 运算,
那么增加运算数并没有带来什么好处,
而只能是增加程序消耗 ...
laiwusheng 2006-12-07
  • 打赏
  • 举报
回复
NO. 1
maxiuxiaoxia 2006-12-07
  • 打赏
  • 举报
回复
第一个1好 (只运行了1次循环,而2运行了2次循环)
第二个2好(原因2只用了一次参数,而1用了2次)
hailongchang 2006-12-07
  • 打赏
  • 举报
回复
I can not catch your meaning
lann64 2006-12-07
  • 打赏
  • 举报
回复
在内部逻辑上和计算次序上无关时,都是1要好些。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧