1、背景

  工作中遇到过需要进行极大数据的存储和运算的场景,当时使用Python解决了这个问题,在Python中,整数没有位数限制,使用起来很方便。但是当程序主体使用C/C++实现时,就比较麻烦。所以考虑实现一个大数类,用于大数的存储和运算,后面生成静态库,需要的时候直接调用。

2、算法设计

(1)存储

  大数一般都是以整数队列的形式存储,取一个较大的进制S,队列中的每一个值,相当于一位。假设数组长度为N(0为低位,n-1为高位),则数组表示的值 value =  A0 + A1*S + A2*S2 + ... + An-1*Sn-1。例如 “1234567890000” 在数组中存储形式为 567890000, 1234。以下大数的运算全部基于此方式。

(2)比较运算

  两个大数比较的方法是:优先比较位数,位数大者为大,位数小者为小;如果位数相等,则依次从高位向低位比较,当前位大的为大,当前位小的为小;如果每一位都相等,则两者相等。

  对于A(a0a1a2...an-1) 和 B(b0b1b2...bm-1),比较流程图如下:

(3)加法运算

  大数的加减乘运算都与十进制运算的手算方法相同,区别在于后者是10进制,而前者是S进制。加法计算时,A和B由低位到高位依次求和,需考虑进位。

  对于A(a0a1a2...an-1) + B(b0b1b2...bm-1),并假设N≥M,则计算过程如下(注意取值范围):

 

  注意:

  • A、B位数可能不相等,因此需要分两部分进行加和;
  • 两次循环结束,需要考虑进位是否为零;

(4)减法运算

  对于A(a0a1a2...an-1) - B(b0b1b2...bm-1),并假设A≥B(不考虑负数),一定有N≥M,则计算过程如下:

  注意:

  • A、B位数可能不相等,因此需要分两部分求差值;
  • 减法运算可能会导致差值的若干个高位是无意义的零值,因此需额外的去零操作;

(5)乘法运算

  在计算十进制数 123 * 45 时,首先计算 123 * 5 = 615,然后计算 123 * 4 = 492,最终结果是 615 + 492 * 10 = 5535。

  大数乘法的计算过程与此相同:对于A(a0a1a2...an-1) * B(b0b1b2...bm-1),并假设N≥M(被乘数位数不小于乘数时,效率最高),对于B中的每一位 bi,计算其与A的乘积,并在后面补上 i 个零,将结果累加,即为A与B的乘积。

  流程图如下:

  

(6)除法运算

  除法运算是四则运算中最复杂的运算, 常用的方法是使用多次减法来模拟除法。最简单的方法是被除数不断减去除数,直到结果为负,减的次数即为商,当然这种方法效率太低。

  网上提供了一些优化方法,例如,在被除数减除数的过程中,被除数每次减去除数的10N倍,以加速被除数衰减过程。

  这里采用的方法与上述方法原理相似,以23456除以123为例,在进行竖式计算时:以234除以123,得1,余111,以1115除以123,得9,余8,以86除以123,得0,余86,则23456除以123的结果是190。

  上述过程是为了将未知位数的两个大数相除,转换为多次位数相近的两个数相除,即被除数最多比除数多1位。算法的核心是上述过程中的 234除以124、1115除以123、86除以123,如何得到商和余数。

  以下提出一种收敛算法:

  首先,对于 A(a0a1a2...an-1) / B(b0b1b2...bm-1),一定有 A(a0a1a2...an-1) / B(b0b1b2...bm-1) ≤ A(aiai+1...an-1) / B(bibi+1...bm-1),其中 0 ≤ i ≤ n-1 且 0 ≤ i ≤ m-1。

  所以,可以通过取A、B的最高两位或一位来预估A、B相除的结果,且预估值≥实际值,并以预估值更新A,多次迭代,直到A<B。设A0=A,A/B的最终结果为C0,推导过程如下:

  第1轮:C0 = A0 / B,求得预估值 V0,有V0 >= C0,设V0 - C0 = C1,B * V0 - A0 = A1,则

  第2轮:C1 = A1 / B,求得预估值 V1,有V1 >= C1,设V1 - C1 = C2,B * V1 - A1 = A2,则

  第3轮:C2 = A2 / B,求得预估值 V2,有V2 >= C2,设V2 - C2 = C3,B * V2 - A2 = A3,则

  ......

  第x轮:Cx-1 = Ax-1 / B,此时Ax-1 < B,即 Vx-1 = 0

  通过以上过程,可以推导出:C0 = V0 - V1 + V2 - ... +/- Vx-1

  

  举例(进制S取10亿):

  A0 = 86,517999162,161442275,630671648,031880106,681829550,207222443
  B   =                    92,784489371,679693896,011626721,067864399,494212548

  第1轮:V0 = 86,517999162 / 92 = 940413034
       A1 = B * V0 - A0 = 737743996,000612337,308902736,003021973,147110937,498328189
  第2轮:V1 = 737743996,000612337 / 92,784489371 = 7951156
          A2 = B * V1 - A1 = 0(实际值是个负值,直接取0)
  此时 A2 < B,因此 C = 940413034 - 7951156 = 932461878,实际值为932461877。

  因为误差问题,算法值比实际值大1或与实际值相等,所以算法的最终结果需要向下微调。

  以下给出收敛过程以及预估值的计算方法:

