Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 乘、除和;不使用算术运算符的平方根_Java_C++_Logic - Fatal编程技术网

Java 乘、除和;不使用算术运算符的平方根

Java 乘、除和;不使用算术运算符的平方根,java,c++,logic,Java,C++,Logic,如果不使用算术运算符,如何进行乘除?我读过类似的问题,但我仍然有乘法和除法的问题 另外,不使用数学函数如何计算平方根?使用位运算符我发现的一个例子如下: 加法可以转化为多重数和除法。对于sqrt,可以使用泰勒级数。 如果你有加法和否定,就像你在文章中提到的那样,你可以使用循环加法和减法来实现乘法和除法 至于平方根,只需根据步骤1中的操作实现即可。快速平方根函数(甚至比库函数更快!): 编辑:不正确,由于最近的硬件改进,实际速度较慢。然而,这是地震II中使用的代码 double fsqrt (d

如果不使用算术运算符,如何进行乘除?我读过类似的问题,但我仍然有乘法和除法的问题


另外,不使用数学函数如何计算平方根?

使用位运算符我发现的一个例子如下:

加法可以转化为多重数和除法。对于sqrt,可以使用泰勒级数。

如果你有加法和否定,就像你在文章中提到的那样,你可以使用循环加法和减法来实现乘法和除法

至于平方根,只需根据步骤1中的操作实现即可。

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

编辑:不正确,由于最近的硬件改进,实际速度较慢。然而,这是地震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;
}

也许你可以让我们看看你做了什么。对于乘法和除法,你需要加法和减法(即使它们是方法而不是运算符),平方根可以用乘法计算。我知道现在加法、减法、乘法和除法都可以用位运算符来完成。但如何使用乘法计算平方根呢?在我的回答中,我很遗憾你们可以使用泰勒级数。你们也可以通过乘法和加法/减法计算log、exp、sin、cos、tan等。泰勒是一个很好的理论抽象,但据我所知,计算sqrt(a)的最快方法是使用牛顿法: