如何在不使用算术运算符的情况下进行乘法和除法?我读了类似的问题here,但我仍然有成倍增加和分裂的问题。
另外,如何在不使用数学函数的情况下计算平方根?
答案 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;
}