【问题标题】:How can I get rid of division operator? [closed]如何摆脱除法运算符? [关闭]
【发布时间】:2011-12-25 17:00:02
【问题描述】:

除了写“/6”,我应该写什么才能去掉除法运算符?

int a ;
c =  a / 6 ;

如果您对该主题有更多了解,能否在 b != 2 的倍数时给我一般算法?

前:

b = 1、3、5、6、7、9、10 等

【问题讨论】:

  • 提示:除法只是重复减法。
  • 另一个提示:你可以乘以 1/6 的结果。
  • @DOK - 你如何计算1/6
  • @opalgo 不是 610 2 的倍数?
  • @Atom 真的不是这样。如果您要除以编译时间常数,则可能会进行优化,我们将一个除法替换为乘法,并进行一些加法和移位。这仍然比现代 CPU 上的划分要快。但有趣的是:编译器作者也知道这些技巧(事实证明他们确实考虑过这些事情——谁会想到)——是的,现代编译器会做这些事情吗?所以真的是非优化的主要例子。

标签: c optimization micro-optimization


【解决方案1】:

好吧,移位和减法(用>> 和可选的- 替换/ 的一般形式,通常用于2 的幂除数)是除法运算对int 所做的,所以我不确定你应该如何消除它。如果他们说用模数(%)替换它,我会发现他们很难认真对待。对于floatdouble,您可以尝试乘以倒数(这会将除法移动到编译时而不是运行时),只要您不损失太多精度,但这对于整数类型来说更棘手无需借助定点表示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 2020-06-25
    • 2013-12-12
    • 1970-01-01
    相关资源
    最近更新 更多