3、代码实现

(1)类的设计

  计划实现一个 LargeInt 类,其含义是一个大整数(无负数和小数),实现的核心功能是:字符串构造、格式化字符串输出、加减乘除四则运算以及逻辑比较运算。

  设计类图如下:

(2)类定义

  以C++模板类vector作为大数存储,下标0表示低位,进制S取1000000000(10亿,便于格式化输入输出),大数每一位是一个无符号32位整型,乘法运算时的中间值以无符号64位整型承载。

 #include <iostream>
#include <vector>
#include <string> typedef unsigned int uint;
typedef unsigned long long uint64; #define MAX_VAL 1000000000 // 10亿
#define VAL_LEN 9
#define FORMAT_STR "%09d" class LargeInt
{
private:
std::vector<uint> _data; bool checkValStr(const std::string &valStr);
int compare(const LargeInt &li) const;
void arrange(); static uint estimateQuotient(const LargeInt &liA, const LargeInt &liB);
static uint getMaxCycle(const LargeInt &liA, const LargeInt &liB); public:
LargeInt();
LargeInt(uint val);
LargeInt(const std::string &valStr); // 四则运算符重载
LargeInt operator+(const LargeInt &li) const;
LargeInt operator-(const LargeInt &li) const;
LargeInt operator*(const LargeInt &li) const;
LargeInt operator/(const LargeInt &li) const; // 比较运算符重载
bool operator==(const LargeInt &li) const;
bool operator!=(const LargeInt &li) const;
bool operator<(const LargeInt &li) const;
bool operator>(const LargeInt &li) const;
bool operator<=(const LargeInt &li) const;
bool operator>=(const LargeInt &li) const; // 字符串格式化输出
std::string toString() const;
};

  行9、10定义了格式化输入和格式化输出所需的宏,后面会用到。

(3)构造方法

  LargeInt 提供了三种构造方法,分别是无符号整型、字符串以及无参数构造。所谓字符串构造,是以十进制字符串为入参,系统对字符串进行分割,转为整数数组,构造LargeInt。

  以 ”1234567890123“ 为例,字符串构造的方法是,从字符串结尾向开头不断截取长度为9的子串,并转为整数,即 67890123,12345。

 inline bool isDigit(const char ch)
{
return ch >= '' && ch <= '';
} LargeInt::LargeInt() {} LargeInt::LargeInt(uint val)
{
this->_data.push_back(val % MAX_VAL);
if (val >= MAX_VAL)
this->_data.push_back(val / MAX_VAL);
} // 字符串合法性检查,只允许出现字符 0~9
bool LargeInt::checkValStr(const string &valStr)
{
for (auto it = valStr.begin(); it != valStr.end(); ++it)
{
if (!isDigit(*it)) return false;
}
return true;
} // 字符串构造
// valStr:十进制字符串
LargeInt::LargeInt(const string &valStr)
{
if (checkValStr(valStr))// 检查valStr合法性
{
int len = valStr.length();
// 按长度9截取子串
while (len >= VAL_LEN)
{
string s = valStr.substr(len - VAL_LEN, VAL_LEN);
this->_data.push_back(stoi(s));
len -= VAL_LEN;
}
// 残留子串
if (len > )
{
string s = valStr.substr(, len);
this->_data.push_back(stoi(s));
}
} this->arrange(); // 去零
} // 去零操作,避免整数队列的高位存在多余的零
void LargeInt::arrange()
{
int idx = this->_data.size(); // 注意,如果队列中全为0,要保留最低位的0
while (--idx >= )
{
if (this->_data[idx] > ) break; this->_data.pop_back();
}
}

  说明:为避免字符串开头有无意义的零,定义了 ”arrange“ 函数,用于整理队列,去除多余的零值,字符串构造以及后面的减法、除法都需要调用arrange函数。

