int main()
{
-#if 0
- unsigned buf[5] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0 };
+#if 1
+ unsigned bufA[] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff };
+ unsigned bufB[] = { 0xffffffff, 0x00000000, 0x00000000, 0x00000000 };
//unsigned buf[3] = { 0xffffffff, 0x1, 0 };
- number<> nu(buf, 4);
//number< unsigned > nu2(nu);
- number<> nu2 = 2u;
- std::cout << "nu = " << nu << "\n\n";
- std::cout << "nu2 = " << nu2 << "\n\n";
- std::cout << "nu + nu2 = " << nu + nu2 << "\n\n";
- std::cout << "nu * nu2 = " << nu * nu2 << "\n\n";
+ //number<> B = 0xffffffffU;
+ number<> A(bufA, 4, positive);
+ number<> B(bufB, 4, positive);
+
+
+ std::cout << "nu = " << A << "\n\n";
+ std::cout << "nu2 = " << B << "\n\n";
+ std::cout << "nu + nu2 = " << A + B << "\n\n";
+
+ number<> N = naif(A, B);
+ std::cout << "nu `naif` nu2 = " << N << "\n\n";
+
+ number<> K = karatsuba(A, B);
+ std::cout << "nu `ko` nu2 = " << K << "\n\n";
+
+ assert(N == K);
+
+ number<> N2 = naif(A, A);
+ std::cout << "nu `naif` nu = " << N2 << "\n\n";
+
+ number<> K2 = karatsuba(A, A);
+ std::cout << "nu `ko` nu = " << K2 << "\n\n";
+
+ assert(N2 == K2);
+
+ //std::cout << "nu^nu2 = " << pot_dyc_n(A, B) << "\n\n";
+
+ number<> X = 0xff;
+ number<> Y = 0xff;
+ std::cout << "r = " << naif(X, Y) << "\n\n";
+
+#if 1
+ number <>rd = pot_dyc_n(X, Y);
+ std::cout << "x `pot_dyc_n` y = " << rd << "\n\n";
+ number <>rc = pot_dyc_k(X, Y);
+ std::cout << "x `pot_dyc_k` y = " << rc << "\n\n";
+ if (!(rc == rd)) {
+ printf("Las pot NO DAN\n");
+ } else {
+ printf("Las pot dan iguales\n");
+ }
#endif
-#if 0
+ unsigned buf1[] = { 0xffffffff, 0xffffffff };
+ number<> T(buf1, 2, positive);
+ normalize_length(T, T);
+ std::cout << "test: " << naif(T, T) << "\n\n";
+#endif
+
+#if 1
number< unsigned > nu = 0xffffffff;
- std::cout << "nu = " << nu << "\n\n";
+ std::cout << "nu = " << nu ;
nu << 5;
- std::cout << "nu = " << nu << "\n\n";
-#endif
+ std::cout << "nu = " << nu ;
- number<> n1 = 0xffff00f0;
+ number<> n1 = 0xffff00f1;
number<> n2 = 0xffff00f0;
- n1 += 1;
+ normalize_length(n1, n2);
+ /*
+ n2 += 1;
n1 <<= 4;
n2 <<= 4;
+ */
+/* for (int k = 0; k < 100; k++)
+ {
+ n1 += (unsigned) rand() * k;
+ n2 += (unsigned) rand() * k;
+ }
+*/
+
+// n1 <<= 1;
+// n2 <<= 1;
if (n1 < n2)
std::cout << "n1 es menor que n2\n";
else if (n2 < n1)
std::cout << "n1 es mayor que n2\n";
- else
+ else
std::cout << "n1 es igual que n2\n";
-
- number<> n3 = n1 - n2;
- return 0;
+ std::cout << "\n";
+
+// for (int j=0; j<10; j++)
+// n1.borrow(0);
+
+ std::cout << "n1: " << n1 ;
+ std::cout << "\n";
+ std::cout << "n2: " << n2 ;
+ std::cout << "\n";
+
+ n1 -= n2;
+
+ std::cout << "n1-n2: " << n1 << "\n";
+#endif
+
+#if 0
+ uint32_t buf[] = { 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 };
+ number<> nu(buf, 8, negative);
+ number<> nu2 = 0x2;
+ std::cout << "nu = " << nu ;
+ std::cout << "\n";
+ std::cout << "nu2 = " << nu2 ;
+ std::cout << "\n";
+ std::cout << "nu * nu2 = " << naif(nu, nu2) ;
+ std::cout << "\n";
+ std::cout << "nu + nu2 = " << nu + nu2 ;
+ std::cout << "\n";
+ std::cout << "nu - nu2 = " << nu - nu2 ;
+
+#endif
+
+ number<> h = 0x10000000;
+ h<<=1;
+ h += 0xfffffffc;
+ h<<=1;
+ h += 0xffffffff;
+ h<<=1;
+ h += 0x00000002;
+ number<> d = 0;
+ number<> m = 0xfffffffe;
+ m<<=1;
+ m += 0xffffffff;
+ m<<=1;
+ m += 0x00000001;
+
+ std::cout << "h: " << h ;
+ std::cout << "\n";
+ std::cout << "d: " << d ;
+ std::cout << "\n";
+ std::cout << "m: " << m ;
+ std::cout << "\n";
+
+ number<> a = h - d - m;
+
+ std::cout << "h-d-m: " << a << "\n";
+
+
+ return 0;
}