Delphi 2009中sqrt函数仍然很慢吗?

4

Delphi 2009中sqrt函数的速度仍然很慢吗?

旧的技巧(查找表、近似函数)仍然有用吗?


我猜测是 Delphi 语言? - Peter Perháč
“...still...”:与哪个版本的Delphi相比? - Francesca
实际上我在谈论C语言。 不过这些答案很有趣,所以我会发布一个单独的C版本。 - Mykelyk
@Mykelyk:你认为提出问题并包括你所讨论的编程语言可能会有所帮助吗?也许至少在人们要求提供编程语言后编辑答案? - GEOCHET
3个回答

5
如果你正在处理一组非常大的数字,那么查找表通常会更快。而如果你正在处理一组大量的小数字,甚至一个慢速例程可能比维护一个大表格更快。
我查看了 System.pas(其中包含 SQRT),虽然有许多标记为从 Fastcode 项目许可的块,但 SQRT 并不是。实际上,它只是对 FSQRT 进行了汇编调用,因此它很可能没有改变。所以,如果它在某个时候相对较慢,那么它很可能仍然很慢(尽管您的 CPU 可能更快且经过优化……)
我的建议是看看你的使用情况并进行测试。

没错。我不相信使用FSQRT或查找表有任何优化。 - Jim McKeeth
我的用途是物理模拟游戏。 - Mykelyk
你真的需要为你的使用进行优化。如果你发现自己重复计算同样大的平方根,那么你可以考虑缓存它们,但这可能只在处理大数时更快。小数每次计算可能会更快。当然,你需要测试并观察。 - Jim McKeeth

3

很久以前,我有一个应用程序可以计算距离以对向量进行排序。我意识到按未开平方的值排序是相同的,所以我完全跳过了它。通过距离的平方进行排序并节省了一些时间。


1
是的,我已经做过这种事情不止一次。很多时候你可以使用距离的平方而不是距离来进行计算。 - Loren Pechtel
1
精确地说,比较点积和比较大小一样好。(可悲的是,它不能用于比较比率。) - zyndor

1

对于效率问题,我的回答是先应用最简单的方法,然后再进行优化。在第一次操作时就使其更快,而实际上并不需要那么快,这似乎有些愚蠢。

然而,我离题了,因为我的回答是关于效率的,而不是关于你问题的历史方面。


所以,基本上这根本不算是一个答案。 - Argalatyr
他的问题有两个部分,一个是关于效率的,另一个是关于函数的历史性质。显然,他并不是在寻求优化现有实现,那么为什么不先尝试一下,看看性能是否可接受呢? - Soviut

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接