问个基础的问题。

miky 2004-07-04 10:40:21
代码1:

var
a,b,c:single;
begin
a := 0.05 * pi;
b := 10 + a;
c := 10 - a;
end;

代码2:
var
b,c:single;
begin
b := 10 + 0.05 * pi;
c := 10 - 0.05 * pi;
end;

以上哪个代码好?速度快?1只用计算一次0.05*pi,但多了参数,分配空间,寻址也需要时间的吧,也不知道Delphi如何来优化代码,说不定他也自动给你弄个临时变量。
...全文
186 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eastunfail 2004-07-07
  • 打赏
  • 举报
回复
那你自己设一个断点,执行到那里的时候掉出CPU窗口自己看指令数目不久可以了
miky 2004-07-06
  • 打赏
  • 举报
回复
对,我给的例子不对,假设0。05是变量。
SGP 2004-07-06
  • 打赏
  • 举报
回复
如果pi是常量,那么a := 0.05 * pi是不是应该在编译期就被优化掉了?那么两段代码有什么区别?
关注...
caoguanlei520 2004-07-06
  • 打赏
  • 举报
回复
你好 你能帮我吗?我是delphi的爱好者,可以告诉我string 和stringlist的区别?怎么用吗?还有:if语句 怎么用?
graycarl 2004-07-06
  • 打赏
  • 举报
回复
var
Form1: TForm1;
b1,c1:single;
implementation

{$R *.dfm}
procedure proc1;
var
a,b,c:single;
begin
a := 0.05 * pi;
b := 10 + a;
c := 10 - a;
b1:=b;
c1:=c;
end;
procedure proc2;
var
b,c:single;
begin
b := 10 + 0.05 * pi;
c := 10 - 0.05 * pi;
b1:=b;
c1:=c;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var c,i:DWORD;
begin
c := GetTickCount;
for i:=0 to 100000000 do
begin
proc1;
end;
ListBox1.Items.Add(IntToStr(GetTickCount-c));
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
var c,i:DWORD;
begin
c := GetTickCount;
for i:=0 to 100000000 do
begin
proc2;
end;
ListBox1.Items.Add(IntToStr(GetTickCount-c));
end;

第一个大概1200 第二个大概800
fj218 2004-07-06
  • 打赏
  • 举报
回复
第二种
Eastunfail 2004-07-06
  • 打赏
  • 举报
回复
个人认为是第二个。
编译器在给你编译的时候应该将0.05 * pi直接计算出来,那么第二个代码只需要2次访问内存(直接付值),而第一个则至少3次。
miky 2004-07-06
  • 打赏
  • 举报
回复
用GetTickCount函数测试一下不就知道了吗?

不知道原理不爽啊。GetTickCount只能计算经过了多少时间,太不准确,一两行语句测不出来,多了受系统影响,如果系统忙,结果很不精确。
WuChenCan 2004-07-06
  • 打赏
  • 举报
回复
用GetTickCount函数测试一下不就知道了吗?
miky 2004-07-06
  • 打赏
  • 举报
回复
顶一顶
zousoft 2004-07-04
  • 打赏
  • 举报
回复
代码1一共执行了1+4+4=9条汇编指令;代码2只执行了2条汇编指令。
估计代码2效率高。
cronuz 2004-07-04
  • 打赏
  • 举报
回复
作两个线程,分別装入上述两種代码、執行一下就知道了。
aiirii 2004-07-04
  • 打赏
  • 举报
回复
http://dunit.sourceforge.net/README_CHT.html
aiirii 2004-07-04
  • 打赏
  • 举报
回复
我估计,在delphi优化后,你给的两段代码,汇编代码是一样的
aiirii 2004-07-04
  • 打赏
  • 举报
回复
写了段duint的代码测试下,几乎没有区别

type
TTestCaseFirst = class(TTestCase)
private

protected
// procedure SetUp; override;
// procedure TearDown; override;
published
// Test methods
procedure TestSingle1;
procedure TestSingle2;
end;