(4)比较运算

  对于所有的比较运算,可以提取出一个公共函数 ”compare“,该函数比较两个LargeInt的大小,返回1、0、-1,其他比较函数通过调用该函数判断返回值即可。

 // 比较函数,0 相等,1 大于,-1 小于
int LargeInt::compare(const LargeInt &li) const
{
int len1 = this->_data.size();
int len2 = li._data.size(); // step1: 比较长度
if (len1 != len2)
return (len1 > len2) ? : -; // step2: 由高位到低位比较值
for (int idx = len1 - ; idx >= ; --idx)
{
if (this->_data[idx] == li._data[idx]) continue;
return this->_data[idx] > li._data[idx] ? : -;
} return ;
} bool LargeInt::operator==(const LargeInt &li) const
{
return compare(li) == ;
} bool LargeInt::operator!=(const LargeInt &li) const
{
return compare(li) != ;
} bool LargeInt::operator<(const LargeInt &li) const
{
return compare(li) < ;
} bool LargeInt::operator>(const LargeInt &li) const
{
return compare(li) > ;
} bool LargeInt::operator<=(const LargeInt &li) const
{
return compare(li) <= ;
} bool LargeInt::operator>=(const LargeInt &li) const
{
return compare(li) >= ;
}

(5)加法运算

  首先定义两个简单的MAX/MIN宏,后面会用到。

 #ifndef MIN
#define MIN(a,b) ((a) > (b) ? (b) : (a))
#endif #ifndef MAX
#define MAX(a,b) ((a) > (b) ? (a) : (b))
#endif

  按照前面提供的算法,实现代码。考虑加法的进位只会是0或1,所以为了减少除法和求模运算,函数中使用 if 判断替代。

 LargeInt LargeInt::operator+(const LargeInt &li) const
{
int len1 = this->_data.size();
int len2 = li._data.size(); int minLen = MIN(len1, len2);
int maxLen = MAX(len1, len2);
const LargeInt &extraLi = (len1 > len2) ? (*this) : li; uint value = ; // 和,不超过最大值的2倍
uint carry = ; // 进位
LargeInt retVal; for (int idx = ; idx < minLen; ++idx)
{
value = this->_data[idx] + li._data[idx] + carry; if (value >= MAX_VAL)
{
retVal._data.push_back(value - MAX_VAL);
carry = ;
}
else
{
retVal._data.push_back(value);
carry = ;
}
} for (int idx = minLen; idx < maxLen; ++idx)
{
value = extraLi._data[idx] + carry; if (value >= MAX_VAL)
{
retVal._data.push_back(value - MAX_VAL);
carry = ;
}
else
{
retVal._data.push_back(value);
carry = ;
}
} if (carry > )
retVal._data.push_back(carry); return retVal;
}

  

(6)减法运算

  注意:代码中要避免出现负值,否则会导致计算结果错误;减法运算的结果需要做去零操作。

 LargeInt LargeInt::operator-(const LargeInt &li) const
{
if (*this <= li)
{
return LargeInt();
} int len1 = this->_data.size();
int len2 = li._data.size(); uint value = ; // 差
uint carry = ; // 借位
LargeInt retVal; for (int idx = ; idx < len2; ++idx)
{
if (this->_data[idx] < li._data[idx] + carry) // 注意细节,carry放在右侧,避免出现差值为负数的情况
{
value = this->_data[idx] + MAX_VAL - carry - li._data[idx];
carry = ;
}
else
{
value = this->_data[idx] - carry - li._data[idx];
carry = ;
} retVal._data.push_back(value);
} for (int idx = len2; idx < len1; ++idx)
{
if (this->_data[idx] < carry)
{
value = this->_data[idx] + MAX_VAL - carry;
carry = ;
}
else
{
value = this->_data[idx] - carry;
carry = ;
}
retVal._data.push_back(value);
} retVal.arrange();
return retVal;
}

  

