浮点数 double & float & decimal

创建时间:
2018-08-04 23:47
最近更新:
2018-08-09 20:26

IEEE 754 二进制浮点数算术标准 (IEEE Standard for Floating-Point Arithmetic)

IEEE (Institute of Electrical and Electronics Engineers, 电气和电子工程师协会) 是一个国际性的电子技术与信息科学工程师的协会,是目前全球最大的非营利性专业技术学会。

该标准 是 20 世纪 80 年代以来最广泛使用的浮点数运算标准,为许多 CPU 与 浮点运算器 所采用。该标准规定了四种表示浮点数值的方式: 单精度 (32bit)、双精度 (64bit)、延伸单精度 (43bit 以上,很少使用) 与 延伸双精度 (79bit 以上,实务中通常采用 80bit)。

该标准的由来: 话说 Intel 计划给最早的 8086 增加浮点运算单元 (FPU) 时,他们请来了最好的数值分析专家来为 8087 FPU 设计浮点数格式,这位专家接着又请来了该领域的另外两位专家,这三个人 Kahn, coonan 与 Stone 设计了 Intel 的浮点格式,即 KCS 浮点数标准。这个标准实在太出色了,因此 IEEE 组织将 KCS 选作为 IEEE 浮点数格式的基础,即 IEEE 标准 754。

该标准 将 存储浮点数的比特序列 分为三个部分

  • 符号位 sign
  • 指数位 exponent (阶码)
  • 尾数位 mantissa (有效数字)

存储规定

对于 32bit 的浮点数,最高的 1bit 是 符号位S,接着的 08bit 是 指数位E,剩下的 23bit 是 尾数位M;
对于 64bit 的浮点数,最高的 1bit 是 符号位S,接着的 11bit 是 指数位E,剩下的 52bit 是 尾数位M。
与浮点数对应数学值计算方法为 V = (-1)^S * M * 2^E

double 与 float 在内存中的存储方式

float : 占用 1+08+23 = 32bit/4byte。从左向右/从高位到低位: 1bit (bit 31) 符号位、08bit (bit 23-30) 指数位、23bit (bit 0-22) 尾数位。
double: 占用 1+11+52 = 64bit/8byte。从左向右/从高位到低位: 1bit (bit 63) 符号位、11bit (bit 52-62) 指数位、52bit (bit 0-51) 尾数位。

注:

  • 2^52 = 4503599627370496,52bit 无符号整数的范围为 0~4503599627370495 (二进制为 52 个 1)
  • 2^53 = 9007199254740992,53bit 无符号整数的范围为 0~9007199254740991 (二进制为 53 个 1)

数值范围

float:  -3.4e-38  ~ 3.4e38
double: -1.7e-308 ~ 1.7e308

十进制精度位数

float:  6~7
double: 14~15

关于 指数位

为了便于比较两个浮点数的大小,指数部分采用无符号整数来存储,但是为了解决指数为负数的情况,该标准规定,指数位 的 存储值 为 实际值 和 指数偏移量 之和。
指数偏移量 的计算方法为 2^(e-1) - 1,其中的 e 为存储指数的比特的长度。即:
对于 08bit 的指数位,指数偏移量 为 2^(08-1) -1 == 2^07 -1 = 0128 -1 = 0127,此时,指数位 的存储值范围为 0~ 255,实际指数范围为 -0127~0128;
对于 11bit 的指数位,指数偏移量 为 2^(11-1) -1 == 2^10 -1 = 1024 -1 = 1023,此时,指数位 的存储值范围为 0~2047,实际指数范围为 -1023~1024;。
例如,如果 指数位 为 8bit,存储值 为 129,那么该 指数位 对应的 实际指数 为 129 - 127 = 2

关于 尾数位

由于 浮点数 采用 二进制科学计数法,其 整数部分 必为 1,因此忽略该位,所有的 尾数位 全部用来存储小数点右边的数据,以便 尾数位 能够存储更多的数据。这也被称作 "implied leading 1"。通过这种表示方法可以获得额外的 1bit 精度。

该标准中的一些特殊约定

  1. 当E = 0 且 M = 0时,表示 0。
  2. 当E = 255 且 M = 0时,表示无穷大,用符号位来确定是正无穷大还是负无穷大。
  3. 当E = 255 且 M != 0时,表示 NaN (Not a Number,不是一个数)。

float 与 double 的最大精确值

根据上面的约定,因为 指数位 中 255 用于特殊的约定,所以 指数位 的 最大值 是 254 (bin: 11111110)。那么对于可以精确表示的数来说,float 最大值是 01111111011111111111111111111111、double 最大值是 0111111111101111111111111111111111111111111111111111111111111111

规约

如果浮点数的指数部分的编码值是 0,尾数为 非零,那么这个浮点数将被称为 非规约形式的浮点数。该标准规定: 非规约形式的浮点数 的 指数偏移值 比 规约形式的浮点数 的 指数偏移值 大 1。例如,最小的规约形式的单精度浮点数的指数部分编码值为 1,指数的实际值为 -126; 而非规约的单精度浮点数的指数域编码值为 0,对应的指数实际值也是 -126 而不是 -127。非规约浮点数,在将其转换为数字时,是无需在尾数域的首部添加 1 的,即其尾数域取值范围为 0~1,因此所有的非规约浮点数比规约浮点数更接近 0。其转换过程如下: 0 00000000 11101110100000... -> 0 -126 11101110100000... -> 0 -126 0.111011101 -> 0.111011101*2^-126

舍入

在将数字转换为浮点数时,往往不能完全匹配,例如,将 0.1 转换为二进制格式时其对应的比特位数远远超个了 23bit。有多种方法可以用来运行舍入作业,实际上 该标准 列出了 4 种不同的方法:

  1. 舍入到最接近: 舍入到最接近,在一样接近的情况下偶数优先,这是默认的舍入方式。
  2. 朝+∞方向舍入: 将结果朝正无限大的方向舍入。
  3. 朝-∞方向舍入: 将结果朝负无限大的方向舍入。
  4. 朝0方向舍入: 将结果朝 0 的方向舍入。

float 与 double 存储格式 示例

Example - 求 1F 的 存储格式

0                                   符号位。
01111111                            指数位。实际值0 + 指数偏移量127 = 指数位 的 存储值 127。
00000000000000000000000             尾数位。23bit。
00111111100000000000000000000000    1F的实际存储。32bit。

Example - 求 20014999F 的 存储格式

首先,该数的二进制表示为 1001100010110011110010111
规格化后为 1.001100010110011110010111*2^24。
尾数为 001100010110011110010111。
此时 24 位,但 float 的尾数只有 23 位,四舍五入后为 00110001011001111001100。
幂为 24+127 二进制为 10010111。
其中 127 为 float 的偏移附加,double 的偏移附加为 1023。具体解释参照 IEEE 754 二进制浮点数算术标准。
加上符号位 0 (0表示正数,1表示负数)。
最后 内存中的表示为 0 10010111 00110001011001111001100。

Example - 求 123.625F 的 存储格式

  1. 将该数转换为 二进制科学计数法 表示: DEC(123.625) = BIN(1111011.101) = 1.111011101*2^6
  2. 确定 符号位: 0
  3. 计算 指数位: 6 + 127 = 133 = 1000 0101
  4. 计算 尾数位: 1.111011101 去除首部的 1,后面补 0 凑足 23bit 后变为 11101110100000000000000

最后三部分合并得到 01000010111101110100000000000000 即为该数的 存储格式。

Example - 求 12.5F 的 存储格式

首先,该数的二进制表示为 1100.1
求解 符号位: 因该数大于 0,故 符号位 为 0
求解 指数位: 小数点需要向左移动 3 位,因此 指数位 为 3 + 127 = 130130 的二进制表示为 10000010。此时 尾数位 由 1100.1 变成 1.1001
求解 尾数位: 尾数位 需要去掉最高位隐含的 1,则 尾数位 由 1.1001 变为 1001。后面补 0 凑足 23bit 后变为 10010000000000000000000
最后三部分合并得到 01000001010010000000000000000000 即为该数的 存储格式。

Example - 求 12.5D 的 存储格式

首先,该数的二进制表示为 1100.1
求解 符号位: 因该数大于 0,故 符号位 为 0
求解 指数位: 小数点需要向左移动 3 位,因此 指数位 为 3 + 1023 = 10261026 的二进制表示为 010000000010,因指数位为 11bit,故去掉最高位的 0 之后变为 10000000010。此时 尾数位 由 1100.1 变成 1.1001
求解 尾数位: 尾数位 需要去掉最高位隐含的 1,则 尾数位 由 1.1001 变为 1001。后面补 0 凑足 52bit 后变为 1001000000000000000000000000000000000000000000000000
最后三部分合并得到 0100000000101001000000000000000000000000000000000000000000000000 即为该数的 存储格式。

float 与 double 存储格式 测试记录

[TestMethod]
public void ToBin_Double()
{
    var data = new[] {
        new { Bin = "1100000000001000000000000000000000000000000000000000000000000000", Dbl = -3D },
        new { Bin = "1100000000000000000000000000000000000000000000000000000000000000", Dbl = -2D },
        new { Bin = "1011111111110000000000000000000000000000000000000000000000000000", Dbl = -1D },
        new { Bin = "0000000000000000000000000000000000000000000000000000000000000000", Dbl = 0D },
        new { Bin = "0011111111110000000000000000000000000000000000000000000000000000", Dbl = 1D },
        new { Bin = "0100000000000000000000000000000000000000000000000000000000000000", Dbl = 2D },
        new { Bin = "0100000000001000000000000000000000000000000000000000000000000000", Dbl = 3D },

        new { Bin = "1100001100101111111111111111111111111111111111111111111111111110", Dbl = -4503599627370495D }, //negative
        new { Bin = "0100001100101111111111111111111111111111111111111111111111111000", Dbl = 4503599627370492D }, //-3
        new { Bin = "0100001100101111111111111111111111111111111111111111111111111010", Dbl = 4503599627370493D }, //-2
        new { Bin = "0100001100101111111111111111111111111111111111111111111111111100", Dbl = 4503599627370494D }, //-1
        new { Bin = "0100001100101111111111111111111111111111111111111111111111111110", Dbl = 4503599627370495D }, //positive
        new { Bin = "0100001100110000000000000000000000000000000000000000000000000000", Dbl = 4503599627370496D }, //+1
        new { Bin = "0100001100110000000000000000000000000000000000000000000000000001", Dbl = 4503599627370497D }, //+2
        new { Bin = "0100001100110000000000000000000000000000000000000000000000000010", Dbl = 4503599627370498D }, //+3

        new { Bin = "1100001100111111111111111111111111111111111111111111111111111111", Dbl = -9007199254740991D }, //negative
        new { Bin = "0100001100111111111111111111111111111111111111111111111111111100", Dbl = 9007199254740988D }, //-3
        new { Bin = "0100001100111111111111111111111111111111111111111111111111111101", Dbl = 9007199254740989D }, //-2
        new { Bin = "0100001100111111111111111111111111111111111111111111111111111110", Dbl = 9007199254740990D }, //-1
        new { Bin = "0100001100111111111111111111111111111111111111111111111111111111", Dbl = 9007199254740991D }, //positive
        new { Bin = "0100001101000000000000000000000000000000000000000000000000000000", Dbl = 9007199254740992D }, //+1
        new { Bin = "0100001101000000000000000000000000000000000000000000000000000000", Dbl = 9007199254740993D }, //+2
        new { Bin = "0100001101000000000000000000000000000000000000000000000000000001", Dbl = 9007199254740994D }, //+3
    };
    var sb = new StringBuilder();
    foreach(var datum in data) {
        string bin = Converter.ToBin(datum.Dbl);
        Assert.IsTrue(bin == datum.Bin);
        sb.AppendLine(bin);
    }
    string print = sb.ToString();
}

decimal

decimal 占用 128bit/16byte。
decimal 的精度为 28 位,比 double 大,但所能表示的数据范围却比 double 小。
从 double 到 decimal 的类型转换是收缩转换,有可能出现问题。
只有从整形到 decimal 的转换才是扩大转换。
decimal 不是 .NET 中的基础数据类型,计算时性能不如基础类型。

MSDN

以下内容摘自 System.Double 结构:

Represents a double-precision floating-point number (表示一个双精度浮点数).

Double 值类型表示一个值介于 -1.79769313486232e308 和 +1.79769313486232e308 之间的双精度 64 位数字,以及 +0 或 -0、PositiveInfinity、NegativeInfinity 和非数字 (NaN)。

Double 符合二进制浮点算法的 IEC 60559:1989 (IEEE 754) 标准。

在执行二进制运算时,如果其中一个操作数为 Double,那么另一个操作数必须是整数类型或浮点类型 (Double 或 Single)。在执行运算之前,如果另一个操作数不是 Double,应将其转换为 Double,并且至少要使用 Double 的范围和精度来执行运算。如果此运算得到一个数字结果,则结果的类型为 Double。

浮点运算符 (包括赋值运算符) 不会引发异常。在异常情况下,浮点运算的结果为零、无穷或 NaN,如下所述:...

浮点值和精度损失: 请记住,浮点数只能近似于十进制数字,浮点数的精度决定了浮点数近似于十进制数字的精确程度。默认情况下,Double 值的精度是 15 个十进制位,但内部维护的最大精度是 17 位。

Resource

  1. double 浮点型数据的换算过程和推算原理
  2. 浮点数 精度丢失问题 - 因为 小数的二进制表示有时是不可能精确的
  3. C# 中 double 类型的精度问题
  4. C# 浮点数的表示和基本运算 - 作者用 C#
  5. C# 中浮点数的比较
  6. 知乎网摘 - 1. 我以前遇到个领导,它就这么说,说 double 比 int 表达的范围大,还能表达小数,所以让我们的代码中不允许出现 double 之外的类型,一个 double 就够了,又大又精。 2. 如果为了不报错将所有数值写作 double,它便隐含了 "允许并且不在乎 代码中含有自己也不清晰的代码" 的想法与可能。 3. Lua 语言中所有数值都是 double,没有整型。

字面量后缀

int     i = 123;
uint    i = 123U;
long    i = 123L;
ulong   i = 123UL;

double  d = 1.0;
double  d = 1.0D;
float   f = 1.0F;
decimal m = 1.0M;

注: 后缀大小写均可。2018-08-08 测试时发现 在 Visual Studio 2013 中 形如 var a = 123l; 的语句 会提示 "l" 后缀容易与数字 "1" 混淆; 为清楚起见,请使用 "L"

常用格式化

