【问题标题】:Fast integer division via calculating and storing inverses?通过计算和存储逆进行快速整数除法?
【发布时间】:2012-06-27 20:31:57
【问题描述】:

据我了解,目前进行整数除法的方法是在硬件中计算倒数,然后执行乘法。

我有一些 C# 代码,其中大量时间用于整数除法,其值很少更改,以至于可以缓存它们的值。

我想在软件中执行硬件算法,即计算除数的倒数并将所有这些除法转换为乘法。有谁知道执行这种转换的算法,或者更好的是,CLR 中有什么东西可以自动执行吗?

【问题讨论】:

  • 你不能用较低级别的语言(比如 C)编写它并与之互操作吗?
  • 你是说 CPU 实际上对整数除法进行浮点数学运算?! (例如,x / 4 = x * 0.25)。如果是这样,为什么整数运算通常被认为比浮点运算快得多?
  • @stakx 硬件中的整数除法比浮点除法更复杂。但是,我不能谈论它的具体实现。
  • @NominSim:这显然不是真的,因为浮点除法需要尾数上的整数除法。
  • @OliCharlesworth:如果您查看gmplib.org/~tege/divcnst-pldi94.pdf,您会在第 2 页看到,不仅有几个没有整数除法硬件的架构,而且循环计数(对于确实有它的架构) ) 通常在连续几代中增加

标签: c# division inverse


【解决方案1】:

有一个很好的blog post series on the topic of integer division by multiplication。它确实包含自己实施转换所需的一切。

【讨论】:

  • 仅链接的答案在 SO 上通常不受欢迎;你能在你的回答中给出程序的要点吗?
  • 我认为这个答案说明了回答这个问题所要说的一切。链接的帖子质量很好。我还没有复制第一个 Google 热门歌曲。记住它后,我从浏览器历史记录中取出了它。 不过,请随意编辑我的帖子。
  • 关于链接问题的唯一答案是您无法控制该站点。如果它在未来下降,这个答案对任何阅读它的人来说都是无用的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-19
  • 2013-10-31
  • 1970-01-01
  • 2010-11-03
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多