使用常规距离或平方距离会更快吗?

时间:2020-09-08 08:52:59

标签: square-root vectormath

在向量长度/距离运算中使用平方根然后与某个值进行比较是否更快?或者对比较的值进行平方然后不使用平方根是否更快?所以基本上用伪代码是这样的:

sqrt(x * x + y * y) > a 

然后更快:

x * x + y * y > a * a 

1 个答案:

答案 0 :(得分:2)

我正在显示此代码,以让您知道平方根函数的大小

即使我们使用了内置功能,也必须经过这些过程

正如您现在所看到的,sqrt是具有乘法,除法和加法的循环函数的结果

因此,如果您执行x * x + y * y > a * a ,它将只比sqrt方法花费更少的时间,对此我可以证实。

sqrt(int n)
{

    float temp, sqrt;

    // store the half of the given number e.g from 256 => 128
    sqrt = n / 2;
    temp = 0;

    // Iterate until sqrt is different of temp, that is updated on the loop
    while(sqrt != temp){
        // initially 0, is updated with the initial value of 128
        // (on second iteration = 65)
        // and so on
        temp = sqrt;

        // Then, replace values (256 / 128 + 128 ) / 2 = 65
        // (on second iteration 34.46923076923077)
        // and so on
        sqrt = ( n/temp + temp) / 2;
    }

    printf("The square root of '%d' is '%f'", n, sqrt);
}