Console.WriteLine("{0:0.00}", d);
string str = d.ToString("0.00"); //无论 d 是不是整数,都将加上 2 位小数。
string str = d.ToString(".##"); //最多显示 2 位小数。

string str = d.ToString("G50");

浮点数的精度损失的问题

原理: double 仅仅在存储浮点数时会存在不精确问题,这个精度问题因十进制小数与二进制小数转化造成,但存储 2^52 范围内的纯整数不存在精度问题。

在精确计算中使用浮点数是非常危险的,尽管 C# 在浮点数运算时采取了很多措施使得浮点数运算的结果看起来是非常正常的。但实际上如果不清楚浮点数的特性而贸然使用的话,将造成非常严重的隐患。这就是 浮点数的精度损失的问题。

最重要的是,在精度损失的时候,不会报告任何的错误,也不会有任何的异常产生。

所有的浮点型都存在精度损失的可能性。不论它精度有多高,精度损失依然存在。

浮点数的精度损失可能在很多地方出现,例如:
d * g / g 不一定等于 d
d / g * g 不一定等于 d

以下测试代码展示了 double 的精度损失:

double d = 10000000000000000000000d;
d += 1;
Console.WriteLine("{0:G50}", d); //输出: 1000000000000000000000000

decimal 也是浮点型,也存在精度损失。例如:

decimal m = 10000000000000000000000000000m;
m += 0.1m;
Console.WriteLine("{0:G50}", m);

根据 IEEE 754 推导 +1 无误差的最大浮点数

最大尾数 = 52bit尾数位 + 1bit隐含位 = 53bit = BIN(11111111111111111111111111111111111111111111111111111) = DEC(9007199254740991)
对应指数 = 52实际值 + 1023指数偏移量 = 1075存储值 = BIN(10000110011)
符号位 = BIN(0)
推导结果 = BIN(0 10000110011 1111111111111111111111111111111111111111111111111111) = BIN(0100001100111111111111111111111111111111111111111111111111111111)

