这是我的代码:
public static double kMultiply( double x, double y, double n )
{
if( n == 1 )
{
cost += 1;
return x*y;
}
else
{
double m,a,b,c,d,ac,bd,g;
m = Math.floor(n/2);
a = Math.floor(x / Math.pow(2,m));
b = x % Math.pow(2,m);
c = Math.floor(y / Math.pow(2,m));
d = y % Math.pow(2,m);
ac = kMultiply(a,c,m);
bd = kMultiply(b,d,m);
g = kMultiply(a-b, c-d, m);
cost += 6*m;
return Math.pow(2,2*m)*ac + Math.pow(2,m)*(ac + bd - g) + bd;
}
}
x 和 y 是因子,n 是较大数字的大小,并被描述为以二进制表示形式写入该数字所需的位数。对于 x 和 y 的某些值,该算法不会返回正确的 x*y 值,因为我无法得到正确的 g。例如,对于
kMultiply(4, 11, 4)
该方法返回 52 而不是 44,因为它将 -3 分配给 g,而不是 -1。
知道如何解决这个问题吗?任何帮助将不胜感激。