if (sourceptr1 == sourceptr2)
if (len1 == len2)
{ mulu_karatsuba_square(sourceptr1,len1,destptr); return; }
if (sourceptr1 == sourceptr2)
if (len1 == len2)
{ mulu_karatsuba_square(sourceptr1,len1,destptr); return; }
prodhi_LSDptr = prod_LSDptr lspop 2*k_lo;
// prod_MSDptr/2*len1/prod_LSDptr wird zuerst die beiden
// Produkte x1*y1 in prod_MSDptr/2*k_hi/prodhi_LSDptr
prodhi_LSDptr = prod_LSDptr lspop 2*k_lo;
// prod_MSDptr/2*len1/prod_LSDptr wird zuerst die beiden
// Produkte x1*y1 in prod_MSDptr/2*k_hi/prodhi_LSDptr
if (first_part)
{ copy_loop_lsp(prod_LSDptr,destptr,2*len1);
destptr = destptr lspop len1;
if (first_part)
{ copy_loop_lsp(prod_LSDptr,destptr,2*len1);
destptr = destptr lspop len1;
{ var uintC k_hi = floor(len2,2); // Länge der High-Teile: floor(len2/2) >0
var uintC k_lo = len2 - k_hi; // Länge der Low-Teile: ceiling(len2/2) >0
// Es gilt k_hi <= k_lo <= len1 <= len2, k_lo + k_hi = len2.
{ var uintC k_hi = floor(len2,2); // Länge der High-Teile: floor(len2/2) >0
var uintC k_lo = len2 - k_hi; // Länge der Low-Teile: ceiling(len2/2) >0
// Es gilt k_hi <= k_lo <= len1 <= len2, k_lo + k_hi = len2.