(7)乘法运算

  为保证被乘数位数大于乘数,提高计算效率,如果A的位数小于B的位数,则返回B*A。

 LargeInt LargeInt::operator*(const LargeInt &li) const
{
int len1 = this->_data.size();
int len2 = li._data.size(); if (len1 < len2) return li.operator*(*this); // 优化,保证被乘数位数大于乘数 uint64 value; // 积
uint64 carry = ; // 进位
LargeInt retVal(); for (int idx2 = ; idx2 < len2; ++idx2)
{
LargeInt mulTemp;
carry = ; // 补零
for (int tmpIdx = ; tmpIdx < idx2; ++tmpIdx)
mulTemp._data.push_back(); for (int idx1 = ; idx1 < len1; ++idx1)
{
value = (uint64)(li._data[idx2]) * (uint64)(this->_data[idx1]) + carry; mulTemp._data.push_back((uint)(value % MAX_VAL));
carry = value / MAX_VAL;
} if (carry)
mulTemp._data.push_back((uint)carry); retVal = retVal + mulTemp;
} return retVal;
}

(8)除法

  注意:除法计算由高位向低位进行,即求得的第一个商值是结果的最高位,所以要注意插入位置;

       算法结果需要向下微调,正常情况下,算法结果与实际结果相等,或比实际结果大1,为保险起见,使用了while循环。

 LargeInt LargeInt::operator/(const LargeInt &li) const
{
if (li._data.empty() || li == ) return LargeInt("");
if (*this < li) return LargeInt(); int len1 = this->_data.size();
int len2 = li._data.size(); uint value;
LargeInt retVal;
LargeInt divTemp; for (int idx = len1 - len2 + ; idx < len1; ++idx)
{
divTemp._data.push_back(this->_data[idx]);
} // len1 >= len2
for (int idx = len1 - len2; idx >= ; --idx)
{
value = ;
divTemp._data.insert(divTemp._data.begin(), this->_data[idx]);
divTemp.arrange(); value = getMaxCycle(divTemp, li); // 商 divTemp = divTemp - li * value; // 余数 retVal._data.insert(retVal._data.begin(), value); // 除法是由高位向低位进行,所以插入位置在begin
} retVal.arrange();
return retVal;
} // 计算商值
uint LargeInt::getMaxCycle(const LargeInt &liA, const LargeInt &liB)
{
LargeInt tempA = liA;
const LargeInt& tempB = liB;
uint tempC;
uint res = ;
uint counter = ; // 调试用
bool flag = true; while (tempA >= tempB)
{
counter++; tempC = estimateQuotient(tempA, tempB);
tempA = tempB * tempC - tempA; res = flag ? (res + tempC) : (res - tempC);
flag = !flag;
} // 微调
while (res > && liB * res > liA) res--; return res;
} // 估值
uint LargeInt::estimateQuotient(const LargeInt &liA, const LargeInt &liB)
{
int lenA = liA._data.size();
int lenB = liB._data.size();
uint64 valA, valB; if (lenA == lenB)
{
if (lenA > )
{
valA = (uint64)liA._data[lenA - ] * MAX_VAL + liA._data[lenA - ];
valB = (uint64)liB._data[lenB - ] * MAX_VAL + liB._data[lenB - ];
}
else
{
valA = (uint64)liA._data[lenA - ];
valB = (uint64)liB._data[lenB - ];
}
}
else
{
valA = (uint64)liA._data[lenA - ] * MAX_VAL + liA._data[lenA - ];
valB = (uint64)liB._data[lenB - ];
} return (uint)(valA / valB);
}

(9)格式化字符串输出

  为便于测试和打印,需要得到 LargeInt 的字符串表现形式,类似于十进制字符串构造,这里将 LargeInt 转为十进制字符串。

 string LargeInt::toString() const
{
int len = this->_data.size();
int shift = ;
char *buff = new char[len * VAL_LEN + ]; if (len > )
shift += sprintf(buff + shift, "%d", this->_data[len - ]); for (int idx = len - ; idx >= ; --idx)
{
shift += sprintf(buff + shift, FORMAT_STR, this->_data[idx]);
}
buff[shift] = '\0'; string retStr(buff);
delete[] buff; return retStr;
}