相关单元测试

        [TestMethod]
        public void Double精度测试_小于9007199254740991则不会出现重复()
        {
            int count = 1000;
            double d0 = 9007199254740991;
            var dic = new Dictionary<string, string>();
            for(uint i = 0; i < count; i++) {
                double d1 = d0 - i;
                string key = d1.ToString("G50");
                string val = Converter.ToBin(d1);
                Assert.IsFalse(dic.ContainsKey(key));
                Assert.IsFalse(dic.ContainsKey(val));
                dic[key] = val;
            }
            var sb = new StringBuilder();
            foreach(var item in dic) {
                sb.Append(item.Key).Append('\t').Append(item.Value).AppendLine();
            }
            string print = sb.ToString();
            #region print 的值:
            /*
9007199254740991	0100001100111111111111111111111111111111111111111111111111111111
9007199254740990	0100001100111111111111111111111111111111111111111111111111111110
9007199254740989	0100001100111111111111111111111111111111111111111111111111111101
9007199254740988	0100001100111111111111111111111111111111111111111111111111111100
9007199254740987	0100001100111111111111111111111111111111111111111111111111111011
9007199254740986	0100001100111111111111111111111111111111111111111111111111111010
9007199254740985	0100001100111111111111111111111111111111111111111111111111111001
9007199254740984	0100001100111111111111111111111111111111111111111111111111111000
9007199254740983	0100001100111111111111111111111111111111111111111111111111110111
9007199254740982	0100001100111111111111111111111111111111111111111111111111110110
9007199254740981	0100001100111111111111111111111111111111111111111111111111110101
9007199254740980	0100001100111111111111111111111111111111111111111111111111110100
9007199254740979	0100001100111111111111111111111111111111111111111111111111110011
9007199254740978	0100001100111111111111111111111111111111111111111111111111110010
9007199254740977	0100001100111111111111111111111111111111111111111111111111110001
9007199254740976	0100001100111111111111111111111111111111111111111111111111110000
9007199254740975	0100001100111111111111111111111111111111111111111111111111101111
9007199254740974	0100001100111111111111111111111111111111111111111111111111101110
9007199254740973	0100001100111111111111111111111111111111111111111111111111101101
9007199254740972	0100001100111111111111111111111111111111111111111111111111101100
9007199254740971	0100001100111111111111111111111111111111111111111111111111101011
9007199254740970	0100001100111111111111111111111111111111111111111111111111101010
9007199254740969	0100001100111111111111111111111111111111111111111111111111101001
9007199254740968	0100001100111111111111111111111111111111111111111111111111101000
9007199254740967	0100001100111111111111111111111111111111111111111111111111100111
9007199254740966	0100001100111111111111111111111111111111111111111111111111100110
9007199254740965	0100001100111111111111111111111111111111111111111111111111100101
9007199254740964	0100001100111111111111111111111111111111111111111111111111100100
9007199254740963	0100001100111111111111111111111111111111111111111111111111100011
9007199254740962	0100001100111111111111111111111111111111111111111111111111100010
9007199254740961	0100001100111111111111111111111111111111111111111111111111100001
9007199254740960	0100001100111111111111111111111111111111111111111111111111100000
9007199254740959	0100001100111111111111111111111111111111111111111111111111011111
9007199254740958	0100001100111111111111111111111111111111111111111111111111011110
9007199254740957	0100001100111111111111111111111111111111111111111111111111011101
9007199254740956	0100001100111111111111111111111111111111111111111111111111011100
9007199254740955	0100001100111111111111111111111111111111111111111111111111011011
9007199254740954	0100001100111111111111111111111111111111111111111111111111011010
9007199254740953	0100001100111111111111111111111111111111111111111111111111011001
9007199254740952	0100001100111111111111111111111111111111111111111111111111011000
9007199254740951	0100001100111111111111111111111111111111111111111111111111010111
9007199254740950	0100001100111111111111111111111111111111111111111111111111010110
9007199254740949	0100001100111111111111111111111111111111111111111111111111010101
9007199254740948	0100001100111111111111111111111111111111111111111111111111010100
9007199254740947	0100001100111111111111111111111111111111111111111111111111010011
9007199254740946	0100001100111111111111111111111111111111111111111111111111010010
9007199254740945	0100001100111111111111111111111111111111111111111111111111010001
9007199254740944	0100001100111111111111111111111111111111111111111111111111010000
9007199254740943	0100001100111111111111111111111111111111111111111111111111001111
9007199254740942	0100001100111111111111111111111111111111111111111111111111001110
9007199254740941	0100001100111111111111111111111111111111111111111111111111001101
9007199254740940	0100001100111111111111111111111111111111111111111111111111001100
9007199254740939	0100001100111111111111111111111111111111111111111111111111001011
9007199254740938	0100001100111111111111111111111111111111111111111111111111001010
9007199254740937	0100001100111111111111111111111111111111111111111111111111001001
9007199254740936	0100001100111111111111111111111111111111111111111111111111001000
9007199254740935	0100001100111111111111111111111111111111111111111111111111000111
9007199254740934	0100001100111111111111111111111111111111111111111111111111000110
9007199254740933	0100001100111111111111111111111111111111111111111111111111000101
9007199254740932	0100001100111111111111111111111111111111111111111111111111000100
9007199254740931	0100001100111111111111111111111111111111111111111111111111000011
9007199254740930	0100001100111111111111111111111111111111111111111111111111000010
9007199254740929	0100001100111111111111111111111111111111111111111111111111000001
9007199254740928	0100001100111111111111111111111111111111111111111111111111000000
9007199254740927	0100001100111111111111111111111111111111111111111111111110111111
9007199254740926	0100001100111111111111111111111111111111111111111111111110111110
9007199254740925	0100001100111111111111111111111111111111111111111111111110111101
9007199254740924	0100001100111111111111111111111111111111111111111111111110111100
9007199254740923	0100001100111111111111111111111111111111111111111111111110111011
9007199254740922	0100001100111111111111111111111111111111111111111111111110111010
9007199254740921	0100001100111111111111111111111111111111111111111111111110111001
9007199254740920	0100001100111111111111111111111111111111111111111111111110111000
9007199254740919	0100001100111111111111111111111111111111111111111111111110110111
9007199254740918	0100001100111111111111111111111111111111111111111111111110110110
9007199254740917	0100001100111111111111111111111111111111111111111111111110110101
9007199254740916	0100001100111111111111111111111111111111111111111111111110110100
9007199254740915	0100001100111111111111111111111111111111111111111111111110110011
9007199254740914	0100001100111111111111111111111111111111111111111111111110110010
9007199254740913	0100001100111111111111111111111111111111111111111111111110110001
9007199254740912	0100001100111111111111111111111111111111111111111111111110110000
9007199254740911	0100001100111111111111111111111111111111111111111111111110101111
9007199254740910	0100001100111111111111111111111111111111111111111111111110101110
9007199254740909	0100001100111111111111111111111111111111111111111111111110101101
9007199254740908	0100001100111111111111111111111111111111111111111111111110101100
9007199254740907	0100001100111111111111111111111111111111111111111111111110101011
9007199254740906	0100001100111111111111111111111111111111111111111111111110101010
9007199254740905	0100001100111111111111111111111111111111111111111111111110101001
9007199254740904	0100001100111111111111111111111111111111111111111111111110101000
9007199254740903	0100001100111111111111111111111111111111111111111111111110100111
9007199254740902	0100001100111111111111111111111111111111111111111111111110100110
9007199254740901	0100001100111111111111111111111111111111111111111111111110100101
9007199254740900	0100001100111111111111111111111111111111111111111111111110100100
9007199254740899	0100001100111111111111111111111111111111111111111111111110100011
9007199254740898	0100001100111111111111111111111111111111111111111111111110100010
9007199254740897	0100001100111111111111111111111111111111111111111111111110100001
9007199254740896	0100001100111111111111111111111111111111111111111111111110100000
9007199254740895	0100001100111111111111111111111111111111111111111111111110011111
9007199254740894	0100001100111111111111111111111111111111111111111111111110011110
9007199254740893	0100001100111111111111111111111111111111111111111111111110011101
9007199254740892	0100001100111111111111111111111111111111111111111111111110011100
9007199254740891	0100001100111111111111111111111111111111111111111111111110011011
9007199254740890	0100001100111111111111111111111111111111111111111111111110011010
9007199254740889	0100001100111111111111111111111111111111111111111111111110011001
9007199254740888	0100001100111111111111111111111111111111111111111111111110011000
9007199254740887	0100001100111111111111111111111111111111111111111111111110010111
9007199254740886	0100001100111111111111111111111111111111111111111111111110010110
9007199254740885	0100001100111111111111111111111111111111111111111111111110010101
9007199254740884	0100001100111111111111111111111111111111111111111111111110010100
9007199254740883	0100001100111111111111111111111111111111111111111111111110010011
9007199254740882	0100001100111111111111111111111111111111111111111111111110010010
9007199254740881	0100001100111111111111111111111111111111111111111111111110010001
9007199254740880	0100001100111111111111111111111111111111111111111111111110010000
9007199254740879	0100001100111111111111111111111111111111111111111111111110001111
9007199254740878	0100001100111111111111111111111111111111111111111111111110001110
9007199254740877	0100001100111111111111111111111111111111111111111111111110001101
9007199254740876	0100001100111111111111111111111111111111111111111111111110001100
9007199254740875	0100001100111111111111111111111111111111111111111111111110001011
9007199254740874	0100001100111111111111111111111111111111111111111111111110001010
9007199254740873	0100001100111111111111111111111111111111111111111111111110001001
9007199254740872	0100001100111111111111111111111111111111111111111111111110001000
9007199254740871	0100001100111111111111111111111111111111111111111111111110000111
9007199254740870	0100001100111111111111111111111111111111111111111111111110000110
9007199254740869	0100001100111111111111111111111111111111111111111111111110000101
9007199254740868	0100001100111111111111111111111111111111111111111111111110000100
9007199254740867	0100001100111111111111111111111111111111111111111111111110000011
9007199254740866	0100001100111111111111111111111111111111111111111111111110000010
9007199254740865	0100001100111111111111111111111111111111111111111111111110000001
9007199254740864	0100001100111111111111111111111111111111111111111111111110000000
9007199254740863	0100001100111111111111111111111111111111111111111111111101111111
9007199254740862	0100001100111111111111111111111111111111111111111111111101111110
9007199254740861	0100001100111111111111111111111111111111111111111111111101111101
9007199254740860	0100001100111111111111111111111111111111111111111111111101111100
9007199254740859	0100001100111111111111111111111111111111111111111111111101111011
9007199254740858	0100001100111111111111111111111111111111111111111111111101111010
9007199254740857	0100001100111111111111111111111111111111111111111111111101111001
9007199254740856	0100001100111111111111111111111111111111111111111111111101111000
9007199254740855	0100001100111111111111111111111111111111111111111111111101110111
9007199254740854	0100001100111111111111111111111111111111111111111111111101110110
9007199254740853	0100001100111111111111111111111111111111111111111111111101110101
9007199254740852	0100001100111111111111111111111111111111111111111111111101110100
9007199254740851	0100001100111111111111111111111111111111111111111111111101110011
9007199254740850	0100001100111111111111111111111111111111111111111111111101110010
9007199254740849	0100001100111111111111111111111111111111111111111111111101110001
9007199254740848	0100001100111111111111111111111111111111111111111111111101110000
9007199254740847	0100001100111111111111111111111111111111111111111111111101101111
9007199254740846	0100001100111111111111111111111111111111111111111111111101101110
9007199254740845	0100001100111111111111111111111111111111111111111111111101101101
9007199254740844	0100001100111111111111111111111111111111111111111111111101101100
9007199254740843	0100001100111111111111111111111111111111111111111111111101101011
9007199254740842	0100001100111111111111111111111111111111111111111111111101101010
9007199254740841	0100001100111111111111111111111111111111111111111111111101101001
9007199254740840	0100001100111111111111111111111111111111111111111111111101101000
9007199254740839	0100001100111111111111111111111111111111111111111111111101100111
9007199254740838	0100001100111111111111111111111111111111111111111111111101100110
9007199254740837	0100001100111111111111111111111111111111111111111111111101100101
9007199254740836	0100001100111111111111111111111111111111111111111111111101100100
9007199254740835	0100001100111111111111111111111111111111111111111111111101100011
9007199254740834	0100001100111111111111111111111111111111111111111111111101100010
9007199254740833	0100001100111111111111111111111111111111111111111111111101100001
9007199254740832	0100001100111111111111111111111111111111111111111111111101100000
9007199254740831	0100001100111111111111111111111111111111111111111111111101011111
9007199254740830	0100001100111111111111111111111111111111111111111111111101011110
9007199254740829	0100001100111111111111111111111111111111111111111111111101011101
9007199254740828	0100001100111111111111111111111111111111111111111111111101011100
9007199254740827	0100001100111111111111111111111111111111111111111111111101011011
9007199254740826	0100001100111111111111111111111111111111111111111111111101011010
9007199254740825	0100001100111111111111111111111111111111111111111111111101011001
9007199254740824	0100001100111111111111111111111111111111111111111111111101011000
9007199254740823	0100001100111111111111111111111111111111111111111111111101010111
9007199254740822	0100001100111111111111111111111111111111111111111111111101010110
9007199254740821	0100001100111111111111111111111111111111111111111111111101010101
9007199254740820	0100001100111111111111111111111111111111111111111111111101010100
9007199254740819	0100001100111111111111111111111111111111111111111111111101010011
9007199254740818	0100001100111111111111111111111111111111111111111111111101010010
9007199254740817	0100001100111111111111111111111111111111111111111111111101010001
9007199254740816	0100001100111111111111111111111111111111111111111111111101010000
9007199254740815	0100001100111111111111111111111111111111111111111111111101001111
9007199254740814	0100001100111111111111111111111111111111111111111111111101001110
9007199254740813	0100001100111111111111111111111111111111111111111111111101001101
9007199254740812	0100001100111111111111111111111111111111111111111111111101001100
9007199254740811	0100001100111111111111111111111111111111111111111111111101001011
9007199254740810	0100001100111111111111111111111111111111111111111111111101001010
9007199254740809	0100001100111111111111111111111111111111111111111111111101001001
9007199254740808	0100001100111111111111111111111111111111111111111111111101001000
9007199254740807	0100001100111111111111111111111111111111111111111111111101000111
9007199254740806	0100001100111111111111111111111111111111111111111111111101000110
9007199254740805	0100001100111111111111111111111111111111111111111111111101000101
9007199254740804	0100001100111111111111111111111111111111111111111111111101000100
9007199254740803	0100001100111111111111111111111111111111111111111111111101000011
9007199254740802	0100001100111111111111111111111111111111111111111111111101000010
9007199254740801	0100001100111111111111111111111111111111111111111111111101000001
9007199254740800	0100001100111111111111111111111111111111111111111111111101000000
9007199254740799	0100001100111111111111111111111111111111111111111111111100111111
9007199254740798	0100001100111111111111111111111111111111111111111111111100111110
9007199254740797	0100001100111111111111111111111111111111111111111111111100111101
9007199254740796	0100001100111111111111111111111111111111111111111111111100111100
9007199254740795	0100001100111111111111111111111111111111111111111111111100111011
9007199254740794	0100001100111111111111111111111111111111111111111111111100111010
9007199254740793	0100001100111111111111111111111111111111111111111111111100111001
9007199254740792	0100001100111111111111111111111111111111111111111111111100111000
9007199254740791	0100001100111111111111111111111111111111111111111111111100110111
9007199254740790	0100001100111111111111111111111111111111111111111111111100110110
9007199254740789	0100001100111111111111111111111111111111111111111111111100110101
9007199254740788	0100001100111111111111111111111111111111111111111111111100110100
9007199254740787	0100001100111111111111111111111111111111111111111111111100110011
9007199254740786	0100001100111111111111111111111111111111111111111111111100110010
9007199254740785	0100001100111111111111111111111111111111111111111111111100110001
9007199254740784	0100001100111111111111111111111111111111111111111111111100110000
9007199254740783	0100001100111111111111111111111111111111111111111111111100101111
9007199254740782	0100001100111111111111111111111111111111111111111111111100101110
9007199254740781	0100001100111111111111111111111111111111111111111111111100101101
9007199254740780	0100001100111111111111111111111111111111111111111111111100101100
9007199254740779	0100001100111111111111111111111111111111111111111111111100101011
9007199254740778	0100001100111111111111111111111111111111111111111111111100101010
9007199254740777	0100001100111111111111111111111111111111111111111111111100101001
9007199254740776	0100001100111111111111111111111111111111111111111111111100101000
9007199254740775	0100001100111111111111111111111111111111111111111111111100100111
9007199254740774	0100001100111111111111111111111111111111111111111111111100100110
9007199254740773	0100001100111111111111111111111111111111111111111111111100100101
9007199254740772	0100001100111111111111111111111111111111111111111111111100100100
9007199254740771	0100001100111111111111111111111111111111111111111111111100100011
9007199254740770	0100001100111111111111111111111111111111111111111111111100100010
9007199254740769	0100001100111111111111111111111111111111111111111111111100100001
9007199254740768	0100001100111111111111111111111111111111111111111111111100100000
9007199254740767	0100001100111111111111111111111111111111111111111111111100011111
9007199254740766	0100001100111111111111111111111111111111111111111111111100011110
9007199254740765	0100001100111111111111111111111111111111111111111111111100011101
9007199254740764	0100001100111111111111111111111111111111111111111111111100011100
9007199254740763	0100001100111111111111111111111111111111111111111111111100011011
9007199254740762	0100001100111111111111111111111111111111111111111111111100011010
9007199254740761	0100001100111111111111111111111111111111111111111111111100011001
9007199254740760	0100001100111111111111111111111111111111111111111111111100011000
9007199254740759	0100001100111111111111111111111111111111111111111111111100010111
9007199254740758	0100001100111111111111111111111111111111111111111111111100010110
9007199254740757	0100001100111111111111111111111111111111111111111111111100010101
9007199254740756	0100001100111111111111111111111111111111111111111111111100010100
9007199254740755	0100001100111111111111111111111111111111111111111111111100010011
9007199254740754	0100001100111111111111111111111111111111111111111111111100010010
9007199254740753	0100001100111111111111111111111111111111111111111111111100010001
9007199254740752	0100001100111111111111111111111111111111111111111111111100010000
9007199254740751	0100001100111111111111111111111111111111111111111111111100001111
9007199254740750	0100001100111111111111111111111111111111111111111111111100001110
9007199254740749	0100001100111111111111111111111111111111111111111111111100001101
9007199254740748	0100001100111111111111111111111111111111111111111111111100001100
9007199254740747	0100001100111111111111111111111111111111111111111111111100001011
9007199254740746	0100001100111111111111111111111111111111111111111111111100001010
9007199254740745	0100001100111111111111111111111111111111111111111111111100001001
9007199254740744	0100001100111111111111111111111111111111111111111111111100001000
9007199254740743	0100001100111111111111111111111111111111111111111111111100000111
9007199254740742	0100001100111111111111111111111111111111111111111111111100000110
9007199254740741	0100001100111111111111111111111111111111111111111111111100000101
9007199254740740	0100001100111111111111111111111111111111111111111111111100000100
9007199254740739	0100001100111111111111111111111111111111111111111111111100000011
9007199254740738	0100001100111111111111111111111111111111111111111111111100000010
9007199254740737	0100001100111111111111111111111111111111111111111111111100000001
9007199254740736	0100001100111111111111111111111111111111111111111111111100000000
9007199254740735	0100001100111111111111111111111111111111111111111111111011111111
9007199254740734	0100001100111111111111111111111111111111111111111111111011111110
9007199254740733	0100001100111111111111111111111111111111111111111111111011111101
9007199254740732	0100001100111111111111111111111111111111111111111111111011111100
9007199254740731	0100001100111111111111111111111111111111111111111111111011111011
9007199254740730	0100001100111111111111111111111111111111111111111111111011111010
9007199254740729	0100001100111111111111111111111111111111111111111111111011111001
9007199254740728	0100001100111111111111111111111111111111111111111111111011111000
9007199254740727	0100001100111111111111111111111111111111111111111111111011110111
9007199254740726	0100001100111111111111111111111111111111111111111111111011110110
9007199254740725	0100001100111111111111111111111111111111111111111111111011110101
9007199254740724	0100001100111111111111111111111111111111111111111111111011110100
9007199254740723	0100001100111111111111111111111111111111111111111111111011110011
9007199254740722	0100001100111111111111111111111111111111111111111111111011110010
9007199254740721	0100001100111111111111111111111111111111111111111111111011110001
9007199254740720	0100001100111111111111111111111111111111111111111111111011110000
9007199254740719	0100001100111111111111111111111111111111111111111111111011101111
9007199254740718	0100001100111111111111111111111111111111111111111111111011101110
9007199254740717	0100001100111111111111111111111111111111111111111111111011101101
9007199254740716	0100001100111111111111111111111111111111111111111111111011101100
9007199254740715	0100001100111111111111111111111111111111111111111111111011101011
9007199254740714	0100001100111111111111111111111111111111111111111111111011101010
9007199254740713	0100001100111111111111111111111111111111111111111111111011101001
9007199254740712	0100001100111111111111111111111111111111111111111111111011101000
9007199254740711	0100001100111111111111111111111111111111111111111111111011100111
9007199254740710	0100001100111111111111111111111111111111111111111111111011100110
9007199254740709	0100001100111111111111111111111111111111111111111111111011100101
9007199254740708	0100001100111111111111111111111111111111111111111111111011100100
9007199254740707	0100001100111111111111111111111111111111111111111111111011100011
9007199254740706	0100001100111111111111111111111111111111111111111111111011100010
9007199254740705	0100001100111111111111111111111111111111111111111111111011100001
9007199254740704	0100001100111111111111111111111111111111111111111111111011100000
9007199254740703	0100001100111111111111111111111111111111111111111111111011011111
9007199254740702	0100001100111111111111111111111111111111111111111111111011011110
9007199254740701	0100001100111111111111111111111111111111111111111111111011011101
9007199254740700	0100001100111111111111111111111111111111111111111111111011011100
9007199254740699	0100001100111111111111111111111111111111111111111111111011011011
9007199254740698	0100001100111111111111111111111111111111111111111111111011011010
9007199254740697	0100001100111111111111111111111111111111111111111111111011011001
9007199254740696	0100001100111111111111111111111111111111111111111111111011011000
9007199254740695	0100001100111111111111111111111111111111111111111111111011010111
9007199254740694	0100001100111111111111111111111111111111111111111111111011010110
9007199254740693	0100001100111111111111111111111111111111111111111111111011010101
9007199254740692	0100001100111111111111111111111111111111111111111111111011010100
9007199254740691	0100001100111111111111111111111111111111111111111111111011010011
9007199254740690	0100001100111111111111111111111111111111111111111111111011010010
9007199254740689	0100001100111111111111111111111111111111111111111111111011010001
9007199254740688	0100001100111111111111111111111111111111111111111111111011010000
9007199254740687	0100001100111111111111111111111111111111111111111111111011001111
9007199254740686	0100001100111111111111111111111111111111111111111111111011001110
9007199254740685	0100001100111111111111111111111111111111111111111111111011001101
9007199254740684	0100001100111111111111111111111111111111111111111111111011001100
9007199254740683	0100001100111111111111111111111111111111111111111111111011001011
9007199254740682	0100001100111111111111111111111111111111111111111111111011001010
9007199254740681	0100001100111111111111111111111111111111111111111111111011001001
9007199254740680	0100001100111111111111111111111111111111111111111111111011001000
9007199254740679	0100001100111111111111111111111111111111111111111111111011000111
9007199254740678	0100001100111111111111111111111111111111111111111111111011000110
9007199254740677	0100001100111111111111111111111111111111111111111111111011000101
9007199254740676	0100001100111111111111111111111111111111111111111111111011000100
9007199254740675	0100001100111111111111111111111111111111111111111111111011000011
9007199254740674	0100001100111111111111111111111111111111111111111111111011000010
9007199254740673	0100001100111111111111111111111111111111111111111111111011000001
9007199254740672	0100001100111111111111111111111111111111111111111111111011000000
9007199254740671	0100001100111111111111111111111111111111111111111111111010111111
9007199254740670	0100001100111111111111111111111111111111111111111111111010111110
9007199254740669	0100001100111111111111111111111111111111111111111111111010111101
9007199254740668	0100001100111111111111111111111111111111111111111111111010111100
9007199254740667	0100001100111111111111111111111111111111111111111111111010111011
9007199254740666	0100001100111111111111111111111111111111111111111111111010111010
9007199254740665	0100001100111111111111111111111111111111111111111111111010111001
9007199254740664	0100001100111111111111111111111111111111111111111111111010111000
9007199254740663	0100001100111111111111111111111111111111111111111111111010110111
9007199254740662	0100001100111111111111111111111111111111111111111111111010110110
9007199254740661	0100001100111111111111111111111111111111111111111111111010110101
9007199254740660	0100001100111111111111111111111111111111111111111111111010110100
9007199254740659	0100001100111111111111111111111111111111111111111111111010110011
9007199254740658	0100001100111111111111111111111111111111111111111111111010110010
9007199254740657	0100001100111111111111111111111111111111111111111111111010110001
9007199254740656	0100001100111111111111111111111111111111111111111111111010110000
9007199254740655	0100001100111111111111111111111111111111111111111111111010101111
9007199254740654	0100001100111111111111111111111111111111111111111111111010101110
9007199254740653	0100001100111111111111111111111111111111111111111111111010101101
9007199254740652	0100001100111111111111111111111111111111111111111111111010101100
9007199254740651	0100001100111111111111111111111111111111111111111111111010101011
9007199254740650	0100001100111111111111111111111111111111111111111111111010101010
9007199254740649	0100001100111111111111111111111111111111111111111111111010101001
9007199254740648	0100001100111111111111111111111111111111111111111111111010101000
9007199254740647	0100001100111111111111111111111111111111111111111111111010100111
9007199254740646	0100001100111111111111111111111111111111111111111111111010100110
9007199254740645	0100001100111111111111111111111111111111111111111111111010100101
9007199254740644	0100001100111111111111111111111111111111111111111111111010100100
9007199254740643	0100001100111111111111111111111111111111111111111111111010100011
9007199254740642	0100001100111111111111111111111111111111111111111111111010100010
9007199254740641	0100001100111111111111111111111111111111111111111111111010100001
9007199254740640	0100001100111111111111111111111111111111111111111111111010100000
9007199254740639	0100001100111111111111111111111111111111111111111111111010011111
9007199254740638	0100001100111111111111111111111111111111111111111111111010011110
9007199254740637	0100001100111111111111111111111111111111111111111111111010011101
9007199254740636	0100001100111111111111111111111111111111111111111111111010011100
9007199254740635	0100001100111111111111111111111111111111111111111111111010011011
9007199254740634	0100001100111111111111111111111111111111111111111111111010011010
9007199254740633	0100001100111111111111111111111111111111111111111111111010011001
9007199254740632	0100001100111111111111111111111111111111111111111111111010011000
9007199254740631	0100001100111111111111111111111111111111111111111111111010010111
9007199254740630	0100001100111111111111111111111111111111111111111111111010010110
9007199254740629	0100001100111111111111111111111111111111111111111111111010010101
9007199254740628	0100001100111111111111111111111111111111111111111111111010010100
9007199254740627	0100001100111111111111111111111111111111111111111111111010010011
9007199254740626	0100001100111111111111111111111111111111111111111111111010010010
9007199254740625	0100001100111111111111111111111111111111111111111111111010010001
9007199254740624	0100001100111111111111111111111111111111111111111111111010010000
9007199254740623	0100001100111111111111111111111111111111111111111111111010001111
9007199254740622	0100001100111111111111111111111111111111111111111111111010001110
9007199254740621	0100001100111111111111111111111111111111111111111111111010001101
9007199254740620	0100001100111111111111111111111111111111111111111111111010001100
9007199254740619	0100001100111111111111111111111111111111111111111111111010001011
9007199254740618	0100001100111111111111111111111111111111111111111111111010001010
9007199254740617	0100001100111111111111111111111111111111111111111111111010001001
9007199254740616	0100001100111111111111111111111111111111111111111111111010001000
9007199254740615	0100001100111111111111111111111111111111111111111111111010000111
9007199254740614	0100001100111111111111111111111111111111111111111111111010000110
9007199254740613	0100001100111111111111111111111111111111111111111111111010000101
9007199254740612	0100001100111111111111111111111111111111111111111111111010000100
9007199254740611	0100001100111111111111111111111111111111111111111111111010000011
9007199254740610	0100001100111111111111111111111111111111111111111111111010000010
9007199254740609	0100001100111111111111111111111111111111111111111111111010000001
9007199254740608	0100001100111111111111111111111111111111111111111111111010000000
9007199254740607	0100001100111111111111111111111111111111111111111111111001111111
9007199254740606	0100001100111111111111111111111111111111111111111111111001111110
9007199254740605	0100001100111111111111111111111111111111111111111111111001111101
9007199254740604	0100001100111111111111111111111111111111111111111111111001111100
9007199254740603	0100001100111111111111111111111111111111111111111111111001111011
9007199254740602	0100001100111111111111111111111111111111111111111111111001111010
9007199254740601	0100001100111111111111111111111111111111111111111111111001111001
9007199254740600	0100001100111111111111111111111111111111111111111111111001111000
9007199254740599	0100001100111111111111111111111111111111111111111111111001110111
9007199254740598	0100001100111111111111111111111111111111111111111111111001110110
9007199254740597	0100001100111111111111111111111111111111111111111111111001110101
9007199254740596	0100001100111111111111111111111111111111111111111111111001110100
9007199254740595	0100001100111111111111111111111111111111111111111111111001110011
9007199254740594	0100001100111111111111111111111111111111111111111111111001110010
9007199254740593	0100001100111111111111111111111111111111111111111111111001110001
9007199254740592	0100001100111111111111111111111111111111111111111111111001110000
9007199254740591	0100001100111111111111111111111111111111111111111111111001101111
9007199254740590	0100001100111111111111111111111111111111111111111111111001101110
9007199254740589	0100001100111111111111111111111111111111111111111111111001101101
9007199254740588	0100001100111111111111111111111111111111111111111111111001101100
9007199254740587	0100001100111111111111111111111111111111111111111111111001101011
9007199254740586	0100001100111111111111111111111111111111111111111111111001101010
9007199254740585	0100001100111111111111111111111111111111111111111111111001101001
9007199254740584	0100001100111111111111111111111111111111111111111111111001101000
9007199254740583	0100001100111111111111111111111111111111111111111111111001100111
9007199254740582	0100001100111111111111111111111111111111111111111111111001100110
9007199254740581	0100001100111111111111111111111111111111111111111111111001100101
9007199254740580	0100001100111111111111111111111111111111111111111111111001100100
9007199254740579	0100001100111111111111111111111111111111111111111111111001100011
9007199254740578	0100001100111111111111111111111111111111111111111111111001100010
9007199254740577	0100001100111111111111111111111111111111111111111111111001100001
9007199254740576	0100001100111111111111111111111111111111111111111111111001100000
9007199254740575	0100001100111111111111111111111111111111111111111111111001011111
9007199254740574	0100001100111111111111111111111111111111111111111111111001011110
9007199254740573	0100001100111111111111111111111111111111111111111111111001011101
9007199254740572	0100001100111111111111111111111111111111111111111111111001011100
9007199254740571	0100001100111111111111111111111111111111111111111111111001011011
9007199254740570	0100001100111111111111111111111111111111111111111111111001011010
9007199254740569	0100001100111111111111111111111111111111111111111111111001011001
9007199254740568	0100001100111111111111111111111111111111111111111111111001011000
9007199254740567	0100001100111111111111111111111111111111111111111111111001010111
9007199254740566	0100001100111111111111111111111111111111111111111111111001010110
9007199254740565	0100001100111111111111111111111111111111111111111111111001010101
9007199254740564	0100001100111111111111111111111111111111111111111111111001010100
9007199254740563	0100001100111111111111111111111111111111111111111111111001010011
9007199254740562	0100001100111111111111111111111111111111111111111111111001010010
9007199254740561	0100001100111111111111111111111111111111111111111111111001010001
9007199254740560	0100001100111111111111111111111111111111111111111111111001010000
9007199254740559	0100001100111111111111111111111111111111111111111111111001001111
9007199254740558	0100001100111111111111111111111111111111111111111111111001001110
9007199254740557	0100001100111111111111111111111111111111111111111111111001001101
9007199254740556	0100001100111111111111111111111111111111111111111111111001001100
9007199254740555	0100001100111111111111111111111111111111111111111111111001001011
9007199254740554	0100001100111111111111111111111111111111111111111111111001001010
9007199254740553	0100001100111111111111111111111111111111111111111111111001001001
9007199254740552	0100001100111111111111111111111111111111111111111111111001001000
9007199254740551	0100001100111111111111111111111111111111111111111111111001000111
9007199254740550	0100001100111111111111111111111111111111111111111111111001000110
9007199254740549	0100001100111111111111111111111111111111111111111111111001000101
9007199254740548	0100001100111111111111111111111111111111111111111111111001000100
9007199254740547	0100001100111111111111111111111111111111111111111111111001000011
9007199254740546	0100001100111111111111111111111111111111111111111111111001000010
9007199254740545	0100001100111111111111111111111111111111111111111111111001000001
9007199254740544	0100001100111111111111111111111111111111111111111111111001000000
9007199254740543	0100001100111111111111111111111111111111111111111111111000111111
9007199254740542	0100001100111111111111111111111111111111111111111111111000111110
9007199254740541	0100001100111111111111111111111111111111111111111111111000111101
9007199254740540	0100001100111111111111111111111111111111111111111111111000111100
9007199254740539	0100001100111111111111111111111111111111111111111111111000111011
9007199254740538	0100001100111111111111111111111111111111111111111111111000111010
9007199254740537	0100001100111111111111111111111111111111111111111111111000111001
9007199254740536	0100001100111111111111111111111111111111111111111111111000111000
9007199254740535	0100001100111111111111111111111111111111111111111111111000110111
9007199254740534	0100001100111111111111111111111111111111111111111111111000110110
9007199254740533	0100001100111111111111111111111111111111111111111111111000110101
9007199254740532	0100001100111111111111111111111111111111111111111111111000110100
9007199254740531	0100001100111111111111111111111111111111111111111111111000110011
9007199254740530	0100001100111111111111111111111111111111111111111111111000110010
9007199254740529	0100001100111111111111111111111111111111111111111111111000110001
9007199254740528	0100001100111111111111111111111111111111111111111111111000110000
9007199254740527	0100001100111111111111111111111111111111111111111111111000101111
9007199254740526	0100001100111111111111111111111111111111111111111111111000101110
9007199254740525	0100001100111111111111111111111111111111111111111111111000101101
9007199254740524	0100001100111111111111111111111111111111111111111111111000101100
9007199254740523	0100001100111111111111111111111111111111111111111111111000101011
9007199254740522	0100001100111111111111111111111111111111111111111111111000101010
9007199254740521	0100001100111111111111111111111111111111111111111111111000101001
9007199254740520	0100001100111111111111111111111111111111111111111111111000101000
9007199254740519	0100001100111111111111111111111111111111111111111111111000100111
9007199254740518	0100001100111111111111111111111111111111111111111111111000100110
9007199254740517	0100001100111111111111111111111111111111111111111111111000100101
9007199254740516	0100001100111111111111111111111111111111111111111111111000100100
9007199254740515	0100001100111111111111111111111111111111111111111111111000100011
9007199254740514	0100001100111111111111111111111111111111111111111111111000100010
9007199254740513	0100001100111111111111111111111111111111111111111111111000100001
9007199254740512	0100001100111111111111111111111111111111111111111111111000100000
9007199254740511	0100001100111111111111111111111111111111111111111111111000011111
9007199254740510	0100001100111111111111111111111111111111111111111111111000011110
9007199254740509	0100001100111111111111111111111111111111111111111111111000011101
9007199254740508	0100001100111111111111111111111111111111111111111111111000011100
9007199254740507	0100001100111111111111111111111111111111111111111111111000011011
9007199254740506	0100001100111111111111111111111111111111111111111111111000011010
9007199254740505	0100001100111111111111111111111111111111111111111111111000011001
9007199254740504	0100001100111111111111111111111111111111111111111111111000011000
9007199254740503	0100001100111111111111111111111111111111111111111111111000010111
9007199254740502	0100001100111111111111111111111111111111111111111111111000010110
9007199254740501	0100001100111111111111111111111111111111111111111111111000010101
9007199254740500	0100001100111111111111111111111111111111111111111111111000010100
9007199254740499	0100001100111111111111111111111111111111111111111111111000010011
9007199254740498	0100001100111111111111111111111111111111111111111111111000010010
9007199254740497	0100001100111111111111111111111111111111111111111111111000010001
9007199254740496	0100001100111111111111111111111111111111111111111111111000010000
9007199254740495	0100001100111111111111111111111111111111111111111111111000001111
9007199254740494	0100001100111111111111111111111111111111111111111111111000001110
9007199254740493	0100001100111111111111111111111111111111111111111111111000001101
9007199254740492	0100001100111111111111111111111111111111111111111111111000001100
9007199254740491	0100001100111111111111111111111111111111111111111111111000001011
9007199254740490	0100001100111111111111111111111111111111111111111111111000001010
9007199254740489	0100001100111111111111111111111111111111111111111111111000001001
9007199254740488	0100001100111111111111111111111111111111111111111111111000001000
9007199254740487	0100001100111111111111111111111111111111111111111111111000000111
9007199254740486	0100001100111111111111111111111111111111111111111111111000000110
9007199254740485	0100001100111111111111111111111111111111111111111111111000000101
9007199254740484	0100001100111111111111111111111111111111111111111111111000000100
9007199254740483	0100001100111111111111111111111111111111111111111111111000000011
9007199254740482	0100001100111111111111111111111111111111111111111111111000000010
9007199254740481	0100001100111111111111111111111111111111111111111111111000000001
9007199254740480	0100001100111111111111111111111111111111111111111111111000000000
9007199254740479	0100001100111111111111111111111111111111111111111111110111111111
9007199254740478	0100001100111111111111111111111111111111111111111111110111111110
9007199254740477	0100001100111111111111111111111111111111111111111111110111111101
9007199254740476	0100001100111111111111111111111111111111111111111111110111111100
9007199254740475	0100001100111111111111111111111111111111111111111111110111111011
9007199254740474	0100001100111111111111111111111111111111111111111111110111111010
9007199254740473	0100001100111111111111111111111111111111111111111111110111111001
9007199254740472	0100001100111111111111111111111111111111111111111111110111111000
9007199254740471	0100001100111111111111111111111111111111111111111111110111110111
9007199254740470	0100001100111111111111111111111111111111111111111111110111110110
9007199254740469	0100001100111111111111111111111111111111111111111111110111110101
9007199254740468	0100001100111111111111111111111111111111111111111111110111110100
9007199254740467	0100001100111111111111111111111111111111111111111111110111110011
9007199254740466	0100001100111111111111111111111111111111111111111111110111110010
9007199254740465	0100001100111111111111111111111111111111111111111111110111110001
9007199254740464	0100001100111111111111111111111111111111111111111111110111110000
9007199254740463	0100001100111111111111111111111111111111111111111111110111101111
9007199254740462	0100001100111111111111111111111111111111111111111111110111101110
9007199254740461	0100001100111111111111111111111111111111111111111111110111101101
9007199254740460	0100001100111111111111111111111111111111111111111111110111101100
9007199254740459	0100001100111111111111111111111111111111111111111111110111101011
9007199254740458	0100001100111111111111111111111111111111111111111111110111101010
9007199254740457	0100001100111111111111111111111111111111111111111111110111101001
9007199254740456	0100001100111111111111111111111111111111111111111111110111101000
9007199254740455	0100001100111111111111111111111111111111111111111111110111100111
9007199254740454	0100001100111111111111111111111111111111111111111111110111100110
9007199254740453	0100001100111111111111111111111111111111111111111111110111100101
9007199254740452	0100001100111111111111111111111111111111111111111111110111100100
9007199254740451	0100001100111111111111111111111111111111111111111111110111100011
9007199254740450	0100001100111111111111111111111111111111111111111111110111100010
9007199254740449	0100001100111111111111111111111111111111111111111111110111100001
9007199254740448	0100001100111111111111111111111111111111111111111111110111100000
9007199254740447	0100001100111111111111111111111111111111111111111111110111011111
9007199254740446	0100001100111111111111111111111111111111111111111111110111011110
9007199254740445	0100001100111111111111111111111111111111111111111111110111011101
9007199254740444	0100001100111111111111111111111111111111111111111111110111011100
9007199254740443	0100001100111111111111111111111111111111111111111111110111011011
9007199254740442	0100001100111111111111111111111111111111111111111111110111011010
9007199254740441	0100001100111111111111111111111111111111111111111111110111011001
9007199254740440	0100001100111111111111111111111111111111111111111111110111011000
9007199254740439	0100001100111111111111111111111111111111111111111111110111010111
9007199254740438	0100001100111111111111111111111111111111111111111111110111010110
9007199254740437	0100001100111111111111111111111111111111111111111111110111010101
9007199254740436	0100001100111111111111111111111111111111111111111111110111010100
9007199254740435	0100001100111111111111111111111111111111111111111111110111010011
9007199254740434	0100001100111111111111111111111111111111111111111111110111010010
9007199254740433	0100001100111111111111111111111111111111111111111111110111010001
9007199254740432	0100001100111111111111111111111111111111111111111111110111010000
9007199254740431	0100001100111111111111111111111111111111111111111111110111001111
9007199254740430	0100001100111111111111111111111111111111111111111111110111001110
9007199254740429	0100001100111111111111111111111111111111111111111111110111001101
9007199254740428	0100001100111111111111111111111111111111111111111111110111001100
9007199254740427	0100001100111111111111111111111111111111111111111111110111001011
9007199254740426	0100001100111111111111111111111111111111111111111111110111001010
9007199254740425	0100001100111111111111111111111111111111111111111111110111001001
9007199254740424	0100001100111111111111111111111111111111111111111111110111001000
9007199254740423	0100001100111111111111111111111111111111111111111111110111000111
9007199254740422	0100001100111111111111111111111111111111111111111111110111000110
9007199254740421	0100001100111111111111111111111111111111111111111111110111000101
9007199254740420	0100001100111111111111111111111111111111111111111111110111000100
9007199254740419	0100001100111111111111111111111111111111111111111111110111000011
9007199254740418	0100001100111111111111111111111111111111111111111111110111000010
9007199254740417	0100001100111111111111111111111111111111111111111111110111000001
9007199254740416	0100001100111111111111111111111111111111111111111111110111000000
9007199254740415	0100001100111111111111111111111111111111111111111111110110111111
9007199254740414	0100001100111111111111111111111111111111111111111111110110111110
9007199254740413	0100001100111111111111111111111111111111111111111111110110111101
9007199254740412	0100001100111111111111111111111111111111111111111111110110111100
9007199254740411	0100001100111111111111111111111111111111111111111111110110111011
9007199254740410	0100001100111111111111111111111111111111111111111111110110111010
9007199254740409	0100001100111111111111111111111111111111111111111111110110111001
9007199254740408	0100001100111111111111111111111111111111111111111111110110111000
9007199254740407	0100001100111111111111111111111111111111111111111111110110110111
9007199254740406	0100001100111111111111111111111111111111111111111111110110110110
9007199254740405	0100001100111111111111111111111111111111111111111111110110110101
9007199254740404	0100001100111111111111111111111111111111111111111111110110110100
9007199254740403	0100001100111111111111111111111111111111111111111111110110110011
9007199254740402	0100001100111111111111111111111111111111111111111111110110110010
9007199254740401	0100001100111111111111111111111111111111111111111111110110110001
9007199254740400	0100001100111111111111111111111111111111111111111111110110110000
9007199254740399	0100001100111111111111111111111111111111111111111111110110101111
9007199254740398	0100001100111111111111111111111111111111111111111111110110101110
9007199254740397	0100001100111111111111111111111111111111111111111111110110101101
9007199254740396	0100001100111111111111111111111111111111111111111111110110101100
9007199254740395	0100001100111111111111111111111111111111111111111111110110101011
9007199254740394	0100001100111111111111111111111111111111111111111111110110101010
9007199254740393	0100001100111111111111111111111111111111111111111111110110101001
9007199254740392	0100001100111111111111111111111111111111111111111111110110101000
9007199254740391	0100001100111111111111111111111111111111111111111111110110100111
9007199254740390	0100001100111111111111111111111111111111111111111111110110100110
9007199254740389	0100001100111111111111111111111111111111111111111111110110100101
9007199254740388	0100001100111111111111111111111111111111111111111111110110100100
9007199254740387	0100001100111111111111111111111111111111111111111111110110100011
9007199254740386	0100001100111111111111111111111111111111111111111111110110100010
9007199254740385	0100001100111111111111111111111111111111111111111111110110100001
9007199254740384	0100001100111111111111111111111111111111111111111111110110100000
9007199254740383	0100001100111111111111111111111111111111111111111111110110011111
9007199254740382	0100001100111111111111111111111111111111111111111111110110011110
9007199254740381	0100001100111111111111111111111111111111111111111111110110011101
9007199254740380	0100001100111111111111111111111111111111111111111111110110011100
9007199254740379	0100001100111111111111111111111111111111111111111111110110011011
9007199254740378	0100001100111111111111111111111111111111111111111111110110011010
9007199254740377	0100001100111111111111111111111111111111111111111111110110011001
9007199254740376	0100001100111111111111111111111111111111111111111111110110011000
9007199254740375	0100001100111111111111111111111111111111111111111111110110010111
9007199254740374	0100001100111111111111111111111111111111111111111111110110010110
9007199254740373	0100001100111111111111111111111111111111111111111111110110010101
9007199254740372	0100001100111111111111111111111111111111111111111111110110010100
9007199254740371	0100001100111111111111111111111111111111111111111111110110010011
9007199254740370	0100001100111111111111111111111111111111111111111111110110010010
9007199254740369	0100001100111111111111111111111111111111111111111111110110010001
9007199254740368	0100001100111111111111111111111111111111111111111111110110010000
9007199254740367	0100001100111111111111111111111111111111111111111111110110001111
9007199254740366	0100001100111111111111111111111111111111111111111111110110001110
9007199254740365	0100001100111111111111111111111111111111111111111111110110001101
9007199254740364	0100001100111111111111111111111111111111111111111111110110001100
9007199254740363	0100001100111111111111111111111111111111111111111111110110001011
9007199254740362	0100001100111111111111111111111111111111111111111111110110001010
9007199254740361	0100001100111111111111111111111111111111111111111111110110001001
9007199254740360	0100001100111111111111111111111111111111111111111111110110001000
9007199254740359	0100001100111111111111111111111111111111111111111111110110000111
9007199254740358	0100001100111111111111111111111111111111111111111111110110000110
9007199254740357	0100001100111111111111111111111111111111111111111111110110000101
9007199254740356	0100001100111111111111111111111111111111111111111111110110000100
9007199254740355	0100001100111111111111111111111111111111111111111111110110000011
9007199254740354	0100001100111111111111111111111111111111111111111111110110000010
9007199254740353	0100001100111111111111111111111111111111111111111111110110000001
9007199254740352	0100001100111111111111111111111111111111111111111111110110000000
9007199254740351	0100001100111111111111111111111111111111111111111111110101111111
9007199254740350	0100001100111111111111111111111111111111111111111111110101111110
9007199254740349	0100001100111111111111111111111111111111111111111111110101111101
9007199254740348	0100001100111111111111111111111111111111111111111111110101111100
9007199254740347	0100001100111111111111111111111111111111111111111111110101111011
9007199254740346	0100001100111111111111111111111111111111111111111111110101111010
9007199254740345	0100001100111111111111111111111111111111111111111111110101111001
9007199254740344	0100001100111111111111111111111111111111111111111111110101111000
9007199254740343	0100001100111111111111111111111111111111111111111111110101110111
9007199254740342	0100001100111111111111111111111111111111111111111111110101110110
9007199254740341	0100001100111111111111111111111111111111111111111111110101110101
9007199254740340	0100001100111111111111111111111111111111111111111111110101110100
9007199254740339	0100001100111111111111111111111111111111111111111111110101110011
9007199254740338	0100001100111111111111111111111111111111111111111111110101110010
9007199254740337	0100001100111111111111111111111111111111111111111111110101110001
9007199254740336	0100001100111111111111111111111111111111111111111111110101110000
9007199254740335	0100001100111111111111111111111111111111111111111111110101101111
9007199254740334	0100001100111111111111111111111111111111111111111111110101101110
9007199254740333	0100001100111111111111111111111111111111111111111111110101101101
9007199254740332	0100001100111111111111111111111111111111111111111111110101101100
9007199254740331	0100001100111111111111111111111111111111111111111111110101101011
9007199254740330	0100001100111111111111111111111111111111111111111111110101101010
9007199254740329	0100001100111111111111111111111111111111111111111111110101101001
9007199254740328	0100001100111111111111111111111111111111111111111111110101101000
9007199254740327	0100001100111111111111111111111111111111111111111111110101100111
9007199254740326	0100001100111111111111111111111111111111111111111111110101100110
9007199254740325	0100001100111111111111111111111111111111111111111111110101100101
9007199254740324	0100001100111111111111111111111111111111111111111111110101100100
9007199254740323	0100001100111111111111111111111111111111111111111111110101100011
9007199254740322	0100001100111111111111111111111111111111111111111111110101100010
9007199254740321	0100001100111111111111111111111111111111111111111111110101100001
9007199254740320	0100001100111111111111111111111111111111111111111111110101100000
9007199254740319	0100001100111111111111111111111111111111111111111111110101011111
9007199254740318	0100001100111111111111111111111111111111111111111111110101011110
9007199254740317	0100001100111111111111111111111111111111111111111111110101011101
9007199254740316	0100001100111111111111111111111111111111111111111111110101011100
9007199254740315	0100001100111111111111111111111111111111111111111111110101011011
9007199254740314	0100001100111111111111111111111111111111111111111111110101011010
9007199254740313	0100001100111111111111111111111111111111111111111111110101011001
9007199254740312	0100001100111111111111111111111111111111111111111111110101011000
9007199254740311	0100001100111111111111111111111111111111111111111111110101010111
9007199254740310	0100001100111111111111111111111111111111111111111111110101010110
9007199254740309	0100001100111111111111111111111111111111111111111111110101010101
9007199254740308	0100001100111111111111111111111111111111111111111111110101010100
9007199254740307	0100001100111111111111111111111111111111111111111111110101010011
9007199254740306	0100001100111111111111111111111111111111111111111111110101010010
9007199254740305	0100001100111111111111111111111111111111111111111111110101010001
9007199254740304	0100001100111111111111111111111111111111111111111111110101010000
9007199254740303	0100001100111111111111111111111111111111111111111111110101001111
9007199254740302	0100001100111111111111111111111111111111111111111111110101001110
9007199254740301	0100001100111111111111111111111111111111111111111111110101001101
9007199254740300	0100001100111111111111111111111111111111111111111111110101001100
9007199254740299	0100001100111111111111111111111111111111111111111111110101001011
9007199254740298	0100001100111111111111111111111111111111111111111111110101001010
9007199254740297	0100001100111111111111111111111111111111111111111111110101001001
9007199254740296	0100001100111111111111111111111111111111111111111111110101001000
9007199254740295	0100001100111111111111111111111111111111111111111111110101000111
9007199254740294	0100001100111111111111111111111111111111111111111111110101000110
9007199254740293	0100001100111111111111111111111111111111111111111111110101000101
9007199254740292	0100001100111111111111111111111111111111111111111111110101000100
9007199254740291	0100001100111111111111111111111111111111111111111111110101000011
9007199254740290	0100001100111111111111111111111111111111111111111111110101000010
9007199254740289	0100001100111111111111111111111111111111111111111111110101000001
9007199254740288	0100001100111111111111111111111111111111111111111111110101000000
9007199254740287	0100001100111111111111111111111111111111111111111111110100111111
9007199254740286	0100001100111111111111111111111111111111111111111111110100111110
9007199254740285	0100001100111111111111111111111111111111111111111111110100111101
9007199254740284	0100001100111111111111111111111111111111111111111111110100111100
9007199254740283	0100001100111111111111111111111111111111111111111111110100111011
9007199254740282	0100001100111111111111111111111111111111111111111111110100111010
9007199254740281	0100001100111111111111111111111111111111111111111111110100111001
9007199254740280	0100001100111111111111111111111111111111111111111111110100111000
9007199254740279	0100001100111111111111111111111111111111111111111111110100110111
9007199254740278	0100001100111111111111111111111111111111111111111111110100110110
9007199254740277	0100001100111111111111111111111111111111111111111111110100110101
9007199254740276	0100001100111111111111111111111111111111111111111111110100110100
9007199254740275	0100001100111111111111111111111111111111111111111111110100110011
9007199254740274	0100001100111111111111111111111111111111111111111111110100110010
9007199254740273	0100001100111111111111111111111111111111111111111111110100110001
9007199254740272	0100001100111111111111111111111111111111111111111111110100110000
9007199254740271	0100001100111111111111111111111111111111111111111111110100101111
9007199254740270	0100001100111111111111111111111111111111111111111111110100101110
9007199254740269	0100001100111111111111111111111111111111111111111111110100101101
9007199254740268	0100001100111111111111111111111111111111111111111111110100101100
9007199254740267	0100001100111111111111111111111111111111111111111111110100101011
9007199254740266	0100001100111111111111111111111111111111111111111111110100101010
9007199254740265	0100001100111111111111111111111111111111111111111111110100101001
9007199254740264	0100001100111111111111111111111111111111111111111111110100101000
9007199254740263	0100001100111111111111111111111111111111111111111111110100100111
9007199254740262	0100001100111111111111111111111111111111111111111111110100100110
9007199254740261	0100001100111111111111111111111111111111111111111111110100100101
9007199254740260	0100001100111111111111111111111111111111111111111111110100100100
9007199254740259	0100001100111111111111111111111111111111111111111111110100100011
9007199254740258	0100001100111111111111111111111111111111111111111111110100100010
9007199254740257	0100001100111111111111111111111111111111111111111111110100100001
9007199254740256	0100001100111111111111111111111111111111111111111111110100100000
9007199254740255	0100001100111111111111111111111111111111111111111111110100011111
9007199254740254	0100001100111111111111111111111111111111111111111111110100011110
9007199254740253	0100001100111111111111111111111111111111111111111111110100011101
9007199254740252	0100001100111111111111111111111111111111111111111111110100011100
9007199254740251	0100001100111111111111111111111111111111111111111111110100011011
9007199254740250	0100001100111111111111111111111111111111111111111111110100011010
9007199254740249	0100001100111111111111111111111111111111111111111111110100011001
9007199254740248	0100001100111111111111111111111111111111111111111111110100011000
9007199254740247	0100001100111111111111111111111111111111111111111111110100010111
9007199254740246	0100001100111111111111111111111111111111111111111111110100010110
9007199254740245	0100001100111111111111111111111111111111111111111111110100010101
9007199254740244	0100001100111111111111111111111111111111111111111111110100010100
9007199254740243	0100001100111111111111111111111111111111111111111111110100010011
9007199254740242	0100001100111111111111111111111111111111111111111111110100010010
9007199254740241	0100001100111111111111111111111111111111111111111111110100010001
9007199254740240	0100001100111111111111111111111111111111111111111111110100010000
9007199254740239	0100001100111111111111111111111111111111111111111111110100001111
9007199254740238	0100001100111111111111111111111111111111111111111111110100001110
9007199254740237	0100001100111111111111111111111111111111111111111111110100001101
9007199254740236	0100001100111111111111111111111111111111111111111111110100001100
9007199254740235	0100001100111111111111111111111111111111111111111111110100001011
9007199254740234	0100001100111111111111111111111111111111111111111111110100001010
9007199254740233	0100001100111111111111111111111111111111111111111111110100001001
9007199254740232	0100001100111111111111111111111111111111111111111111110100001000
9007199254740231	0100001100111111111111111111111111111111111111111111110100000111
9007199254740230	0100001100111111111111111111111111111111111111111111110100000110
9007199254740229	0100001100111111111111111111111111111111111111111111110100000101
9007199254740228	0100001100111111111111111111111111111111111111111111110100000100
9007199254740227	0100001100111111111111111111111111111111111111111111110100000011
9007199254740226	0100001100111111111111111111111111111111111111111111110100000010
9007199254740225	0100001100111111111111111111111111111111111111111111110100000001
9007199254740224	0100001100111111111111111111111111111111111111111111110100000000
9007199254740223	0100001100111111111111111111111111111111111111111111110011111111
9007199254740222	0100001100111111111111111111111111111111111111111111110011111110
9007199254740221	0100001100111111111111111111111111111111111111111111110011111101
9007199254740220	0100001100111111111111111111111111111111111111111111110011111100
9007199254740219	0100001100111111111111111111111111111111111111111111110011111011
9007199254740218	0100001100111111111111111111111111111111111111111111110011111010
9007199254740217	0100001100111111111111111111111111111111111111111111110011111001
9007199254740216	0100001100111111111111111111111111111111111111111111110011111000
9007199254740215	0100001100111111111111111111111111111111111111111111110011110111
9007199254740214	0100001100111111111111111111111111111111111111111111110011110110
9007199254740213	0100001100111111111111111111111111111111111111111111110011110101
9007199254740212	0100001100111111111111111111111111111111111111111111110011110100
9007199254740211	0100001100111111111111111111111111111111111111111111110011110011
9007199254740210	0100001100111111111111111111111111111111111111111111110011110010
9007199254740209	0100001100111111111111111111111111111111111111111111110011110001
9007199254740208	0100001100111111111111111111111111111111111111111111110011110000
9007199254740207	0100001100111111111111111111111111111111111111111111110011101111
9007199254740206	0100001100111111111111111111111111111111111111111111110011101110
9007199254740205	0100001100111111111111111111111111111111111111111111110011101101
9007199254740204	0100001100111111111111111111111111111111111111111111110011101100
9007199254740203	0100001100111111111111111111111111111111111111111111110011101011
9007199254740202	0100001100111111111111111111111111111111111111111111110011101010
9007199254740201	0100001100111111111111111111111111111111111111111111110011101001
9007199254740200	0100001100111111111111111111111111111111111111111111110011101000
9007199254740199	0100001100111111111111111111111111111111111111111111110011100111
9007199254740198	0100001100111111111111111111111111111111111111111111110011100110
9007199254740197	0100001100111111111111111111111111111111111111111111110011100101
9007199254740196	0100001100111111111111111111111111111111111111111111110011100100
9007199254740195	0100001100111111111111111111111111111111111111111111110011100011
9007199254740194	0100001100111111111111111111111111111111111111111111110011100010
9007199254740193	0100001100111111111111111111111111111111111111111111110011100001
9007199254740192	0100001100111111111111111111111111111111111111111111110011100000
9007199254740191	0100001100111111111111111111111111111111111111111111110011011111
9007199254740190	0100001100111111111111111111111111111111111111111111110011011110
9007199254740189	0100001100111111111111111111111111111111111111111111110011011101
9007199254740188	0100001100111111111111111111111111111111111111111111110011011100
9007199254740187	0100001100111111111111111111111111111111111111111111110011011011
9007199254740186	0100001100111111111111111111111111111111111111111111110011011010
9007199254740185	0100001100111111111111111111111111111111111111111111110011011001
9007199254740184	0100001100111111111111111111111111111111111111111111110011011000
9007199254740183	0100001100111111111111111111111111111111111111111111110011010111
9007199254740182	0100001100111111111111111111111111111111111111111111110011010110
9007199254740181	0100001100111111111111111111111111111111111111111111110011010101
9007199254740180	0100001100111111111111111111111111111111111111111111110011010100
9007199254740179	0100001100111111111111111111111111111111111111111111110011010011
9007199254740178	0100001100111111111111111111111111111111111111111111110011010010
9007199254740177	0100001100111111111111111111111111111111111111111111110011010001
9007199254740176	0100001100111111111111111111111111111111111111111111110011010000
9007199254740175	0100001100111111111111111111111111111111111111111111110011001111
9007199254740174	0100001100111111111111111111111111111111111111111111110011001110
9007199254740173	0100001100111111111111111111111111111111111111111111110011001101
9007199254740172	0100001100111111111111111111111111111111111111111111110011001100
9007199254740171	0100001100111111111111111111111111111111111111111111110011001011
9007199254740170	0100001100111111111111111111111111111111111111111111110011001010
9007199254740169	0100001100111111111111111111111111111111111111111111110011001001
9007199254740168	0100001100111111111111111111111111111111111111111111110011001000
9007199254740167	0100001100111111111111111111111111111111111111111111110011000111
9007199254740166	0100001100111111111111111111111111111111111111111111110011000110
9007199254740165	0100001100111111111111111111111111111111111111111111110011000101
9007199254740164	0100001100111111111111111111111111111111111111111111110011000100
9007199254740163	0100001100111111111111111111111111111111111111111111110011000011
9007199254740162	0100001100111111111111111111111111111111111111111111110011000010
9007199254740161	0100001100111111111111111111111111111111111111111111110011000001
9007199254740160	0100001100111111111111111111111111111111111111111111110011000000
9007199254740159	0100001100111111111111111111111111111111111111111111110010111111
9007199254740158	0100001100111111111111111111111111111111111111111111110010111110
9007199254740157	0100001100111111111111111111111111111111111111111111110010111101
9007199254740156	0100001100111111111111111111111111111111111111111111110010111100
9007199254740155	0100001100111111111111111111111111111111111111111111110010111011
9007199254740154	0100001100111111111111111111111111111111111111111111110010111010
9007199254740153	0100001100111111111111111111111111111111111111111111110010111001
9007199254740152	0100001100111111111111111111111111111111111111111111110010111000
9007199254740151	0100001100111111111111111111111111111111111111111111110010110111
9007199254740150	0100001100111111111111111111111111111111111111111111110010110110
9007199254740149	0100001100111111111111111111111111111111111111111111110010110101
9007199254740148	0100001100111111111111111111111111111111111111111111110010110100
9007199254740147	0100001100111111111111111111111111111111111111111111110010110011
9007199254740146	0100001100111111111111111111111111111111111111111111110010110010
9007199254740145	0100001100111111111111111111111111111111111111111111110010110001
9007199254740144	0100001100111111111111111111111111111111111111111111110010110000
9007199254740143	0100001100111111111111111111111111111111111111111111110010101111
9007199254740142	0100001100111111111111111111111111111111111111111111110010101110
9007199254740141	0100001100111111111111111111111111111111111111111111110010101101
9007199254740140	0100001100111111111111111111111111111111111111111111110010101100
9007199254740139	0100001100111111111111111111111111111111111111111111110010101011
9007199254740138	0100001100111111111111111111111111111111111111111111110010101010
9007199254740137	0100001100111111111111111111111111111111111111111111110010101001
9007199254740136	0100001100111111111111111111111111111111111111111111110010101000
9007199254740135	0100001100111111111111111111111111111111111111111111110010100111
9007199254740134	0100001100111111111111111111111111111111111111111111110010100110
9007199254740133	0100001100111111111111111111111111111111111111111111110010100101
9007199254740132	0100001100111111111111111111111111111111111111111111110010100100
9007199254740131	0100001100111111111111111111111111111111111111111111110010100011
9007199254740130	0100001100111111111111111111111111111111111111111111110010100010
9007199254740129	0100001100111111111111111111111111111111111111111111110010100001
9007199254740128	0100001100111111111111111111111111111111111111111111110010100000
9007199254740127	0100001100111111111111111111111111111111111111111111110010011111
9007199254740126	0100001100111111111111111111111111111111111111111111110010011110
9007199254740125	0100001100111111111111111111111111111111111111111111110010011101
9007199254740124	0100001100111111111111111111111111111111111111111111110010011100
9007199254740123	0100001100111111111111111111111111111111111111111111110010011011
9007199254740122	0100001100111111111111111111111111111111111111111111110010011010
9007199254740121	0100001100111111111111111111111111111111111111111111110010011001
9007199254740120	0100001100111111111111111111111111111111111111111111110010011000
9007199254740119	0100001100111111111111111111111111111111111111111111110010010111
9007199254740118	0100001100111111111111111111111111111111111111111111110010010110
9007199254740117	0100001100111111111111111111111111111111111111111111110010010101
9007199254740116	0100001100111111111111111111111111111111111111111111110010010100
9007199254740115	0100001100111111111111111111111111111111111111111111110010010011
9007199254740114	0100001100111111111111111111111111111111111111111111110010010010
9007199254740113	0100001100111111111111111111111111111111111111111111110010010001
9007199254740112	0100001100111111111111111111111111111111111111111111110010010000
9007199254740111	0100001100111111111111111111111111111111111111111111110010001111
9007199254740110	0100001100111111111111111111111111111111111111111111110010001110
9007199254740109	0100001100111111111111111111111111111111111111111111110010001101
9007199254740108	0100001100111111111111111111111111111111111111111111110010001100
9007199254740107	0100001100111111111111111111111111111111111111111111110010001011
9007199254740106	0100001100111111111111111111111111111111111111111111110010001010
9007199254740105	0100001100111111111111111111111111111111111111111111110010001001
9007199254740104	0100001100111111111111111111111111111111111111111111110010001000
9007199254740103	0100001100111111111111111111111111111111111111111111110010000111
9007199254740102	0100001100111111111111111111111111111111111111111111110010000110
9007199254740101	0100001100111111111111111111111111111111111111111111110010000101
9007199254740100	0100001100111111111111111111111111111111111111111111110010000100
9007199254740099	0100001100111111111111111111111111111111111111111111110010000011
9007199254740098	0100001100111111111111111111111111111111111111111111110010000010
9007199254740097	0100001100111111111111111111111111111111111111111111110010000001
9007199254740096	0100001100111111111111111111111111111111111111111111110010000000
9007199254740095	0100001100111111111111111111111111111111111111111111110001111111
9007199254740094	0100001100111111111111111111111111111111111111111111110001111110
9007199254740093	0100001100111111111111111111111111111111111111111111110001111101
9007199254740092	0100001100111111111111111111111111111111111111111111110001111100
9007199254740091	0100001100111111111111111111111111111111111111111111110001111011
9007199254740090	0100001100111111111111111111111111111111111111111111110001111010
9007199254740089	0100001100111111111111111111111111111111111111111111110001111001
9007199254740088	0100001100111111111111111111111111111111111111111111110001111000
9007199254740087	0100001100111111111111111111111111111111111111111111110001110111
9007199254740086	0100001100111111111111111111111111111111111111111111110001110110
9007199254740085	0100001100111111111111111111111111111111111111111111110001110101
9007199254740084	0100001100111111111111111111111111111111111111111111110001110100
9007199254740083	0100001100111111111111111111111111111111111111111111110001110011
9007199254740082	0100001100111111111111111111111111111111111111111111110001110010
9007199254740081	0100001100111111111111111111111111111111111111111111110001110001
9007199254740080	0100001100111111111111111111111111111111111111111111110001110000
9007199254740079	0100001100111111111111111111111111111111111111111111110001101111
9007199254740078	0100001100111111111111111111111111111111111111111111110001101110
9007199254740077	0100001100111111111111111111111111111111111111111111110001101101
9007199254740076	0100001100111111111111111111111111111111111111111111110001101100
9007199254740075	0100001100111111111111111111111111111111111111111111110001101011
9007199254740074	0100001100111111111111111111111111111111111111111111110001101010
9007199254740073	0100001100111111111111111111111111111111111111111111110001101001
9007199254740072	0100001100111111111111111111111111111111111111111111110001101000
9007199254740071	0100001100111111111111111111111111111111111111111111110001100111
9007199254740070	0100001100111111111111111111111111111111111111111111110001100110
9007199254740069	0100001100111111111111111111111111111111111111111111110001100101
9007199254740068	0100001100111111111111111111111111111111111111111111110001100100
9007199254740067	0100001100111111111111111111111111111111111111111111110001100011
9007199254740066	0100001100111111111111111111111111111111111111111111110001100010
9007199254740065	0100001100111111111111111111111111111111111111111111110001100001
9007199254740064	0100001100111111111111111111111111111111111111111111110001100000
9007199254740063	0100001100111111111111111111111111111111111111111111110001011111
9007199254740062	0100001100111111111111111111111111111111111111111111110001011110
9007199254740061	0100001100111111111111111111111111111111111111111111110001011101
9007199254740060	0100001100111111111111111111111111111111111111111111110001011100
9007199254740059	0100001100111111111111111111111111111111111111111111110001011011
9007199254740058	0100001100111111111111111111111111111111111111111111110001011010
9007199254740057	0100001100111111111111111111111111111111111111111111110001011001
9007199254740056	0100001100111111111111111111111111111111111111111111110001011000
9007199254740055	0100001100111111111111111111111111111111111111111111110001010111
9007199254740054	0100001100111111111111111111111111111111111111111111110001010110
9007199254740053	0100001100111111111111111111111111111111111111111111110001010101
9007199254740052	0100001100111111111111111111111111111111111111111111110001010100
9007199254740051	0100001100111111111111111111111111111111111111111111110001010011
9007199254740050	0100001100111111111111111111111111111111111111111111110001010010
9007199254740049	0100001100111111111111111111111111111111111111111111110001010001
9007199254740048	0100001100111111111111111111111111111111111111111111110001010000
9007199254740047	0100001100111111111111111111111111111111111111111111110001001111
9007199254740046	0100001100111111111111111111111111111111111111111111110001001110
9007199254740045	0100001100111111111111111111111111111111111111111111110001001101
9007199254740044	0100001100111111111111111111111111111111111111111111110001001100
9007199254740043	0100001100111111111111111111111111111111111111111111110001001011
9007199254740042	0100001100111111111111111111111111111111111111111111110001001010
9007199254740041	0100001100111111111111111111111111111111111111111111110001001001
9007199254740040	0100001100111111111111111111111111111111111111111111110001001000
9007199254740039	0100001100111111111111111111111111111111111111111111110001000111
9007199254740038	0100001100111111111111111111111111111111111111111111110001000110
9007199254740037	0100001100111111111111111111111111111111111111111111110001000101
9007199254740036	0100001100111111111111111111111111111111111111111111110001000100
9007199254740035	0100001100111111111111111111111111111111111111111111110001000011
9007199254740034	0100001100111111111111111111111111111111111111111111110001000010
9007199254740033	0100001100111111111111111111111111111111111111111111110001000001
9007199254740032	0100001100111111111111111111111111111111111111111111110001000000
9007199254740031	0100001100111111111111111111111111111111111111111111110000111111
9007199254740030	0100001100111111111111111111111111111111111111111111110000111110
9007199254740029	0100001100111111111111111111111111111111111111111111110000111101
9007199254740028	0100001100111111111111111111111111111111111111111111110000111100
9007199254740027	0100001100111111111111111111111111111111111111111111110000111011
9007199254740026	0100001100111111111111111111111111111111111111111111110000111010
9007199254740025	0100001100111111111111111111111111111111111111111111110000111001
9007199254740024	0100001100111111111111111111111111111111111111111111110000111000
9007199254740023	0100001100111111111111111111111111111111111111111111110000110111
9007199254740022	0100001100111111111111111111111111111111111111111111110000110110
9007199254740021	0100001100111111111111111111111111111111111111111111110000110101
9007199254740020	0100001100111111111111111111111111111111111111111111110000110100
9007199254740019	0100001100111111111111111111111111111111111111111111110000110011
9007199254740018	0100001100111111111111111111111111111111111111111111110000110010
9007199254740017	0100001100111111111111111111111111111111111111111111110000110001
9007199254740016	0100001100111111111111111111111111111111111111111111110000110000
9007199254740015	0100001100111111111111111111111111111111111111111111110000101111
9007199254740014	0100001100111111111111111111111111111111111111111111110000101110
9007199254740013	0100001100111111111111111111111111111111111111111111110000101101
9007199254740012	0100001100111111111111111111111111111111111111111111110000101100
9007199254740011	0100001100111111111111111111111111111111111111111111110000101011
9007199254740010	0100001100111111111111111111111111111111111111111111110000101010
9007199254740009	0100001100111111111111111111111111111111111111111111110000101001
9007199254740008	0100001100111111111111111111111111111111111111111111110000101000
9007199254740007	0100001100111111111111111111111111111111111111111111110000100111
9007199254740006	0100001100111111111111111111111111111111111111111111110000100110
9007199254740005	0100001100111111111111111111111111111111111111111111110000100101
9007199254740004	0100001100111111111111111111111111111111111111111111110000100100
9007199254740003	0100001100111111111111111111111111111111111111111111110000100011
9007199254740002	0100001100111111111111111111111111111111111111111111110000100010
9007199254740001	0100001100111111111111111111111111111111111111111111110000100001
9007199254740000	0100001100111111111111111111111111111111111111111111110000100000
9007199254739999	0100001100111111111111111111111111111111111111111111110000011111
9007199254739998	0100001100111111111111111111111111111111111111111111110000011110
9007199254739997	0100001100111111111111111111111111111111111111111111110000011101
9007199254739996	0100001100111111111111111111111111111111111111111111110000011100
9007199254739995	0100001100111111111111111111111111111111111111111111110000011011
9007199254739994	0100001100111111111111111111111111111111111111111111110000011010
9007199254739993	0100001100111111111111111111111111111111111111111111110000011001
9007199254739992	0100001100111111111111111111111111111111111111111111110000011000
            */
            #endregion print 的值.
        }

        /// <summary>
        /// 担心 Double.ToString() 有坑,因此本方法内用 Converter.ToBin() 进行了重复测试。
        /// </summary>
        [TestMethod]
        public void Double精度测试_大于9007199254740991则一半重复()
        {
            int count = 1000;
            double d0 = 9007199254740991;
            var dic0 = new Dictionary<string, string>();
            var dic1 = new Dictionary<string, string>();
            for(uint i = 0; i < count; i++) {
                double d1 = d0 + i;
                //以 double 为 key:
                string key0 = d1.ToString("G50");
                string val0;
                bool isExist0 = dic0.TryGetValue(key0, out val0);
                if(isExist0) {
                    val0 += '\t' + i.ToString();
                }
                else {
                    val0 = i.ToString();
                }
                dic0[key0] = val0;
                //以 binary 为 key:
                string key1 = Converter.ToBin(d1);
                string val1;
                bool isExist1 = dic1.TryGetValue(key1, out val1);
                if(isExist1) {
                    val1 += '\t' + i.ToString();
                }
                else {
                    val1 = key0 + '\t' + i.ToString();
                }
                dic1[key1] = val1;
            }
            var sb0 = new StringBuilder();
            foreach(var item in dic0) {
                sb0.Append(item.Key).Append('\t').Append(item.Value).AppendLine();
            }
            var sb1 = new StringBuilder();
            foreach(var item in dic1) {
                sb1.Append(item.Value).AppendLine();
            }
            string print0 = sb0.ToString();
            string print1 = sb1.ToString();
            Assert.IsTrue(print0 == print1);

            Assert.IsTrue(dic0.Count == 501);
            Assert.IsTrue(dic0.Count == count / 2 + 1);
            #region print0/1 的值:
            /*
9007199254740991	0
9007199254740992	1	2
9007199254740994	3
9007199254740996	4	5	6
9007199254740998	7
9007199254741000	8	9	10
9007199254741002	11
9007199254741004	12	13	14
9007199254741006	15
9007199254741008	16	17	18
9007199254741010	19
9007199254741012	20	21	22
9007199254741014	23
9007199254741016	24	25	26
9007199254741018	27
9007199254741020	28	29	30
9007199254741022	31
9007199254741024	32	33	34
9007199254741026	35
9007199254741028	36	37	38
9007199254741030	39
9007199254741032	40	41	42
9007199254741034	43
9007199254741036	44	45	46
9007199254741038	47
9007199254741040	48	49	50
9007199254741042	51
9007199254741044	52	53	54
9007199254741046	55
9007199254741048	56	57	58
9007199254741050	59
9007199254741052	60	61	62
9007199254741054	63
9007199254741056	64	65	66
9007199254741058	67
9007199254741060	68	69	70
9007199254741062	71
9007199254741064	72	73	74
9007199254741066	75
9007199254741068	76	77	78
9007199254741070	79
9007199254741072	80	81	82
9007199254741074	83
9007199254741076	84	85	86
9007199254741078	87
9007199254741080	88	89	90
9007199254741082	91
9007199254741084	92	93	94
9007199254741086	95
9007199254741088	96	97	98
9007199254741090	99
9007199254741092	100	101	102
9007199254741094	103
9007199254741096	104	105	106
9007199254741098	107
9007199254741100	108	109	110
9007199254741102	111
9007199254741104	112	113	114
9007199254741106	115
9007199254741108	116	117	118
9007199254741110	119
9007199254741112	120	121	122
9007199254741114	123
9007199254741116	124	125	126
9007199254741118	127
9007199254741120	128	129	130
9007199254741122	131
9007199254741124	132	133	134
9007199254741126	135
9007199254741128	136	137	138
9007199254741130	139
9007199254741132	140	141	142
9007199254741134	143
9007199254741136	144	145	146
9007199254741138	147
9007199254741140	148	149	150
9007199254741142	151
9007199254741144	152	153	154
9007199254741146	155
9007199254741148	156	157	158
9007199254741150	159
9007199254741152	160	161	162
9007199254741154	163
9007199254741156	164	165	166
9007199254741158	167
9007199254741160	168	169	170
9007199254741162	171
9007199254741164	172	173	174
9007199254741166	175
9007199254741168	176	177	178
9007199254741170	179
9007199254741172	180	181	182
9007199254741174	183
9007199254741176	184	185	186
9007199254741178	187
9007199254741180	188	189	190
9007199254741182	191
9007199254741184	192	193	194
9007199254741186	195
9007199254741188	196	197	198
9007199254741190	199
9007199254741192	200	201	202
9007199254741194	203
9007199254741196	204	205	206
9007199254741198	207
9007199254741200	208	209	210
9007199254741202	211
9007199254741204	212	213	214
9007199254741206	215
9007199254741208	216	217	218
9007199254741210	219
9007199254741212	220	221	222
9007199254741214	223
9007199254741216	224	225	226
9007199254741218	227
9007199254741220	228	229	230
9007199254741222	231
9007199254741224	232	233	234
9007199254741226	235
9007199254741228	236	237	238
9007199254741230	239
9007199254741232	240	241	242
9007199254741234	243
9007199254741236	244	245	246
9007199254741238	247
9007199254741240	248	249	250
9007199254741242	251
9007199254741244	252	253	254
9007199254741246	255
9007199254741248	256	257	258
9007199254741250	259
9007199254741252	260	261	262
9007199254741254	263
9007199254741256	264	265	266
9007199254741258	267
9007199254741260	268	269	270
9007199254741262	271
9007199254741264	272	273	274
9007199254741266	275
9007199254741268	276	277	278
9007199254741270	279
9007199254741272	280	281	282
9007199254741274	283
9007199254741276	284	285	286
9007199254741278	287
9007199254741280	288	289	290
9007199254741282	291
9007199254741284	292	293	294
9007199254741286	295
9007199254741288	296	297	298
9007199254741290	299
9007199254741292	300	301	302
9007199254741294	303
9007199254741296	304	305	306
9007199254741298	307
9007199254741300	308	309	310
9007199254741302	311
9007199254741304	312	313	314
9007199254741306	315
9007199254741308	316	317	318
9007199254741310	319
9007199254741312	320	321	322
9007199254741314	323
9007199254741316	324	325	326
9007199254741318	327
9007199254741320	328	329	330
9007199254741322	331
9007199254741324	332	333	334
9007199254741326	335
9007199254741328	336	337	338
9007199254741330	339
9007199254741332	340	341	342
9007199254741334	343
9007199254741336	344	345	346
9007199254741338	347
9007199254741340	348	349	350
9007199254741342	351
9007199254741344	352	353	354
9007199254741346	355
9007199254741348	356	357	358
9007199254741350	359
9007199254741352	360	361	362
9007199254741354	363
9007199254741356	364	365	366
9007199254741358	367
9007199254741360	368	369	370
9007199254741362	371
9007199254741364	372	373	374
9007199254741366	375
9007199254741368	376	377	378
9007199254741370	379
9007199254741372	380	381	382
9007199254741374	383
9007199254741376	384	385	386
9007199254741378	387
9007199254741380	388	389	390
9007199254741382	391
9007199254741384	392	393	394
9007199254741386	395
9007199254741388	396	397	398
9007199254741390	399
9007199254741392	400	401	402
9007199254741394	403
9007199254741396	404	405	406
9007199254741398	407
9007199254741400	408	409	410
9007199254741402	411
9007199254741404	412	413	414
9007199254741406	415
9007199254741408	416	417	418
9007199254741410	419
9007199254741412	420	421	422
9007199254741414	423
9007199254741416	424	425	426
9007199254741418	427
9007199254741420	428	429	430
9007199254741422	431
9007199254741424	432	433	434
9007199254741426	435
9007199254741428	436	437	438
9007199254741430	439
9007199254741432	440	441	442
9007199254741434	443
9007199254741436	444	445	446
9007199254741438	447
9007199254741440	448	449	450
9007199254741442	451
9007199254741444	452	453	454
9007199254741446	455
9007199254741448	456	457	458
9007199254741450	459
9007199254741452	460	461	462
9007199254741454	463
9007199254741456	464	465	466
9007199254741458	467
9007199254741460	468	469	470
9007199254741462	471
9007199254741464	472	473	474
9007199254741466	475
9007199254741468	476	477	478
9007199254741470	479
9007199254741472	480	481	482
9007199254741474	483
9007199254741476	484	485	486
9007199254741478	487
9007199254741480	488	489	490
9007199254741482	491
9007199254741484	492	493	494
9007199254741486	495
9007199254741488	496	497	498
9007199254741490	499
9007199254741492	500	501	502
9007199254741494	503
9007199254741496	504	505	506
9007199254741498	507
9007199254741500	508	509	510
9007199254741502	511
9007199254741504	512	513	514
9007199254741506	515
9007199254741508	516	517	518
9007199254741510	519
9007199254741512	520	521	522
9007199254741514	523
9007199254741516	524	525	526
9007199254741518	527
9007199254741520	528	529	530
9007199254741522	531
9007199254741524	532	533	534
9007199254741526	535
9007199254741528	536	537	538
9007199254741530	539
9007199254741532	540	541	542
9007199254741534	543
9007199254741536	544	545	546
9007199254741538	547
9007199254741540	548	549	550
9007199254741542	551
9007199254741544	552	553	554
9007199254741546	555
9007199254741548	556	557	558
9007199254741550	559
9007199254741552	560	561	562
9007199254741554	563
9007199254741556	564	565	566
9007199254741558	567
9007199254741560	568	569	570
9007199254741562	571
9007199254741564	572	573	574
9007199254741566	575
9007199254741568	576	577	578
9007199254741570	579
9007199254741572	580	581	582
9007199254741574	583
9007199254741576	584	585	586
9007199254741578	587
9007199254741580	588	589	590
9007199254741582	591
9007199254741584	592	593	594
9007199254741586	595
9007199254741588	596	597	598
9007199254741590	599
9007199254741592	600	601	602
9007199254741594	603
9007199254741596	604	605	606
9007199254741598	607
9007199254741600	608	609	610
9007199254741602	611
9007199254741604	612	613	614
9007199254741606	615
9007199254741608	616	617	618
9007199254741610	619
9007199254741612	620	621	622
9007199254741614	623
9007199254741616	624	625	626
9007199254741618	627
9007199254741620	628	629	630
9007199254741622	631
9007199254741624	632	633	634
9007199254741626	635
9007199254741628	636	637	638
9007199254741630	639
9007199254741632	640	641	642
9007199254741634	643
9007199254741636	644	645	646
9007199254741638	647
9007199254741640	648	649	650
9007199254741642	651
9007199254741644	652	653	654
9007199254741646	655
9007199254741648	656	657	658
9007199254741650	659
9007199254741652	660	661	662
9007199254741654	663
9007199254741656	664	665	666
9007199254741658	667
9007199254741660	668	669	670
9007199254741662	671
9007199254741664	672	673	674
9007199254741666	675
9007199254741668	676	677	678
9007199254741670	679
9007199254741672	680	681	682
9007199254741674	683
9007199254741676	684	685	686
9007199254741678	687
9007199254741680	688	689	690
9007199254741682	691
9007199254741684	692	693	694
9007199254741686	695
9007199254741688	696	697	698
9007199254741690	699
9007199254741692	700	701	702
9007199254741694	703
9007199254741696	704	705	706
9007199254741698	707
9007199254741700	708	709	710
9007199254741702	711
9007199254741704	712	713	714
9007199254741706	715
9007199254741708	716	717	718
9007199254741710	719
9007199254741712	720	721	722
9007199254741714	723
9007199254741716	724	725	726
9007199254741718	727
9007199254741720	728	729	730
9007199254741722	731
9007199254741724	732	733	734
9007199254741726	735
9007199254741728	736	737	738
9007199254741730	739
9007199254741732	740	741	742
9007199254741734	743
9007199254741736	744	745	746
9007199254741738	747
9007199254741740	748	749	750
9007199254741742	751
9007199254741744	752	753	754
9007199254741746	755
9007199254741748	756	757	758
9007199254741750	759
9007199254741752	760	761	762
9007199254741754	763
9007199254741756	764	765	766
9007199254741758	767
9007199254741760	768	769	770
9007199254741762	771
9007199254741764	772	773	774
9007199254741766	775
9007199254741768	776	777	778
9007199254741770	779
9007199254741772	780	781	782
9007199254741774	783
9007199254741776	784	785	786
9007199254741778	787
9007199254741780	788	789	790
9007199254741782	791
9007199254741784	792	793	794
9007199254741786	795
9007199254741788	796	797	798
9007199254741790	799
9007199254741792	800	801	802
9007199254741794	803
9007199254741796	804	805	806
9007199254741798	807
9007199254741800	808	809	810
9007199254741802	811
9007199254741804	812	813	814
9007199254741806	815
9007199254741808	816	817	818
9007199254741810	819
9007199254741812	820	821	822
9007199254741814	823
9007199254741816	824	825	826
9007199254741818	827
9007199254741820	828	829	830
9007199254741822	831
9007199254741824	832	833	834
9007199254741826	835
9007199254741828	836	837	838
9007199254741830	839
9007199254741832	840	841	842
9007199254741834	843
9007199254741836	844	845	846
9007199254741838	847
9007199254741840	848	849	850
9007199254741842	851
9007199254741844	852	853	854
9007199254741846	855
9007199254741848	856	857	858
9007199254741850	859
9007199254741852	860	861	862
9007199254741854	863
9007199254741856	864	865	866
9007199254741858	867
9007199254741860	868	869	870
9007199254741862	871
9007199254741864	872	873	874
9007199254741866	875
9007199254741868	876	877	878
9007199254741870	879
9007199254741872	880	881	882
9007199254741874	883
9007199254741876	884	885	886
9007199254741878	887
9007199254741880	888	889	890
9007199254741882	891
9007199254741884	892	893	894
9007199254741886	895
9007199254741888	896	897	898
9007199254741890	899
9007199254741892	900	901	902
9007199254741894	903
9007199254741896	904	905	906
9007199254741898	907
9007199254741900	908	909	910
9007199254741902	911
9007199254741904	912	913	914
9007199254741906	915
9007199254741908	916	917	918
9007199254741910	919
9007199254741912	920	921	922
9007199254741914	923
9007199254741916	924	925	926
9007199254741918	927
9007199254741920	928	929	930
9007199254741922	931
9007199254741924	932	933	934
9007199254741926	935
9007199254741928	936	937	938
9007199254741930	939
9007199254741932	940	941	942
9007199254741934	943
9007199254741936	944	945	946
9007199254741938	947
9007199254741940	948	949	950
9007199254741942	951
9007199254741944	952	953	954
9007199254741946	955
9007199254741948	956	957	958
9007199254741950	959
9007199254741952	960	961	962
9007199254741954	963
9007199254741956	964	965	966
9007199254741958	967
9007199254741960	968	969	970
9007199254741962	971
9007199254741964	972	973	974
9007199254741966	975
9007199254741968	976	977	978
9007199254741970	979
9007199254741972	980	981	982
9007199254741974	983
9007199254741976	984	985	986
9007199254741978	987
9007199254741980	988	989	990
9007199254741982	991
9007199254741984	992	993	994
9007199254741986	995
9007199254741988	996	997	998
9007199254741990	999
            */
            #endregion print0/1 的值.
        }

