【问题标题】:Is sqrt still slow in Delphi 2009?在 Delphi 2009 中 sqrt 仍然很慢吗?
【发布时间】:2009-05-29 21:22:39
【问题描述】:

在 Delphi 2009 中 sqrt 仍然很慢吗?

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

【问题讨论】:

  • 我猜是德尔福?请语言
  • “...仍然...”:与哪个版本的 Delphi 相比?
  • 其实我说的是c。但是答案很有趣,所以我将发布一个单独的 C 版本
  • @Mykelyk:你认为问这个问题并包括你正在谈论的语言可能会有所帮助吗?也许至少在人们要求语言后编辑答案?

标签: performance delphi optimization delphi-2009


【解决方案1】:

如果您正在处理一小组非常大的数字,那么查找表总是会更快。而如果您正在处理大量的小数字,那么即使是缓慢的例程也可能比维护一个大表更快。

我查看了 System.pas(SQRT 所在的位置),虽然有许多块标记为从 Fastcode 项目获得许可,但 SQRT 不是。事实上,它只是对 FSQRT 进行汇编调用,因此很可能没有改变。因此,如果它在某一时刻相对较慢,那么它很可能仍然很慢(尽管您的 CPU 现在可能要快得多并为此进行了优化......)

我的建议是查看您的使用情况并进行测试。

【讨论】:

  • 对。我不认为使用 FSQRT 或查找表有任何优化。
  • 我的用法是物理模拟游戏
  • 您确实需要针对您的使用进行优化。如果您发现您正在重复计算相同的大平方根,那么您可能会考虑缓存它们,但如果您处理大量数字,那可能只会更快。每次计算小数字可能会更快。当然,您需要测试并查看。
【解决方案2】:

很多个月前,我有一个应用程序可以计算距离以对向量进行排序。我意识到按 un-sqrt-ed 值排序是一样的,所以我完全跳过了它。按距离^2排序,节省了一些时间。

【讨论】:

  • 是的,我不止一次做过这种事情。很多时候,您可以使用距离^2 而不是距离。
  • 完全正确。比较点积与比较量级一样好。 (遗憾的是,它不适用于比率。)
【解决方案3】:

我对效率问题的回答是先应用最简单的方法,然后再进行优化。一开始就没有必要让操作变得更快,这似乎很愚蠢。

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

【讨论】:

  • 所以,基本上,这根本不是答案。
  • 他的问题有两个部分,一个是关于效率的,另一个是关于函数的历史性质的。他显然不想优化现有的实现,所以为什么不先尝试一下,然后看看性能是否可以忍受。
猜你喜欢
  • 1970-01-01
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 2021-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多