#include using namespace Upp; bool Add(word *target, const word *s1, const word *s2, int len) { int carry = 0; while(--len >= 0) { int x = s1[len] + s2[len] + carry; if(x > 1000) { carry = 1; x -= 1000; } target[len] = x; } return carry; } bool Sub(word *target, const word *s1, const word *s2, int len) { int borrow = 0; while(--len >= 0) { int x = s1[len] - s2[len] - borrow; if(x < 0) { borrow = 1; x += 1000; } target[len] = x; } return borrow; } bool Mul(word *target CONSOLE_APP_MAIN { word a[2]; word b[2]; word c[2]; for(int i = 0; i < 1000; i++) { int x = Random(500000); int y = Random(500000); a[0] = x / 1000; a[1] = x % 1000; b[0] = y / 1000; b[1] = y % 1000; Add(c, a, b, 2); LOG(x << "+" << y << "=" << x + y << " " << c[0] << c[1]); if(x > y) { Sub(c, a, b, 2); LOG(x << "-" << y << "=" << x - y << " " << c[0] << c[1]); } } }