Source Code of System.Double from JetBrains dotPeek 1.0 at 2018-08-05

Complete Copy:

// Type: System.Double
// Assembly: mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
// Assembly location: C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll

using System.Globalization;
using System.Runtime.ConstrainedExecution;
using System.Runtime.InteropServices;
using System.Security;

namespace System
{
  [ComVisible(true)]
  [__DynamicallyInvokable]
  [Serializable]
  public struct Double : IComparable, IFormattable, IConvertible, IComparable<double>, IEquatable<double>
  {
    internal static double NegativeZero = BitConverter.Int64BitsToDouble(long.MinValue);
    internal double m_value;
    [__DynamicallyInvokable]
    public const double MinValue = -1.79769313486232E+308;
    [__DynamicallyInvokable]
    public const double MaxValue = 1.79769313486232E+308;
    [__DynamicallyInvokable]
    public const double Epsilon = 4.94065645841247E-324;
    [__DynamicallyInvokable]
    public const double NegativeInfinity = double.NegativeInfinity;
    [__DynamicallyInvokable]
    public const double PositiveInfinity = double.PositiveInfinity;
    [__DynamicallyInvokable]
    public const double NaN = double.NaN;

    static Double()
    {
    }

    [__DynamicallyInvokable]
    public static bool operator ==(double left, double right)
    {
      return left == right;
    }