4、性能测试

  为了测试加法的性能,定义了两种测试用例:10位加10位、10位加5位(此处的位长指队列长度,对应十进制的位数是其9倍),每种测试用例有100个,运行1000次,求平均运行时长。对于减法乘法和除法,测试方法与加法相同。

  在个人电脑上的测试结果如下:

运算 A位长 B位长 总时长(ms) 平均时长(ms)
add 10 10 891 0.0089
add 10 5 800 0.0080
sub 10 10 946 0.0095
sub 10 5 811 0.0081
mul 10 10 2742 0.0274
mul 10 5 1658 0.0166
div 10 10 1694 0.0169
div 10 5 5868 0.0587
div 10 2 6458 0.0646

  

  

  结论:

  • 加法和减法效率已经比较高了,算法上基本没法进一步优化;
  • 以加法为参考,10位 乘 5位的时长是加法的2倍,10位 乘 10位的时长是加法的3倍。乘法结果的位数是乘数和被乘数两者位数的乘积,因此随位数增加,乘法消耗的时长和对应的加法消耗的时长的比值会更大;
  • 除法时长增长规律似乎与乘法相反,除法对被除数和除数间的位数差值更敏感,差值越大,耗时越大。

5、完整代码

  工程使用gtest测试,分为五个文件,main.cpp、testcase.cpp、large_int.h、large_int.cpp、performance_test.cpp。

  在Debug模式下跑gtest测试用例,在Release下跑性能测试.

  main.cpp 入口函数

 #ifdef _DEBUG
#include "gtest\gtest.h"
#else
extern void TESTCASES();
#endif int main(int argc, char **argv)
{
#ifdef _DEBUG
::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS();
#else
TESTCASES();
return ;
#endif
}

main.cpp

  testcase.cpp 测试用例

 #ifdef _DEBUG
#include "gtest\gtest.h"
#include "large_int.h" TEST(testLargeIntCreate, normalTest)
{
ASSERT_TRUE(LargeInt().toString() == "");
ASSERT_TRUE(LargeInt().toString() == "");
ASSERT_TRUE(LargeInt().toString() == "");
ASSERT_TRUE(LargeInt("").toString() == "");
ASSERT_TRUE(LargeInt("").toString() == "");
ASSERT_TRUE(LargeInt("").toString() == "");
} TEST(testLargeIntCompare, normalTest)
{
ASSERT_TRUE(LargeInt() == LargeInt());
ASSERT_TRUE(LargeInt() != LargeInt());
ASSERT_TRUE(LargeInt() > LargeInt()); ASSERT_TRUE(LargeInt("") == LargeInt(""));
} TEST(testLargeIntAdd, normalTest1)
{
ASSERT_TRUE(LargeInt() + LargeInt() == LargeInt());
ASSERT_TRUE(LargeInt() + LargeInt() == LargeInt());
} TEST(testLargeIntSub, normalTest1)
{
ASSERT_TRUE(LargeInt() - LargeInt() == LargeInt());
ASSERT_TRUE(LargeInt() - LargeInt() == LargeInt());
ASSERT_TRUE(LargeInt() - LargeInt() == LargeInt());
} TEST(testLargeIntMul, normalTest1)
{
ASSERT_TRUE(LargeInt() * LargeInt() == LargeInt());
ASSERT_TRUE(LargeInt() * LargeInt() == LargeInt(""));
ASSERT_TRUE(LargeInt() * LargeInt() == LargeInt(""));
} TEST(testLargeIntDiv, normalTest1)
{
ASSERT_TRUE(LargeInt() / LargeInt() == LargeInt());
ASSERT_TRUE(LargeInt("") / LargeInt() == LargeInt());
ASSERT_TRUE(LargeInt("") / LargeInt() == LargeInt());
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
} TEST(testLargeIntDiv, normalTest2)
{
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
} TEST(testLargeIntDiv, normalTest3)
{
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
} TEST(testLargeIntDiv, normalTest4)
{
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
} TEST(testLargeIntDiv, normalTest5)
{
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
} TEST(testLargeIntDiv, normalTest6)
{
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
} TEST(testLargeIntDiv, normalTest7)
{
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
} TEST(testLargeIntDiv, normalTest8)
{
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
} TEST(testLargeIntDiv, normalTest9)
{
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
} TEST(testLargeIntDiv, normalTest10)
{
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
} TEST(testLargeIntDiv, normalTest11)
{
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
} #endif

testcase.cpp

  large_int.h 大数类定义

 #ifndef _LARGE_INT_H
