在现代处理器上,浮点除法要比浮点乘法慢很多数量级(以互惠吞吐量衡量)。
我想知道在给定某些假设和容忍度的情况下,是否有任何算法可以计算出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/