作者: | 来源:互联网 | 2023-06-25 13:48
对一个M*N的矩阵数据进行处理,过程中需计算处理点到中心位置的距离,因此要用到sqrt运算,但是放在循环中,sqrt就要执行M*N次,极大的影响了程序的性能,这种情况有什么方法可以优化呢
对一个M*N的矩阵数据进行处理,过程中需计算处理点到中心位置的距离,因此要用到sqrt运算,但是放在循环中,sqrt就要执行M*N次,极大的影响了程序的性能,这种情况有什么方法可以优化呢
13 个解决方案
既然是计算距离,那就全部不要开方,反正求最大值就可以了
得到最大值后开方一次不久OK了
点到中心的距离确实需要sqrt函数, 问题的关键是这个
距离在循环中是否真正需要计算
如果需要取整就自己写一个sqrt避免浮点计算,否则是没啥好办法了
个人建议最好重新规划一下程序,尽量将sqrt的处理移到循环外进行
你是计算所有的点吗,还是只是满足条件的一部分点.如果只是满足条件的一部分点,那么先找出满足条件的点,再求sqrt即可.比如先求出距离的平方,然后sqrt.
图像处理中开方一般放在循环外。
如果实在必须在循环中用开方后的距离,那一般就用|dx|+|dy|来近似代替sqrt(dx^2+dy^2)。
查表绝对不行,那样出来表的大小比图像本身还耗内存,不可接受。
运行最快的程序是不需要执行的程序。
求sqrt最快的方法是不求sqrt。
感谢各位不吝赐教,不过想了一下,查表内存占用太大,不可行,sqrt每次循环又是必求的,似乎逻辑上没有什么其他的办法了,单就sqrt这个函数本身来说,有什么优化的空间吗?内联汇编会不会快些?我想了想似乎换成汇编也快不了多少,不知道是不是的