#define _LARGE_INT_H #include <iostream>
#include <vector>
#include <string> typedef unsigned int uint;
typedef unsigned long long uint64; #define MAX_VAL 1000000000 // 10亿
#define VAL_LEN 9
#define FORMAT_STR "%09d" class LargeInt
{
private:
std::vector<uint> _data; bool checkValStr(const std::string &valStr);
int compare(const LargeInt &li) const;
void arrange(); static uint estimateQuotient(const LargeInt &liA, const LargeInt &liB);
static uint getMaxCycle(const LargeInt &liA, const LargeInt &liB); public:
LargeInt();
LargeInt(uint val);
LargeInt(const std::string &valStr); // 四则运算符重载
LargeInt operator+(const LargeInt &li) const;
LargeInt operator-(const LargeInt &li) const;
LargeInt operator*(const LargeInt &li) const;
LargeInt operator/(const LargeInt &li) const; // 比较运算符重载
bool operator==(const LargeInt &li) const;
bool operator!=(const LargeInt &li) const;
bool operator<(const LargeInt &li) const;
bool operator>(const LargeInt &li) const;
bool operator<=(const LargeInt &li) const;
bool operator>=(const LargeInt &li) const; // 字符串格式化输出
std::string toString() const;
}; #endif

large_int.h

  large_int.cpp 大数类实现

 #include "large_int.h"

 using namespace std;

 #ifndef MIN
