乘以,除以&平方根不使用算术运算符

时间:2011-12-08 09:21:40

标签: java c++ logic

如何在不使用算术运算符的情况下进行乘法和除法?我读了类似的问题here,但我仍然有成倍增加和分裂的问题。

另外,如何在不使用数学函数的情况下计算平方根?

3 个答案:

答案 0 :(得分:2)

如果你有the highest voted answer添加和否定,你可以使用循环加法和减法来实现乘法和除法。

至于平方根,只需根据步骤1中的操作实施Newton's Iteration

答案 1 :(得分:0)

使用按位运算符我发现的一个例子是:

http://geeki.wordpress.com/2007/12/12/adding-two-numbers-with-bitwise-and-shift-operators/

添加可以转化为多重性和分裂。对于sqrt,你可以使用泰勒系列。 http://en.wikipedia.org/wiki/Taylor_series

答案 2 :(得分:0)

快速平方根函数(甚至比库函数更快!):

编辑:不正确,实际上因为最近的硬件改进而变慢。但这是Quake II中使用的代码。

double fsqrt (double y)
{
    double x, z, tempf;
    unsigned long *tfptr = ((unsigned long *)&tempf) + 1;
    tempf = y;
    *tfptr = (0xbfcdd90a - *tfptr)>>1; /* estimate of 1/sqrt(y) */
    x =  tempf;
    z =  y*0.5;                        /* hoist out the “/2”    */
    x = (1.5*x) - (x*x)*(x*z);         /* iteration formula     */
    x = (1.5*x) – (x*x)*(x*z);
    // x = (1.5*x) – (x*x)*(x*z);      /* not necessary in games */
    return x*y;
}