通过近似加快平方根除法

克里希:

我有一些要除以根2的整数:

var x int32
var sqrt_two = math.Sqrt(2)
for {
    result = float64(x) / sqrt_two
}

但是,result可以是一个近似的解决方案,因此我们可以删除对的使用math.Sqrt

99/70大约等于根2,因此我们可以这样写:

var x int32
for {
    result = float64(x * 70) / 99
    // fewer float64 operations than float(x) * 70 / 99
}

这有效/值得吗?

伊格纳西奥·维加拉·考瑟尔(Ignacio Vergara Kausel):

在第一个区块中,您math.Sqrt(2)使用了一次。因此,可以在循环内的所有迭代中分摊可能“可观”的成本for循环时间越长,这种成本就越不相关。

在第二个块中,您无需预先计算70/99,因此也无需摊销,并且原则上,您将要进行更多的操作,因为除法运算比第一个块中的乘法运算要昂贵得多。

如果没有更多的背景,很难说是否值得。最好的选择是对这两种情况进行基准测试,并查看是否适合您的用例,即您的典型迭代长度,哪个更好。

Scriptum之后:我假设您可以在计算中使用较粗略的近似。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档