implementation

{ TResourceItemTests }

procedure TTestCaseFirst.TestSingle1;
var
a,b,c:single;
begin
a := 0.05 * pi;
b := 10 + a;
c := 10 - a;
Check(b=20-c, 'TestSingle1 failure!');
end;

procedure TTestCaseFirst.TestSingle2;
var
b,c:single;
begin
b := 10 + 0.05 * pi;
c := 10 - 0.05 * pi;
Check(b=20-c, 'TestSingle1 failure!');
end;

initialization
TestFramework.RegisterTest(TTestCaseFirst.Suite);

end.

两个函数,用时:
0:00:00.025
0:00:00.024

duint 的介绍在这里
miky 2004-07-04
  • 打赏
  • 举报
回复
看来大家对细节没什么兴趣啊,大处别人都帮我们做好了,不研究一下细节吗?
miky 2004-07-04
  • 打赏
  • 举报
回复
to yq3woaini(hahhajing(一星奋斗中...))
纳秒级都不够。

to aiirii(ari-爱的眼睛)
duint 是什么,麻烦指点?


但测试没什么意义,只是想了解原因。
aiirii 2004-07-04
  • 打赏
  • 举报
回复
用 duint 测试下就可知性能
飞天揽月 2004-07-04
  • 打赏
  • 举报
回复

●procedure DecodeDateTime(const AValue: TDateTime; out AYear, AMonth, ADay, AHour, AMinute,

ASecond, AMilliSecond: Word);

描述:
DecodeDateTime 方法根据TDateTime类型参数AValue 得到相应的年份、月份、日子、小时、分、秒、毫秒。

判断毫秒级的速度
飞天揽月 2004-07-04
  • 打赏
  • 举报
回复
你可以用得到时间测试一下呀
加载更多回复(3)
【更新至2025年】2001-2025年上市公司数字化转型年报词频统计(吴非、赵宸宇、甄红线)(300+年报词频统计) 1、时间:2001-2025年 2、来源:上市公司年报 3、参考文献:企业数字化转型与资本市场表现——来自股票流动性的经验证据(吴非) 数字化转型如何影响企业全要素生产率(赵宸宇) 知识产权行政保护与企业数字化转型(甄红线) 4、方法说明:(1)参考吴非老师的做法,对人工智能技术、大数据技术、云计算技术、区块链技术、数字技术运用五个维度76个数字化相关词频进行统计 (2)参考赵宸宇老师的做法,对数字技术应用、互联网商业模式、智能制造、现代信息系统四个维度99个数字化相关词频进行统计 (3)参考甄红线老师的做法,对技术分类、组织赋能、数字化应用等类别下139个数字化相关词频进行统计 5、指标:年份、股票代码、公司简称、行业名称、行业代码、全文-文本总长度、仅中英文-文本总长度、人工智能技术-吴、大数据技术-吴、云计算技术-吴、区块链技术-吴、数字技术运用-吴、数字技术应用-赵、互联网商业模式-赵、智能制造-赵、现代信息系统-赵、技术分类-人工智能技术-甄、技术分类-区块链技术-甄、技术分类-云计算技术-甄、技术分类-大数据技术-甄、组织赋能-人工智能技术-甄、组织赋能-云计算技术-甄、组织赋能-大数据技术-甄、组织赋能-广义数字技术-甄、数字化应用-技术创新-甄、数字化应用-流程创新-甄、数字化应用-业务创新-甄、人工智能、商业智能、图像理解、投资决策辅助系统、智能数据分析、智能机器人、机器学习、深度学习、语义搜索、生物识别技术、人脸识别、语音识别、身份验证、自动驾驶、自然语言处理、大数据、数据挖掘、文本挖掘、数据可视化、异构数据、征信、增强现实、混合现实、虚拟现实、云计算、流计算、图计算、内存计算、多方安全计算、类脑计算、绿色计算、认知计算等300+词频

5,943

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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