快速近似浮点除法

dsh*_*hin 5 c++ division

在现代处理器上,浮点除法比浮点乘法慢一个数量级(以倒数吞吐量衡量)。

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

Jac*_*fin 3

我希望这会有所帮助,因为这可能最接近您要寻找的内容。

__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
}
Run Code Online (Sandbox Code Playgroud)


另请参阅:
另一篇关于倒数近似的文章。
维基百科页面。