#define MIN(a,b) ((a) > (b) ? (b) : (a))
#endif #ifndef MAX
#define MAX(a,b) ((a) > (b) ? (a) : (b))
#endif inline bool isDigit(const char ch)
{
return ch >= '' && ch <= '';
} LargeInt::LargeInt() {} LargeInt::LargeInt(uint val)
{
this->_data.push_back(val % MAX_VAL);
if (val >= MAX_VAL)
this->_data.push_back(val / MAX_VAL);
} // 字符串合法性检查,只允许出现字符 0~9
bool LargeInt::checkValStr(const string &valStr)
{
for (auto it = valStr.begin(); it != valStr.end(); ++it)
{
if (!isDigit(*it)) return false;
}
return true;
} // 字符串构造
// valStr:十进制字符串
LargeInt::LargeInt(const string &valStr)
{
if (checkValStr(valStr))
{
int len = valStr.length();
// 按长度9截取子串
while (len >= VAL_LEN)
{
string s = valStr.substr(len - VAL_LEN, VAL_LEN);
this->_data.push_back(stoi(s));
len -= VAL_LEN;
}
// 残留子串
if (len > )
{
string s = valStr.substr(, len);
this->_data.push_back(stoi(s));
}
} this->arrange(); // 去零
} // 去零操作,避免整数队列的高位存在多余的零
void LargeInt::arrange()
{
int idx = this->_data.size(); // 注意,如果队列中全为0,要保留最低位的0
while (--idx >= )
{
if (this->_data[idx] > ) break; this->_data.pop_back();
}
} // 比较函数,0 相等,1 大于,-1 小于
int LargeInt::compare(const LargeInt &li) const
{
int len1 = this->_data.size();
int len2 = li._data.size(); // step1: 比较长度
if (len1 != len2)
return (len1 > len2) ? : -; // step2: 由高位到低位比较值
for (int idx = len1 - ; idx >= ; --idx)
{
if (this->_data[idx] == li._data[idx]) continue;
return this->_data[idx] > li._data[idx] ? : -;
} return ;
} bool LargeInt::operator==(const LargeInt &li) const
{
return compare(li) == ;
} bool LargeInt::operator!=(const LargeInt &li) const
{
return compare(li) != ;
} bool LargeInt::operator<(const LargeInt &li) const
{
return compare(li) < ;
} bool LargeInt::operator>(const LargeInt &li) const
{
return compare(li) > ;
} bool LargeInt::operator<=(const LargeInt &li) const
{
return compare(li) <= ;
} bool LargeInt::operator>=(const LargeInt &li) const
{
return compare(li) >= ;
} LargeInt LargeInt::operator+(const LargeInt &li) const
{
int len1 = this->_data.size();
int len2 = li._data.size(); int minLen = MIN(len1, len2);
int maxLen = MAX(len1, len2);
const LargeInt &extraLi = (len1 > len2) ? (*this) : li; uint value = ; // 和,不超过最大值的2倍
uint carry = ; // 进位
LargeInt retVal; for (int idx = ; idx < minLen; ++idx)
{
value = this->_data[idx] + li._data[idx] + carry; if (value >= MAX_VAL)
{
retVal._data.push_back(value - MAX_VAL);
carry = ;
}
else
{
retVal._data.push_back(value);
carry = ;
}
} for (int idx = minLen; idx < maxLen; ++idx)
{
value = extraLi._data[idx] + carry; if (value >= MAX_VAL)
{
retVal._data.push_back(value - MAX_VAL);
carry = ;
}
else
{
retVal._data.push_back(value);
carry = ;
}
} if (carry > )
retVal._data.push_back(carry); //retVal.arrange(); // 去0操作
return retVal;
} LargeInt LargeInt::operator-(const LargeInt &li) const
{
if (*this <= li)
{
return LargeInt();
} int len1 = this->_data.size();
int len2 = li._data.size(); uint value = ; // 差
uint carry = ; // 借位
LargeInt retVal; for (int idx = ; idx < len2; ++idx)
{
if (this->_data[idx] < li._data[idx] + carry) // 注意细节,carry放在右侧,避免出现差值为负数的情况
{
value = this->_data[idx] + MAX_VAL - carry - li._data[idx];
carry = ;
}
else
{
value = this->_data[idx] - carry - li._data[idx];
carry = ;
} retVal._data.push_back(value);
} for (int idx = len2; idx < len1; ++idx)
{
if (this->_data[idx] < carry)
{
value = this->_data[idx] + MAX_VAL - carry;
carry = ;
}
else
{
value = this->_data[idx] - carry;
carry = ;
}
retVal._data.push_back(value);
} retVal.arrange();
return retVal;
} LargeInt LargeInt::operator*(const LargeInt &li) const
{
int len1 = this->_data.size();
int len2 = li._data.size(); if (len1 < len2) return li.operator*(*this); // 优化,保证被乘数位数大于乘数 uint64 value; // 积
uint64 carry = ; // 进位
LargeInt retVal();
LargeInt mulTemp; for (int idx2 = ; idx2 < len2; ++idx2)
{
mulTemp._data.clear();
carry = ; // 补零
for (int tmpIdx = ; tmpIdx < idx2; ++tmpIdx)
mulTemp._data.push_back(); for (int idx1 = ; idx1 < len1; ++idx1)
{
value = (uint64)(li._data[idx2]) * (uint64)(this->_data[idx1]) + carry; mulTemp._data.push_back((uint)(value % MAX_VAL));
carry = value / MAX_VAL;
} if (carry)
mulTemp._data.push_back((uint)carry); retVal = retVal + mulTemp;
} return retVal;
} LargeInt LargeInt::operator/(const LargeInt &li) const
{
if (li._data.empty() || li == ) return LargeInt("");
if (*this < li) return LargeInt(); int len1 = this->_data.size();
int len2 = li._data.size(); uint value;
LargeInt retVal;
LargeInt divTemp; for (int idx = len1 - len2 + ; idx < len1; ++idx)
{
divTemp._data.push_back(this->_data[idx]);
} // len1 >= len2
for (int idx = len1 - len2; idx >= ; --idx)
{
divTemp._data.insert(divTemp._data.begin(), this->_data[idx]);
divTemp.arrange(); value = getMaxCycle(divTemp, li); // 商 divTemp = divTemp - li * value; // 余数 retVal._data.insert(retVal._data.begin(), value); // 除法是由高位向低位进行,所以插入位置在begin
} retVal.arrange();
return retVal;
} string LargeInt::toString() const
{
int len = this->_data.size();
int shift = ;
char *buff = new char[len * VAL_LEN + ]; if (len > )
shift += sprintf(buff + shift, "%d", this->_data[len - ]); for (int idx = len - ; idx >= ; --idx)
{
shift += sprintf(buff + shift, FORMAT_STR, this->_data[idx]);
}
buff[shift] = '\0'; string retStr(buff);
delete[] buff; return retStr;
} // 计算商值
uint LargeInt::getMaxCycle(const LargeInt &liA, const LargeInt &liB)
{
LargeInt tempA = liA;
const LargeInt& tempB = liB;
uint tempC;
uint res = ;
bool flag = true; while (tempA >= tempB)
{
tempC = estimateQuotient(tempA, tempB);
tempA = tempB * tempC - tempA; res = flag ? (res + tempC) : (res - tempC);
flag = !flag;
} // 微调
while (res > && liB * res > liA) res--; return res;
} // 估值
uint LargeInt::estimateQuotient(const LargeInt &liA, const LargeInt &liB)
{
int lenA = liA._data.size();
int lenB = liB._data.size();
uint64 valA, valB; if (lenA == lenB)
{
if (lenA > )
{
valA = (uint64)liA._data[lenA - ] * MAX_VAL + liA._data[lenA - ];
valB = (uint64)liB._data[lenB - ] * MAX_VAL + liB._data[lenB - ];
}
else
{
valA = (uint64)liA._data[lenA - ];
valB = (uint64)liB._data[lenB - ];
}
}
else
{
valA = (uint64)liA._data[lenA - ] * MAX_VAL + liA._data[lenA - ];
valB = (uint64)liB._data[lenB - ];
} return (uint)(valA / valB);
}