    [__DynamicallyInvokable]
    public static bool operator !=(double left, double right)
    {
      return left != right;
    }

    [__DynamicallyInvokable]
    public static bool operator <(double left, double right)
    {
      return left < right;
    }

    [__DynamicallyInvokable]
    public static bool operator >(double left, double right)
    {
      return left > right;
    }

    [__DynamicallyInvokable]
    public static bool operator <=(double left, double right)
    {
      return left <= right;
    }

    [__DynamicallyInvokable]
    public static bool operator >=(double left, double right)
    {
      return left >= right;
    }

    [SecuritySafeCritical]
    [__DynamicallyInvokable]
    public static unsafe bool IsInfinity(double d)
    {
      //TonyRemark: 9218868437227405312 is "0111 1111 1111 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000".
      return (*(long*) &d & long.MaxValue) == 9218868437227405312L;
    }

    [__DynamicallyInvokable]
    public static bool IsPositiveInfinity(double d)
    {
      return d == double.PositiveInfinity;
    }

    [__DynamicallyInvokable]
    public static bool IsNegativeInfinity(double d)
    {
      return d == double.NegativeInfinity;
    }

    [SecuritySafeCritical]
    internal static unsafe bool IsNegative(double d)
    {
      return (*(long*) &d & long.MinValue) == long.MinValue;
    }

