在现代处理器上,浮点除法要比浮点乘法慢很多数量级(以互惠吞吐量衡量)。

我想知道在给定某些假设和容忍度的情况下,是否有任何算法可以计算出x/y的快速近似值。例如,如果您假设0<x<y,并且愿意接受在真实值的10%之内的任何输出,那么是否有比内置FDIV操作更快的算法?

最佳答案

我希望这会有所帮助,因为这可能与您要寻找的内容差不多。

__inline__ double __attribute__((const)) divide( double y, double x ) {
                                    // calculates y/x
    union {
        double dbl;
        unsigned long long ull;
    } u;
    u.dbl = x;                      // x = x
    u.ull = ( 0xbfcdd6a18f6a6f52ULL - u.ull ) >> (unsigned char)1;
                                    // pow( x, -0.5 )
    u.dbl *= u.dbl;                 // pow( pow(x,-0.5), 2 ) = pow( x, -1 ) = 1.0/x
    return u.dbl * y;               // (1.0/x) * y = y/x
}

也可以看看:
Another post about reciprocal approximation.
The Wikipedia page.

关于c++ - 快速近似 float 除法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31031223/

10-11 02:16