large_int.cpp

  performance_test.cpp 性能测试文件:

 #ifndef _DEBUG
#include "large_int.h" #include <time.h> #define ASSERT_TRUE(expr) if (!(expr)) printf("[err] func %s, line %d\n", __FILE__, __LINE__) void testAdd_10_10()
{
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
} void testAdd_10_5()
{
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") + LargeInt("") == LargeInt(""));
} void testSub_10_10()
{
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
} void testSub_10_5()
{
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") - LargeInt("") == LargeInt(""));
} void testMul_10_10()
{
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
} void testMul_10_5()
{
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") * LargeInt("") == LargeInt(""));
} void testDiv_10_10()
{
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
} void testDiv_10_5()
{
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
} void testDiv_10_2()
{
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
ASSERT_TRUE(LargeInt("") / LargeInt("") == LargeInt(""));
} #define FuncTest(name)\
do {\
clock_t sTime = clock();\
for (int loop = ; loop < CYCLE_NUM; loop++) \
{\
name();\
}\
clock_t eTime = clock();\
printf("%s time %d, avg %.4lf ms.\n", #name, eTime - sTime, (eTime - sTime) * 1.0 / CYCLE_NUM / TEST_NUM);\
} while() #define CYCLE_NUM 1000
#define TEST_NUM 100 void TESTCASES()
{
FuncTest(testAdd_10_10);
FuncTest(testAdd_10_5);
FuncTest(testSub_10_10);
FuncTest(testSub_10_5);
FuncTest(testMul_10_10);
FuncTest(testMul_10_5);
FuncTest(testDiv_10_10);
FuncTest(testDiv_10_5);
FuncTest(testDiv_10_2);
} #endif

performance_test.cpp

最新文章

  1. Chrome必备的扩展
  2. 除非Microsoft FTP 服务(FTPSVC)正在运行,否则无法启动FTP站点。服务目前已停止
  3. mysql高可用架构
  4. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q118-Q120)
  5. js获取div中的文本框数据
  6. 关于php的一些小知识
  7. soapUI参数
  8. Ubuntu14.04 Objective-C hello world
  9. 免费公测:RDS只读实例
  10. HDU 4279 - Number
  11. (转)深入探讨在集群环境中使用 EhCache 缓存系统
  12. 关于Eclipse中的一些基本知识
  13. logback 配置详解(一)(转)
  14. jQuery中的模拟操作
  15. OAuth2的学习小结
  16. Docker常见仓库Redis
  17. 关于ViewPager+Fragment中的坑
  18. OI养老专题02:约瑟夫问题求幸存者
  19. TIDB 备忘
  20. Linux期中架构

热门文章

  1. HDP2.0.6+hadoop2.2.0+eclipse(windows和linux下)调试环境搭建
  2. mongodb一些使用技巧或注意事项记录
  3. 【linux】启动apache遇到错误:httpd: Could not reliably determine the server&#39;s fully qualified domain name
  4. HighCharts之2D堆柱状图
  5. Unhandled event loop exception GC overhead limit exceeded
  6. Linux显示邮件状态等信息
  7. Django学习-23-ModelForm
  8. 【NFS】nfs安装调优
  9. 拥抱.NET Core系列:MemoryCache 缓存域
  10. ASP.NET WebForm 通过 PagedDataSource 实现 Repeater 的分页