    [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
    [SecuritySafeCritical]
    [__DynamicallyInvokable]
    public static unsafe bool IsNaN(double d)
    {
      //TonyRemark: 9218868437227405312 is "0111 1111 1111 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000".
      return (ulong) (*(long*) &d & long.MaxValue) > 9218868437227405312UL;
    }

    public int CompareTo(object value)
    {
      if (value == null)
        return 1;
      if (!(value is double))
        throw new ArgumentException(Environment.GetResourceString("Arg_MustBeDouble"));
      double d = (double) value;
      if (this < d)
        return -1;
      if (this > d)
        return 1;
      if (this == d)
        return 0;
      if (!double.IsNaN(this))
        return 1;
      return !double.IsNaN(d) ? -1 : 0;
    }

    [__DynamicallyInvokable]
    public int CompareTo(double value)
    {
      if (this < value)
        return -1;
      if (this > value)
        return 1;
      if (this == value)
        return 0;
      if (!double.IsNaN(this))
        return 1;
      return !double.IsNaN(value) ? -1 : 0;
    }

    [__DynamicallyInvokable]
    public override bool Equals(object obj)
    {
      if (!(obj is double))
        return false;
      double d = (double) obj;
      if (d == this)
        return true;
      if (double.IsNaN(d))
        return double.IsNaN(this);
      else
        return false;
    }

    [__DynamicallyInvokable]
    public bool Equals(double obj)
    {
      if (obj == this)
        return true;
      if (double.IsNaN(obj))
        return double.IsNaN(this);
      else
        return false;
    }

    [SecuritySafeCritical]
    [__DynamicallyInvokable]
    public override unsafe int GetHashCode()
    {
      double num1 = this;
      if (num1 == 0.0)
        return 0;
      long num2 = *(long*) &num1;
      return (int) num2 ^ (int) (num2 >> 32);
    }

    [SecuritySafeCritical]
    [__DynamicallyInvokable]
    public override string ToString()
    {
      return Number.FormatDouble(this, (string) null, NumberFormatInfo.CurrentInfo);
    }

    [SecuritySafeCritical]
    [__DynamicallyInvokable]
    public string ToString(string format)
    {
      return Number.FormatDouble(this, format, NumberFormatInfo.CurrentInfo);
    }

    [SecuritySafeCritical]
    [__DynamicallyInvokable]
    public string ToString(IFormatProvider provider)
    {
      return Number.FormatDouble(this, (string) null, NumberFormatInfo.GetInstance(provider));
    }

    [SecuritySafeCritical]
    [__DynamicallyInvokable]
    public string ToString(string format, IFormatProvider provider)
    {
      return Number.FormatDouble(this, format, NumberFormatInfo.GetInstance(provider));
    }

    [__DynamicallyInvokable]
    public static double Parse(string s)
    {
      return double.Parse(s, NumberStyles.Float | NumberStyles.AllowThousands, NumberFormatInfo.CurrentInfo);
    }

    [__DynamicallyInvokable]
    public static double Parse(string s, NumberStyles style)
    {
      NumberFormatInfo.ValidateParseStyleFloatingPoint(style);
      return double.Parse(s, style, NumberFormatInfo.CurrentInfo);
    }

    [__DynamicallyInvokable]
    public static double Parse(string s, IFormatProvider provider)
    {
      return double.Parse(s, NumberStyles.Float | NumberStyles.AllowThousands, NumberFormatInfo.GetInstance(provider));
    }

    [__DynamicallyInvokable]
    public static double Parse(string s, NumberStyles style, IFormatProvider provider)
    {
      NumberFormatInfo.ValidateParseStyleFloatingPoint(style);
      return double.Parse(s, style, NumberFormatInfo.GetInstance(provider));
    }

    private static double Parse(string s, NumberStyles style, NumberFormatInfo info)
    {
      return Number.ParseDouble(s, style, info);
    }

    [__DynamicallyInvokable]
    public static bool TryParse(string s, out double result)
    {
      return double.TryParse(s, NumberStyles.Float | NumberStyles.AllowThousands, NumberFormatInfo.CurrentInfo, out result);
    }

    [__DynamicallyInvokable]
    public static bool TryParse(string s, NumberStyles style, IFormatProvider provider, out double result)
    {
      NumberFormatInfo.ValidateParseStyleFloatingPoint(style);
      return double.TryParse(s, style, NumberFormatInfo.GetInstance(provider), out result);
    }

    private static bool TryParse(string s, NumberStyles style, NumberFormatInfo info, out double result)
    {
      if (s == null)
      {
        result = 0.0;
        return false;
      }
      else
      {
        if (!Number.TryParseDouble(s, style, info, out result))
        {
          string str = s.Trim();
          if (str.Equals(info.PositiveInfinitySymbol))
            result = double.PositiveInfinity;
          else if (str.Equals(info.NegativeInfinitySymbol))
          {
            result = double.NegativeInfinity;
          }
          else
          {
            if (!str.Equals(info.NaNSymbol))
              return false;
            result = double.NaN;
          }
        }
        return true;
      }
    }

    public TypeCode GetTypeCode()
    {
      return TypeCode.Double;
    }

    [__DynamicallyInvokable]
    bool IConvertible.ToBoolean(IFormatProvider provider)
    {
      return Convert.ToBoolean(this);
    }

    [__DynamicallyInvokable]
    char IConvertible.ToChar(IFormatProvider provider)
    {
      string key = "InvalidCast_FromTo";
      object[] objArray = new object[2];
      int index1 = 0;
      string str1 = "Double";
      objArray[index1] = (object) str1;
      int index2 = 1;
      string str2 = "Char";
      objArray[index2] = (object) str2;
      throw new InvalidCastException(Environment.GetResourceString(key, objArray));
    }

    [__DynamicallyInvokable]
    sbyte IConvertible.ToSByte(IFormatProvider provider)
    {
      return Convert.ToSByte(this);
    }

    [__DynamicallyInvokable]
    byte IConvertible.ToByte(IFormatProvider provider)
    {
      return Convert.ToByte(this);
    }

    [__DynamicallyInvokable]
    short IConvertible.ToInt16(IFormatProvider provider)
    {
      return Convert.ToInt16(this);
    }

    [__DynamicallyInvokable]
    ushort IConvertible.ToUInt16(IFormatProvider provider)
    {
      return Convert.ToUInt16(this);
    }

    [__DynamicallyInvokable]
    int IConvertible.ToInt32(IFormatProvider provider)
    {
      return Convert.ToInt32(this);
    }

    [__DynamicallyInvokable]
    uint IConvertible.ToUInt32(IFormatProvider provider)
    {
      return Convert.ToUInt32(this);
    }

    [__DynamicallyInvokable]
    long IConvertible.ToInt64(IFormatProvider provider)
    {
      return Convert.ToInt64(this);
    }

    [__DynamicallyInvokable]
    ulong IConvertible.ToUInt64(IFormatProvider provider)
    {
      return Convert.ToUInt64(this);
    }

    [__DynamicallyInvokable]
    float IConvertible.ToSingle(IFormatProvider provider)
    {
      return Convert.ToSingle(this);
    }

    [__DynamicallyInvokable]
    double IConvertible.ToDouble(IFormatProvider provider)
    {
      return this;
    }

    [__DynamicallyInvokable]
    Decimal IConvertible.ToDecimal(IFormatProvider provider)
    {
      return Convert.ToDecimal(this);
    }

    [__DynamicallyInvokable]
    DateTime IConvertible.ToDateTime(IFormatProvider provider)
    {
      string key = "InvalidCast_FromTo";
      object[] objArray = new object[2];
      int index1 = 0;
      string str1 = "Double";
      objArray[index1] = (object) str1;
      int index2 = 1;
      string str2 = "DateTime";
      objArray[index2] = (object) str2;
      throw new InvalidCastException(Environment.GetResourceString(key, objArray));
    }

    [__DynamicallyInvokable]
    object IConvertible.ToType(Type type, IFormatProvider provider)
    {
      return Convert.DefaultToType((IConvertible) this, type, provider);
    }
  }
}