在 Exercism 网站上解决此练习时,我使用了标准数学。Pow包函数获得两个的提升幂。
return uint64(math.Pow(2, float64(n-1)))
在检查了社区解决方案之后,我发现了一个使用位移来实现相同目标的解决方案:
return uint64(1 << uint(n-1)), nil
我以为Go编译器会识别出这种数学。Pow使用常量2作为基础,并且只是自己使用位移位,而我没有明确地这样做。我能看到的唯一其他区别是 float64 的转换和数学运算。Pow 在浮点数上运行,而不是在整数上运行。
为什么编译器不优化电源操作以实现类似于位移位的性能?
MYYA
桃花长相依
千万里不及你
相关分类