Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /* Copyright (C) 2007-2015 Free Software Foundation, Inc.
  2.  
  3. This file is part of GCC.
  4.  
  5. GCC is free software; you can redistribute it and/or modify it under
  6. the terms of the GNU General Public License as published by the Free
  7. Software Foundation; either version 3, or (at your option) any later
  8. version.
  9.  
  10. GCC is distributed in the hope that it will be useful, but WITHOUT ANY
  11. WARRANTY; without even the implied warranty of MERCHANTABILITY or
  12. FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  13. for more details.
  14.  
  15. Under Section 7 of GPL version 3, you are granted additional
  16. permissions described in the GCC Runtime Library Exception, version
  17. 3.1, as published by the Free Software Foundation.
  18.  
  19. You should have received a copy of the GNU General Public License and
  20. a copy of the GCC Runtime Library Exception along with this program;
  21. see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
  22. <http://www.gnu.org/licenses/>.  */
  23.  
  24. #include "bid_internal.h"
  25.  
  26. // the first entry of nr_digits[i - 1] (where 1 <= i <= 113), indicates
  27. // the number of decimal digits needed to represent a binary number with i bits;
  28. // however, if a binary number of i bits may require either k or k + 1 decimal
  29. // digits, then the first entry of nr_digits[i - 1] is 0; in this case if the
  30. // number is less than the value represented by the second and third entries
  31. // concatenated, then the number of decimal digits k is the fourth entry, else
  32. // the number of decimal digits is the fourth entry plus 1
  33. DEC_DIGITS nr_digits[] = {      // only the first entry is used if it is not 0
  34.   {1, 0x0000000000000000ULL, 0x000000000000000aULL, 1}
  35.   ,     //   1-bit n < 10^1
  36.   {1, 0x0000000000000000ULL, 0x000000000000000aULL, 1}
  37.   ,     //   2-bit n < 10^1
  38.   {1, 0x0000000000000000ULL, 0x000000000000000aULL, 1}
  39.   ,     //   3-bit n < 10^1
  40.   {0, 0x0000000000000000ULL, 0x000000000000000aULL, 1}
  41.   ,     //   4-bit n ? 10^1
  42.   {2, 0x0000000000000000ULL, 0x0000000000000064ULL, 2}
  43.   ,     //   5-bit n < 10^2
  44.   {2, 0x0000000000000000ULL, 0x0000000000000064ULL, 2}
  45.   ,     //   6-bit n < 10^2
  46.   {0, 0x0000000000000000ULL, 0x0000000000000064ULL, 2}
  47.   ,     //   7-bit n ? 10^2
  48.   {3, 0x0000000000000000ULL, 0x00000000000003e8ULL, 3}
  49.   ,     //   8-bit n < 10^3
  50.   {3, 0x0000000000000000ULL, 0x00000000000003e8ULL, 3}
  51.   ,     //   9-bit n < 10^3
  52.   {0, 0x0000000000000000ULL, 0x00000000000003e8ULL, 3}
  53.   ,     //  10-bit n ? 10^3
  54.   {4, 0x0000000000000000ULL, 0x0000000000002710ULL, 4}
  55.   ,     //  11-bit n < 10^4
  56.   {4, 0x0000000000000000ULL, 0x0000000000002710ULL, 4}
  57.   ,     //  12-bit n < 10^4
  58.   {4, 0x0000000000000000ULL, 0x0000000000002710ULL, 4}
  59.   ,     //  13-bit n < 10^4
  60.   {0, 0x0000000000000000ULL, 0x0000000000002710ULL, 4}
  61.   ,     //  14-bit n ? 10^4
  62.   {5, 0x0000000000000000ULL, 0x00000000000186a0ULL, 5}
  63.   ,     //  15-bit n < 10^5
  64.   {5, 0x0000000000000000ULL, 0x00000000000186a0ULL, 5}
  65.   ,     //  16-bit n < 10^5
  66.   {0, 0x0000000000000000ULL, 0x00000000000186a0ULL, 5}
  67.   ,     //  17-bit n ? 10^5
  68.   {6, 0x0000000000000000ULL, 0x00000000000f4240ULL, 6}
  69.   ,     //  18-bit n < 10^6
  70.   {6, 0x0000000000000000ULL, 0x00000000000f4240ULL, 6}
  71.   ,     //  19-bit n < 10^6
  72.   {0, 0x0000000000000000ULL, 0x00000000000f4240ULL, 6}
  73.   ,     //  20-bit n ? 10^6
  74.   {7, 0x0000000000000000ULL, 0x0000000000989680ULL, 7}
  75.   ,     //  21-bit n < 10^7
  76.   {7, 0x0000000000000000ULL, 0x0000000000989680ULL, 7}
  77.   ,     //  22-bit n < 10^7
  78.   {7, 0x0000000000000000ULL, 0x0000000000989680ULL, 7}
  79.   ,     //  23-bit n < 10^7
  80.   {0, 0x0000000000000000ULL, 0x0000000000989680ULL, 7}
  81.   ,     //  24-bit n ? 10^7
  82.   {8, 0x0000000000000000ULL, 0x0000000005f5e100ULL, 8}
  83.   ,     //  25-bit n < 10^8
  84.   {8, 0x0000000000000000ULL, 0x0000000005f5e100ULL, 8}
  85.   ,     //  26-bit n < 10^8
  86.   {0, 0x0000000000000000ULL, 0x0000000005f5e100ULL, 8}
  87.   ,     //  27-bit n ? 10^8
  88.   {9, 0x0000000000000000ULL, 0x000000003b9aca00ULL, 9}
  89.   ,     //  28-bit n < 10^9
  90.   {9, 0x0000000000000000ULL, 0x000000003b9aca00ULL, 9}
  91.   ,     //  29-bit n < 10^9
  92.   {0, 0x0000000000000000ULL, 0x000000003b9aca00ULL, 9}
  93.   ,     //  30-bit n ? 10^9
  94.   {10, 0x0000000000000000ULL, 0x00000002540be400ULL, 10}
  95.   ,     //  31-bit n < 10^10
  96.   {10, 0x0000000000000000ULL, 0x00000002540be400ULL, 10}
  97.   ,     //  32-bit n < 10^10
  98.   {10, 0x0000000000000000ULL, 0x00000002540be400ULL, 10}
  99.   ,     //  33-bit n < 10^10
  100.   {0, 0x0000000000000000ULL, 0x00000002540be400ULL, 10}
  101.   ,     //  34-bit n ? 10^10
  102.   {11, 0x0000000000000000ULL, 0x000000174876e800ULL, 11}
  103.   ,     //  35-bit n < 10^11
  104.   {11, 0x0000000000000000ULL, 0x000000174876e800ULL, 11}
  105.   ,     //  36-bit n < 10^11
  106.   {0, 0x0000000000000000ULL, 0x000000174876e800ULL, 11}
  107.   ,     //  37-bit n ? 10^11
  108.   {12, 0x0000000000000000ULL, 0x000000e8d4a51000ULL, 12}
  109.   ,     //  38-bit n < 10^12
  110.   {12, 0x0000000000000000ULL, 0x000000e8d4a51000ULL, 12}
  111.   ,     //  39-bit n < 10^12
  112.   {0, 0x0000000000000000ULL, 0x000000e8d4a51000ULL, 12}
  113.   ,     //  40-bit n ? 10^12
  114.   {13, 0x0000000000000000ULL, 0x000009184e72a000ULL, 13}
  115.   ,     //  41-bit n < 10^13
  116.   {13, 0x0000000000000000ULL, 0x000009184e72a000ULL, 13}
  117.   ,     //  42-bit n < 10^13
  118.   {13, 0x0000000000000000ULL, 0x000009184e72a000ULL, 13}
  119.   ,     //  43-bit n < 10^13
  120.   {0, 0x0000000000000000ULL, 0x000009184e72a000ULL, 13}
  121.   ,     //  44-bit n ? 10^13
  122.   {14, 0x0000000000000000ULL, 0x00005af3107a4000ULL, 14}
  123.   ,     //  45-bit n < 10^14
  124.   {14, 0x0000000000000000ULL, 0x00005af3107a4000ULL, 14}
  125.   ,     //  46-bit n < 10^14
  126.   {0, 0x0000000000000000ULL, 0x00005af3107a4000ULL, 14}
  127.   ,     //  47-bit n ? 10^14
  128.   {15, 0x0000000000000000ULL, 0x00038d7ea4c68000ULL, 15}
  129.   ,     //  48-bit n < 10^15
  130.   {15, 0x0000000000000000ULL, 0x00038d7ea4c68000ULL, 15}
  131.   ,     //  49-bit n < 10^15
  132.   {0, 0x0000000000000000ULL, 0x00038d7ea4c68000ULL, 15}
  133.   ,     //  50-bit n ? 10^15
  134.   {16, 0x0000000000000000ULL, 0x002386f26fc10000ULL, 16}
  135.   ,     //  51-bit n < 10^16
  136.   {16, 0x0000000000000000ULL, 0x002386f26fc10000ULL, 16}
  137.   ,     //  52-bit n < 10^16
  138.   {16, 0x0000000000000000ULL, 0x002386f26fc10000ULL, 16}
  139.   ,     //  53-bit n < 10^16
  140.   {0, 0x0000000000000000ULL, 0x002386f26fc10000ULL, 16}
  141.   ,     //  54-bit n ? 10^16
  142.   {17, 0x0000000000000000ULL, 0x016345785d8a0000ULL, 17}
  143.   ,     //  55-bit n < 10^17
  144.   {17, 0x0000000000000000ULL, 0x016345785d8a0000ULL, 17}
  145.   ,     //  56-bit n < 10^17
  146.   {0, 0x0000000000000000ULL, 0x016345785d8a0000ULL, 17}
  147.   ,     //  57-bit n ? 10^17
  148.   {18, 0x0000000000000000ULL, 0x0de0b6b3a7640000ULL, 18}
  149.   ,     //  58-bit n < 10^18
  150.   {18, 0x0000000000000000ULL, 0x0de0b6b3a7640000ULL, 18}
  151.   ,     //  59-bit n < 10^18
  152.   {0, 0x0000000000000000ULL, 0x0de0b6b3a7640000ULL, 18}
  153.   ,     //  60-bit n ? 10^18
  154.   {19, 0x0000000000000000ULL, 0x8ac7230489e80000ULL, 19}
  155.   ,     //  61-bit n < 10^19
  156.   {19, 0x0000000000000000ULL, 0x8ac7230489e80000ULL, 19}
  157.   ,     //  62-bit n < 10^19
  158.   {19, 0x0000000000000000ULL, 0x8ac7230489e80000ULL, 19}
  159.   ,     //  63-bit n < 10^19
  160.   {0, 0x0000000000000000ULL, 0x8ac7230489e80000ULL, 19}
  161.   ,     //  64-bit n ? 10^19
  162.   {20, 0x0000000000000005ULL, 0x6bc75e2d63100000ULL, 20}
  163.   ,     //  65-bit n < 10^20
  164.   {20, 0x0000000000000005ULL, 0x6bc75e2d63100000ULL, 20}
  165.   ,     //  66-bit n < 10^20
  166.   {0, 0x0000000000000005ULL, 0x6bc75e2d63100000ULL, 20}
  167.   ,     //  67-bit n ? 10^20
  168.   {21, 0x0000000000000036ULL, 0x35c9adc5dea00000ULL, 21}
  169.   ,     //  68-bit n < 10^21
  170.   {21, 0x0000000000000036ULL, 0x35c9adc5dea00000ULL, 21}
  171.   ,     //  69-bit n < 10^21
  172.   {0, 0x0000000000000036ULL, 0x35c9adc5dea00000ULL, 21}
  173.   ,     //  70-bit n ? 10^21
  174.   {22, 0x000000000000021eULL, 0x19e0c9bab2400000ULL, 22}
  175.   ,     //  71-bit n < 10^22
  176.   {22, 0x000000000000021eULL, 0x19e0c9bab2400000ULL, 22}
  177.   ,     //  72-bit n < 10^22
  178.   {22, 0x000000000000021eULL, 0x19e0c9bab2400000ULL, 22}
  179.   ,     //  73-bit n < 10^22
  180.   {0, 0x000000000000021eULL, 0x19e0c9bab2400000ULL, 22}
  181.   ,     //  74-bit n ? 10^22
  182.   {23, 0x000000000000152dULL, 0x02c7e14af6800000ULL, 23}
  183.   ,     //  75-bit n < 10^23
  184.   {23, 0x000000000000152dULL, 0x02c7e14af6800000ULL, 23}
  185.   ,     //  76-bit n < 10^23
  186.   {0, 0x000000000000152dULL, 0x02c7e14af6800000ULL, 23}
  187.   ,     //  77-bit n ? 10^23
  188.   {24, 0x000000000000d3c2ULL, 0x1bcecceda1000000ULL, 24}
  189.   ,     //  78-bit n < 10^24
  190.   {24, 0x000000000000d3c2ULL, 0x1bcecceda1000000ULL, 24}
  191.   ,     //  79-bit n < 10^24
  192.   {0, 0x000000000000d3c2ULL, 0x1bcecceda1000000ULL, 24}
  193.   ,     //  80-bit n ? 10^24
  194.   {25, 0x0000000000084595ULL, 0x161401484a000000ULL, 25}
  195.   ,     //  81-bit n < 10^25
  196.   {25, 0x0000000000084595ULL, 0x161401484a000000ULL, 25}
  197.   ,     //  82-bit n < 10^25
  198.   {25, 0x0000000000084595ULL, 0x161401484a000000ULL, 25}
  199.   ,     //  83-bit n < 10^25
  200.   {0, 0x0000000000084595ULL, 0x161401484a000000ULL, 25}
  201.   ,     //  84-bit n ? 10^25
  202.   {26, 0x000000000052b7d2ULL, 0xdcc80cd2e4000000ULL, 26}
  203.   ,     //  85-bit n < 10^26
  204.   {26, 0x000000000052b7d2ULL, 0xdcc80cd2e4000000ULL, 26}
  205.   ,     //  86-bit n < 10^26
  206.   {0, 0x000000000052b7d2ULL, 0xdcc80cd2e4000000ULL, 26}
  207.   ,     //  87-bit n ? 10^26
  208.   {27, 0x00000000033b2e3cULL, 0x9fd0803ce8000000ULL, 27}
  209.   ,     //  88-bit n < 10^27
  210.   {27, 0x00000000033b2e3cULL, 0x9fd0803ce8000000ULL, 27}
  211.   ,     //  89-bit n < 10^27
  212.   {0, 0x00000000033b2e3cULL, 0x9fd0803ce8000000ULL, 27}
  213.   ,     //  90-bit n ? 10^27
  214.   {28, 0x00000000204fce5eULL, 0x3e25026110000000ULL, 28}
  215.   ,     //  91-bit n < 10^28
  216.   {28, 0x00000000204fce5eULL, 0x3e25026110000000ULL, 28}
  217.   ,     //  92-bit n < 10^28
  218.   {28, 0x00000000204fce5eULL, 0x3e25026110000000ULL, 28}
  219.   ,     //  93-bit n < 10^28
  220.   {0, 0x00000000204fce5eULL, 0x3e25026110000000ULL, 28}
  221.   ,     //  94-bit n ? 10^28
  222.   {29, 0x00000001431e0faeULL, 0x6d7217caa0000000ULL, 29}
  223.   ,     //  95-bit n < 10^29
  224.   {29, 0x00000001431e0faeULL, 0x6d7217caa0000000ULL, 29}
  225.   ,     //  96-bit n < 10^29
  226.   {0, 0x00000001431e0faeULL, 0x6d7217caa0000000ULL, 29}
  227.   ,     //  97-bit n ? 10^29
  228.   {30, 0x0000000c9f2c9cd0ULL, 0x4674edea40000000ULL, 30}
  229.   ,     //  98-bit n < 10^30
  230.   {30, 0x0000000c9f2c9cd0ULL, 0x4674edea40000000ULL, 30}
  231.   ,     //  99-bit n < 10^30
  232.   {0, 0x0000000c9f2c9cd0ULL, 0x4674edea40000000ULL, 30}
  233.   ,     // 100-bit n ? 10^30
  234.   {31, 0x0000007e37be2022ULL, 0xc0914b2680000000ULL, 31}
  235.   ,     // 101-bit n < 10^31
  236.   {31, 0x0000007e37be2022ULL, 0xc0914b2680000000ULL, 31}
  237.   ,     // 102-bit n < 10^31
  238.   {0, 0x0000007e37be2022ULL, 0xc0914b2680000000ULL, 31}
  239.   ,     // 103-bit n ? 10^31
  240.   {32, 0x000004ee2d6d415bULL, 0x85acef8100000000ULL, 32}
  241.   ,     // 104-bit n < 10^32
  242.   {32, 0x000004ee2d6d415bULL, 0x85acef8100000000ULL, 32}
  243.   ,     // 105-bit n < 10^32
  244.   {32, 0x000004ee2d6d415bULL, 0x85acef8100000000ULL, 32}
  245.   ,     // 106-bit n < 10^32
  246.   {0, 0x000004ee2d6d415bULL, 0x85acef8100000000ULL, 32}
  247.   ,     // 107-bit n ? 10^32
  248.   {33, 0x0000314dc6448d93ULL, 0x38c15b0a00000000ULL, 33}
  249.   ,     // 108-bit n < 10^33
  250.   {33, 0x0000314dc6448d93ULL, 0x38c15b0a00000000ULL, 33}
  251.   ,     // 109-bit n < 10^33
  252.   {0, 0x0000314dc6448d93ULL, 0x38c15b0a00000000ULL, 33}
  253.   ,     // 100-bit n ? 10^33
  254.   {34, 0x0001ed09bead87c0ULL, 0x378d8e6400000000ULL, 34}
  255.   ,     // 111-bit n < 10^34
  256.   {34, 0x0001ed09bead87c0ULL, 0x378d8e6400000000ULL, 34}
  257.   ,     // 112-bit n < 10^34
  258.   {0, 0x0001ed09bead87c0ULL, 0x378d8e6400000000ULL, 34} // 113-bit n ? 10^34
  259. //{ 35, 0x0013426172c74d82ULL, 0x2b878fe800000000ULL, 35 }  // 114-bit n < 10^35
  260. };
  261.  
  262. // midpoint64[i - 1] = 1/2 * 10^i = 5 * 10^(i-1), 1 <= i <= 19
  263. UINT64 midpoint64[] = {
  264.   0x0000000000000005ULL,        // 1/2 * 10^1 = 5 * 10^0
  265.   0x0000000000000032ULL,        // 1/2 * 10^2 = 5 * 10^1
  266.   0x00000000000001f4ULL,        // 1/2 * 10^3 = 5 * 10^2
  267.   0x0000000000001388ULL,        // 1/2 * 10^4 = 5 * 10^3
  268.   0x000000000000c350ULL,        // 1/2 * 10^5 = 5 * 10^4
  269.   0x000000000007a120ULL,        // 1/2 * 10^6 = 5 * 10^5
  270.   0x00000000004c4b40ULL,        // 1/2 * 10^7 = 5 * 10^6
  271.   0x0000000002faf080ULL,        // 1/2 * 10^8 = 5 * 10^7
  272.   0x000000001dcd6500ULL,        // 1/2 * 10^9 = 5 * 10^8
  273.   0x000000012a05f200ULL,        // 1/2 * 10^10 = 5 * 10^9
  274.   0x0000000ba43b7400ULL,        // 1/2 * 10^11 = 5 * 10^10
  275.   0x000000746a528800ULL,        // 1/2 * 10^12 = 5 * 10^11
  276.   0x0000048c27395000ULL,        // 1/2 * 10^13 = 5 * 10^12
  277.   0x00002d79883d2000ULL,        // 1/2 * 10^14 = 5 * 10^13
  278.   0x0001c6bf52634000ULL,        // 1/2 * 10^15 = 5 * 10^14
  279.   0x0011c37937e08000ULL,        // 1/2 * 10^16 = 5 * 10^15
  280.   0x00b1a2bc2ec50000ULL,        // 1/2 * 10^17 = 5 * 10^16
  281.   0x06f05b59d3b20000ULL,        // 1/2 * 10^18 = 5 * 10^17
  282.   0x4563918244f40000ULL // 1/2 * 10^19 = 5 * 10^18
  283. };
  284.  
  285. // midpoint128[i - 20] = 1/2 * 10^i = 5 * 10^(i-1), 20 <= i <= 38
  286. UINT128 midpoint128[] = {       // the 64-bit word order is L, H
  287.   {{0xb5e3af16b1880000ULL, 0x0000000000000002ULL}
  288.    }
  289.   ,     // 1/2 * 10^20 = 5 * 10^19
  290.   {{0x1ae4d6e2ef500000ULL, 0x000000000000001bULL}
  291.    }
  292.   ,     // 1/2 * 10^21 = 5 * 10^20
  293.   {{0x0cf064dd59200000ULL, 0x000000000000010fULL}
  294.    }
  295.   ,     // 1/2 * 10^22 = 5 * 10^21
  296.   {{0x8163f0a57b400000ULL, 0x0000000000000a96ULL}
  297.    }
  298.   ,     // 1/2 * 10^23 = 5 * 10^22
  299.   {{0x0de76676d0800000ULL, 0x00000000000069e1ULL}
  300.    }
  301.   ,     // 1/2 * 10^24 = 5 * 10^23
  302.   {{0x8b0a00a425000000ULL, 0x00000000000422caULL}
  303.    }
  304.   ,     // 1/2 * 10^25 = 5 * 10^24
  305.   {{0x6e64066972000000ULL, 0x0000000000295be9ULL}
  306.    }
  307.   ,     // 1/2 * 10^26 = 5 * 10^25
  308.   {{0x4fe8401e74000000ULL, 0x00000000019d971eULL}
  309.    }
  310.   ,     // 1/2 * 10^27 = 5 * 10^26
  311.   {{0x1f12813088000000ULL, 0x000000001027e72fULL}
  312.    }
  313.   ,     // 1/2 * 10^28 = 5 * 10^27
  314.   {{0x36b90be550000000ULL, 0x00000000a18f07d7ULL}
  315.    }
  316.   ,     // 1/2 * 10^29 = 5 * 10^28
  317.   {{0x233a76f520000000ULL, 0x000000064f964e68ULL}
  318.    }
  319.   ,     // 1/2 * 10^30 = 5 * 10^29
  320.   {{0x6048a59340000000ULL, 0x0000003f1bdf1011ULL}
  321.    }
  322.   ,     // 1/2 * 10^31 = 5 * 10^30
  323.   {{0xc2d677c080000000ULL, 0x0000027716b6a0adULL}
  324.    }
  325.   ,     // 1/2 * 10^32 = 5 * 10^31
  326.   {{0x9c60ad8500000000ULL, 0x000018a6e32246c9ULL}
  327.    }
  328.   ,     // 1/2 * 10^33 = 5 * 10^32
  329.   {{0x1bc6c73200000000ULL, 0x0000f684df56c3e0ULL}
  330.    }
  331.   ,     // 1/2 * 10^34 = 5 * 10^33
  332.   {{0x15c3c7f400000000ULL, 0x0009a130b963a6c1ULL}
  333.    }
  334.   ,     // 1/2 * 10^35 = 5 * 10^34
  335.   {{0xd9a5cf8800000000ULL, 0x00604be73de4838aULL}
  336.    }
  337.   ,     // 1/2 * 10^36 = 5 * 10^35
  338.   {{0x807a1b5000000000ULL, 0x03c2f7086aed236cULL}
  339.    }
  340.   ,     // 1/2 * 10^37 = 5 * 10^36
  341.   {{0x04c5112000000000ULL, 0x259da6542d43623dULL}
  342.    }    // 1/2 * 10^38 = 5 * 10^37
  343. };
  344.  
  345. // midpoint192[i - 39] = 1/2 * 10^i = 5 * 10^(i-1), 39 <= i <= 58
  346. UINT192 midpoint192[] = {       // the 64-bit word order is L, M, H
  347.   {{0x2fb2ab4000000000ULL, 0x78287f49c4a1d662ULL, 0x0000000000000001ULL}
  348.    }
  349.   ,
  350.   // 1/2 * 10^39 = 5 * 10^38
  351.   {{0xdcfab08000000000ULL, 0xb194f8e1ae525fd5ULL, 0x000000000000000eULL}
  352.    }
  353.   ,
  354.   // 1/2 * 10^40 = 5 * 10^39
  355.   {{0xa1cae50000000000ULL, 0xefd1b8d0cf37be5aULL, 0x0000000000000092ULL}
  356.    }
  357.   ,
  358.   // 1/2 * 10^41 = 5 * 10^40
  359.   {{0x51ecf20000000000ULL, 0x5e313828182d6f8aULL, 0x00000000000005bdULL}
  360.    }
  361.   ,
  362.   // 1/2 * 10^42 = 5 * 10^41
  363.   {{0x3341740000000000ULL, 0xadec3190f1c65b67ULL, 0x0000000000003965ULL}
  364.    }
  365.   ,
  366.   // 1/2 * 10^43 = 5 * 10^42
  367.   {{0x008e880000000000ULL, 0xcb39efa971bf9208ULL, 0x0000000000023df8ULL}
  368.    }
  369.   ,
  370.   // 1/2 * 10^44 = 5 * 10^43
  371.   {{0x0591500000000000ULL, 0xf0435c9e717bb450ULL, 0x0000000000166bb7ULL}
  372.    }
  373.   ,
  374.   // 1/2 * 10^45 = 5 * 10^44
  375.   {{0x37ad200000000000ULL, 0x62a19e306ed50b20ULL, 0x0000000000e0352fULL}
  376.    }
  377.   ,
  378.   // 1/2 * 10^46 = 5 * 10^45
  379.   {{0x2cc3400000000000ULL, 0xda502de454526f42ULL, 0x0000000008c213d9ULL}
  380.    }
  381.   ,
  382.   // 1/2 * 10^47 = 5 * 10^46
  383.   {{0xbfa0800000000000ULL, 0x8721caeb4b385895ULL, 0x000000005794c682ULL}
  384.    }
  385.   ,
  386.   // 1/2 * 10^48 = 5 * 10^47
  387.   {{0x7c45000000000000ULL, 0x4751ed30f03375d9ULL, 0x000000036bcfc119ULL}
  388.    }
  389.   ,
  390.   // 1/2 * 10^49 = 5 * 10^48
  391.   {{0xdab2000000000000ULL, 0xc93343e962029a7eULL, 0x00000022361d8afcULL}
  392.    }
  393.   ,
  394.   // 1/2 * 10^50 = 5 * 10^49
  395.   {{0x8af4000000000000ULL, 0xdc00a71dd41a08f4ULL, 0x000001561d276ddfULL}
  396.    }
  397.   ,
  398.   // 1/2 * 10^51 = 5 * 10^50
  399.   {{0x6d88000000000000ULL, 0x9806872a4904598dULL, 0x00000d5d238a4abeULL}
  400.    }
  401.   ,
  402.   // 1/2 * 10^52 = 5 * 10^51
  403.   {{0x4750000000000000ULL, 0xf04147a6da2b7f86ULL, 0x000085a36366eb71ULL}
  404.    }
  405.   ,
  406.   // 1/2 * 10^53 = 5 * 10^52
  407.   {{0xc920000000000000ULL, 0x628ccc8485b2fb3eULL, 0x00053861e2053273ULL}
  408.    }
  409.   ,
  410.   // 1/2 * 10^54 = 5 * 10^53
  411.   {{0xdb40000000000000ULL, 0xd97ffd2d38fdd073ULL, 0x003433d2d433f881ULL}
  412.    }
  413.   ,
  414.   // 1/2 * 10^55 = 5 * 10^54
  415.   {{0x9080000000000000ULL, 0x7effe3c439ea2486ULL, 0x020a063c4a07b512ULL}
  416.    }
  417.   ,
  418.   // 1/2 * 10^56 = 5 * 10^55
  419.   {{0xa500000000000000ULL, 0xf5fee5aa43256d41ULL, 0x14643e5ae44d12b8ULL}
  420.    }
  421.   ,
  422.   // 1/2 * 10^57 = 5 * 10^56
  423.   {{0x7200000000000000ULL, 0x9bf4f8a69f764490ULL, 0xcbea6f8ceb02bb39ULL}
  424.    }
  425.   // 1/2 * 10^58 = 5 * 10^57
  426. };
  427.  
  428. // midpoint256[i - 59] = 1/2 * 10^i = 5 * 10^(i-1), 59 <= i <= 68
  429. UINT256 midpoint256[] = {       // the 64-bit word order is LL, LH, HL, HH
  430.   {{0x7400000000000000ULL, 0x1791b6823a9eada4ULL,
  431.     0xf7285b812e1b5040ULL, 0x0000000000000007ULL}
  432.    }
  433.   ,     // 1/2 * 10^59 = 5 * 10^58
  434.   {{0x8800000000000000ULL, 0xebb121164a32c86cULL,
  435.     0xa793930bcd112280ULL, 0x000000000000004fULL}
  436.    }
  437.   ,     // 1/2 * 10^60 = 5 * 10^59
  438.   {{0x5000000000000000ULL, 0x34eb4adee5fbd43dULL,
  439.     0x8bc3be7602ab5909ULL, 0x000000000000031cULL}
  440.    }
  441.   ,     // 1/2 * 10^61 = 5 * 10^60
  442.   {{0x2000000000000000ULL, 0x1130ecb4fbd64a65ULL,
  443.     0x75a5709c1ab17a5cULL, 0x0000000000001f1dULL}
  444.    }
  445.   ,     // 1/2 * 10^62 = 5 * 10^61
  446.   {{0x4000000000000000ULL, 0xabe93f11d65ee7f3ULL,
  447.     0x987666190aeec798ULL, 0x0000000000013726ULL}
  448.    }
  449.   ,     // 1/2 * 10^63 = 5 * 10^62
  450.   {{0x8000000000000000ULL, 0xb71c76b25fb50f80ULL,
  451.     0xf49ffcfa6d53cbf6ULL, 0x00000000000c2781ULL}
  452.    }
  453.   ,     // 1/2 * 10^64 = 5 * 10^63
  454.   {{0x0000000000000000ULL, 0x271ca2f7bd129b05ULL,
  455.     0x8e3fe1c84545f7a3ULL, 0x0000000000798b13ULL}
  456.    }
  457.   ,     // 1/2 * 10^65 = 5 * 10^64
  458.   {{0x0000000000000000ULL, 0x871e5dad62ba0e32ULL,
  459.     0x8e7ed1d2b4bbac5fULL, 0x0000000004bf6ec3ULL}
  460.    }
  461.   ,     // 1/2 * 10^66 = 5 * 10^65
  462.   {{0x0000000000000000ULL, 0x472fa8c5db448df4ULL,
  463.     0x90f4323b0f54bbbbULL, 0x000000002f7a53a3ULL}
  464.    }
  465.   ,     // 1/2 * 10^67 = 5 * 10^66
  466.   {{0x0000000000000000ULL, 0xc7dc97ba90ad8b88ULL,
  467.     0xa989f64e994f5550ULL, 0x00000001dac74463ULL}
  468.    }
  469.   ,     // 1/2 * 10^68 = 5 * 10^67
  470.   {{0x0000000000000000ULL, 0xce9ded49a6c77350ULL,
  471.     0x9f639f11fd195527ULL, 0x000000128bc8abe4ULL}
  472.    }
  473.   ,     // 1/2 * 10^69 = 5 * 10^68
  474.   {{0x0000000000000000ULL, 0x122b44e083ca8120ULL,
  475.     0x39e436b3e2fd538eULL, 0x000000b975d6b6eeULL}
  476.    }
  477.   ,     // 1/2 * 10^70 = 5 * 10^69
  478.   {{0x0000000000000000ULL, 0xb5b0b0c525e90b40ULL,
  479.     0x42ea2306dde5438cULL, 0x0000073e9a63254eULL}
  480.    }
  481.   ,     // 1/2 * 10^71 = 5 * 10^70
  482.   {{0x0000000000000000ULL, 0x18e6e7b37b1a7080ULL,
  483.     0x9d255e44aaf4a37fULL, 0x0000487207df750eULL}
  484.    }
  485.   ,     // 1/2 * 10^72 = 5 * 10^71
  486.   {{0x0000000000000000ULL, 0xf9050d02cf086500ULL,
  487.     0x2375aeaead8e62f6ULL, 0x0002d4744eba9292ULL}
  488.    }
  489.   ,     // 1/2 * 10^73 = 5 * 10^72
  490.   {{0x0000000000000000ULL, 0xba32821c1653f200ULL,
  491.     0x6298d2d2c78fdda5ULL, 0x001c4c8b1349b9b5ULL}
  492.    }
  493.   ,     // 1/2 * 10^74 = 5 * 10^73
  494.   {{0x0000000000000000ULL, 0x45f91518df477400ULL,
  495.     0xd9f83c3bcb9ea879ULL, 0x011afd6ec0e14115ULL}
  496.    }
  497.   ,     // 1/2 * 10^75 = 5 * 10^74
  498.   {{0x0000000000000000ULL, 0xbbbad2f8b8ca8800ULL,
  499.     0x83b25a55f43294bcULL, 0x0b0de65388cc8adaULL}
  500.    }
  501.   ,     // 1/2 * 10^76 = 5 * 10^75
  502.   {{0x0000000000000000ULL, 0x554c3db737e95000ULL,
  503.     0x24f7875b89f9cf5fULL, 0x6e8aff4357fd6c89ULL}
  504.    }    // 1/2 * 10^77 = 5 * 10^76
  505. };
  506.  
  507. // ten2k64[i] = 10^i, 0 <= i <= 19
  508. UINT64 ten2k64[] = {
  509.   0x0000000000000001ULL,        // 10^0
  510.   0x000000000000000aULL,        // 10^1
  511.   0x0000000000000064ULL,        // 10^2
  512.   0x00000000000003e8ULL,        // 10^3
  513.   0x0000000000002710ULL,        // 10^4
  514.   0x00000000000186a0ULL,        // 10^5
  515.   0x00000000000f4240ULL,        // 10^6
  516.   0x0000000000989680ULL,        // 10^7
  517.   0x0000000005f5e100ULL,        // 10^8
  518.   0x000000003b9aca00ULL,        // 10^9
  519.   0x00000002540be400ULL,        // 10^10
  520.   0x000000174876e800ULL,        // 10^11
  521.   0x000000e8d4a51000ULL,        // 10^12
  522.   0x000009184e72a000ULL,        // 10^13
  523.   0x00005af3107a4000ULL,        // 10^14
  524.   0x00038d7ea4c68000ULL,        // 10^15
  525.   0x002386f26fc10000ULL,        // 10^16
  526.   0x016345785d8a0000ULL,        // 10^17
  527.   0x0de0b6b3a7640000ULL,        // 10^18
  528.   0x8ac7230489e80000ULL // 10^19 (20 digits)
  529. };
  530.  
  531.  
  532. // ten2k128[i - 20] = 10^i, 20 <= i <= 38
  533. UINT128 ten2k128[] = {  // the 64-bit word order is L, H
  534.   {{0x6bc75e2d63100000ULL, 0x0000000000000005ULL}
  535.    }
  536.   ,     // 10^20
  537.   {{0x35c9adc5dea00000ULL, 0x0000000000000036ULL}
  538.    }
  539.   ,     // 10^21
  540.   {{0x19e0c9bab2400000ULL, 0x000000000000021eULL}
  541.    }
  542.   ,     // 10^22
  543.   {{0x02c7e14af6800000ULL, 0x000000000000152dULL}
  544.    }
  545.   ,     // 10^23
  546.   {{0x1bcecceda1000000ULL, 0x000000000000d3c2ULL}
  547.    }
  548.   ,     // 10^24
  549.   {{0x161401484a000000ULL, 0x0000000000084595ULL}
  550.    }
  551.   ,     // 10^25
  552.   {{0xdcc80cd2e4000000ULL, 0x000000000052b7d2ULL}
  553.    }
  554.   ,     // 10^26
  555.   {{0x9fd0803ce8000000ULL, 0x00000000033b2e3cULL}
  556.    }
  557.   ,     // 10^27
  558.   {{0x3e25026110000000ULL, 0x00000000204fce5eULL}
  559.    }
  560.   ,     // 10^28
  561.   {{0x6d7217caa0000000ULL, 0x00000001431e0faeULL}
  562.    }
  563.   ,     // 10^29
  564.   {{0x4674edea40000000ULL, 0x0000000c9f2c9cd0ULL}
  565.    }
  566.   ,     // 10^30
  567.   {{0xc0914b2680000000ULL, 0x0000007e37be2022ULL}
  568.    }
  569.   ,     // 10^31
  570.   {{0x85acef8100000000ULL, 0x000004ee2d6d415bULL}
  571.    }
  572.   ,     // 10^32
  573.   {{0x38c15b0a00000000ULL, 0x0000314dc6448d93ULL}
  574.    }
  575.   ,     // 10^33
  576.   {{0x378d8e6400000000ULL, 0x0001ed09bead87c0ULL}
  577.    }
  578.   ,     // 10^34
  579.   {{0x2b878fe800000000ULL, 0x0013426172c74d82ULL}
  580.    }
  581.   ,     // 10^35
  582.   {{0xb34b9f1000000000ULL, 0x00c097ce7bc90715ULL}
  583.    }
  584.   ,     // 10^36
  585.   {{0x00f436a000000000ULL, 0x0785ee10d5da46d9ULL}
  586.    }
  587.   ,     // 10^37
  588.   {{0x098a224000000000ULL, 0x4b3b4ca85a86c47aULL}
  589.    }    // 10^38 (39 digits)
  590. };
  591.  
  592. // might split into ten2k192[] and ten2k256[]
  593.  
  594. // ten2k256[i - 39] = 10^i, 39 <= i <= 68
  595. UINT256 ten2k256[] = {  // the 64-bit word order is LL, LH, HL, HH
  596.   {{0x5f65568000000000ULL, 0xf050fe938943acc4ULL,
  597.     0x0000000000000002ULL, 0x0000000000000000ULL}
  598.    }
  599.   ,     // 10^39
  600.   {{0xb9f5610000000000ULL, 0x6329f1c35ca4bfabULL,
  601.     0x000000000000001dULL, 0x0000000000000000ULL}
  602.    }
  603.   ,     // 10^40
  604.   {{0x4395ca0000000000ULL, 0xdfa371a19e6f7cb5ULL,
  605.     0x0000000000000125ULL, 0x0000000000000000ULL}
  606.    }
  607.   ,     // 10^41
  608.   {{0xa3d9e40000000000ULL, 0xbc627050305adf14ULL,
  609.     0x0000000000000b7aULL, 0x0000000000000000ULL}
  610.    }
  611.   ,     // 10^42
  612.   {{0x6682e80000000000ULL, 0x5bd86321e38cb6ceULL,
  613.     0x00000000000072cbULL, 0x0000000000000000ULL}
  614.    }
  615.   ,     // 10^43
  616.   {{0x011d100000000000ULL, 0x9673df52e37f2410ULL,
  617.     0x0000000000047bf1ULL, 0x0000000000000000ULL}
  618.    }
  619.   ,     // 10^44
  620.   {{0x0b22a00000000000ULL, 0xe086b93ce2f768a0ULL,
  621.     0x00000000002cd76fULL, 0x0000000000000000ULL}
  622.    }
  623.   ,     // 10^45
  624.   {{0x6f5a400000000000ULL, 0xc5433c60ddaa1640ULL,
  625.     0x0000000001c06a5eULL, 0x0000000000000000ULL}
  626.    }
  627.   ,     // 10^46
  628.   {{0x5986800000000000ULL, 0xb4a05bc8a8a4de84ULL,
  629.     0x00000000118427b3ULL, 0x0000000000000000ULL}
  630.    }
  631.   ,     // 10^47
  632.   {{0x7f41000000000000ULL, 0x0e4395d69670b12bULL,
  633.     0x00000000af298d05ULL, 0x0000000000000000ULL}
  634.    }
  635.   ,     // 10^48
  636.   {{0xf88a000000000000ULL, 0x8ea3da61e066ebb2ULL,
  637.     0x00000006d79f8232ULL, 0x0000000000000000ULL}
  638.    }
  639.   ,     // 10^49
  640.   {{0xb564000000000000ULL, 0x926687d2c40534fdULL,
  641.     0x000000446c3b15f9ULL, 0x0000000000000000ULL}
  642.    }
  643.   ,     // 10^50
  644.   {{0x15e8000000000000ULL, 0xb8014e3ba83411e9ULL,
  645.     0x000002ac3a4edbbfULL, 0x0000000000000000ULL}
  646.    }
  647.   ,     // 10^51
  648.   {{0xdb10000000000000ULL, 0x300d0e549208b31aULL,
  649.     0x00001aba4714957dULL, 0x0000000000000000ULL}
  650.    }
  651.   ,     // 10^52
  652.   {{0x8ea0000000000000ULL, 0xe0828f4db456ff0cULL,
  653.     0x00010b46c6cdd6e3ULL, 0x0000000000000000ULL}
  654.    }
  655.   ,     // 10^53
  656.   {{0x9240000000000000ULL, 0xc51999090b65f67dULL,
  657.     0x000a70c3c40a64e6ULL, 0x0000000000000000ULL}
  658.    }
  659.   ,     // 10^54
  660.   {{0xb680000000000000ULL, 0xb2fffa5a71fba0e7ULL,
  661.     0x006867a5a867f103ULL, 0x0000000000000000ULL}
  662.    }
  663.   ,     // 10^55
  664.   {{0x2100000000000000ULL, 0xfdffc78873d4490dULL,
  665.     0x04140c78940f6a24ULL, 0x0000000000000000ULL}
  666.    }
  667.   ,     // 10^56
  668.   {{0x4a00000000000000ULL, 0xebfdcb54864ada83ULL,
  669.     0x28c87cb5c89a2571ULL, 0x0000000000000000ULL}
  670.    }
  671.   ,     // 10^57 (58 digits)
  672.   {{0xe400000000000000ULL, 0x37e9f14d3eec8920ULL,
  673.     0x97d4df19d6057673ULL, 0x0000000000000001ULL}
  674.    }
  675.   ,     // 10^58
  676.   {{0xe800000000000000ULL, 0x2f236d04753d5b48ULL,
  677.     0xee50b7025c36a080ULL, 0x000000000000000fULL}
  678.    }
  679.   ,     // 10^59
  680.   {{0x1000000000000000ULL, 0xd762422c946590d9ULL,
  681.     0x4f2726179a224501ULL, 0x000000000000009fULL}
  682.    }
  683.   ,     // 10^60
  684.   {{0xa000000000000000ULL, 0x69d695bdcbf7a87aULL,
  685.     0x17877cec0556b212ULL, 0x0000000000000639ULL}
  686.    }
  687.   ,     // 10^61
  688.   {{0x4000000000000000ULL, 0x2261d969f7ac94caULL,
  689.     0xeb4ae1383562f4b8ULL, 0x0000000000003e3aULL}
  690.    }
  691.   ,     // 10^62
  692.   {{0x8000000000000000ULL, 0x57d27e23acbdcfe6ULL,
  693.     0x30eccc3215dd8f31ULL, 0x0000000000026e4dULL}
  694.    }
  695.   ,     // 10^63
  696.   {{0x0000000000000000ULL, 0x6e38ed64bf6a1f01ULL,
  697.     0xe93ff9f4daa797edULL, 0x0000000000184f03ULL}
  698.    }
  699.   ,     // 10^64
  700.   {{0x0000000000000000ULL, 0x4e3945ef7a25360aULL,
  701.     0x1c7fc3908a8bef46ULL, 0x0000000000f31627ULL}
  702.    }
  703.   ,     // 10^65
  704.   {{0x0000000000000000ULL, 0x0e3cbb5ac5741c64ULL,
  705.     0x1cfda3a5697758bfULL, 0x00000000097edd87ULL}
  706.    }
  707.   ,     // 10^66
  708.   {{0x0000000000000000ULL, 0x8e5f518bb6891be8ULL,
  709.     0x21e864761ea97776ULL, 0x000000005ef4a747ULL}
  710.    }
  711.   ,     // 10^67
  712.   {{0x0000000000000000ULL, 0x8fb92f75215b1710ULL,
  713.     0x5313ec9d329eaaa1ULL, 0x00000003b58e88c7ULL}
  714.    }
  715.   ,     // 10^68
  716.   {{0x0000000000000000ULL, 0x9d3bda934d8ee6a0ULL,
  717.     0x3ec73e23fa32aa4fULL, 0x00000025179157c9ULL}
  718.    }
  719.   ,     // 10^69
  720.   {{0x0000000000000000ULL, 0x245689c107950240ULL,
  721.     0x73c86d67c5faa71cULL, 0x00000172ebad6ddcULL}
  722.    }
  723.   ,     // 10^70
  724.   {{0x0000000000000000ULL, 0x6b61618a4bd21680ULL,
  725.     0x85d4460dbbca8719ULL, 0x00000e7d34c64a9cULL}
  726.    }
  727.   ,     // 10^71
  728.   {{0x0000000000000000ULL, 0x31cdcf66f634e100ULL,
  729.     0x3a4abc8955e946feULL, 0x000090e40fbeea1dULL}
  730.    }
  731.   ,     // 10^72
  732.   {{0x0000000000000000ULL, 0xf20a1a059e10ca00ULL,
  733.     0x46eb5d5d5b1cc5edULL, 0x0005a8e89d752524ULL}
  734.    }
  735.   ,     // 10^73
  736.   {{0x0000000000000000ULL, 0x746504382ca7e400ULL,
  737.     0xc531a5a58f1fbb4bULL, 0x003899162693736aULL}
  738.    }
  739.   ,     // 10^74
  740.   {{0x0000000000000000ULL, 0x8bf22a31be8ee800ULL,
  741.     0xb3f07877973d50f2ULL, 0x0235fadd81c2822bULL}
  742.    }
  743.   ,     // 10^75
  744.   {{0x0000000000000000ULL, 0x7775a5f171951000ULL,
  745.     0x0764b4abe8652979ULL, 0x161bcca7119915b5ULL}
  746.    }
  747.   ,     // 10^76
  748.   {{0x0000000000000000ULL, 0xaa987b6e6fd2a000ULL,
  749.     0x49ef0eb713f39ebeULL, 0xdd15fe86affad912ULL}
  750.    }    // 10^77
  751. };
  752.  
  753. // ten2mk128[k - 1] = 10^(-k) * 2^exp (k), where 1 <= k <= 34 and
  754. // exp (k) = shiftright128[k - 1] + 128
  755. UINT128 ten2mk128[] = {
  756.   {{0x999999999999999aULL, 0x1999999999999999ULL}
  757.    }
  758.   ,     //  10^(-1) * 2^128
  759.   {{0x28f5c28f5c28f5c3ULL, 0x028f5c28f5c28f5cULL}
  760.    }
  761.   ,     //  10^(-2) * 2^128
  762.   {{0x9db22d0e56041894ULL, 0x004189374bc6a7efULL}
  763.    }
  764.   ,     //  10^(-3) * 2^128
  765.   {{0x4af4f0d844d013aaULL, 0x00346dc5d6388659ULL}
  766.    }
  767.   ,     //  10^(-4) * 2^131
  768.   {{0x08c3f3e0370cdc88ULL, 0x0029f16b11c6d1e1ULL}
  769.    }
  770.   ,     //  10^(-5) * 2^134
  771.   {{0x6d698fe69270b06dULL, 0x00218def416bdb1aULL}
  772.    }
  773.   ,     //  10^(-6) * 2^137
  774.   {{0xaf0f4ca41d811a47ULL, 0x0035afe535795e90ULL}
  775.    }
  776.   ,     //  10^(-7) * 2^141
  777.   {{0xbf3f70834acdaea0ULL, 0x002af31dc4611873ULL}
  778.    }
  779.   ,     //  10^(-8) * 2^144
  780.   {{0x65cc5a02a23e254dULL, 0x00225c17d04dad29ULL}
  781.    }
  782.   ,     //  10^(-9) * 2^147
  783.   {{0x6fad5cd10396a214ULL, 0x0036f9bfb3af7b75ULL}
  784.    }
  785.   ,     // 10^(-10) * 2^151
  786.   {{0xbfbde3da69454e76ULL, 0x002bfaffc2f2c92aULL}
  787.    }
  788.   ,     // 10^(-11) * 2^154
  789.   {{0x32fe4fe1edd10b92ULL, 0x00232f33025bd422ULL}
  790.    }
  791.   ,     // 10^(-12) * 2^157
  792.   {{0x84ca19697c81ac1cULL, 0x00384b84d092ed03ULL}
  793.    }
  794.   ,     // 10^(-13) * 2^161
  795.   {{0x03d4e1213067bce4ULL, 0x002d09370d425736ULL}
  796.    }
  797.   ,     // 10^(-14) * 2^164
  798.   {{0x3643e74dc052fd83ULL, 0x0024075f3dceac2bULL}
  799.    }
  800.   ,     // 10^(-15) * 2^167
  801.   {{0x56d30baf9a1e626bULL, 0x0039a5652fb11378ULL}
  802.    }
  803.   ,     // 10^(-16) * 2^171
  804.   {{0x12426fbfae7eb522ULL, 0x002e1dea8c8da92dULL}
  805.    }
  806.   ,     // 10^(-17) * 2^174
  807.   {{0x41cebfcc8b9890e8ULL, 0x0024e4bba3a48757ULL}
  808.    }
  809.   ,     // 10^(-18) * 2^177
  810.   {{0x694acc7a78f41b0dULL, 0x003b07929f6da558ULL}
  811.    }
  812.   ,     // 10^(-19) * 2^181
  813.   {{0xbaa23d2ec729af3eULL, 0x002f394219248446ULL}
  814.    }
  815.   ,     // 10^(-20) * 2^184
  816.   {{0xfbb4fdbf05baf298ULL, 0x0025c768141d369eULL}
  817.    }
  818.   ,     // 10^(-21) * 2^187
  819.   {{0x2c54c931a2c4b759ULL, 0x003c7240202ebdcbULL}
  820.    }
  821.   ,     // 10^(-22) * 2^191
  822.   {{0x89dd6dc14f03c5e1ULL, 0x00305b66802564a2ULL}
  823.    }
  824.   ,     // 10^(-23) * 2^194
  825.   {{0xd4b1249aa59c9e4eULL, 0x0026af8533511d4eULL}
  826.    }
  827.   ,     // 10^(-24) * 2^197
  828.   {{0x544ea0f76f60fd49ULL, 0x003de5a1ebb4fbb1ULL}
  829.    }
  830.   ,     // 10^(-25) * 2^201
  831.   {{0x76a54d92bf80caa1ULL, 0x00318481895d9627ULL}
  832.    }
  833.   ,     // 10^(-26) * 2^204
  834.   {{0x921dd7a89933d54eULL, 0x00279d346de4781fULL}
  835.    }
  836.   ,     // 10^(-27) * 2^207
  837.   {{0x8362f2a75b862215ULL, 0x003f61ed7ca0c032ULL}
  838.    }
  839.   ,     // 10^(-28) * 2^211
  840.   {{0xcf825bb91604e811ULL, 0x0032b4bdfd4d668eULL}
  841.    }
  842.   ,     // 10^(-29) * 2^214
  843.   {{0x0c684960de6a5341ULL, 0x00289097fdd7853fULL}
  844.    }
  845.   ,     // 10^(-30) * 2^217
  846.   {{0x3d203ab3e521dc34ULL, 0x002073accb12d0ffULL}
  847.    }
  848.   ,     // 10^(-31) * 2^220
  849.   {{0x2e99f7863b696053ULL, 0x0033ec47ab514e65ULL}
  850.    }
  851.   ,     // 10^(-32) * 2^224
  852.   {{0x587b2c6b62bab376ULL, 0x002989d2ef743eb7ULL}
  853.    }
  854.   ,     // 10^(-33) * 2^227
  855.   {{0xad2f56bc4efbc2c5ULL, 0x00213b0f25f69892ULL}
  856.    }
  857.   ,     // 10^(-34) * 2^230
  858. };
  859.  
  860.  
  861. // shiftright128[] contains the right shift count to obtain C2* from the top
  862. // 128 bits of the 128x128-bit product C2 * Kx
  863. int shiftright128[] = {
  864.   0,    // 128 - 128
  865.   0,    // 128 - 128
  866.   0,    // 128 - 128
  867.  
  868.   3,    // 131 - 128
  869.   6,    // 134 - 128
  870.   9,    // 137 - 128
  871.   13,   // 141 - 128
  872.   16,   // 144 - 128
  873.   19,   // 147 - 128
  874.   23,   // 151 - 128
  875.   26,   // 154 - 128
  876.   29,   // 157 - 128
  877.   33,   // 161 - 128
  878.   36,   // 164 - 128
  879.   39,   // 167 - 128
  880.   43,   // 171 - 128
  881.   46,   // 174 - 128
  882.   49,   // 177 - 128
  883.   53,   // 181 - 128
  884.   56,   // 184 - 128
  885.   59,   // 187 - 128
  886.   63,   // 191 - 128
  887.  
  888.   66,   // 194 - 128
  889.   69,   // 197 - 128
  890.   73,   // 201 - 128
  891.   76,   // 204 - 128
  892.   79,   // 207 - 128
  893.   83,   // 211 - 128
  894.   86,   // 214 - 128
  895.   89,   // 217 - 128
  896.   92,   // 220 - 128
  897.   96,   // 224 - 128
  898.   99,   // 227 - 128
  899.   102   // 230 - 128
  900. };
  901.  
  902.  
  903. // maskhigh128[] contains the mask to apply to the top 128 bits of the
  904. // 128x128-bit product in order to obtain the high bits of f2*
  905. // the 64-bit word order is L, H
  906. UINT64 maskhigh128[] = {
  907.   0x0000000000000000ULL,        //  0 = 128 - 128 bits
  908.   0x0000000000000000ULL,        //  0 = 128 - 128 bits
  909.   0x0000000000000000ULL,        //  0 = 128 - 128 bits
  910.   0x0000000000000007ULL,        //  3 = 131 - 128 bits
  911.   0x000000000000003fULL,        //  6 = 134 - 128 bits
  912.   0x00000000000001ffULL,        //  9 = 137 - 128 bits
  913.   0x0000000000001fffULL,        // 13 = 141 - 128 bits
  914.   0x000000000000ffffULL,        // 16 = 144 - 128 bits
  915.   0x000000000007ffffULL,        // 19 = 147 - 128 bits
  916.   0x00000000007fffffULL,        // 23 = 151 - 128 bits
  917.   0x0000000003ffffffULL,        // 26 = 154 - 128 bits
  918.   0x000000001fffffffULL,        // 29 = 157 - 128 bits
  919.   0x00000001ffffffffULL,        // 33 = 161 - 128 bits
  920.   0x0000000fffffffffULL,        // 36 = 164 - 128 bits
  921.   0x0000007fffffffffULL,        // 39 = 167 - 128 bits
  922.   0x000007ffffffffffULL,        // 43 = 171 - 128 bits
  923.   0x00003fffffffffffULL,        // 46 = 174 - 128 bits
  924.   0x0001ffffffffffffULL,        // 49 = 177 - 128 bits
  925.   0x001fffffffffffffULL,        // 53 = 181 - 128 bits
  926.   0x00ffffffffffffffULL,        // 56 = 184 - 128 bits
  927.   0x07ffffffffffffffULL,        // 59 = 187 - 128 bits
  928.   0x7fffffffffffffffULL,        // 63 = 191 - 128 bits
  929.   0x0000000000000003ULL,        //  2 = 194 - 192 bits
  930.   0x000000000000001fULL,        //  5 = 197 - 192 bits
  931.   0x00000000000001ffULL,        //  9 = 201 - 192 bits
  932.   0x0000000000000fffULL,        // 12 = 204 - 192 bits
  933.   0x0000000000007fffULL,        // 15 = 207 - 192 bits
  934.   0x000000000007ffffULL,        // 21 = 211 - 192 bits
  935.   0x00000000003fffffULL,        // 22 = 214 - 192 bits
  936.   0x0000000001ffffffULL,        // 25 = 217 - 192 bits
  937.   0x000000000fffffffULL,        // 28 = 220 - 192 bits
  938.   0x00000000ffffffffULL,        // 32 = 224 - 192 bits
  939.   0x00000007ffffffffULL,        // 35 = 227 - 192 bits
  940.   0x0000003fffffffffULL // 38 = 230 - 192 bits
  941. };
  942.  
  943.  
  944. // onehalf128[] contains the high bits of 1/2 positioned correctly for
  945. // comparison with the high bits of f2*
  946. // the 64-bit word order is L, H
  947. UINT64 onehalf128[] = {
  948.   0x0000000000000000ULL,        //  0 bits
  949.   0x0000000000000000ULL,        //  0 bits
  950.   0x0000000000000000ULL,        //  0 bits
  951.   0x0000000000000004ULL,        //  3 bits
  952.   0x0000000000000020ULL,        //  6 bits
  953.   0x0000000000000100ULL,        //  9 bits
  954.   0x0000000000001000ULL,        // 13 bits
  955.   0x0000000000008000ULL,        // 16 bits
  956.   0x0000000000040000ULL,        // 19 bits
  957.   0x0000000000400000ULL,        // 23 bits
  958.   0x0000000002000000ULL,        // 26 bits
  959.   0x0000000010000000ULL,        // 29 bits
  960.   0x0000000100000000ULL,        // 33 bits
  961.   0x0000000800000000ULL,        // 36 bits
  962.   0x0000004000000000ULL,        // 39 bits
  963.   0x0000040000000000ULL,        // 43 bits
  964.   0x0000200000000000ULL,        // 46 bits
  965.   0x0001000000000000ULL,        // 49 bits
  966.   0x0010000000000000ULL,        // 53 bits
  967.   0x0080000000000000ULL,        // 56 bits
  968.   0x0400000000000000ULL,        // 59 bits
  969.   0x4000000000000000ULL,        // 63 bits
  970.   0x0000000000000002ULL,        // 66 bits
  971.   0x0000000000000010ULL,        // 69 bits
  972.   0x0000000000000100ULL,        // 73 bits
  973.   0x0000000000000800ULL,        // 76 bits
  974.   0x0000000000004000ULL,        // 79 bits
  975.   0x0000000000040000ULL,        // 83 bits
  976.   0x0000000000200000ULL,        // 86 bits
  977.   0x0000000001000000ULL,        // 89 bits
  978.   0x0000000008000000ULL,        // 92 bits
  979.   0x0000000080000000ULL,        // 96 bits
  980.   0x0000000400000000ULL,        // 99 bits
  981.   0x0000002000000000ULL // 102 bits
  982. };
  983.  
  984. UINT64 ten2mk64[] = {
  985.   0x199999999999999aULL,        //  10^(-1) * 2^ 64
  986.   0x028f5c28f5c28f5dULL,        //  10^(-2) * 2^ 64
  987.   0x004189374bc6a7f0ULL,        //  10^(-3) * 2^ 64
  988.   0x00346dc5d638865aULL,        //  10^(-4) * 2^ 67
  989.   0x0029f16b11c6d1e2ULL,        //  10^(-5) * 2^ 70
  990.   0x00218def416bdb1bULL,        //  10^(-6) * 2^ 73
  991.   0x0035afe535795e91ULL,        //  10^(-7) * 2^ 77
  992.   0x002af31dc4611874ULL,        //  10^(-8) * 2^ 80
  993.   0x00225c17d04dad2aULL,        //  10^(-9) * 2^ 83
  994.   0x0036f9bfb3af7b76ULL,        // 10^(-10) * 2^ 87
  995.   0x002bfaffc2f2c92bULL,        // 10^(-11) * 2^ 90
  996.   0x00232f33025bd423ULL,        // 10^(-12) * 2^ 93
  997.   0x00384b84d092ed04ULL,        // 10^(-13) * 2^ 97
  998.   0x002d09370d425737ULL,        // 10^(-14) * 2^100
  999.   0x0024075f3dceac2cULL,        // 10^(-15) * 2^103
  1000.   0x0039a5652fb11379ULL,        // 10^(-16) * 2^107
  1001. };
  1002.  
  1003. // ten2mk128trunc[] contains T*, the top Ex >= 128 bits of 10^(-k),
  1004. // for 1 <= k <= 34
  1005. // the 64-bit word order is L, H
  1006. UINT128 ten2mk128trunc[] = {
  1007.   {{0x9999999999999999ULL, 0x1999999999999999ULL}},     //  10^(-1) * 2^128
  1008.   {{0x28f5c28f5c28f5c2ULL, 0x028f5c28f5c28f5cULL}},     //  10^(-2) * 2^128
  1009.   {{0x9db22d0e56041893ULL, 0x004189374bc6a7efULL}},     //  10^(-3) * 2^128
  1010.   {{0x4af4f0d844d013a9ULL, 0x00346dc5d6388659ULL}},     //  10^(-4) * 2^131
  1011.   {{0x08c3f3e0370cdc87ULL, 0x0029f16b11c6d1e1ULL}},     //  10^(-5) * 2^134
  1012.   {{0x6d698fe69270b06cULL, 0x00218def416bdb1aULL}},     //  10^(-6) * 2^137
  1013.   {{0xaf0f4ca41d811a46ULL, 0x0035afe535795e90ULL}},     //  10^(-7) * 2^141
  1014.   {{0xbf3f70834acdae9fULL, 0x002af31dc4611873ULL}},     //  10^(-8) * 2^144
  1015.   {{0x65cc5a02a23e254cULL, 0x00225c17d04dad29ULL}},     //  10^(-9) * 2^147
  1016.   {{0x6fad5cd10396a213ULL, 0x0036f9bfb3af7b75ULL}},     // 10^(-10) * 2^151
  1017.   {{0xbfbde3da69454e75ULL, 0x002bfaffc2f2c92aULL}},     // 10^(-11) * 2^154
  1018.   {{0x32fe4fe1edd10b91ULL, 0x00232f33025bd422ULL}},     // 10^(-12) * 2^157
  1019.   {{0x84ca19697c81ac1bULL, 0x00384b84d092ed03ULL}},     // 10^(-13) * 2^161
  1020.   {{0x03d4e1213067bce3ULL, 0x002d09370d425736ULL}},     // 10^(-14) * 2^164
  1021.   {{0x3643e74dc052fd82ULL, 0x0024075f3dceac2bULL}},     // 10^(-15) * 2^167
  1022.   {{0x56d30baf9a1e626aULL, 0x0039a5652fb11378ULL}},     // 10^(-16) * 2^171
  1023.   {{0x12426fbfae7eb521ULL, 0x002e1dea8c8da92dULL}},     // 10^(-17) * 2^174
  1024.   {{0x41cebfcc8b9890e7ULL, 0x0024e4bba3a48757ULL}},     // 10^(-18) * 2^177
  1025.   {{0x694acc7a78f41b0cULL, 0x003b07929f6da558ULL}},     // 10^(-19) * 2^181
  1026.   {{0xbaa23d2ec729af3dULL, 0x002f394219248446ULL}},     // 10^(-20) * 2^184
  1027.   {{0xfbb4fdbf05baf297ULL, 0x0025c768141d369eULL}},     // 10^(-21) * 2^187
  1028.   {{0x2c54c931a2c4b758ULL, 0x003c7240202ebdcbULL}},     // 10^(-22) * 2^191
  1029.   {{0x89dd6dc14f03c5e0ULL, 0x00305b66802564a2ULL}},     // 10^(-23) * 2^194
  1030.   {{0xd4b1249aa59c9e4dULL, 0x0026af8533511d4eULL}},     // 10^(-24) * 2^197
  1031.   {{0x544ea0f76f60fd48ULL, 0x003de5a1ebb4fbb1ULL}},     // 10^(-25) * 2^201
  1032.   {{0x76a54d92bf80caa0ULL, 0x00318481895d9627ULL}},     // 10^(-26) * 2^204
  1033.   {{0x921dd7a89933d54dULL, 0x00279d346de4781fULL}},     // 10^(-27) * 2^207
  1034.   {{0x8362f2a75b862214ULL, 0x003f61ed7ca0c032ULL}},     // 10^(-28) * 2^211
  1035.   {{0xcf825bb91604e810ULL, 0x0032b4bdfd4d668eULL}},     // 10^(-29) * 2^214
  1036.   {{0x0c684960de6a5340ULL, 0x00289097fdd7853fULL}},     // 10^(-30) * 2^217
  1037.   {{0x3d203ab3e521dc33ULL, 0x002073accb12d0ffULL}},     // 10^(-31) * 2^220
  1038.   {{0x2e99f7863b696052ULL, 0x0033ec47ab514e65ULL}},     // 10^(-32) * 2^224
  1039.   {{0x587b2c6b62bab375ULL, 0x002989d2ef743eb7ULL}},     // 10^(-33) * 2^227
  1040.   {{0xad2f56bc4efbc2c4ULL, 0x00213b0f25f69892ULL}},     // 10^(-34) * 2^230
  1041. };
  1042.  
  1043. // ten2mk128M[k - 1] = 10^(-k) * 2^exp (k), where 1 <= k <= 4 and
  1044. // exp (k) = shiftright128[k - 1] + 128
  1045. // the 64-bit word order is L, H
  1046. UINT128 ten2mk128M[] = {
  1047.   {{0xcccccccccccccccdULL, 0xccccccccccccccccULL}},     //  10^(-1) * 2^131
  1048.   {{0x3d70a3d70a3d70a4ULL, 0xa3d70a3d70a3d70aULL}},     //  10^(-2) * 2^134
  1049.   {{0x645a1cac083126eaULL, 0x83126e978d4fdf3bULL}},     //  10^(-3) * 2^137
  1050.   {{0xd3c36113404ea4a9ULL, 0xd1b71758e219652bULL}}      //  10^(-4) * 2^141
  1051. };
  1052.  
  1053. // ten2mk128truncM[] contains T*, the top Ex >= 128 bits of 10^(-k),
  1054. // for 1 <= k <= 4; the top bits which are 0 are not represented
  1055. // the 64-bit word order is L, H
  1056. UINT128 ten2mk128truncM[] = {
  1057.   {{0xccccccccccccccccULL, 0xccccccccccccccccULL}},     //  10^(-1) * 2^131
  1058.   {{0x3d70a3d70a3d70a3ULL, 0xa3d70a3d70a3d70aULL}},     //  10^(-2) * 2^134
  1059.   {{0x645a1cac083126e9ULL, 0x83126e978d4fdf3bULL}},     //  10^(-3) * 2^137
  1060.   {{0xd3c36113404ea4a8ULL, 0xd1b71758e219652bULL}}      //  10^(-4) * 2^141
  1061. };
  1062.  
  1063. // shiftright128M[] contains the right shift count to obtain C2* from the top
  1064. // 128 bits of the 128x128-bit product C2 * Kx
  1065. int shiftright128M[] = {
  1066.   3,    // 131 - 128
  1067.   6,    // 134 - 128
  1068.   9,    // 137 - 128
  1069.   13    // 141 - 128
  1070. };
  1071.  
  1072. // maskhigh128M[] contains the mask to apply to the top 128 bits of the
  1073. // 128x128-bit product in order to obtain the high bits of f*
  1074. // the high 64 bits of the mask are 0, so only the low 64 bits are represented
  1075. UINT64 maskhigh128M[] = {
  1076.   0x0000000000000007ULL,        //  3 = 131 - 128 bits
  1077.   0x000000000000003fULL,        //  6 = 134 - 128 bits
  1078.   0x00000000000001ffULL,        //  9 = 137 - 128 bits
  1079.   0x0000000000001fffULL // 13 = 141 - 128 bits
  1080. };
  1081.  
  1082. // onehalf128M[] contains 1/2 positioned correctly for
  1083. // comparison with the high bits of f*
  1084. // the high 64 bits are 0, so only the low 64 bits are represented
  1085. UINT64 onehalf128M[] = {
  1086.   0x0000000000000004ULL,        //  3 bits
  1087.   0x0000000000000020ULL,        //  6 bits
  1088.   0x0000000000000100ULL,        //  9 bits
  1089.   0x0000000000001000ULL // 13 bits
  1090. };
  1091.  
  1092. // ten2mk192M[k - 1] = 10^(-k-4) * 2^exp (k), where 1 <= k <= 19 and
  1093. // exp (k) = shiftright128[k - 1] + 128
  1094. // the 64-bit word order is L, M, H
  1095. UINT192 ten2mk192M[] = {
  1096.   {{0xcddd6e04c0592104ULL, 0x0fcf80dc33721d53ULL,
  1097.     0xa7c5ac471b478423ULL}},
  1098.   //  10^(-5) * 2^208
  1099.   {{0xd7e45803cd141a6aULL, 0xa63f9a49c2c1b10fULL,
  1100.     0x8637bd05af6c69b5ULL}},
  1101.   //  10^(-6) * 2^211
  1102.   {{0x8ca08cd2e1b9c3dcULL, 0x3d32907604691b4cULL,
  1103.     0xd6bf94d5e57a42bcULL}},
  1104.   //  10^(-7) * 2^215
  1105.   {{0x3d4d3d758161697dULL, 0xfdc20d2b36ba7c3dULL,
  1106.     0xabcc77118461cefcULL}},
  1107.   //  10^(-8) * 2^218
  1108.   {{0xfdd7645e011abacaULL, 0x31680a88f8953030ULL,
  1109.     0x89705f4136b4a597ULL}},
  1110.   //  10^(-9) * 2^221
  1111.   {{0x2fbf06fcce912addULL, 0xb573440e5a884d1bULL,
  1112.     0xdbe6fecebdedd5beULL}},
  1113.   //  10^(-10) * 2^225
  1114.   {{0xf2ff38ca3eda88b1ULL, 0xf78f69a51539d748ULL,
  1115.     0xafebff0bcb24aafeULL}},
  1116.   //  10^(-11) * 2^228
  1117.   {{0xf598fa3b657ba08eULL, 0xf93f87b7442e45d3ULL,
  1118.     0x8cbccc096f5088cbULL}},
  1119.   //  10^(-12) * 2^231
  1120.   {{0x88f4c3923bf900e3ULL, 0x2865a5f206b06fb9ULL,
  1121.     0xe12e13424bb40e13ULL}},
  1122.   //  10^(-13) * 2^235
  1123.   {{0x6d909c74fcc733e9ULL, 0x538484c19ef38c94ULL,
  1124.     0xb424dc35095cd80fULL}},
  1125.   //  10^(-14) * 2^238
  1126.   {{0x57a6e390ca38f654ULL, 0x0f9d37014bf60a10ULL,
  1127.     0x901d7cf73ab0acd9ULL}},
  1128.   //  10^(-15) * 2^241
  1129.   {{0xbf716c1add27f086ULL, 0x4c2ebe687989a9b3ULL,
  1130.     0xe69594bec44de15bULL}},
  1131.   //  10^(-16) * 2^245
  1132.   {{0xff8df0157db98d38ULL, 0x09befeb9fad487c2ULL,
  1133.     0xb877aa3236a4b449ULL}},
  1134.   //  10^(-17) * 2^248
  1135.   {{0x32d7f344649470faULL, 0x3aff322e62439fcfULL,
  1136.     0x9392ee8e921d5d07ULL}},
  1137.   //  10^(-18) * 2^251
  1138.   {{0x1e2652070753e7f5ULL, 0x2b31e9e3d06c32e5ULL,
  1139.     0xec1e4a7db69561a5ULL}},
  1140.   //  10^(-19) * 2^255
  1141.   {{0x181ea8059f76532bULL, 0x88f4bb1ca6bcf584ULL,
  1142.     0xbce5086492111aeaULL}},
  1143.   //  10^(-20) * 2^258
  1144.   {{0x467eecd14c5ea8efULL, 0xd3f6fc16ebca5e03ULL,
  1145.     0x971da05074da7beeULL}},
  1146.   //  10^(-21) * 2^261
  1147.   {{0x70cb148213caa7e5ULL, 0x5324c68b12dd6338ULL,
  1148.     0xf1c90080baf72cb1ULL}},
  1149.   //  10^(-22) * 2^265
  1150.   {{0x8d6f439b43088651ULL, 0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}}
  1151.   //  10^(-23) * 2^268
  1152. };
  1153.  
  1154. // ten2mk192truncM[] contains T*, the top Ex >= 192 bits of 10^(-k),
  1155. // for 5 <= k <= 23; the top bits which are 0 are not represented
  1156. // the 64-bit word order is L, M, H
  1157. UINT192 ten2mk192truncM[] = {
  1158.   {{0xcddd6e04c0592103ULL, 0x0fcf80dc33721d53ULL,
  1159.     0xa7c5ac471b478423ULL}},
  1160.   //  10^(-5) * 2^208
  1161.   {{0xd7e45803cd141a69ULL, 0xa63f9a49c2c1b10fULL,
  1162.     0x8637bd05af6c69b5ULL}},
  1163.   //  10^(-6) * 2^211
  1164.   {{0x8ca08cd2e1b9c3dbULL, 0x3d32907604691b4cULL,
  1165.     0xd6bf94d5e57a42bcULL}},
  1166.   //  10^(-7) * 2^215
  1167.   {{0x3d4d3d758161697cULL, 0xfdc20d2b36ba7c3dULL,
  1168.     0xabcc77118461cefcULL}},
  1169.   //  10^(-8) * 2^218
  1170.   {{0xfdd7645e011abac9ULL, 0x31680a88f8953030ULL,
  1171.     0x89705f4136b4a597ULL}},
  1172.   //  10^(-9) * 2^221
  1173.   {{0x2fbf06fcce912adcULL, 0xb573440e5a884d1bULL,
  1174.     0xdbe6fecebdedd5beULL}},
  1175.   //  10^(-10) * 2^225
  1176.   {{0xf2ff38ca3eda88b0ULL, 0xf78f69a51539d748ULL,
  1177.     0xafebff0bcb24aafeULL}},
  1178.   //  10^(-11) * 2^228
  1179.   {{0xf598fa3b657ba08dULL, 0xf93f87b7442e45d3ULL,
  1180.     0x8cbccc096f5088cbULL}},
  1181.   //  10^(-12) * 2^231
  1182.   {{0x88f4c3923bf900e2ULL, 0x2865a5f206b06fb9ULL,
  1183.     0xe12e13424bb40e13ULL}},
  1184.   //  10^(-13) * 2^235
  1185.   {{0x6d909c74fcc733e8ULL, 0x538484c19ef38c94ULL,
  1186.     0xb424dc35095cd80fULL}},
  1187.   //  10^(-14) * 2^238
  1188.   {{0x57a6e390ca38f653ULL, 0x0f9d37014bf60a10ULL,
  1189.     0x901d7cf73ab0acd9ULL}},
  1190.   //  10^(-15) * 2^241
  1191.   {{0xbf716c1add27f085ULL, 0x4c2ebe687989a9b3ULL,
  1192.     0xe69594bec44de15bULL}},
  1193.   //  10^(-16) * 2^245
  1194.   {{0xff8df0157db98d37ULL, 0x09befeb9fad487c2ULL,
  1195.     0xb877aa3236a4b449ULL}},
  1196.   //  10^(-17) * 2^248
  1197.   {{0x32d7f344649470f9ULL, 0x3aff322e62439fcfULL,
  1198.     0x9392ee8e921d5d07ULL}},
  1199.   //  10^(-18) * 2^251
  1200.   {{0x1e2652070753e7f4ULL, 0x2b31e9e3d06c32e5ULL,
  1201.     0xec1e4a7db69561a5ULL}},
  1202.   //  10^(-19) * 2^255
  1203.   {{0x181ea8059f76532aULL, 0x88f4bb1ca6bcf584ULL,
  1204.     0xbce5086492111aeaULL}},
  1205.   //  10^(-20) * 2^258
  1206.   {{0x467eecd14c5ea8eeULL, 0xd3f6fc16ebca5e03ULL,
  1207.     0x971da05074da7beeULL}},
  1208.   //  10^(-21) * 2^261
  1209.   {{0x70cb148213caa7e4ULL, 0x5324c68b12dd6338ULL,
  1210.     0xf1c90080baf72cb1ULL}},
  1211.   //  10^(-22) * 2^265
  1212.   {{0x8d6f439b43088650ULL, 0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}}
  1213.   //  10^(-23) * 2^268
  1214. };
  1215.  
  1216. // shiftright192M[] contains the right shift count to obtain C2* from the top
  1217. // 192 bits of the 192x192-bit product C2 * Kx if 0 <= ind <= 14 where ind is
  1218. // the index in the table, or from the top 128 bits if 15 <= ind <= 18
  1219. int shiftright192M[] = {
  1220.   16,   // 208 - 192
  1221.   19,   // 211 - 192
  1222.   23,   // 215 - 192
  1223.   26,   // 218 - 192
  1224.   29,   // 221 - 192
  1225.   33,   // 225 - 192
  1226.   36,   // 228 - 192
  1227.   39,   // 231 - 192
  1228.   43,   // 235 - 192
  1229.   46,   // 238 - 192
  1230.   49,   // 241 - 192
  1231.   53,   // 245 - 192
  1232.   56,   // 248 - 192
  1233.   59,   // 251 - 192
  1234.   63,   // 255 - 192
  1235.   2,    // 258 - 256
  1236.   5,    // 261 - 256
  1237.   9,    // 265 - 256
  1238.   12    // 268 - 256
  1239. };
  1240.  
  1241. // maskhigh192M[] contains the mask to apply to the top 192 bits of the
  1242. // 192x192-bit product in order to obtain the high bits of f*
  1243. // if 0 <= ind <= 14 where ind is the index in the table, then the high 128 bits
  1244. // of the 384-bit mask are 0;  if 15 <= ind <= 18 then the high 64 bits are 0
  1245. UINT64 maskhigh192M[] = {
  1246.   0x000000000000ffffULL,        //  16 = 208 - 192 bits
  1247.   0x000000000007ffffULL,        //  19 = 211 - 192 bits
  1248.   0x00000000007fffffULL,        //  23 = 215 - 192 bits
  1249.   0x0000000003ffffffULL,        //  26 = 218 - 192 bits
  1250.   0x000000001fffffffULL,        //  29 = 221 - 192 bits
  1251.   0x00000001ffffffffULL,        //  33 = 225 - 192 bits
  1252.   0x0000000fffffffffULL,        //  36 = 228 - 192 bits
  1253.   0x0000007fffffffffULL,        //  39 = 231 - 192 bits
  1254.   0x000007ffffffffffULL,        //  43 = 235 - 192 bits
  1255.   0x00003fffffffffffULL,        //  46 = 238 - 192 bits
  1256.   0x0001ffffffffffffULL,        //  49 = 241 - 192 bits
  1257.   0x001fffffffffffffULL,        //  53 = 245 - 192 bits
  1258.   0x00ffffffffffffffULL,        //  56 = 248 - 192 bits
  1259.   0x07ffffffffffffffULL,        //  59 = 251 - 192 bits
  1260.   0x7fffffffffffffffULL,        //  63 = 255 - 192 bits
  1261.   0x0000000000000003ULL,        //   2 = 258 - 256 bits
  1262.   0x000000000000001fULL,        //   5 = 261 - 256 bits
  1263.   0x00000000000001ffULL,        //   9 = 265 - 256 bits
  1264.   0x0000000000000fffULL //  12 = 268 - 256 bits
  1265. };
  1266.  
  1267. // onehalf192M[] contains 1/2 positioned correctly for
  1268. // comparison with the high bits of f*
  1269. // if 0 <= ind <= 14 where ind is the index in the table, then the high 128 bits
  1270. // of the 384-bit mask are 0;  if 15 <= ind <= 18 then the high 648 bits are 0
  1271. UINT64 onehalf192M[] = {
  1272.   0x0000000000008000ULL,        //  16 = 208 - 192 bits
  1273.   0x0000000000040000ULL,        //  19 = 211 - 192 bits
  1274.   0x0000000000400000ULL,        //  23 = 215 - 192 bits
  1275.   0x0000000002000000ULL,        //  26 = 218 - 192 bits
  1276.   0x0000000010000000ULL,        //  29 = 221 - 192 bits
  1277.   0x0000000100000000ULL,        //  33 = 225 - 192 bits
  1278.   0x0000000800000000ULL,        //  36 = 228 - 192 bits
  1279.   0x0000004000000000ULL,        //  39 = 231 - 192 bits
  1280.   0x0000040000000000ULL,        //  43 = 235 - 192 bits
  1281.   0x0000200000000000ULL,        //  46 = 238 - 192 bits
  1282.   0x0001000000000000ULL,        //  49 = 241 - 192 bits
  1283.   0x0010000000000000ULL,        //  53 = 245 - 192 bits
  1284.   0x0080000000000000ULL,        //  56 = 248 - 192 bits
  1285.   0x0400000000000000ULL,        //  59 = 251 - 192 bits
  1286.   0x4000000000000000ULL,        //  63 = 255 - 192 bits
  1287.   0x0000000000000002ULL,        //   2 = 258 - 256 bits
  1288.   0x0000000000000010ULL,        //   5 = 261 - 256 bits
  1289.   0x0000000000000100ULL,        //   9 = 265 - 256 bits
  1290.   0x0000000000000800ULL //  12 = 268 - 256 bits
  1291. };
  1292.  
  1293. // ten2mk256M[k - 1] = 10^(-k-23) * 2^exp (k), where 1 <= k <= 11 and
  1294. // exp (k) = shiftright128[k - 1] + 128
  1295. UINT256 ten2mk256M[] = {        // the 64-bit word order is LL, LH, HL, HH
  1296.   {{0xf23472530ce6e3edULL, 0xd78c3615cf3a050cULL,
  1297.     0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}},     //  10^(-24) * 2^335
  1298.   {{0xe9ed83b814a49fe1ULL, 0x8c1389bc7ec33b47ULL,
  1299.     0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}},     //  10^(-25) * 2^339
  1300.   {{0x87f1362cdd507fe7ULL, 0x3cdc6e306568fc39ULL,
  1301.     0x95364afe032a819dULL, 0xc612062576589ddaULL}},     //  10^(-26) * 2^342
  1302.   {{0x9ff42b5717739986ULL, 0xca49f1c05120c9c7ULL,
  1303.     0x775ea264cf55347dULL, 0x9e74d1b791e07e48ULL}},     //  10^(-27) * 2^345
  1304.   {{0xccb9def1bf1f5c09ULL, 0x76dcb60081ce0fa5ULL,
  1305.     0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}},     //  10^(-28) * 2^349
  1306.   {{0xa3c7e58e327f7cd4ULL, 0x5f16f80067d80c84ULL,
  1307.     0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}},     //  10^(-29) * 2^352
  1308.   {{0xb6398471c1ff9710ULL, 0x18df2ccd1fe00a03ULL,
  1309.     0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}},     //  10^(-30) * 2^355
  1310.   {{0xf82e038e34cc78daULL, 0x4718f0a419800802ULL,
  1311.     0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}},     //  10^(-31) * 2^358
  1312.   {{0x59e338e387ad8e29ULL, 0x0b5b1aa028ccd99eULL,
  1313.     0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}},     //  10^(-32) * 2^362
  1314.   {{0x47e8fa4f9fbe0b54ULL, 0x6f7c154ced70ae18ULL,
  1315.     0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}},     //  10^(-33) * 2^365
  1316.   {{0xd320c83fb2fe6f76ULL, 0xbf967770bdf3be79ULL,
  1317.     0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}}      //  10^(-34) * 2^368
  1318. };
  1319.  
  1320. // ten2mk256truncM[] contains T*, the top Ex >= 256 bits of 10^(-k),
  1321. // for 24 <= k <= 34; the top bits which are 0 are not represented
  1322. UINT256 ten2mk256truncM[] = {   // the 64-bit word order is LL, LH, HL, HH
  1323.   {{0xf23472530ce6e3ecULL, 0xd78c3615cf3a050cULL,
  1324.     0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}},     //  10^(-24) * 2^335
  1325.   {{0xe9ed83b814a49fe0ULL, 0x8c1389bc7ec33b47ULL,
  1326.     0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}},     //  10^(-25) * 2^339
  1327.   {{0x87f1362cdd507fe6ULL, 0x3cdc6e306568fc39ULL,
  1328.     0x95364afe032a819dULL, 0xc612062576589ddaULL}},     //  10^(-26) * 2^342
  1329.   {{0x775ea264cf55347cULL, 0x9ff42b5717739986ULL,
  1330.     0xca49f1c05120c9c7ULL, 0x9e74d1b791e07e48ULL}},     //  10^(-27) * 2^345
  1331.   {{0xccb9def1bf1f5c08ULL, 0x76dcb60081ce0fa5ULL,
  1332.     0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}},     //  10^(-28) * 2^349
  1333.   {{0xa3c7e58e327f7cd3ULL, 0x5f16f80067d80c84ULL,
  1334.     0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}},     //  10^(-29) * 2^352
  1335.   {{0xb6398471c1ff970fULL, 0x18df2ccd1fe00a03ULL,
  1336.     0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}},     //  10^(-30) * 2^355
  1337.   {{0xf82e038e34cc78d9ULL, 0x4718f0a419800802ULL,
  1338.     0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}},     //  10^(-31) * 2^358
  1339.   {{0x59e338e387ad8e28ULL, 0x0b5b1aa028ccd99eULL,
  1340.     0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}},     //  10^(-32) * 2^362
  1341.   {{0x47e8fa4f9fbe0b53ULL, 0x6f7c154ced70ae18ULL,
  1342.     0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}},     //  10^(-33) * 2^365
  1343.   {{0xd320c83fb2fe6f75ULL, 0xbf967770bdf3be79ULL,
  1344.     0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}}      //  10^(-34) * 2^368
  1345. };
  1346.  
  1347. // shiftright256M[] contains the right shift count to obtain C2* from the top
  1348. // 192 bits of the 256x256-bit product C2 * Kx
  1349. int shiftright256M[] = {
  1350.   15,   // 335 - 320
  1351.   19,   // 339 - 320
  1352.   22,   // 342 - 320
  1353.   25,   // 345 - 320
  1354.   29,   // 349 - 320
  1355.   32,   // 352 - 320 // careful of 32-bit machines!
  1356.   35,   // 355 - 320
  1357.   38,   // 358 - 320
  1358.   42,   // 362 - 320
  1359.   45,   // 365 - 320
  1360.   48    // 368 - 320
  1361. };
  1362.  
  1363. // maskhigh256M[] contains the mask to apply to the top 192 bits of the
  1364. // 256x256-bit product in order to obtain the high bits of f*
  1365. UINT64 maskhigh256M[] = {
  1366.   0x0000000000007fffULL,        //  15 = 335 - 320 bits
  1367.   0x000000000007ffffULL,        //  19 = 339 - 320 bits
  1368.   0x00000000003fffffULL,        //  22 = 342 - 320 bits
  1369.   0x0000000001ffffffULL,        //  25 = 345 - 320 bits
  1370.   0x000000001fffffffULL,        //  29 = 349 - 320 bits
  1371.   0x00000000ffffffffULL,        //  32 = 352 - 320 bits
  1372.   0x00000007ffffffffULL,        //  35 = 355 - 320 bits
  1373.   0x0000003fffffffffULL,        //  38 = 358 - 320 bits
  1374.   0x000003ffffffffffULL,        //  42 = 362 - 320 bits
  1375.   0x00001fffffffffffULL,        //  45 = 365 - 320 bits
  1376.   0x0000ffffffffffffULL //  48 = 368 - 320 bits
  1377. };
  1378.  
  1379. // onehalf256M[] contains 1/2 positioned correctly for comparison with the
  1380. // high bits of f*; the high 128 bits of the 512-bit mask are 0
  1381. UINT64 onehalf256M[] = {
  1382.   0x0000000000004000ULL,        //  15 = 335 - 320 bits
  1383.   0x0000000000040000ULL,        //  19 = 339 - 320 bits
  1384.   0x0000000000200000ULL,        //  22 = 342 - 320 bits
  1385.   0x0000000001000000ULL,        //  25 = 345 - 320 bits
  1386.   0x0000000010000000ULL,        //  29 = 349 - 320 bits
  1387.   0x0000000080000000ULL,        //  32 = 352 - 320 bits
  1388.   0x0000000400000000ULL,        //  35 = 355 - 320 bits
  1389.   0x0000002000000000ULL,        //  38 = 358 - 320 bits
  1390.   0x0000020000000000ULL,        //  42 = 362 - 320 bits
  1391.   0x0000100000000000ULL,        //  45 = 365 - 320 bits
  1392.   0x0000800000000000ULL //  48 = 368 - 320 bits
  1393. };
  1394.  
  1395.  
  1396. // char_table2[] is used to convert n to string, where 10 <= n <= 99
  1397. unsigned char char_table2[180] = {
  1398.   '1', '0',
  1399.   '1', '1',
  1400.   '1', '2',
  1401.   '1', '3',
  1402.   '1', '4',
  1403.   '1', '5',
  1404.   '1', '6',
  1405.   '1', '7',
  1406.   '1', '8',
  1407.   '1', '9',
  1408.   '2', '0',
  1409.   '2', '1',
  1410.   '2', '2',
  1411.   '2', '3',
  1412.   '2', '4',
  1413.   '2', '5',
  1414.   '2', '6',
  1415.   '2', '7',
  1416.   '2', '8',
  1417.   '2', '9',
  1418.   '3', '0',
  1419.   '3', '1',
  1420.   '3', '2',
  1421.   '3', '3',
  1422.   '3', '4',
  1423.   '3', '5',
  1424.   '3', '6',
  1425.   '3', '7',
  1426.   '3', '8',
  1427.   '3', '9',
  1428.   '4', '0',
  1429.   '4', '1',
  1430.   '4', '2',
  1431.   '4', '3',
  1432.   '4', '4',
  1433.   '4', '5',
  1434.   '4', '6',
  1435.   '4', '7',
  1436.   '4', '8',
  1437.   '4', '9',
  1438.   '5', '0',
  1439.   '5', '1',
  1440.   '5', '2',
  1441.   '5', '3',
  1442.   '5', '4',
  1443.   '5', '5',
  1444.   '5', '6',
  1445.   '5', '7',
  1446.   '5', '8',
  1447.   '5', '9',
  1448.   '6', '0',
  1449.   '6', '1',
  1450.   '6', '2',
  1451.   '6', '3',
  1452.   '6', '4',
  1453.   '6', '5',
  1454.   '6', '6',
  1455.   '6', '7',
  1456.   '6', '8',
  1457.   '6', '9',
  1458.   '7', '0',
  1459.   '7', '1',
  1460.   '7', '2',
  1461.   '7', '3',
  1462.   '7', '4',
  1463.   '7', '5',
  1464.   '7', '6',
  1465.   '7', '7',
  1466.   '7', '8',
  1467.   '7', '9',
  1468.   '8', '0',
  1469.   '8', '1',
  1470.   '8', '2',
  1471.   '8', '3',
  1472.   '8', '4',
  1473.   '8', '5',
  1474.   '8', '6',
  1475.   '8', '7',
  1476.   '8', '8',
  1477.   '8', '9',
  1478.   '9', '0',
  1479.   '9', '1',
  1480.   '9', '2',
  1481.   '9', '3',
  1482.   '9', '4',
  1483.   '9', '5',
  1484.   '9', '6',
  1485.   '9', '7',
  1486.   '9', '8',
  1487.   '9', '9'
  1488. };
  1489.  
  1490.  
  1491. // char_table3[] is used to convert n to string, where 000 <= n <= 999
  1492. unsigned char char_table3[3000] = {
  1493.   '0', '0', '0',
  1494.   '0', '0', '1',
  1495.   '0', '0', '2',
  1496.   '0', '0', '3',
  1497.   '0', '0', '4',
  1498.   '0', '0', '5',
  1499.   '0', '0', '6',
  1500.   '0', '0', '7',
  1501.   '0', '0', '8',
  1502.   '0', '0', '9',
  1503.   '0', '1', '0',
  1504.   '0', '1', '1',
  1505.   '0', '1', '2',
  1506.   '0', '1', '3',
  1507.   '0', '1', '4',
  1508.   '0', '1', '5',
  1509.   '0', '1', '6',
  1510.   '0', '1', '7',
  1511.   '0', '1', '8',
  1512.   '0', '1', '9',
  1513.   '0', '2', '0',
  1514.   '0', '2', '1',
  1515.   '0', '2', '2',
  1516.   '0', '2', '3',
  1517.   '0', '2', '4',
  1518.   '0', '2', '5',
  1519.   '0', '2', '6',
  1520.   '0', '2', '7',
  1521.   '0', '2', '8',
  1522.   '0', '2', '9',
  1523.   '0', '3', '0',
  1524.   '0', '3', '1',
  1525.   '0', '3', '2',
  1526.   '0', '3', '3',
  1527.   '0', '3', '4',
  1528.   '0', '3', '5',
  1529.   '0', '3', '6',
  1530.   '0', '3', '7',
  1531.   '0', '3', '8',
  1532.   '0', '3', '9',
  1533.   '0', '4', '0',
  1534.   '0', '4', '1',
  1535.   '0', '4', '2',
  1536.   '0', '4', '3',
  1537.   '0', '4', '4',
  1538.   '0', '4', '5',
  1539.   '0', '4', '6',
  1540.   '0', '4', '7',
  1541.   '0', '4', '8',
  1542.   '0', '4', '9',
  1543.   '0', '5', '0',
  1544.   '0', '5', '1',
  1545.   '0', '5', '2',
  1546.   '0', '5', '3',
  1547.   '0', '5', '4',
  1548.   '0', '5', '5',
  1549.   '0', '5', '6',
  1550.   '0', '5', '7',
  1551.   '0', '5', '8',
  1552.   '0', '5', '9',
  1553.   '0', '6', '0',
  1554.   '0', '6', '1',
  1555.   '0', '6', '2',
  1556.   '0', '6', '3',
  1557.   '0', '6', '4',
  1558.   '0', '6', '5',
  1559.   '0', '6', '6',
  1560.   '0', '6', '7',
  1561.   '0', '6', '8',
  1562.   '0', '6', '9',
  1563.   '0', '7', '0',
  1564.   '0', '7', '1',
  1565.   '0', '7', '2',
  1566.   '0', '7', '3',
  1567.   '0', '7', '4',
  1568.   '0', '7', '5',
  1569.   '0', '7', '6',
  1570.   '0', '7', '7',
  1571.   '0', '7', '8',
  1572.   '0', '7', '9',
  1573.   '0', '8', '0',
  1574.   '0', '8', '1',
  1575.   '0', '8', '2',
  1576.   '0', '8', '3',
  1577.   '0', '8', '4',
  1578.   '0', '8', '5',
  1579.   '0', '8', '6',
  1580.   '0', '8', '7',
  1581.   '0', '8', '8',
  1582.   '0', '8', '9',
  1583.   '0', '9', '0',
  1584.   '0', '9', '1',
  1585.   '0', '9', '2',
  1586.   '0', '9', '3',
  1587.   '0', '9', '4',
  1588.   '0', '9', '5',
  1589.   '0', '9', '6',
  1590.   '0', '9', '7',
  1591.   '0', '9', '8',
  1592.   '0', '9', '9',
  1593.   '1', '0', '0',
  1594.   '1', '0', '1',
  1595.   '1', '0', '2',
  1596.   '1', '0', '3',
  1597.   '1', '0', '4',
  1598.   '1', '0', '5',
  1599.   '1', '0', '6',
  1600.   '1', '0', '7',
  1601.   '1', '0', '8',
  1602.   '1', '0', '9',
  1603.   '1', '1', '0',
  1604.   '1', '1', '1',
  1605.   '1', '1', '2',
  1606.   '1', '1', '3',
  1607.   '1', '1', '4',
  1608.   '1', '1', '5',
  1609.   '1', '1', '6',
  1610.   '1', '1', '7',
  1611.   '1', '1', '8',
  1612.   '1', '1', '9',
  1613.   '1', '2', '0',
  1614.   '1', '2', '1',
  1615.   '1', '2', '2',
  1616.   '1', '2', '3',
  1617.   '1', '2', '4',
  1618.   '1', '2', '5',
  1619.   '1', '2', '6',
  1620.   '1', '2', '7',
  1621.   '1', '2', '8',
  1622.   '1', '2', '9',
  1623.   '1', '3', '0',
  1624.   '1', '3', '1',
  1625.   '1', '3', '2',
  1626.   '1', '3', '3',
  1627.   '1', '3', '4',
  1628.   '1', '3', '5',
  1629.   '1', '3', '6',
  1630.   '1', '3', '7',
  1631.   '1', '3', '8',
  1632.   '1', '3', '9',
  1633.   '1', '4', '0',
  1634.   '1', '4', '1',
  1635.   '1', '4', '2',
  1636.   '1', '4', '3',
  1637.   '1', '4', '4',
  1638.   '1', '4', '5',
  1639.   '1', '4', '6',
  1640.   '1', '4', '7',
  1641.   '1', '4', '8',
  1642.   '1', '4', '9',
  1643.   '1', '5', '0',
  1644.   '1', '5', '1',
  1645.   '1', '5', '2',
  1646.   '1', '5', '3',
  1647.   '1', '5', '4',
  1648.   '1', '5', '5',
  1649.   '1', '5', '6',
  1650.   '1', '5', '7',
  1651.   '1', '5', '8',
  1652.   '1', '5', '9',
  1653.   '1', '6', '0',
  1654.   '1', '6', '1',
  1655.   '1', '6', '2',
  1656.   '1', '6', '3',
  1657.   '1', '6', '4',
  1658.   '1', '6', '5',
  1659.   '1', '6', '6',
  1660.   '1', '6', '7',
  1661.   '1', '6', '8',
  1662.   '1', '6', '9',
  1663.   '1', '7', '0',
  1664.   '1', '7', '1',
  1665.   '1', '7', '2',
  1666.   '1', '7', '3',
  1667.   '1', '7', '4',
  1668.   '1', '7', '5',
  1669.   '1', '7', '6',
  1670.   '1', '7', '7',
  1671.   '1', '7', '8',
  1672.   '1', '7', '9',
  1673.   '1', '8', '0',
  1674.   '1', '8', '1',
  1675.   '1', '8', '2',
  1676.   '1', '8', '3',
  1677.   '1', '8', '4',
  1678.   '1', '8', '5',
  1679.   '1', '8', '6',
  1680.   '1', '8', '7',
  1681.   '1', '8', '8',
  1682.   '1', '8', '9',
  1683.   '1', '9', '0',
  1684.   '1', '9', '1',
  1685.   '1', '9', '2',
  1686.   '1', '9', '3',
  1687.   '1', '9', '4',
  1688.   '1', '9', '5',
  1689.   '1', '9', '6',
  1690.   '1', '9', '7',
  1691.   '1', '9', '8',
  1692.   '1', '9', '9',
  1693.   '2', '0', '0',
  1694.   '2', '0', '1',
  1695.   '2', '0', '2',
  1696.   '2', '0', '3',
  1697.   '2', '0', '4',
  1698.   '2', '0', '5',
  1699.   '2', '0', '6',
  1700.   '2', '0', '7',
  1701.   '2', '0', '8',
  1702.   '2', '0', '9',
  1703.   '2', '1', '0',
  1704.   '2', '1', '1',
  1705.   '2', '1', '2',
  1706.   '2', '1', '3',
  1707.   '2', '1', '4',
  1708.   '2', '1', '5',
  1709.   '2', '1', '6',
  1710.   '2', '1', '7',
  1711.   '2', '1', '8',
  1712.   '2', '1', '9',
  1713.   '2', '2', '0',
  1714.   '2', '2', '1',
  1715.   '2', '2', '2',
  1716.   '2', '2', '3',
  1717.   '2', '2', '4',
  1718.   '2', '2', '5',
  1719.   '2', '2', '6',
  1720.   '2', '2', '7',
  1721.   '2', '2', '8',
  1722.   '2', '2', '9',
  1723.   '2', '3', '0',
  1724.   '2', '3', '1',
  1725.   '2', '3', '2',
  1726.   '2', '3', '3',
  1727.   '2', '3', '4',
  1728.   '2', '3', '5',
  1729.   '2', '3', '6',
  1730.   '2', '3', '7',
  1731.   '2', '3', '8',
  1732.   '2', '3', '9',
  1733.   '2', '4', '0',
  1734.   '2', '4', '1',
  1735.   '2', '4', '2',
  1736.   '2', '4', '3',
  1737.   '2', '4', '4',
  1738.   '2', '4', '5',
  1739.   '2', '4', '6',
  1740.   '2', '4', '7',
  1741.   '2', '4', '8',
  1742.   '2', '4', '9',
  1743.   '2', '5', '0',
  1744.   '2', '5', '1',
  1745.   '2', '5', '2',
  1746.   '2', '5', '3',
  1747.   '2', '5', '4',
  1748.   '2', '5', '5',
  1749.   '2', '5', '6',
  1750.   '2', '5', '7',
  1751.   '2', '5', '8',
  1752.   '2', '5', '9',
  1753.   '2', '6', '0',
  1754.   '2', '6', '1',
  1755.   '2', '6', '2',
  1756.   '2', '6', '3',
  1757.   '2', '6', '4',
  1758.   '2', '6', '5',
  1759.   '2', '6', '6',
  1760.   '2', '6', '7',
  1761.   '2', '6', '8',
  1762.   '2', '6', '9',
  1763.   '2', '7', '0',
  1764.   '2', '7', '1',
  1765.   '2', '7', '2',
  1766.   '2', '7', '3',
  1767.   '2', '7', '4',
  1768.   '2', '7', '5',
  1769.   '2', '7', '6',
  1770.   '2', '7', '7',
  1771.   '2', '7', '8',
  1772.   '2', '7', '9',
  1773.   '2', '8', '0',
  1774.   '2', '8', '1',
  1775.   '2', '8', '2',
  1776.   '2', '8', '3',
  1777.   '2', '8', '4',
  1778.   '2', '8', '5',
  1779.   '2', '8', '6',
  1780.   '2', '8', '7',
  1781.   '2', '8', '8',
  1782.   '2', '8', '9',
  1783.   '2', '9', '0',
  1784.   '2', '9', '1',
  1785.   '2', '9', '2',
  1786.   '2', '9', '3',
  1787.   '2', '9', '4',
  1788.   '2', '9', '5',
  1789.   '2', '9', '6',
  1790.   '2', '9', '7',
  1791.   '2', '9', '8',
  1792.   '2', '9', '9',
  1793.   '3', '0', '0',
  1794.   '3', '0', '1',
  1795.   '3', '0', '2',
  1796.   '3', '0', '3',
  1797.   '3', '0', '4',
  1798.   '3', '0', '5',
  1799.   '3', '0', '6',
  1800.   '3', '0', '7',
  1801.   '3', '0', '8',
  1802.   '3', '0', '9',
  1803.   '3', '1', '0',
  1804.   '3', '1', '1',
  1805.   '3', '1', '2',
  1806.   '3', '1', '3',
  1807.   '3', '1', '4',
  1808.   '3', '1', '5',
  1809.   '3', '1', '6',
  1810.   '3', '1', '7',
  1811.   '3', '1', '8',
  1812.   '3', '1', '9',
  1813.   '3', '2', '0',
  1814.   '3', '2', '1',
  1815.   '3', '2', '2',
  1816.   '3', '2', '3',
  1817.   '3', '2', '4',
  1818.   '3', '2', '5',
  1819.   '3', '2', '6',
  1820.   '3', '2', '7',
  1821.   '3', '2', '8',
  1822.   '3', '2', '9',
  1823.   '3', '3', '0',
  1824.   '3', '3', '1',
  1825.   '3', '3', '2',
  1826.   '3', '3', '3',
  1827.   '3', '3', '4',
  1828.   '3', '3', '5',
  1829.   '3', '3', '6',
  1830.   '3', '3', '7',
  1831.   '3', '3', '8',
  1832.   '3', '3', '9',
  1833.   '3', '4', '0',
  1834.   '3', '4', '1',
  1835.   '3', '4', '2',
  1836.   '3', '4', '3',
  1837.   '3', '4', '4',
  1838.   '3', '4', '5',
  1839.   '3', '4', '6',
  1840.   '3', '4', '7',
  1841.   '3', '4', '8',
  1842.   '3', '4', '9',
  1843.   '3', '5', '0',
  1844.   '3', '5', '1',
  1845.   '3', '5', '2',
  1846.   '3', '5', '3',
  1847.   '3', '5', '4',
  1848.   '3', '5', '5',
  1849.   '3', '5', '6',
  1850.   '3', '5', '7',
  1851.   '3', '5', '8',
  1852.   '3', '5', '9',
  1853.   '3', '6', '0',
  1854.   '3', '6', '1',
  1855.   '3', '6', '2',
  1856.   '3', '6', '3',
  1857.   '3', '6', '4',
  1858.   '3', '6', '5',
  1859.   '3', '6', '6',
  1860.   '3', '6', '7',
  1861.   '3', '6', '8',
  1862.   '3', '6', '9',
  1863.   '3', '7', '0',
  1864.   '3', '7', '1',
  1865.   '3', '7', '2',
  1866.   '3', '7', '3',
  1867.   '3', '7', '4',
  1868.   '3', '7', '5',
  1869.   '3', '7', '6',
  1870.   '3', '7', '7',
  1871.   '3', '7', '8',
  1872.   '3', '7', '9',
  1873.   '3', '8', '0',
  1874.   '3', '8', '1',
  1875.   '3', '8', '2',
  1876.   '3', '8', '3',
  1877.   '3', '8', '4',
  1878.   '3', '8', '5',
  1879.   '3', '8', '6',
  1880.   '3', '8', '7',
  1881.   '3', '8', '8',
  1882.   '3', '8', '9',
  1883.   '3', '9', '0',
  1884.   '3', '9', '1',
  1885.   '3', '9', '2',
  1886.   '3', '9', '3',
  1887.   '3', '9', '4',
  1888.   '3', '9', '5',
  1889.   '3', '9', '6',
  1890.   '3', '9', '7',
  1891.   '3', '9', '8',
  1892.   '3', '9', '9',
  1893.   '4', '0', '0',
  1894.   '4', '0', '1',
  1895.   '4', '0', '2',
  1896.   '4', '0', '3',
  1897.   '4', '0', '4',
  1898.   '4', '0', '5',
  1899.   '4', '0', '6',
  1900.   '4', '0', '7',
  1901.   '4', '0', '8',
  1902.   '4', '0', '9',
  1903.   '4', '1', '0',
  1904.   '4', '1', '1',
  1905.   '4', '1', '2',
  1906.   '4', '1', '3',
  1907.   '4', '1', '4',
  1908.   '4', '1', '5',
  1909.   '4', '1', '6',
  1910.   '4', '1', '7',
  1911.   '4', '1', '8',
  1912.   '4', '1', '9',
  1913.   '4', '2', '0',
  1914.   '4', '2', '1',
  1915.   '4', '2', '2',
  1916.   '4', '2', '3',
  1917.   '4', '2', '4',
  1918.   '4', '2', '5',
  1919.   '4', '2', '6',
  1920.   '4', '2', '7',
  1921.   '4', '2', '8',
  1922.   '4', '2', '9',
  1923.   '4', '3', '0',
  1924.   '4', '3', '1',
  1925.   '4', '3', '2',
  1926.   '4', '3', '3',
  1927.   '4', '3', '4',
  1928.   '4', '3', '5',
  1929.   '4', '3', '6',
  1930.   '4', '3', '7',
  1931.   '4', '3', '8',
  1932.   '4', '3', '9',
  1933.   '4', '4', '0',
  1934.   '4', '4', '1',
  1935.   '4', '4', '2',
  1936.   '4', '4', '3',
  1937.   '4', '4', '4',
  1938.   '4', '4', '5',
  1939.   '4', '4', '6',
  1940.   '4', '4', '7',
  1941.   '4', '4', '8',
  1942.   '4', '4', '9',
  1943.   '4', '5', '0',
  1944.   '4', '5', '1',
  1945.   '4', '5', '2',
  1946.   '4', '5', '3',
  1947.   '4', '5', '4',
  1948.   '4', '5', '5',
  1949.   '4', '5', '6',
  1950.   '4', '5', '7',
  1951.   '4', '5', '8',
  1952.   '4', '5', '9',
  1953.   '4', '6', '0',
  1954.   '4', '6', '1',
  1955.   '4', '6', '2',
  1956.   '4', '6', '3',
  1957.   '4', '6', '4',
  1958.   '4', '6', '5',
  1959.   '4', '6', '6',
  1960.   '4', '6', '7',
  1961.   '4', '6', '8',
  1962.   '4', '6', '9',
  1963.   '4', '7', '0',
  1964.   '4', '7', '1',
  1965.   '4', '7', '2',
  1966.   '4', '7', '3',
  1967.   '4', '7', '4',
  1968.   '4', '7', '5',
  1969.   '4', '7', '6',
  1970.   '4', '7', '7',
  1971.   '4', '7', '8',
  1972.   '4', '7', '9',
  1973.   '4', '8', '0',
  1974.   '4', '8', '1',
  1975.   '4', '8', '2',
  1976.   '4', '8', '3',
  1977.   '4', '8', '4',
  1978.   '4', '8', '5',
  1979.   '4', '8', '6',
  1980.   '4', '8', '7',
  1981.   '4', '8', '8',
  1982.   '4', '8', '9',
  1983.   '4', '9', '0',
  1984.   '4', '9', '1',
  1985.   '4', '9', '2',
  1986.   '4', '9', '3',
  1987.   '4', '9', '4',
  1988.   '4', '9', '5',
  1989.   '4', '9', '6',
  1990.   '4', '9', '7',
  1991.   '4', '9', '8',
  1992.   '4', '9', '9',
  1993.   '5', '0', '0',
  1994.   '5', '0', '1',
  1995.   '5', '0', '2',
  1996.   '5', '0', '3',
  1997.   '5', '0', '4',
  1998.   '5', '0', '5',
  1999.   '5', '0', '6',
  2000.   '5', '0', '7',
  2001.   '5', '0', '8',
  2002.   '5', '0', '9',
  2003.   '5', '1', '0',
  2004.   '5', '1', '1',
  2005.   '5', '1', '2',
  2006.   '5', '1', '3',
  2007.   '5', '1', '4',
  2008.   '5', '1', '5',
  2009.   '5', '1', '6',
  2010.   '5', '1', '7',
  2011.   '5', '1', '8',
  2012.   '5', '1', '9',
  2013.   '5', '2', '0',
  2014.   '5', '2', '1',
  2015.   '5', '2', '2',
  2016.   '5', '2', '3',
  2017.   '5', '2', '4',
  2018.   '5', '2', '5',
  2019.   '5', '2', '6',
  2020.   '5', '2', '7',
  2021.   '5', '2', '8',
  2022.   '5', '2', '9',
  2023.   '5', '3', '0',
  2024.   '5', '3', '1',
  2025.   '5', '3', '2',
  2026.   '5', '3', '3',
  2027.   '5', '3', '4',
  2028.   '5', '3', '5',
  2029.   '5', '3', '6',
  2030.   '5', '3', '7',
  2031.   '5', '3', '8',
  2032.   '5', '3', '9',
  2033.   '5', '4', '0',
  2034.   '5', '4', '1',
  2035.   '5', '4', '2',
  2036.   '5', '4', '3',
  2037.   '5', '4', '4',
  2038.   '5', '4', '5',
  2039.   '5', '4', '6',
  2040.   '5', '4', '7',
  2041.   '5', '4', '8',
  2042.   '5', '4', '9',
  2043.   '5', '5', '0',
  2044.   '5', '5', '1',
  2045.   '5', '5', '2',
  2046.   '5', '5', '3',
  2047.   '5', '5', '4',
  2048.   '5', '5', '5',
  2049.   '5', '5', '6',
  2050.   '5', '5', '7',
  2051.   '5', '5', '8',
  2052.   '5', '5', '9',
  2053.   '5', '6', '0',
  2054.   '5', '6', '1',
  2055.   '5', '6', '2',
  2056.   '5', '6', '3',
  2057.   '5', '6', '4',
  2058.   '5', '6', '5',
  2059.   '5', '6', '6',
  2060.   '5', '6', '7',
  2061.   '5', '6', '8',
  2062.   '5', '6', '9',
  2063.   '5', '7', '0',
  2064.   '5', '7', '1',
  2065.   '5', '7', '2',
  2066.   '5', '7', '3',
  2067.   '5', '7', '4',
  2068.   '5', '7', '5',
  2069.   '5', '7', '6',
  2070.   '5', '7', '7',
  2071.   '5', '7', '8',
  2072.   '5', '7', '9',
  2073.   '5', '8', '0',
  2074.   '5', '8', '1',
  2075.   '5', '8', '2',
  2076.   '5', '8', '3',
  2077.   '5', '8', '4',
  2078.   '5', '8', '5',
  2079.   '5', '8', '6',
  2080.   '5', '8', '7',
  2081.   '5', '8', '8',
  2082.   '5', '8', '9',
  2083.   '5', '9', '0',
  2084.   '5', '9', '1',
  2085.   '5', '9', '2',
  2086.   '5', '9', '3',
  2087.   '5', '9', '4',
  2088.   '5', '9', '5',
  2089.   '5', '9', '6',
  2090.   '5', '9', '7',
  2091.   '5', '9', '8',
  2092.   '5', '9', '9',
  2093.   '6', '0', '0',
  2094.   '6', '0', '1',
  2095.   '6', '0', '2',
  2096.   '6', '0', '3',
  2097.   '6', '0', '4',
  2098.   '6', '0', '5',
  2099.   '6', '0', '6',
  2100.   '6', '0', '7',
  2101.   '6', '0', '8',
  2102.   '6', '0', '9',
  2103.   '6', '1', '0',
  2104.   '6', '1', '1',
  2105.   '6', '1', '2',
  2106.   '6', '1', '3',
  2107.   '6', '1', '4',
  2108.   '6', '1', '5',
  2109.   '6', '1', '6',
  2110.   '6', '1', '7',
  2111.   '6', '1', '8',
  2112.   '6', '1', '9',
  2113.   '6', '2', '0',
  2114.   '6', '2', '1',
  2115.   '6', '2', '2',
  2116.   '6', '2', '3',
  2117.   '6', '2', '4',
  2118.   '6', '2', '5',
  2119.   '6', '2', '6',
  2120.   '6', '2', '7',
  2121.   '6', '2', '8',
  2122.   '6', '2', '9',
  2123.   '6', '3', '0',
  2124.   '6', '3', '1',
  2125.   '6', '3', '2',
  2126.   '6', '3', '3',
  2127.   '6', '3', '4',
  2128.   '6', '3', '5',
  2129.   '6', '3', '6',
  2130.   '6', '3', '7',
  2131.   '6', '3', '8',
  2132.   '6', '3', '9',
  2133.   '6', '4', '0',
  2134.   '6', '4', '1',
  2135.   '6', '4', '2',
  2136.   '6', '4', '3',
  2137.   '6', '4', '4',
  2138.   '6', '4', '5',
  2139.   '6', '4', '6',
  2140.   '6', '4', '7',
  2141.   '6', '4', '8',
  2142.   '6', '4', '9',
  2143.   '6', '5', '0',
  2144.   '6', '5', '1',
  2145.   '6', '5', '2',
  2146.   '6', '5', '3',
  2147.   '6', '5', '4',
  2148.   '6', '5', '5',
  2149.   '6', '5', '6',
  2150.   '6', '5', '7',
  2151.   '6', '5', '8',
  2152.   '6', '5', '9',
  2153.   '6', '6', '0',
  2154.   '6', '6', '1',
  2155.   '6', '6', '2',
  2156.   '6', '6', '3',
  2157.   '6', '6', '4',
  2158.   '6', '6', '5',
  2159.   '6', '6', '6',
  2160.   '6', '6', '7',
  2161.   '6', '6', '8',
  2162.   '6', '6', '9',
  2163.   '6', '7', '0',
  2164.   '6', '7', '1',
  2165.   '6', '7', '2',
  2166.   '6', '7', '3',
  2167.   '6', '7', '4',
  2168.   '6', '7', '5',
  2169.   '6', '7', '6',
  2170.   '6', '7', '7',
  2171.   '6', '7', '8',
  2172.   '6', '7', '9',
  2173.   '6', '8', '0',
  2174.   '6', '8', '1',
  2175.   '6', '8', '2',
  2176.   '6', '8', '3',
  2177.   '6', '8', '4',
  2178.   '6', '8', '5',
  2179.   '6', '8', '6',
  2180.   '6', '8', '7',
  2181.   '6', '8', '8',
  2182.   '6', '8', '9',
  2183.   '6', '9', '0',
  2184.   '6', '9', '1',
  2185.   '6', '9', '2',
  2186.   '6', '9', '3',
  2187.   '6', '9', '4',
  2188.   '6', '9', '5',
  2189.   '6', '9', '6',
  2190.   '6', '9', '7',
  2191.   '6', '9', '8',
  2192.   '6', '9', '9',
  2193.   '7', '0', '0',
  2194.   '7', '0', '1',
  2195.   '7', '0', '2',
  2196.   '7', '0', '3',
  2197.   '7', '0', '4',
  2198.   '7', '0', '5',
  2199.   '7', '0', '6',
  2200.   '7', '0', '7',
  2201.   '7', '0', '8',
  2202.   '7', '0', '9',
  2203.   '7', '1', '0',
  2204.   '7', '1', '1',
  2205.   '7', '1', '2',
  2206.   '7', '1', '3',
  2207.   '7', '1', '4',
  2208.   '7', '1', '5',
  2209.   '7', '1', '6',
  2210.   '7', '1', '7',
  2211.   '7', '1', '8',
  2212.   '7', '1', '9',
  2213.   '7', '2', '0',
  2214.   '7', '2', '1',
  2215.   '7', '2', '2',
  2216.   '7', '2', '3',
  2217.   '7', '2', '4',
  2218.   '7', '2', '5',
  2219.   '7', '2', '6',
  2220.   '7', '2', '7',
  2221.   '7', '2', '8',
  2222.   '7', '2', '9',
  2223.   '7', '3', '0',
  2224.   '7', '3', '1',
  2225.   '7', '3', '2',
  2226.   '7', '3', '3',
  2227.   '7', '3', '4',
  2228.   '7', '3', '5',
  2229.   '7', '3', '6',
  2230.   '7', '3', '7',
  2231.   '7', '3', '8',
  2232.   '7', '3', '9',
  2233.   '7', '4', '0',
  2234.   '7', '4', '1',
  2235.   '7', '4', '2',
  2236.   '7', '4', '3',
  2237.   '7', '4', '4',
  2238.   '7', '4', '5',
  2239.   '7', '4', '6',
  2240.   '7', '4', '7',
  2241.   '7', '4', '8',
  2242.   '7', '4', '9',
  2243.   '7', '5', '0',
  2244.   '7', '5', '1',
  2245.   '7', '5', '2',
  2246.   '7', '5', '3',
  2247.   '7', '5', '4',
  2248.   '7', '5', '5',
  2249.   '7', '5', '6',
  2250.   '7', '5', '7',
  2251.   '7', '5', '8',
  2252.   '7', '5', '9',
  2253.   '7', '6', '0',
  2254.   '7', '6', '1',
  2255.   '7', '6', '2',
  2256.   '7', '6', '3',
  2257.   '7', '6', '4',
  2258.   '7', '6', '5',
  2259.   '7', '6', '6',
  2260.   '7', '6', '7',
  2261.   '7', '6', '8',
  2262.   '7', '6', '9',
  2263.   '7', '7', '0',
  2264.   '7', '7', '1',
  2265.   '7', '7', '2',
  2266.   '7', '7', '3',
  2267.   '7', '7', '4',
  2268.   '7', '7', '5',
  2269.   '7', '7', '6',
  2270.   '7', '7', '7',
  2271.   '7', '7', '8',
  2272.   '7', '7', '9',
  2273.   '7', '8', '0',
  2274.   '7', '8', '1',
  2275.   '7', '8', '2',
  2276.   '7', '8', '3',
  2277.   '7', '8', '4',
  2278.   '7', '8', '5',
  2279.   '7', '8', '6',
  2280.   '7', '8', '7',
  2281.   '7', '8', '8',
  2282.   '7', '8', '9',
  2283.   '7', '9', '0',
  2284.   '7', '9', '1',
  2285.   '7', '9', '2',
  2286.   '7', '9', '3',
  2287.   '7', '9', '4',
  2288.   '7', '9', '5',
  2289.   '7', '9', '6',
  2290.   '7', '9', '7',
  2291.   '7', '9', '8',
  2292.   '7', '9', '9',
  2293.   '8', '0', '0',
  2294.   '8', '0', '1',
  2295.   '8', '0', '2',
  2296.   '8', '0', '3',
  2297.   '8', '0', '4',
  2298.   '8', '0', '5',
  2299.   '8', '0', '6',
  2300.   '8', '0', '7',
  2301.   '8', '0', '8',
  2302.   '8', '0', '9',
  2303.   '8', '1', '0',
  2304.   '8', '1', '1',
  2305.   '8', '1', '2',
  2306.   '8', '1', '3',
  2307.   '8', '1', '4',
  2308.   '8', '1', '5',
  2309.   '8', '1', '6',
  2310.   '8', '1', '7',
  2311.   '8', '1', '8',
  2312.   '8', '1', '9',
  2313.   '8', '2', '0',
  2314.   '8', '2', '1',
  2315.   '8', '2', '2',
  2316.   '8', '2', '3',
  2317.   '8', '2', '4',
  2318.   '8', '2', '5',
  2319.   '8', '2', '6',
  2320.   '8', '2', '7',
  2321.   '8', '2', '8',
  2322.   '8', '2', '9',
  2323.   '8', '3', '0',
  2324.   '8', '3', '1',
  2325.   '8', '3', '2',
  2326.   '8', '3', '3',
  2327.   '8', '3', '4',
  2328.   '8', '3', '5',
  2329.   '8', '3', '6',
  2330.   '8', '3', '7',
  2331.   '8', '3', '8',
  2332.   '8', '3', '9',
  2333.   '8', '4', '0',
  2334.   '8', '4', '1',
  2335.   '8', '4', '2',
  2336.   '8', '4', '3',
  2337.   '8', '4', '4',
  2338.   '8', '4', '5',
  2339.   '8', '4', '6',
  2340.   '8', '4', '7',
  2341.   '8', '4', '8',
  2342.   '8', '4', '9',
  2343.   '8', '5', '0',
  2344.   '8', '5', '1',
  2345.   '8', '5', '2',
  2346.   '8', '5', '3',
  2347.   '8', '5', '4',
  2348.   '8', '5', '5',
  2349.   '8', '5', '6',
  2350.   '8', '5', '7',
  2351.   '8', '5', '8',
  2352.   '8', '5', '9',
  2353.   '8', '6', '0',
  2354.   '8', '6', '1',
  2355.   '8', '6', '2',
  2356.   '8', '6', '3',
  2357.   '8', '6', '4',
  2358.   '8', '6', '5',
  2359.   '8', '6', '6',
  2360.   '8', '6', '7',
  2361.   '8', '6', '8',
  2362.   '8', '6', '9',
  2363.   '8', '7', '0',
  2364.   '8', '7', '1',
  2365.   '8', '7', '2',
  2366.   '8', '7', '3',
  2367.   '8', '7', '4',
  2368.   '8', '7', '5',
  2369.   '8', '7', '6',
  2370.   '8', '7', '7',
  2371.   '8', '7', '8',
  2372.   '8', '7', '9',
  2373.   '8', '8', '0',
  2374.   '8', '8', '1',
  2375.   '8', '8', '2',
  2376.   '8', '8', '3',
  2377.   '8', '8', '4',
  2378.   '8', '8', '5',
  2379.   '8', '8', '6',
  2380.   '8', '8', '7',
  2381.   '8', '8', '8',
  2382.   '8', '8', '9',
  2383.   '8', '9', '0',
  2384.   '8', '9', '1',
  2385.   '8', '9', '2',
  2386.   '8', '9', '3',
  2387.   '8', '9', '4',
  2388.   '8', '9', '5',
  2389.   '8', '9', '6',
  2390.   '8', '9', '7',
  2391.   '8', '9', '8',
  2392.   '8', '9', '9',
  2393.   '9', '0', '0',
  2394.   '9', '0', '1',
  2395.   '9', '0', '2',
  2396.   '9', '0', '3',
  2397.   '9', '0', '4',
  2398.   '9', '0', '5',
  2399.   '9', '0', '6',
  2400.   '9', '0', '7',
  2401.   '9', '0', '8',
  2402.   '9', '0', '9',
  2403.   '9', '1', '0',
  2404.   '9', '1', '1',
  2405.   '9', '1', '2',
  2406.   '9', '1', '3',
  2407.   '9', '1', '4',
  2408.   '9', '1', '5',
  2409.   '9', '1', '6',
  2410.   '9', '1', '7',
  2411.   '9', '1', '8',
  2412.   '9', '1', '9',
  2413.   '9', '2', '0',
  2414.   '9', '2', '1',
  2415.   '9', '2', '2',
  2416.   '9', '2', '3',
  2417.   '9', '2', '4',
  2418.   '9', '2', '5',
  2419.   '9', '2', '6',
  2420.   '9', '2', '7',
  2421.   '9', '2', '8',
  2422.   '9', '2', '9',
  2423.   '9', '3', '0',
  2424.   '9', '3', '1',
  2425.   '9', '3', '2',
  2426.   '9', '3', '3',
  2427.   '9', '3', '4',
  2428.   '9', '3', '5',
  2429.   '9', '3', '6',
  2430.   '9', '3', '7',
  2431.   '9', '3', '8',
  2432.   '9', '3', '9',
  2433.   '9', '4', '0',
  2434.   '9', '4', '1',
  2435.   '9', '4', '2',
  2436.   '9', '4', '3',
  2437.   '9', '4', '4',
  2438.   '9', '4', '5',
  2439.   '9', '4', '6',
  2440.   '9', '4', '7',
  2441.   '9', '4', '8',
  2442.   '9', '4', '9',
  2443.   '9', '5', '0',
  2444.   '9', '5', '1',
  2445.   '9', '5', '2',
  2446.   '9', '5', '3',
  2447.   '9', '5', '4',
  2448.   '9', '5', '5',
  2449.   '9', '5', '6',
  2450.   '9', '5', '7',
  2451.   '9', '5', '8',
  2452.   '9', '5', '9',
  2453.   '9', '6', '0',
  2454.   '9', '6', '1',
  2455.   '9', '6', '2',
  2456.   '9', '6', '3',
  2457.   '9', '6', '4',
  2458.   '9', '6', '5',
  2459.   '9', '6', '6',
  2460.   '9', '6', '7',
  2461.   '9', '6', '8',
  2462.   '9', '6', '9',
  2463.   '9', '7', '0',
  2464.   '9', '7', '1',
  2465.   '9', '7', '2',
  2466.   '9', '7', '3',
  2467.   '9', '7', '4',
  2468.   '9', '7', '5',
  2469.   '9', '7', '6',
  2470.   '9', '7', '7',
  2471.   '9', '7', '8',
  2472.   '9', '7', '9',
  2473.   '9', '8', '0',
  2474.   '9', '8', '1',
  2475.   '9', '8', '2',
  2476.   '9', '8', '3',
  2477.   '9', '8', '4',
  2478.   '9', '8', '5',
  2479.   '9', '8', '6',
  2480.   '9', '8', '7',
  2481.   '9', '8', '8',
  2482.   '9', '8', '9',
  2483.   '9', '9', '0',
  2484.   '9', '9', '1',
  2485.   '9', '9', '2',
  2486.   '9', '9', '3',
  2487.   '9', '9', '4',
  2488.   '9', '9', '5',
  2489.   '9', '9', '6',
  2490.   '9', '9', '7',
  2491.   '9', '9', '8',
  2492.   '9', '9', '9'
  2493. };
  2494.  
  2495. // ten2m3k64[], shift_ten2m3k64[] used for conversion from BID128 to string
  2496. UINT64 ten2m3k64[] = {
  2497.   0x4189374bc6a7ef9eull,        // 4189374bc6a7ef9e * 2^-72 = (10^-3)RP,63
  2498.   0x10c6f7a0b5ed8d37ull,        // 10c6f7a0b5ed8d37 * 2^-80 = (10^-6)RP,61
  2499.   0x44b82fa09b5a52ccull,        // 44b82fa09b5a52cc * 2^-92 = (10^-9)RP,63
  2500.   0x119799812dea111aull,        // 119799812dea111a * 2^-100 = (10^-12)RP,61
  2501.   0x480ebe7b9d58566dull // 480ebe7b9d58566d * 2^-112 = (10^-15)RP,63
  2502. };
  2503.  
  2504. unsigned int shift_ten2m3k64[] = {
  2505.   8,    // 72 - 64
  2506.   16,   // 80 - 64
  2507.   28,   // 92 - 64
  2508.   36,   // 100 - 64
  2509.   48    // 112 - 64
  2510. };
  2511.  
  2512. UINT128 ten2m3k128[] = {
  2513.   {{0xb22d0e5604189375ull, 0x4189374bc6a7ef9dull}},
  2514.   // 4189374bc6a7ef9d  b22d0e5604189375  * 2^-136 = (10^-3)RP,127
  2515.   {{0xb4c7f34938583622ull, 0x10c6f7a0b5ed8d36ull}},
  2516.   // 10c6f7a0b5ed8d36  b4c7f34938583622  * 2^-144 = (10^-6)RP,125
  2517.   {{0x98b405447c4a9819ull, 0x44b82fa09b5a52cbull}},
  2518.   // 44b82fa09b5a52cb  98b405447c4a9819  * 2^-156 = (10^-9)RP,127
  2519.   {{0x7f27f0f6e885c8bbull, 0x119799812dea1119ull}},
  2520.   // 119799812dea1119  7f27f0f6e885c8bb  * 2^-164 = (10^-12)RP,125
  2521.   {{0x87ce9b80a5fb0509ull, 0x480ebe7b9d58566cull}},
  2522.   // 480ebe7b9d58566c  87ce9b80a5fb0509  * 2^-176 = (10^-15)RP,127
  2523.   {{0xe75fe645cc4873faull, 0x12725dd1d243aba0ull}},
  2524.   // 12725dd1d243aba0  e75fe645cc4873fa  * 2^-184 = (10^-18)RP,125
  2525.   {{0x69fb7e0b75e52f02ull, 0x4b8ed0283a6d3df7ull}},
  2526.   // 4b8ed0283a6d3df7  69fb7e0b75e52f02  * 2^-196 = (10^-21)RP,127
  2527.   {{0x58924d52ce4f26a9ull, 0x1357c299a88ea76aull}},
  2528.   // 1357c299a88ea76a  58924d52ce4f26a9  * 2^-204 = (10^-24)RP,125
  2529.   {{0x3baf513267aa9a3full, 0x4f3a68dbc8f03f24ull}},
  2530.   // 4f3a68dbc8f03f24  3baf513267aa9a3f  * 2^-216 = (10^-27)RP,127
  2531.   {{0x3424b06f3529a052ull, 0x14484bfeebc29f86ull}},
  2532.   // 14484bfeebc29f86  3424b06f3529a052  * 2^-224 = (10^-30)RP,125
  2533.   {{0xf658d6c57566eac8ull, 0x5313a5dee87d6eb0ull}}
  2534.   // 5313a5dee87d6eb0  f658d6c57566eac8  * 2^-236 = (10^-33)RP,127
  2535. };
  2536.  
  2537. unsigned int shift_ten2m3k128[] = {
  2538.   8,    // 136 - 128
  2539.   16,   // 144 - 128
  2540.   28,   // 156 - 128
  2541.   36,   // 164 - 128
  2542.   48,   // 176 - 128
  2543.   56,   // 184 - 128
  2544.   4,    // 196 - 192
  2545.   12,   // 204 - 192
  2546.   24,   // 216 - 192
  2547.   32,   // 224 - 192
  2548.   44    // 236 - 192
  2549. };
  2550.  
  2551.  
  2552. /***************************************************************************
  2553.  *************** TABLES FOR GENERAL ROUNDING FUNCTIONS *********************
  2554.  ***************************************************************************/
  2555. // Note: not all entries in these tables will be used with IEEE 754R decimal
  2556. // floating-point arithmetic
  2557. // a) In round128_2_18() numbers with 2 <= q <= 18 will be rounded only
  2558. //    for 1 <= x <= 3:
  2559. //     x = 1 or x = 2 when q = 17
  2560. //     x = 2 or x = 3 when q = 18
  2561. // b) In round128_19_38() numbers with 19 <= q <= 38 will be rounded only
  2562. //    for 1 <= x <= 23:
  2563. //     x = 3 or x = 4 when q = 19
  2564. //     x = 4 or x = 5 when q = 20
  2565. //     ...
  2566. //     x = 18 or x = 19 when q = 34
  2567. //     x = 1 or x = 2 or x = 19 or x = 20 when q = 35
  2568. //     x = 2 or x = 3 or x = 20 or x = 21 when q = 36
  2569. //     x = 3 or x = 4 or x = 21 or x = 22 when q = 37
  2570. //     x = 4 or x = 5 or x = 22 or x = 23 when q = 38
  2571. // c) ...
  2572. // However, for generality and possible uses outside the frame of IEEE 754R
  2573. // this implementation includes table values for all x in [1, q - 1]
  2574.  
  2575. // Note: 64-bit tables generated with ten2mx64.ma; output in ten2mx64.out
  2576.  
  2577. // Kx from 10^(-x) ~= Kx * 2^(-Ex); Kx rounded up to 64 bits, 1 <= x <= 17
  2578. UINT64 Kx64[] = {
  2579.   0xcccccccccccccccdULL,        // 10^-1 ~= cccccccccccccccd * 2^-67
  2580.   0xa3d70a3d70a3d70bULL,        // 10^-2 ~= a3d70a3d70a3d70b * 2^-70
  2581.   0x83126e978d4fdf3cULL,        // 10^-3 ~= 83126e978d4fdf3c * 2^-73
  2582.   0xd1b71758e219652cULL,        // 10^-4 ~= d1b71758e219652c * 2^-77
  2583.   0xa7c5ac471b478424ULL,        // 10^-5 ~= a7c5ac471b478424 * 2^-80
  2584.   0x8637bd05af6c69b6ULL,        // 10^-6 ~= 8637bd05af6c69b6 * 2^-83
  2585.   0xd6bf94d5e57a42bdULL,        // 10^-7 ~= d6bf94d5e57a42bd * 2^-87
  2586.   0xabcc77118461cefdULL,        // 10^-8 ~= abcc77118461cefd * 2^-90
  2587.   0x89705f4136b4a598ULL,        // 10^-9 ~= 89705f4136b4a598 * 2^-93
  2588.   0xdbe6fecebdedd5bfULL,        // 10^-10 ~= dbe6fecebdedd5bf * 2^-97
  2589.   0xafebff0bcb24aaffULL,        // 10^-11 ~= afebff0bcb24aaff * 2^-100
  2590.   0x8cbccc096f5088ccULL,        // 10^-12 ~= 8cbccc096f5088cc * 2^-103
  2591.   0xe12e13424bb40e14ULL,        // 10^-13 ~= e12e13424bb40e14 * 2^-107
  2592.   0xb424dc35095cd810ULL,        // 10^-14 ~= b424dc35095cd810 * 2^-110
  2593.   0x901d7cf73ab0acdaULL,        // 10^-15 ~= 901d7cf73ab0acda * 2^-113
  2594.   0xe69594bec44de15cULL,        // 10^-16 ~= e69594bec44de15c * 2^-117
  2595.   0xb877aa3236a4b44aULL // 10^-17 ~= b877aa3236a4b44a * 2^-120
  2596. };
  2597.  
  2598. // Ex-64 from 10^(-x) ~= Kx * 2^(-Ex); Kx rounded up to 64 bits, 1 <= x <= 17
  2599. unsigned int Ex64m64[] = {
  2600.   3,    // 67 - 64, Ex = 67
  2601.   6,    // 70 - 64, Ex = 70
  2602.   9,    // 73 - 64, Ex = 73
  2603.   13,   // 77 - 64, Ex = 77
  2604.   16,   // 80 - 64, Ex = 80
  2605.   19,   // 83 - 64, Ex = 83
  2606.   23,   // 87 - 64, Ex = 87
  2607.   26,   // 90 - 64, Ex = 90
  2608.   29,   // 93 - 64, Ex = 93
  2609.   33,   // 97 - 64, Ex = 97
  2610.   36,   // 100 - 64, Ex = 100
  2611.   39,   // 103 - 64, Ex = 103
  2612.   43,   // 107 - 64, Ex = 107
  2613.   46,   // 110 - 64, Ex = 110
  2614.   49,   // 113 - 64, Ex = 113
  2615.   53,   // 117 - 64, Ex = 117
  2616.   56    // 120 - 64, Ex = 120
  2617. };
  2618.  
  2619. // Values of 1/2 in the right position to be compared with the fraction from
  2620. // C * kx, 1 <= x <= 17; the fraction consists of the low Ex bits in C * kx
  2621. // (these values are aligned with the high 64 bits of the fraction)
  2622. UINT64 half64[] = {
  2623.   0x0000000000000004ULL,        // half / 2^64 = 4
  2624.   0x0000000000000020ULL,        // half / 2^64 = 20
  2625.   0x0000000000000100ULL,        // half / 2^64 = 100
  2626.   0x0000000000001000ULL,        // half / 2^64 = 1000
  2627.   0x0000000000008000ULL,        // half / 2^64 = 8000
  2628.   0x0000000000040000ULL,        // half / 2^64 = 40000
  2629.   0x0000000000400000ULL,        // half / 2^64 = 400000
  2630.   0x0000000002000000ULL,        // half / 2^64 = 2000000
  2631.   0x0000000010000000ULL,        // half / 2^64 = 10000000
  2632.   0x0000000100000000ULL,        // half / 2^64 = 100000000
  2633.   0x0000000800000000ULL,        // half / 2^64 = 800000000
  2634.   0x0000004000000000ULL,        // half / 2^64 = 4000000000
  2635.   0x0000040000000000ULL,        // half / 2^64 = 40000000000
  2636.   0x0000200000000000ULL,        // half / 2^64 = 200000000000
  2637.   0x0001000000000000ULL,        // half / 2^64 = 1000000000000
  2638.   0x0010000000000000ULL,        // half / 2^64 = 10000000000000
  2639.   0x0080000000000000ULL // half / 2^64 = 80000000000000
  2640. };
  2641.  
  2642. // Values of mask in the right position to obtain the high Ex - 64 bits
  2643. // of the fraction from C * kx, 1 <= x <= 17; the fraction consists of
  2644. // the low Ex bits in C * kx
  2645. UINT64 mask64[] = {
  2646.   0x0000000000000007ULL,        // mask / 2^64
  2647.   0x000000000000003fULL,        // mask / 2^64
  2648.   0x00000000000001ffULL,        // mask / 2^64
  2649.   0x0000000000001fffULL,        // mask / 2^64
  2650.   0x000000000000ffffULL,        // mask / 2^64
  2651.   0x000000000007ffffULL,        // mask / 2^64
  2652.   0x00000000007fffffULL,        // mask / 2^64
  2653.   0x0000000003ffffffULL,        // mask / 2^64
  2654.   0x000000001fffffffULL,        // mask / 2^64
  2655.   0x00000001ffffffffULL,        // mask / 2^64
  2656.   0x0000000fffffffffULL,        // mask / 2^64
  2657.   0x0000007fffffffffULL,        // mask / 2^64
  2658.   0x000007ffffffffffULL,        // mask / 2^64
  2659.   0x00003fffffffffffULL,        // mask / 2^64
  2660.   0x0001ffffffffffffULL,        // mask / 2^64
  2661.   0x001fffffffffffffULL,        // mask / 2^64
  2662.   0x00ffffffffffffffULL // mask / 2^64
  2663. };
  2664.  
  2665. // Values of 10^(-x) trancated to Ex bits beyond the binary point, and
  2666. // in the right position to be compared with the fraction from C * kx,
  2667. // 1 <= x <= 17; the fraction consists of the low Ex bits in C * kx
  2668. // (these values are aligned with the low 64 bits of the fraction)
  2669. UINT64 ten2mxtrunc64[] = {
  2670.   0xccccccccccccccccULL,        // (ten2mx >> 64) = cccccccccccccccc
  2671.   0xa3d70a3d70a3d70aULL,        // (ten2mx >> 64) = a3d70a3d70a3d70a
  2672.   0x83126e978d4fdf3bULL,        // (ten2mx >> 64) = 83126e978d4fdf3b
  2673.   0xd1b71758e219652bULL,        // (ten2mx >> 64) = d1b71758e219652b
  2674.   0xa7c5ac471b478423ULL,        // (ten2mx >> 64) = a7c5ac471b478423
  2675.   0x8637bd05af6c69b5ULL,        // (ten2mx >> 64) = 8637bd05af6c69b5
  2676.   0xd6bf94d5e57a42bcULL,        // (ten2mx >> 64) = d6bf94d5e57a42bc
  2677.   0xabcc77118461cefcULL,        // (ten2mx >> 64) = abcc77118461cefc
  2678.   0x89705f4136b4a597ULL,        // (ten2mx >> 64) = 89705f4136b4a597
  2679.   0xdbe6fecebdedd5beULL,        // (ten2mx >> 64) = dbe6fecebdedd5be
  2680.   0xafebff0bcb24aafeULL,        // (ten2mx >> 64) = afebff0bcb24aafe
  2681.   0x8cbccc096f5088cbULL,        // (ten2mx >> 64) = 8cbccc096f5088cb
  2682.   0xe12e13424bb40e13ULL,        // (ten2mx >> 64) = e12e13424bb40e13
  2683.   0xb424dc35095cd80fULL,        // (ten2mx >> 64) = b424dc35095cd80f
  2684.   0x901d7cf73ab0acd9ULL,        // (ten2mx >> 64) = 901d7cf73ab0acd9
  2685.   0xe69594bec44de15bULL,        // (ten2mx >> 64) = e69594bec44de15b
  2686.   0xb877aa3236a4b449ULL // (ten2mx >> 64) = b877aa3236a4b449
  2687. };
  2688.  
  2689. // Note: 128-bit tables generated with ten2mx128.ma; output in ten2mx128.out
  2690. // The order of the 64-bit components is L, H
  2691.  
  2692. // Kx from 10^(-x) ~= Kx * 2^(-Ex); Kx rounded up to 128 bits, 1 <= x <= 37
  2693. UINT128 Kx128[] = {
  2694.   {{0xcccccccccccccccdULL, 0xccccccccccccccccULL}},
  2695.   // 10^-1 ~= cccccccccccccccccccccccccccccccd * 2^-131
  2696.   {{0x3d70a3d70a3d70a4ULL, 0xa3d70a3d70a3d70aULL}},
  2697.   // 10^-2 ~= a3d70a3d70a3d70a3d70a3d70a3d70a4 * 2^-134
  2698.   {{0x645a1cac083126eaULL, 0x83126e978d4fdf3bULL}},
  2699.   // 10^-3 ~= 83126e978d4fdf3b645a1cac083126ea * 2^-137
  2700.   {{0xd3c36113404ea4a9ULL, 0xd1b71758e219652bULL}},
  2701.   // 10^-4 ~= d1b71758e219652bd3c36113404ea4a9 * 2^-141
  2702.   {{0x0fcf80dc33721d54ULL, 0xa7c5ac471b478423ULL}},
  2703.   // 10^-5 ~= a7c5ac471b4784230fcf80dc33721d54 * 2^-144
  2704.   {{0xa63f9a49c2c1b110ULL, 0x8637bd05af6c69b5ULL}},
  2705.   // 10^-6 ~= 8637bd05af6c69b5a63f9a49c2c1b110 * 2^-147
  2706.   {{0x3d32907604691b4dULL, 0xd6bf94d5e57a42bcULL}},
  2707.   // 10^-7 ~= d6bf94d5e57a42bc3d32907604691b4d * 2^-151
  2708.   {{0xfdc20d2b36ba7c3eULL, 0xabcc77118461cefcULL}},
  2709.   // 10^-8 ~= abcc77118461cefcfdc20d2b36ba7c3e * 2^-154
  2710.   {{0x31680a88f8953031ULL, 0x89705f4136b4a597ULL}},
  2711.   // 10^-9 ~= 89705f4136b4a59731680a88f8953031 * 2^-157
  2712.   {{0xb573440e5a884d1cULL, 0xdbe6fecebdedd5beULL}},
  2713.   // 10^-10 ~= dbe6fecebdedd5beb573440e5a884d1c * 2^-161
  2714.   {{0xf78f69a51539d749ULL, 0xafebff0bcb24aafeULL}},
  2715.   // 10^-11 ~= afebff0bcb24aafef78f69a51539d749 * 2^-164
  2716.   {{0xf93f87b7442e45d4ULL, 0x8cbccc096f5088cbULL}},
  2717.   // 10^-12 ~= 8cbccc096f5088cbf93f87b7442e45d4 * 2^-167
  2718.   {{0x2865a5f206b06fbaULL, 0xe12e13424bb40e13ULL}},
  2719.   // 10^-13 ~= e12e13424bb40e132865a5f206b06fba * 2^-171
  2720.   {{0x538484c19ef38c95ULL, 0xb424dc35095cd80fULL}},
  2721.   // 10^-14 ~= b424dc35095cd80f538484c19ef38c95 * 2^-174
  2722.   {{0x0f9d37014bf60a11ULL, 0x901d7cf73ab0acd9ULL}},
  2723.   // 10^-15 ~= 901d7cf73ab0acd90f9d37014bf60a11 * 2^-177
  2724.   {{0x4c2ebe687989a9b4ULL, 0xe69594bec44de15bULL}},
  2725.   // 10^-16 ~= e69594bec44de15b4c2ebe687989a9b4 * 2^-181
  2726.   {{0x09befeb9fad487c3ULL, 0xb877aa3236a4b449ULL}},
  2727.   // 10^-17 ~= b877aa3236a4b44909befeb9fad487c3 * 2^-184
  2728.   {{0x3aff322e62439fd0ULL, 0x9392ee8e921d5d07ULL}},
  2729.   // 10^-18 ~= 9392ee8e921d5d073aff322e62439fd0 * 2^-187
  2730.   {{0x2b31e9e3d06c32e6ULL, 0xec1e4a7db69561a5ULL}},
  2731.   // 10^-19 ~= ec1e4a7db69561a52b31e9e3d06c32e6 * 2^-191
  2732.   {{0x88f4bb1ca6bcf585ULL, 0xbce5086492111aeaULL}},
  2733.   // 10^-20 ~= bce5086492111aea88f4bb1ca6bcf585 * 2^-194
  2734.   {{0xd3f6fc16ebca5e04ULL, 0x971da05074da7beeULL}},
  2735.   // 10^-21 ~= 971da05074da7beed3f6fc16ebca5e04 * 2^-197
  2736.   {{0x5324c68b12dd6339ULL, 0xf1c90080baf72cb1ULL}},
  2737.   // 10^-22 ~= f1c90080baf72cb15324c68b12dd6339 * 2^-201
  2738.   {{0x75b7053c0f178294ULL, 0xc16d9a0095928a27ULL}},
  2739.   // 10^-23 ~= c16d9a0095928a2775b7053c0f178294 * 2^-204
  2740.   {{0xc4926a9672793543ULL, 0x9abe14cd44753b52ULL}},
  2741.   // 10^-24 ~= 9abe14cd44753b52c4926a9672793543 * 2^-207
  2742.   {{0x3a83ddbd83f52205ULL, 0xf79687aed3eec551ULL}},
  2743.   // 10^-25 ~= f79687aed3eec5513a83ddbd83f52205 * 2^-211
  2744.   {{0x95364afe032a819eULL, 0xc612062576589ddaULL}},
  2745.   // 10^-26 ~= c612062576589dda95364afe032a819e * 2^-214
  2746.   {{0x775ea264cf55347eULL, 0x9e74d1b791e07e48ULL}},
  2747.   // 10^-27 ~= 9e74d1b791e07e48775ea264cf55347e * 2^-217
  2748.   {{0x8bca9d6e188853fdULL, 0xfd87b5f28300ca0dULL}},
  2749.   // 10^-28 ~= fd87b5f28300ca0d8bca9d6e188853fd * 2^-221
  2750.   {{0x096ee45813a04331ULL, 0xcad2f7f5359a3b3eULL}},
  2751.   // 10^-29 ~= cad2f7f5359a3b3e096ee45813a04331 * 2^-224
  2752.   {{0xa1258379a94d028eULL, 0xa2425ff75e14fc31ULL}},
  2753.   // 10^-30 ~= a2425ff75e14fc31a1258379a94d028e * 2^-227
  2754.   {{0x80eacf948770ced8ULL, 0x81ceb32c4b43fcf4ULL}},
  2755.   // 10^-31 ~= 81ceb32c4b43fcf480eacf948770ced8 * 2^-230
  2756.   {{0x67de18eda5814af3ULL, 0xcfb11ead453994baULL}},
  2757.   // 10^-32 ~= cfb11ead453994ba67de18eda5814af3 * 2^-234
  2758.   {{0xecb1ad8aeacdd58fULL, 0xa6274bbdd0fadd61ULL}},
  2759.   // 10^-33 ~= a6274bbdd0fadd61ecb1ad8aeacdd58f * 2^-237
  2760.   {{0xbd5af13bef0b113fULL, 0x84ec3c97da624ab4ULL}},
  2761.   // 10^-34 ~= 84ec3c97da624ab4bd5af13bef0b113f * 2^-240
  2762.   {{0x955e4ec64b44e865ULL, 0xd4ad2dbfc3d07787ULL}},
  2763.   // 10^-35 ~= d4ad2dbfc3d07787955e4ec64b44e865 * 2^-244
  2764.   {{0xdde50bd1d5d0b9eaULL, 0xaa242499697392d2ULL}},
  2765.   // 10^-36 ~= aa242499697392d2dde50bd1d5d0b9ea * 2^-247
  2766.   {{0x7e50d64177da2e55ULL, 0x881cea14545c7575ULL}}
  2767.   // 10^-37 ~= 881cea14545c75757e50d64177da2e55 * 2^-250
  2768. };
  2769.  
  2770. // Ex-128 from 10^(-x) ~= Kx*2^(-Ex); Kx rounded up to 128 bits, 1 <= x <= 37
  2771. unsigned int Ex128m128[] = {
  2772.   3,    // 131 - 128, Ex = 131
  2773.   6,    // 134 - 128, Ex = 134
  2774.   9,    // 137 - 128, Ex = 137
  2775.   13,   // 141 - 128, Ex = 141
  2776.   16,   // 144 - 128, Ex = 144
  2777.   19,   // 147 - 128, Ex = 147
  2778.   23,   // 151 - 128, Ex = 151
  2779.   26,   // 154 - 128, Ex = 154
  2780.   29,   // 157 - 128, Ex = 157
  2781.   33,   // 161 - 128, Ex = 161
  2782.   36,   // 164 - 128, Ex = 164
  2783.   39,   // 167 - 128, Ex = 167
  2784.   43,   // 171 - 128, Ex = 171
  2785.   46,   // 174 - 128, Ex = 174
  2786.   49,   // 177 - 128, Ex = 177
  2787.   53,   // 181 - 128, Ex = 181
  2788.   56,   // 184 - 128, Ex = 184
  2789.   59,   // 187 - 128, Ex = 187
  2790.   63,   // 191 - 128, Ex = 191
  2791.   2,    // 194 - 192, Ex = 194
  2792.   5,    // 197 - 192, Ex = 197
  2793.   9,    // 201 - 192, Ex = 201
  2794.   12,   // 204 - 192, Ex = 204
  2795.   15,   // 207 - 192, Ex = 207
  2796.   19,   // 211 - 192, Ex = 211
  2797.   22,   // 214 - 192, Ex = 214
  2798.   25,   // 217 - 192, Ex = 217
  2799.   29,   // 221 - 192, Ex = 221
  2800.   32,   // 224 - 192, Ex = 224
  2801.   35,   // 227 - 192, Ex = 227
  2802.   38,   // 230 - 192, Ex = 230
  2803.   42,   // 234 - 192, Ex = 234
  2804.   45,   // 237 - 192, Ex = 237
  2805.   48,   // 240 - 192, Ex = 240
  2806.   52,   // 244 - 192, Ex = 244
  2807.   55,   // 247 - 192, Ex = 247
  2808.   58    // 250 - 192, Ex = 250
  2809. };
  2810.  
  2811. // Values of 1/2 in the right position to be compared with the fraction from
  2812. // C * kx, 1 <= x <= 37; the fraction consists of the low Ex bits in C * kx
  2813. // (these values are aligned with the high 128 bits of the fraction)
  2814. UINT64 half128[] = {
  2815.   0x0000000000000004ULL,        // half / 2^128 = 4
  2816.   0x0000000000000020ULL,        // half / 2^128 = 20
  2817.   0x0000000000000100ULL,        // half / 2^128 = 100
  2818.   0x0000000000001000ULL,        // half / 2^128 = 1000
  2819.   0x0000000000008000ULL,        // half / 2^128 = 8000
  2820.   0x0000000000040000ULL,        // half / 2^128 = 40000
  2821.   0x0000000000400000ULL,        // half / 2^128 = 400000
  2822.   0x0000000002000000ULL,        // half / 2^128 = 2000000
  2823.   0x0000000010000000ULL,        // half / 2^128 = 10000000
  2824.   0x0000000100000000ULL,        // half / 2^128 = 100000000
  2825.   0x0000000800000000ULL,        // half / 2^128 = 800000000
  2826.   0x0000004000000000ULL,        // half / 2^128 = 4000000000
  2827.   0x0000040000000000ULL,        // half / 2^128 = 40000000000
  2828.   0x0000200000000000ULL,        // half / 2^128 = 200000000000
  2829.   0x0001000000000000ULL,        // half / 2^128 = 1000000000000
  2830.   0x0010000000000000ULL,        // half / 2^128 = 10000000000000
  2831.   0x0080000000000000ULL,        // half / 2^128 = 80000000000000
  2832.   0x0400000000000000ULL,        // half / 2^128 = 400000000000000
  2833.   0x4000000000000000ULL,        // half / 2^128 = 4000000000000000
  2834.   0x0000000000000002ULL,        // half / 2^192 = 2
  2835.   0x0000000000000010ULL,        // half / 2^192 = 10
  2836.   0x0000000000000100ULL,        // half / 2^192 = 100
  2837.   0x0000000000000800ULL,        // half / 2^192 = 800
  2838.   0x0000000000004000ULL,        // half / 2^192 = 4000
  2839.   0x0000000000040000ULL,        // half / 2^192 = 40000
  2840.   0x0000000000200000ULL,        // half / 2^192 = 200000
  2841.   0x0000000001000000ULL,        // half / 2^192 = 1000000
  2842.   0x0000000010000000ULL,        // half / 2^192 = 10000000
  2843.   0x0000000080000000ULL,        // half / 2^192 = 80000000
  2844.   0x0000000400000000ULL,        // half / 2^192 = 400000000
  2845.   0x0000002000000000ULL,        // half / 2^192 = 2000000000
  2846.   0x0000020000000000ULL,        // half / 2^192 = 20000000000
  2847.   0x0000100000000000ULL,        // half / 2^192 = 100000000000
  2848.   0x0000800000000000ULL,        // half / 2^192 = 800000000000
  2849.   0x0008000000000000ULL,        // half / 2^192 = 8000000000000
  2850.   0x0040000000000000ULL,        // half / 2^192 = 40000000000000
  2851.   0x0200000000000000ULL // half / 2^192 = 200000000000000
  2852. };
  2853.  
  2854. // Values of mask in the right position to obtain the high Ex - 128 or Ex - 192
  2855. // bits of the fraction from C * kx, 1 <= x <= 37; the fraction consists of
  2856. // the low Ex bits in C * kx
  2857. UINT64 mask128[] = {
  2858.   0x0000000000000007ULL,        // mask / 2^128
  2859.   0x000000000000003fULL,        // mask / 2^128
  2860.   0x00000000000001ffULL,        // mask / 2^128
  2861.   0x0000000000001fffULL,        // mask / 2^128
  2862.   0x000000000000ffffULL,        // mask / 2^128
  2863.   0x000000000007ffffULL,        // mask / 2^128
  2864.   0x00000000007fffffULL,        // mask / 2^128
  2865.   0x0000000003ffffffULL,        // mask / 2^128
  2866.   0x000000001fffffffULL,        // mask / 2^128
  2867.   0x00000001ffffffffULL,        // mask / 2^128
  2868.   0x0000000fffffffffULL,        // mask / 2^128
  2869.   0x0000007fffffffffULL,        // mask / 2^128
  2870.   0x000007ffffffffffULL,        // mask / 2^128
  2871.   0x00003fffffffffffULL,        // mask / 2^128
  2872.   0x0001ffffffffffffULL,        // mask / 2^128
  2873.   0x001fffffffffffffULL,        // mask / 2^128
  2874.   0x00ffffffffffffffULL,        // mask / 2^128
  2875.   0x07ffffffffffffffULL,        // mask / 2^128
  2876.   0x7fffffffffffffffULL,        // mask / 2^128
  2877.   0x0000000000000003ULL,        // mask / 2^192
  2878.   0x000000000000001fULL,        // mask / 2^192
  2879.   0x00000000000001ffULL,        // mask / 2^192
  2880.   0x0000000000000fffULL,        // mask / 2^192
  2881.   0x0000000000007fffULL,        // mask / 2^192
  2882.   0x000000000007ffffULL,        // mask / 2^192
  2883.   0x00000000003fffffULL,        // mask / 2^192
  2884.   0x0000000001ffffffULL,        // mask / 2^192
  2885.   0x000000001fffffffULL,        // mask / 2^192
  2886.   0x00000000ffffffffULL,        // mask / 2^192
  2887.   0x00000007ffffffffULL,        // mask / 2^192
  2888.   0x0000003fffffffffULL,        // mask / 2^192
  2889.   0x000003ffffffffffULL,        // mask / 2^192
  2890.   0x00001fffffffffffULL,        // mask / 2^192
  2891.   0x0000ffffffffffffULL,        // mask / 2^192
  2892.   0x000fffffffffffffULL,        // mask / 2^192
  2893.   0x007fffffffffffffULL,        // mask / 2^192
  2894.   0x03ffffffffffffffULL // mask / 2^192
  2895. };
  2896.  
  2897. // Values of 10^(-x) trancated to Ex bits beyond the binary point, and
  2898. // in the right position to be compared with the fraction from C * kx,
  2899. // 1 <= x <= 37; the fraction consists of the low Ex bits in C * kx
  2900. // (these values are aligned with the low 128 bits of the fraction)
  2901. UINT128 ten2mxtrunc128[] = {
  2902.   {{0xccccccccccccccccULL, 0xccccccccccccccccULL}},
  2903.   // (ten2mx >> 128) = cccccccccccccccccccccccccccccccc
  2904.   {{0x3d70a3d70a3d70a3ULL, 0xa3d70a3d70a3d70aULL}},
  2905.   // (ten2mx >> 128) = a3d70a3d70a3d70a3d70a3d70a3d70a3
  2906.   {{0x645a1cac083126e9ULL, 0x83126e978d4fdf3bULL}},
  2907.   // (ten2mx >> 128) = 83126e978d4fdf3b645a1cac083126e9
  2908.   {{0xd3c36113404ea4a8ULL, 0xd1b71758e219652bULL}},
  2909.   // (ten2mx >> 128) = d1b71758e219652bd3c36113404ea4a8
  2910.   {{0x0fcf80dc33721d53ULL, 0xa7c5ac471b478423ULL}},
  2911.   // (ten2mx >> 128) = a7c5ac471b4784230fcf80dc33721d53
  2912.   {{0xa63f9a49c2c1b10fULL, 0x8637bd05af6c69b5ULL}},
  2913.   // (ten2mx >> 128) = 8637bd05af6c69b5a63f9a49c2c1b10f
  2914.   {{0x3d32907604691b4cULL, 0xd6bf94d5e57a42bcULL}},
  2915.   // (ten2mx >> 128) = d6bf94d5e57a42bc3d32907604691b4c
  2916.   {{0xfdc20d2b36ba7c3dULL, 0xabcc77118461cefcULL}},
  2917.   // (ten2mx >> 128) = abcc77118461cefcfdc20d2b36ba7c3d
  2918.   {{0x31680a88f8953030ULL, 0x89705f4136b4a597ULL}},
  2919.   // (ten2mx >> 128) = 89705f4136b4a59731680a88f8953030
  2920.   {{0xb573440e5a884d1bULL, 0xdbe6fecebdedd5beULL}},
  2921.   // (ten2mx >> 128) = dbe6fecebdedd5beb573440e5a884d1b
  2922.   {{0xf78f69a51539d748ULL, 0xafebff0bcb24aafeULL}},
  2923.   // (ten2mx >> 128) = afebff0bcb24aafef78f69a51539d748
  2924.   {{0xf93f87b7442e45d3ULL, 0x8cbccc096f5088cbULL}},
  2925.   // (ten2mx >> 128) = 8cbccc096f5088cbf93f87b7442e45d3
  2926.   {{0x2865a5f206b06fb9ULL, 0xe12e13424bb40e13ULL}},
  2927.   // (ten2mx >> 128) = e12e13424bb40e132865a5f206b06fb9
  2928.   {{0x538484c19ef38c94ULL, 0xb424dc35095cd80fULL}},
  2929.   // (ten2mx >> 128) = b424dc35095cd80f538484c19ef38c94
  2930.   {{0x0f9d37014bf60a10ULL, 0x901d7cf73ab0acd9ULL}},
  2931.   // (ten2mx >> 128) = 901d7cf73ab0acd90f9d37014bf60a10
  2932.   {{0x4c2ebe687989a9b3ULL, 0xe69594bec44de15bULL}},
  2933.   // (ten2mx >> 128) = e69594bec44de15b4c2ebe687989a9b3
  2934.   {{0x09befeb9fad487c2ULL, 0xb877aa3236a4b449ULL}},
  2935.   // (ten2mx >> 128) = b877aa3236a4b44909befeb9fad487c2
  2936.   {{0x3aff322e62439fcfULL, 0x9392ee8e921d5d07ULL}},
  2937.   // (ten2mx >> 128) = 9392ee8e921d5d073aff322e62439fcf
  2938.   {{0x2b31e9e3d06c32e5ULL, 0xec1e4a7db69561a5ULL}},
  2939.   // (ten2mx >> 128) = ec1e4a7db69561a52b31e9e3d06c32e5
  2940.   {{0x88f4bb1ca6bcf584ULL, 0xbce5086492111aeaULL}},
  2941.   // (ten2mx >> 128) = bce5086492111aea88f4bb1ca6bcf584
  2942.   {{0xd3f6fc16ebca5e03ULL, 0x971da05074da7beeULL}},
  2943.   // (ten2mx >> 128) = 971da05074da7beed3f6fc16ebca5e03
  2944.   {{0x5324c68b12dd6338ULL, 0xf1c90080baf72cb1ULL}},
  2945.   // (ten2mx >> 128) = f1c90080baf72cb15324c68b12dd6338
  2946.   {{0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}},
  2947.   // (ten2mx >> 128) = c16d9a0095928a2775b7053c0f178293
  2948.   {{0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}},
  2949.   // (ten2mx >> 128) = 9abe14cd44753b52c4926a9672793542
  2950.   {{0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}},
  2951.   // (ten2mx >> 128) = f79687aed3eec5513a83ddbd83f52204
  2952.   {{0x95364afe032a819dULL, 0xc612062576589ddaULL}},
  2953.   // (ten2mx >> 128) = c612062576589dda95364afe032a819d
  2954.   {{0x775ea264cf55347dULL, 0x9e74d1b791e07e48ULL}},
  2955.   // (ten2mx >> 128) = 9e74d1b791e07e48775ea264cf55347d
  2956.   {{0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}},
  2957.   // (ten2mx >> 128) = fd87b5f28300ca0d8bca9d6e188853fc
  2958.   {{0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}},
  2959.   // (ten2mx >> 128) = cad2f7f5359a3b3e096ee45813a04330
  2960.   {{0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}},
  2961.   // (ten2mx >> 128) = a2425ff75e14fc31a1258379a94d028d
  2962.   {{0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}},
  2963.   // (ten2mx >> 128) = 81ceb32c4b43fcf480eacf948770ced7
  2964.   {{0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}},
  2965.   // (ten2mx >> 128) = cfb11ead453994ba67de18eda5814af2
  2966.   {{0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}},
  2967.   // (ten2mx >> 128) = a6274bbdd0fadd61ecb1ad8aeacdd58e
  2968.   {{0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}},
  2969.   // (ten2mx >> 128) = 84ec3c97da624ab4bd5af13bef0b113e
  2970.   {{0x955e4ec64b44e864ULL, 0xd4ad2dbfc3d07787ULL}},
  2971.   // (ten2mx >> 128) = d4ad2dbfc3d07787955e4ec64b44e864
  2972.   {{0xdde50bd1d5d0b9e9ULL, 0xaa242499697392d2ULL}},
  2973.   // (ten2mx >> 128) = aa242499697392d2dde50bd1d5d0b9e9
  2974.   {{0x7e50d64177da2e54ULL, 0x881cea14545c7575ULL}}
  2975.   // (ten2mx >> 128) = 881cea14545c75757e50d64177da2e54
  2976. };
  2977.  
  2978. UINT192 Kx192[] = {
  2979.   {{0xcccccccccccccccdULL, 0xccccccccccccccccULL,
  2980.     0xccccccccccccccccULL}},
  2981.   // 10^-1 ~= cccccccccccccccccccccccccccccccccccccccccccccccd * 2^-195
  2982.   {{0xd70a3d70a3d70a3eULL, 0x3d70a3d70a3d70a3ULL,
  2983.     0xa3d70a3d70a3d70aULL}},
  2984.   // 10^-2 ~= a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3e * 2^-198
  2985.   {{0x78d4fdf3b645a1cbULL, 0x645a1cac083126e9ULL,
  2986.     0x83126e978d4fdf3bULL}},
  2987.   // 10^-3 ~= 83126e978d4fdf3b645a1cac083126e978d4fdf3b645a1cb * 2^-201
  2988.   {{0xc154c985f06f6945ULL, 0xd3c36113404ea4a8ULL,
  2989.     0xd1b71758e219652bULL}},
  2990.   // 10^-4 ~= d1b71758e219652bd3c36113404ea4a8c154c985f06f6945 * 2^-205
  2991.   {{0xcddd6e04c0592104ULL, 0x0fcf80dc33721d53ULL,
  2992.     0xa7c5ac471b478423ULL}},
  2993.   // 10^-5 ~= a7c5ac471b4784230fcf80dc33721d53cddd6e04c0592104 * 2^-208
  2994.   {{0xd7e45803cd141a6aULL, 0xa63f9a49c2c1b10fULL,
  2995.     0x8637bd05af6c69b5ULL}},
  2996.   // 10^-6 ~= 8637bd05af6c69b5a63f9a49c2c1b10fd7e45803cd141a6a * 2^-211
  2997.   {{0x8ca08cd2e1b9c3dcULL, 0x3d32907604691b4cULL,
  2998.     0xd6bf94d5e57a42bcULL}},
  2999.   // 10^-7 ~= d6bf94d5e57a42bc3d32907604691b4c8ca08cd2e1b9c3dc * 2^-215
  3000.   {{0x3d4d3d758161697dULL, 0xfdc20d2b36ba7c3dULL,
  3001.     0xabcc77118461cefcULL}},
  3002.   // 10^-8 ~= abcc77118461cefcfdc20d2b36ba7c3d3d4d3d758161697d * 2^-218
  3003.   {{0xfdd7645e011abacaULL, 0x31680a88f8953030ULL,
  3004.     0x89705f4136b4a597ULL}},
  3005.   // 10^-9 ~= 89705f4136b4a59731680a88f8953030fdd7645e011abaca * 2^-221
  3006.   {{0x2fbf06fcce912addULL, 0xb573440e5a884d1bULL,
  3007.     0xdbe6fecebdedd5beULL}},
  3008.   // 10^-10 ~= dbe6fecebdedd5beb573440e5a884d1b2fbf06fcce912add * 2^-225
  3009.   {{0xf2ff38ca3eda88b1ULL, 0xf78f69a51539d748ULL,
  3010.     0xafebff0bcb24aafeULL}},
  3011.   // 10^-11 ~= afebff0bcb24aafef78f69a51539d748f2ff38ca3eda88b1 * 2^-228
  3012.   {{0xf598fa3b657ba08eULL, 0xf93f87b7442e45d3ULL,
  3013.     0x8cbccc096f5088cbULL}},
  3014.   // 10^-12 ~= 8cbccc096f5088cbf93f87b7442e45d3f598fa3b657ba08e * 2^-231
  3015.   {{0x88f4c3923bf900e3ULL, 0x2865a5f206b06fb9ULL,
  3016.     0xe12e13424bb40e13ULL}},
  3017.   // 10^-13 ~= e12e13424bb40e132865a5f206b06fb988f4c3923bf900e3 * 2^-235
  3018.   {{0x6d909c74fcc733e9ULL, 0x538484c19ef38c94ULL,
  3019.     0xb424dc35095cd80fULL}},
  3020.   // 10^-14 ~= b424dc35095cd80f538484c19ef38c946d909c74fcc733e9 * 2^-238
  3021.   {{0x57a6e390ca38f654ULL, 0x0f9d37014bf60a10ULL,
  3022.     0x901d7cf73ab0acd9ULL}},
  3023.   // 10^-15 ~= 901d7cf73ab0acd90f9d37014bf60a1057a6e390ca38f654 * 2^-241
  3024.   {{0xbf716c1add27f086ULL, 0x4c2ebe687989a9b3ULL,
  3025.     0xe69594bec44de15bULL}},
  3026.   // 10^-16 ~= e69594bec44de15b4c2ebe687989a9b3bf716c1add27f086 * 2^-245
  3027.   {{0xff8df0157db98d38ULL, 0x09befeb9fad487c2ULL,
  3028.     0xb877aa3236a4b449ULL}},
  3029.   // 10^-17 ~= b877aa3236a4b44909befeb9fad487c2ff8df0157db98d38 * 2^-248
  3030.   {{0x32d7f344649470faULL, 0x3aff322e62439fcfULL,
  3031.     0x9392ee8e921d5d07ULL}},
  3032.   // 10^-18 ~= 9392ee8e921d5d073aff322e62439fcf32d7f344649470fa * 2^-251
  3033.   {{0x1e2652070753e7f5ULL, 0x2b31e9e3d06c32e5ULL,
  3034.     0xec1e4a7db69561a5ULL}},
  3035.   // 10^-19 ~= ec1e4a7db69561a52b31e9e3d06c32e51e2652070753e7f5 * 2^-255
  3036.   {{0x181ea8059f76532bULL, 0x88f4bb1ca6bcf584ULL,
  3037.     0xbce5086492111aeaULL}},
  3038.   // 10^-20 ~= bce5086492111aea88f4bb1ca6bcf584181ea8059f76532b * 2^-258
  3039.   {{0x467eecd14c5ea8efULL, 0xd3f6fc16ebca5e03ULL,
  3040.     0x971da05074da7beeULL}},
  3041.   // 10^-21 ~= 971da05074da7beed3f6fc16ebca5e03467eecd14c5ea8ef * 2^-261
  3042.   {{0x70cb148213caa7e5ULL, 0x5324c68b12dd6338ULL,
  3043.     0xf1c90080baf72cb1ULL}},
  3044.   // 10^-22 ~= f1c90080baf72cb15324c68b12dd633870cb148213caa7e5 * 2^-265
  3045.   {{0x8d6f439b43088651ULL, 0x75b7053c0f178293ULL,
  3046.     0xc16d9a0095928a27ULL}},
  3047.   // 10^-23 ~= c16d9a0095928a2775b7053c0f1782938d6f439b43088651 * 2^-268
  3048.   {{0xd78c3615cf3a050dULL, 0xc4926a9672793542ULL,
  3049.     0x9abe14cd44753b52ULL}},
  3050.   // 10^-24 ~= 9abe14cd44753b52c4926a9672793542d78c3615cf3a050d * 2^-271
  3051.   {{0x8c1389bc7ec33b48ULL, 0x3a83ddbd83f52204ULL,
  3052.     0xf79687aed3eec551ULL}},
  3053.   // 10^-25 ~= f79687aed3eec5513a83ddbd83f522048c1389bc7ec33b48 * 2^-275
  3054.   {{0x3cdc6e306568fc3aULL, 0x95364afe032a819dULL,
  3055.     0xc612062576589ddaULL}},
  3056.   // 10^-26 ~= c612062576589dda95364afe032a819d3cdc6e306568fc3a * 2^-278
  3057.   {{0xca49f1c05120c9c8ULL, 0x775ea264cf55347dULL,
  3058.     0x9e74d1b791e07e48ULL}},
  3059.   // 10^-27 ~= 9e74d1b791e07e48775ea264cf55347dca49f1c05120c9c8 * 2^-281
  3060.   {{0x76dcb60081ce0fa6ULL, 0x8bca9d6e188853fcULL,
  3061.     0xfd87b5f28300ca0dULL}},
  3062.   // 10^-28 ~= fd87b5f28300ca0d8bca9d6e188853fc76dcb60081ce0fa6 * 2^-285
  3063.   {{0x5f16f80067d80c85ULL, 0x096ee45813a04330ULL,
  3064.     0xcad2f7f5359a3b3eULL}},
  3065.   // 10^-29 ~= cad2f7f5359a3b3e096ee45813a043305f16f80067d80c85 * 2^-288
  3066.   {{0x18df2ccd1fe00a04ULL, 0xa1258379a94d028dULL,
  3067.     0xa2425ff75e14fc31ULL}},
  3068.   // 10^-30 ~= a2425ff75e14fc31a1258379a94d028d18df2ccd1fe00a04 * 2^-291
  3069.   {{0x4718f0a419800803ULL, 0x80eacf948770ced7ULL,
  3070.     0x81ceb32c4b43fcf4ULL}},
  3071.   // 10^-31 ~= 81ceb32c4b43fcf480eacf948770ced74718f0a419800803 * 2^-294
  3072.   {{0x0b5b1aa028ccd99fULL, 0x67de18eda5814af2ULL,
  3073.     0xcfb11ead453994baULL}},
  3074.   // 10^-32 ~= cfb11ead453994ba67de18eda5814af20b5b1aa028ccd99f * 2^-298
  3075.   {{0x6f7c154ced70ae19ULL, 0xecb1ad8aeacdd58eULL,
  3076.     0xa6274bbdd0fadd61ULL}},
  3077.   // 10^-33 ~= a6274bbdd0fadd61ecb1ad8aeacdd58e6f7c154ced70ae19 * 2^-301
  3078.   {{0xbf967770bdf3be7aULL, 0xbd5af13bef0b113eULL,
  3079.     0x84ec3c97da624ab4ULL}},
  3080.   // 10^-34 ~= 84ec3c97da624ab4bd5af13bef0b113ebf967770bdf3be7a * 2^-304
  3081.   {{0x65bd8be79652ca5dULL, 0x955e4ec64b44e864ULL,
  3082.     0xd4ad2dbfc3d07787ULL}},
  3083.   // 10^-35 ~= d4ad2dbfc3d07787955e4ec64b44e86465bd8be79652ca5d * 2^-308
  3084.   {{0xeafe098611dbd517ULL, 0xdde50bd1d5d0b9e9ULL,
  3085.     0xaa242499697392d2ULL}},
  3086.   // 10^-36 ~= aa242499697392d2dde50bd1d5d0b9e9eafe098611dbd517 * 2^-311
  3087.   {{0xbbfe6e04db164413ULL, 0x7e50d64177da2e54ULL,
  3088.     0x881cea14545c7575ULL}},
  3089.   // 10^-37 ~= 881cea14545c75757e50d64177da2e54bbfe6e04db164413 * 2^-314
  3090.   {{0x2cca49a15e8a0684ULL, 0x96e7bd358c904a21ULL,
  3091.     0xd9c7dced53c72255ULL}},
  3092.   // 10^-38 ~= d9c7dced53c7225596e7bd358c904a212cca49a15e8a0684 * 2^-318
  3093.   {{0x8a3b6e1ab2080537ULL, 0xabec975e0a0d081aULL,
  3094.     0xae397d8aa96c1b77ULL}},
  3095.   // 10^-39 ~= ae397d8aa96c1b77abec975e0a0d081a8a3b6e1ab2080537 * 2^-321
  3096.   {{0x3b62be7bc1a0042cULL, 0x2323ac4b3b3da015ULL,
  3097.     0x8b61313bbabce2c6ULL}},
  3098.   // 10^-40 ~= 8b61313bbabce2c62323ac4b3b3da0153b62be7bc1a0042c * 2^-324
  3099.   {{0x5f0463f935ccd379ULL, 0x6b6c46dec52f6688ULL,
  3100.     0xdf01e85f912e37a3ULL}},
  3101.   // 10^-41 ~= df01e85f912e37a36b6c46dec52f66885f0463f935ccd379 * 2^-328
  3102.   {{0x7f36b660f7d70f94ULL, 0x55f038b237591ed3ULL,
  3103.     0xb267ed1940f1c61cULL}},
  3104.   // 10^-42 ~= b267ed1940f1c61c55f038b237591ed37f36b660f7d70f94 * 2^-331
  3105.   {{0xcc2bc51a5fdf3faaULL, 0x77f3608e92adb242ULL,
  3106.     0x8eb98a7a9a5b04e3ULL}},
  3107.   // 10^-43 ~= 8eb98a7a9a5b04e377f3608e92adb242cc2bc51a5fdf3faa * 2^-334
  3108.   {{0xe046082a32fecc42ULL, 0x8cb89a7db77c506aULL,
  3109.     0xe45c10c42a2b3b05ULL}},
  3110.   // 10^-44 ~= e45c10c42a2b3b058cb89a7db77c506ae046082a32fecc42 * 2^-338
  3111.   {{0x4d04d354f598a368ULL, 0x3d607b97c5fd0d22ULL,
  3112.     0xb6b00d69bb55c8d1ULL}},
  3113.   // 10^-45 ~= b6b00d69bb55c8d13d607b97c5fd0d224d04d354f598a368 * 2^-341
  3114.   {{0x3d9d75dd9146e920ULL, 0xcab3961304ca70e8ULL,
  3115.     0x9226712162ab070dULL}},
  3116.   // 10^-46 ~= 9226712162ab070dcab3961304ca70e83d9d75dd9146e920 * 2^-344
  3117.   {{0xc8fbefc8e8717500ULL, 0xaab8f01e6e10b4a6ULL,
  3118.     0xe9d71b689dde71afULL}},
  3119.   // 10^-47 ~= e9d71b689dde71afaab8f01e6e10b4a6c8fbefc8e8717500 * 2^-348
  3120.   {{0x3a63263a538df734ULL, 0x5560c018580d5d52ULL,
  3121.     0xbb127c53b17ec159ULL}},
  3122.   // 10^-48 ~= bb127c53b17ec1595560c018580d5d523a63263a538df734 * 2^-351
  3123.   {{0x2eb5b82ea93e5f5dULL, 0xdde7001379a44aa8ULL,
  3124.     0x95a8637627989aadULL}},
  3125.   // 10^-49 ~= 95a8637627989aaddde7001379a44aa82eb5b82ea93e5f5d * 2^-354
  3126.   {{0x4abc59e441fd6561ULL, 0x963e66858f6d4440ULL,
  3127.     0xef73d256a5c0f77cULL}},
  3128.   // 10^-50 ~= ef73d256a5c0f77c963e66858f6d44404abc59e441fd6561 * 2^-358
  3129.   {{0x6efd14b69b311de7ULL, 0xde98520472bdd033ULL,
  3130.     0xbf8fdb78849a5f96ULL}},
  3131.   // 10^-51 ~= bf8fdb78849a5f96de98520472bdd0336efd14b69b311de7 * 2^-361
  3132.   {{0x259743c548f417ecULL, 0xe546a8038efe4029ULL,
  3133.     0x993fe2c6d07b7fabULL}},
  3134.   // 10^-52 ~= 993fe2c6d07b7fabe546a8038efe4029259743c548f417ec * 2^-364
  3135.   {{0x3c25393ba7ecf313ULL, 0xd53dd99f4b3066a8ULL,
  3136.     0xf53304714d9265dfULL}},
  3137.   // 10^-53 ~= f53304714d9265dfd53dd99f4b3066a83c25393ba7ecf313 * 2^-368
  3138.   {{0x96842dc95323f5a9ULL, 0xaa97e14c3c26b886ULL,
  3139.     0xc428d05aa4751e4cULL}},
  3140.   // 10^-54 ~= c428d05aa4751e4caa97e14c3c26b88696842dc95323f5a9 * 2^-371
  3141.   {{0xab9cf16ddc1cc487ULL, 0x55464dd69685606bULL,
  3142.     0x9ced737bb6c4183dULL}},
  3143.   // 10^-55 ~= 9ced737bb6c4183d55464dd69685606bab9cf16ddc1cc487 * 2^-374
  3144.   {{0xac2e4f162cfad40bULL, 0xeed6e2f0f0d56712ULL, 0xfb158592be068d2eULL}}
  3145.   // 10^-56 ~= fb158592be068d2eeed6e2f0f0d56712ac2e4f162cfad40b * 2^-378
  3146. };
  3147.  
  3148. unsigned int Ex192m192[] = {
  3149.   3,    // 195 - 192, Ex = 195
  3150.   6,    // 198 - 192, Ex = 198
  3151.   9,    // 201 - 192, Ex = 201
  3152.   13,   // 205 - 192, Ex = 205
  3153.   16,   // 208 - 192, Ex = 208
  3154.   19,   // 211 - 192, Ex = 211
  3155.   23,   // 215 - 192, Ex = 215
  3156.   26,   // 218 - 192, Ex = 218
  3157.   29,   // 221 - 192, Ex = 221
  3158.   33,   // 225 - 192, Ex = 225
  3159.   36,   // 228 - 192, Ex = 228
  3160.   39,   // 231 - 192, Ex = 231
  3161.   43,   // 235 - 192, Ex = 235
  3162.   46,   // 238 - 192, Ex = 238
  3163.   49,   // 241 - 192, Ex = 241
  3164.   53,   // 245 - 192, Ex = 245
  3165.   56,   // 248 - 192, Ex = 248
  3166.   59,   // 251 - 192, Ex = 251
  3167.   63,   // 255 - 192, Ex = 255
  3168.   2,    // 258 - 256, Ex = 258
  3169.   5,    // 261 - 256, Ex = 261
  3170.   9,    // 265 - 256, Ex = 265
  3171.   12,   // 268 - 256, Ex = 268
  3172.   15,   // 271 - 256, Ex = 271
  3173.   19,   // 275 - 256, Ex = 275
  3174.   22,   // 278 - 256, Ex = 278
  3175.   25,   // 281 - 256, Ex = 281
  3176.   29,   // 285 - 256, Ex = 285
  3177.   32,   // 288 - 256, Ex = 288
  3178.   35,   // 291 - 256, Ex = 291
  3179.   38,   // 294 - 256, Ex = 294
  3180.   42,   // 298 - 256, Ex = 298
  3181.   45,   // 301 - 256, Ex = 301
  3182.   48,   // 304 - 256, Ex = 304
  3183.   52,   // 308 - 256, Ex = 308
  3184.   55,   // 311 - 256, Ex = 311
  3185.   58,   // 314 - 256, Ex = 314
  3186.   62,   // 318 - 256, Ex = 318
  3187.   1,    // 321 - 320, Ex = 321
  3188.   4,    // 324 - 320, Ex = 324
  3189.   8,    // 328 - 320, Ex = 328
  3190.   11,   // 331 - 320, Ex = 331
  3191.   14,   // 334 - 320, Ex = 334
  3192.   18,   // 338 - 320, Ex = 338
  3193.   21,   // 341 - 320, Ex = 341
  3194.   24,   // 344 - 320, Ex = 344
  3195.   28,   // 348 - 320, Ex = 348
  3196.   31,   // 351 - 320, Ex = 351
  3197.   34,   // 354 - 320, Ex = 354
  3198.   38,   // 358 - 320, Ex = 358
  3199.   41,   // 361 - 320, Ex = 361
  3200.   44,   // 364 - 320, Ex = 364
  3201.   48,   // 368 - 320, Ex = 368
  3202.   51,   // 371 - 320, Ex = 371
  3203.   54,   // 374 - 320, Ex = 374
  3204.   58    // 378 - 320, Ex = 378
  3205. };
  3206.  
  3207. UINT64 half192[] = {
  3208.   0x0000000000000004ULL,        // half / 2^192 = 4
  3209.   0x0000000000000020ULL,        // half / 2^192 = 20
  3210.   0x0000000000000100ULL,        // half / 2^192 = 100
  3211.   0x0000000000001000ULL,        // half / 2^192 = 1000
  3212.   0x0000000000008000ULL,        // half / 2^192 = 8000
  3213.   0x0000000000040000ULL,        // half / 2^192 = 40000
  3214.   0x0000000000400000ULL,        // half / 2^192 = 400000
  3215.   0x0000000002000000ULL,        // half / 2^192 = 2000000
  3216.   0x0000000010000000ULL,        // half / 2^192 = 10000000
  3217.   0x0000000100000000ULL,        // half / 2^192 = 100000000
  3218.   0x0000000800000000ULL,        // half / 2^192 = 800000000
  3219.   0x0000004000000000ULL,        // half / 2^192 = 4000000000
  3220.   0x0000040000000000ULL,        // half / 2^192 = 40000000000
  3221.   0x0000200000000000ULL,        // half / 2^192 = 200000000000
  3222.   0x0001000000000000ULL,        // half / 2^192 = 1000000000000
  3223.   0x0010000000000000ULL,        // half / 2^192 = 10000000000000
  3224.   0x0080000000000000ULL,        // half / 2^192 = 80000000000000
  3225.   0x0400000000000000ULL,        // half / 2^192 = 400000000000000
  3226.   0x4000000000000000ULL,        // half / 2^192 = 4000000000000000
  3227.   0x0000000000000002ULL,        // half / 2^256 = 2
  3228.   0x0000000000000010ULL,        // half / 2^256 = 10
  3229.   0x0000000000000100ULL,        // half / 2^256 = 100
  3230.   0x0000000000000800ULL,        // half / 2^256 = 800
  3231.   0x0000000000004000ULL,        // half / 2^256 = 4000
  3232.   0x0000000000040000ULL,        // half / 2^256 = 40000
  3233.   0x0000000000200000ULL,        // half / 2^256 = 200000
  3234.   0x0000000001000000ULL,        // half / 2^256 = 1000000
  3235.   0x0000000010000000ULL,        // half / 2^256 = 10000000
  3236.   0x0000000080000000ULL,        // half / 2^256 = 80000000
  3237.   0x0000000400000000ULL,        // half / 2^256 = 400000000
  3238.   0x0000002000000000ULL,        // half / 2^256 = 2000000000
  3239.   0x0000020000000000ULL,        // half / 2^256 = 20000000000
  3240.   0x0000100000000000ULL,        // half / 2^256 = 100000000000
  3241.   0x0000800000000000ULL,        // half / 2^256 = 800000000000
  3242.   0x0008000000000000ULL,        // half / 2^256 = 8000000000000
  3243.   0x0040000000000000ULL,        // half / 2^256 = 40000000000000
  3244.   0x0200000000000000ULL,        // half / 2^256 = 200000000000000
  3245.   0x2000000000000000ULL,        // half / 2^256 = 2000000000000000
  3246.   0x0000000000000001ULL,        // half / 2^320 = 1
  3247.   0x0000000000000008ULL,        // half / 2^320 = 8
  3248.   0x0000000000000080ULL,        // half / 2^320 = 80
  3249.   0x0000000000000400ULL,        // half / 2^320 = 400
  3250.   0x0000000000002000ULL,        // half / 2^320 = 2000
  3251.   0x0000000000020000ULL,        // half / 2^320 = 20000
  3252.   0x0000000000100000ULL,        // half / 2^320 = 100000
  3253.   0x0000000000800000ULL,        // half / 2^320 = 800000
  3254.   0x0000000008000000ULL,        // half / 2^320 = 8000000
  3255.   0x0000000040000000ULL,        // half / 2^320 = 40000000
  3256.   0x0000000200000000ULL,        // half / 2^320 = 200000000
  3257.   0x0000002000000000ULL,        // half / 2^320 = 2000000000
  3258.   0x0000010000000000ULL,        // half / 2^320 = 10000000000
  3259.   0x0000080000000000ULL,        // half / 2^320 = 80000000000
  3260.   0x0000800000000000ULL,        // half / 2^320 = 800000000000
  3261.   0x0004000000000000ULL,        // half / 2^320 = 4000000000000
  3262.   0x0020000000000000ULL,        // half / 2^320 = 20000000000000
  3263.   0x0200000000000000ULL // half / 2^320 = 200000000000000
  3264. };
  3265.  
  3266. UINT64 mask192[] = {
  3267.   0x0000000000000007ULL,        // mask / 2^192
  3268.   0x000000000000003fULL,        // mask / 2^192
  3269.   0x00000000000001ffULL,        // mask / 2^192
  3270.   0x0000000000001fffULL,        // mask / 2^192
  3271.   0x000000000000ffffULL,        // mask / 2^192
  3272.   0x000000000007ffffULL,        // mask / 2^192
  3273.   0x00000000007fffffULL,        // mask / 2^192
  3274.   0x0000000003ffffffULL,        // mask / 2^192
  3275.   0x000000001fffffffULL,        // mask / 2^192
  3276.   0x00000001ffffffffULL,        // mask / 2^192
  3277.   0x0000000fffffffffULL,        // mask / 2^192
  3278.   0x0000007fffffffffULL,        // mask / 2^192
  3279.   0x000007ffffffffffULL,        // mask / 2^192
  3280.   0x00003fffffffffffULL,        // mask / 2^192
  3281.   0x0001ffffffffffffULL,        // mask / 2^192
  3282.   0x001fffffffffffffULL,        // mask / 2^192
  3283.   0x00ffffffffffffffULL,        // mask / 2^192
  3284.   0x07ffffffffffffffULL,        // mask / 2^192
  3285.   0x7fffffffffffffffULL,        // mask / 2^192
  3286.   0x0000000000000003ULL,        // mask / 2^256
  3287.   0x000000000000001fULL,        // mask / 2^256
  3288.   0x00000000000001ffULL,        // mask / 2^256
  3289.   0x0000000000000fffULL,        // mask / 2^256
  3290.   0x0000000000007fffULL,        // mask / 2^256
  3291.   0x000000000007ffffULL,        // mask / 2^256
  3292.   0x00000000003fffffULL,        // mask / 2^256
  3293.   0x0000000001ffffffULL,        // mask / 2^256
  3294.   0x000000001fffffffULL,        // mask / 2^256
  3295.   0x00000000ffffffffULL,        // mask / 2^256
  3296.   0x00000007ffffffffULL,        // mask / 2^256
  3297.   0x0000003fffffffffULL,        // mask / 2^256
  3298.   0x000003ffffffffffULL,        // mask / 2^256
  3299.   0x00001fffffffffffULL,        // mask / 2^256
  3300.   0x0000ffffffffffffULL,        // mask / 2^256
  3301.   0x000fffffffffffffULL,        // mask / 2^256
  3302.   0x007fffffffffffffULL,        // mask / 2^256
  3303.   0x03ffffffffffffffULL,        // mask / 2^256
  3304.   0x3fffffffffffffffULL,        // mask / 2^256
  3305.   0x0000000000000001ULL,        // mask / 2^320
  3306.   0x000000000000000fULL,        // mask / 2^320
  3307.   0x00000000000000ffULL,        // mask / 2^320
  3308.   0x00000000000007ffULL,        // mask / 2^320
  3309.   0x0000000000003fffULL,        // mask / 2^320
  3310.   0x000000000003ffffULL,        // mask / 2^320
  3311.   0x00000000001fffffULL,        // mask / 2^320
  3312.   0x0000000000ffffffULL,        // mask / 2^320
  3313.   0x000000000fffffffULL,        // mask / 2^320
  3314.   0x000000007fffffffULL,        // mask / 2^320
  3315.   0x00000003ffffffffULL,        // mask / 2^320
  3316.   0x0000003fffffffffULL,        // mask / 2^320
  3317.   0x000001ffffffffffULL,        // mask / 2^320
  3318.   0x00000fffffffffffULL,        // mask / 2^320
  3319.   0x0000ffffffffffffULL,        // mask / 2^320
  3320.   0x0007ffffffffffffULL,        // mask / 2^320
  3321.   0x003fffffffffffffULL,        // mask / 2^320
  3322.   0x03ffffffffffffffULL // mask / 2^320
  3323. };
  3324.  
  3325. UINT192 ten2mxtrunc192[] = {
  3326.   {{0xccccccccccccccccULL, 0xccccccccccccccccULL,
  3327.     0xccccccccccccccccULL}},
  3328.   // (ten2mx >> 192) = cccccccccccccccccccccccccccccccccccccccccccccccc
  3329.   {{0xd70a3d70a3d70a3dULL, 0x3d70a3d70a3d70a3ULL,
  3330.     0xa3d70a3d70a3d70aULL}},
  3331.   // (ten2mx >> 192) = a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d
  3332.   {{0x78d4fdf3b645a1caULL, 0x645a1cac083126e9ULL,
  3333.     0x83126e978d4fdf3bULL}},
  3334.   // (ten2mx >> 192) = 83126e978d4fdf3b645a1cac083126e978d4fdf3b645a1ca
  3335.   {{0xc154c985f06f6944ULL, 0xd3c36113404ea4a8ULL,
  3336.     0xd1b71758e219652bULL}},
  3337.   // (ten2mx >> 192) = d1b71758e219652bd3c36113404ea4a8c154c985f06f6944
  3338.   {{0xcddd6e04c0592103ULL, 0x0fcf80dc33721d53ULL,
  3339.     0xa7c5ac471b478423ULL}},
  3340.   // (ten2mx >> 192) = a7c5ac471b4784230fcf80dc33721d53cddd6e04c0592103
  3341.   {{0xd7e45803cd141a69ULL, 0xa63f9a49c2c1b10fULL,
  3342.     0x8637bd05af6c69b5ULL}},
  3343.   // (ten2mx >> 192) = 8637bd05af6c69b5a63f9a49c2c1b10fd7e45803cd141a69
  3344.   {{0x8ca08cd2e1b9c3dbULL, 0x3d32907604691b4cULL,
  3345.     0xd6bf94d5e57a42bcULL}},
  3346.   // (ten2mx >> 192) = d6bf94d5e57a42bc3d32907604691b4c8ca08cd2e1b9c3db
  3347.   {{0x3d4d3d758161697cULL, 0xfdc20d2b36ba7c3dULL,
  3348.     0xabcc77118461cefcULL}},
  3349.   // (ten2mx >> 192) = abcc77118461cefcfdc20d2b36ba7c3d3d4d3d758161697c
  3350.   {{0xfdd7645e011abac9ULL, 0x31680a88f8953030ULL,
  3351.     0x89705f4136b4a597ULL}},
  3352.   // (ten2mx >> 192) = 89705f4136b4a59731680a88f8953030fdd7645e011abac9
  3353.   {{0x2fbf06fcce912adcULL, 0xb573440e5a884d1bULL,
  3354.     0xdbe6fecebdedd5beULL}},
  3355.   // (ten2mx >> 192) = dbe6fecebdedd5beb573440e5a884d1b2fbf06fcce912adc
  3356.   {{0xf2ff38ca3eda88b0ULL, 0xf78f69a51539d748ULL,
  3357.     0xafebff0bcb24aafeULL}},
  3358.   // (ten2mx >> 192) = afebff0bcb24aafef78f69a51539d748f2ff38ca3eda88b0
  3359.   {{0xf598fa3b657ba08dULL, 0xf93f87b7442e45d3ULL,
  3360.     0x8cbccc096f5088cbULL}},
  3361.   // (ten2mx >> 192) = 8cbccc096f5088cbf93f87b7442e45d3f598fa3b657ba08d
  3362.   {{0x88f4c3923bf900e2ULL, 0x2865a5f206b06fb9ULL,
  3363.     0xe12e13424bb40e13ULL}},
  3364.   // (ten2mx >> 192) = e12e13424bb40e132865a5f206b06fb988f4c3923bf900e2
  3365.   {{0x6d909c74fcc733e8ULL, 0x538484c19ef38c94ULL,
  3366.     0xb424dc35095cd80fULL}},
  3367.   // (ten2mx >> 192) = b424dc35095cd80f538484c19ef38c946d909c74fcc733e8
  3368.   {{0x57a6e390ca38f653ULL, 0x0f9d37014bf60a10ULL,
  3369.     0x901d7cf73ab0acd9ULL}},
  3370.   // (ten2mx >> 192) = 901d7cf73ab0acd90f9d37014bf60a1057a6e390ca38f653
  3371.   {{0xbf716c1add27f085ULL, 0x4c2ebe687989a9b3ULL,
  3372.     0xe69594bec44de15bULL}},
  3373.   // (ten2mx >> 192) = e69594bec44de15b4c2ebe687989a9b3bf716c1add27f085
  3374.   {{0xff8df0157db98d37ULL, 0x09befeb9fad487c2ULL,
  3375.     0xb877aa3236a4b449ULL}},
  3376.   // (ten2mx >> 192) = b877aa3236a4b44909befeb9fad487c2ff8df0157db98d37
  3377.   {{0x32d7f344649470f9ULL, 0x3aff322e62439fcfULL,
  3378.     0x9392ee8e921d5d07ULL}},
  3379.   // (ten2mx >> 192) = 9392ee8e921d5d073aff322e62439fcf32d7f344649470f9
  3380.   {{0x1e2652070753e7f4ULL, 0x2b31e9e3d06c32e5ULL,
  3381.     0xec1e4a7db69561a5ULL}},
  3382.   // (ten2mx >> 192) = ec1e4a7db69561a52b31e9e3d06c32e51e2652070753e7f4
  3383.   {{0x181ea8059f76532aULL, 0x88f4bb1ca6bcf584ULL,
  3384.     0xbce5086492111aeaULL}},
  3385.   // (ten2mx >> 192) = bce5086492111aea88f4bb1ca6bcf584181ea8059f76532a
  3386.   {{0x467eecd14c5ea8eeULL, 0xd3f6fc16ebca5e03ULL,
  3387.     0x971da05074da7beeULL}},
  3388.   // (ten2mx >> 192) = 971da05074da7beed3f6fc16ebca5e03467eecd14c5ea8ee
  3389.   {{0x70cb148213caa7e4ULL, 0x5324c68b12dd6338ULL,
  3390.     0xf1c90080baf72cb1ULL}},
  3391.   // (ten2mx >> 192) = f1c90080baf72cb15324c68b12dd633870cb148213caa7e4
  3392.   {{0x8d6f439b43088650ULL, 0x75b7053c0f178293ULL,
  3393.     0xc16d9a0095928a27ULL}},
  3394.   // (ten2mx >> 192) = c16d9a0095928a2775b7053c0f1782938d6f439b43088650
  3395.   {{0xd78c3615cf3a050cULL, 0xc4926a9672793542ULL,
  3396.     0x9abe14cd44753b52ULL}},
  3397.   // (ten2mx >> 192) = 9abe14cd44753b52c4926a9672793542d78c3615cf3a050c
  3398.   {{0x8c1389bc7ec33b47ULL, 0x3a83ddbd83f52204ULL,
  3399.     0xf79687aed3eec551ULL}},
  3400.   // (ten2mx >> 192) = f79687aed3eec5513a83ddbd83f522048c1389bc7ec33b47
  3401.   {{0x3cdc6e306568fc39ULL, 0x95364afe032a819dULL,
  3402.     0xc612062576589ddaULL}},
  3403.   // (ten2mx >> 192) = c612062576589dda95364afe032a819d3cdc6e306568fc39
  3404.   {{0xca49f1c05120c9c7ULL, 0x775ea264cf55347dULL,
  3405.     0x9e74d1b791e07e48ULL}},
  3406.   // (ten2mx >> 192) = 9e74d1b791e07e48775ea264cf55347dca49f1c05120c9c7
  3407.   {{0x76dcb60081ce0fa5ULL, 0x8bca9d6e188853fcULL,
  3408.     0xfd87b5f28300ca0dULL}},
  3409.   // (ten2mx >> 192) = fd87b5f28300ca0d8bca9d6e188853fc76dcb60081ce0fa5
  3410.   {{0x5f16f80067d80c84ULL, 0x096ee45813a04330ULL,
  3411.     0xcad2f7f5359a3b3eULL}},
  3412.   // (ten2mx >> 192) = cad2f7f5359a3b3e096ee45813a043305f16f80067d80c84
  3413.   {{0x18df2ccd1fe00a03ULL, 0xa1258379a94d028dULL,
  3414.     0xa2425ff75e14fc31ULL}},
  3415.   // (ten2mx >> 192) = a2425ff75e14fc31a1258379a94d028d18df2ccd1fe00a03
  3416.   {{0x4718f0a419800802ULL, 0x80eacf948770ced7ULL,
  3417.     0x81ceb32c4b43fcf4ULL}},
  3418.   // (ten2mx >> 192) = 81ceb32c4b43fcf480eacf948770ced74718f0a419800802
  3419.   {{0x0b5b1aa028ccd99eULL, 0x67de18eda5814af2ULL,
  3420.     0xcfb11ead453994baULL}},
  3421.   // (ten2mx >> 192) = cfb11ead453994ba67de18eda5814af20b5b1aa028ccd99e
  3422.   {{0x6f7c154ced70ae18ULL, 0xecb1ad8aeacdd58eULL,
  3423.     0xa6274bbdd0fadd61ULL}},
  3424.   // (ten2mx >> 192) = a6274bbdd0fadd61ecb1ad8aeacdd58e6f7c154ced70ae18
  3425.   {{0xbf967770bdf3be79ULL, 0xbd5af13bef0b113eULL,
  3426.     0x84ec3c97da624ab4ULL}},
  3427.   // (ten2mx >> 192) = 84ec3c97da624ab4bd5af13bef0b113ebf967770bdf3be79
  3428.   {{0x65bd8be79652ca5cULL, 0x955e4ec64b44e864ULL,
  3429.     0xd4ad2dbfc3d07787ULL}},
  3430.   // (ten2mx >> 192) = d4ad2dbfc3d07787955e4ec64b44e86465bd8be79652ca5c
  3431.   {{0xeafe098611dbd516ULL, 0xdde50bd1d5d0b9e9ULL,
  3432.     0xaa242499697392d2ULL}},
  3433.   // (ten2mx >> 192) = aa242499697392d2dde50bd1d5d0b9e9eafe098611dbd516
  3434.   {{0xbbfe6e04db164412ULL, 0x7e50d64177da2e54ULL,
  3435.     0x881cea14545c7575ULL}},
  3436.   // (ten2mx >> 192) = 881cea14545c75757e50d64177da2e54bbfe6e04db164412
  3437.   {{0x2cca49a15e8a0683ULL, 0x96e7bd358c904a21ULL,
  3438.     0xd9c7dced53c72255ULL}},
  3439.   // (ten2mx >> 192) = d9c7dced53c7225596e7bd358c904a212cca49a15e8a0683
  3440.   {{0x8a3b6e1ab2080536ULL, 0xabec975e0a0d081aULL,
  3441.     0xae397d8aa96c1b77ULL}},
  3442.   // (ten2mx >> 192) = ae397d8aa96c1b77abec975e0a0d081a8a3b6e1ab2080536
  3443.   {{0x3b62be7bc1a0042bULL, 0x2323ac4b3b3da015ULL,
  3444.     0x8b61313bbabce2c6ULL}},
  3445.   // (ten2mx >> 192) = 8b61313bbabce2c62323ac4b3b3da0153b62be7bc1a0042b
  3446.   {{0x5f0463f935ccd378ULL, 0x6b6c46dec52f6688ULL,
  3447.     0xdf01e85f912e37a3ULL}},
  3448.   // (ten2mx >> 192) = df01e85f912e37a36b6c46dec52f66885f0463f935ccd378
  3449.   {{0x7f36b660f7d70f93ULL, 0x55f038b237591ed3ULL,
  3450.     0xb267ed1940f1c61cULL}},
  3451.   // (ten2mx >> 192) = b267ed1940f1c61c55f038b237591ed37f36b660f7d70f93
  3452.   {{0xcc2bc51a5fdf3fa9ULL, 0x77f3608e92adb242ULL,
  3453.     0x8eb98a7a9a5b04e3ULL}},
  3454.   // (ten2mx >> 192) = 8eb98a7a9a5b04e377f3608e92adb242cc2bc51a5fdf3fa9
  3455.   {{0xe046082a32fecc41ULL, 0x8cb89a7db77c506aULL,
  3456.     0xe45c10c42a2b3b05ULL}},
  3457.   // (ten2mx >> 192) = e45c10c42a2b3b058cb89a7db77c506ae046082a32fecc41
  3458.   {{0x4d04d354f598a367ULL, 0x3d607b97c5fd0d22ULL,
  3459.     0xb6b00d69bb55c8d1ULL}},
  3460.   // (ten2mx >> 192) = b6b00d69bb55c8d13d607b97c5fd0d224d04d354f598a367
  3461.   {{0x3d9d75dd9146e91fULL, 0xcab3961304ca70e8ULL,
  3462.     0x9226712162ab070dULL}},
  3463.   // (ten2mx >> 192) = 9226712162ab070dcab3961304ca70e83d9d75dd9146e91f
  3464.   {{0xc8fbefc8e87174ffULL, 0xaab8f01e6e10b4a6ULL,
  3465.     0xe9d71b689dde71afULL}},
  3466.   // (ten2mx >> 192) = e9d71b689dde71afaab8f01e6e10b4a6c8fbefc8e87174ff
  3467.   {{0x3a63263a538df733ULL, 0x5560c018580d5d52ULL,
  3468.     0xbb127c53b17ec159ULL}},
  3469.   // (ten2mx >> 192) = bb127c53b17ec1595560c018580d5d523a63263a538df733
  3470.   {{0x2eb5b82ea93e5f5cULL, 0xdde7001379a44aa8ULL,
  3471.     0x95a8637627989aadULL}},
  3472.   // (ten2mx >> 192) = 95a8637627989aaddde7001379a44aa82eb5b82ea93e5f5c
  3473.   {{0x4abc59e441fd6560ULL, 0x963e66858f6d4440ULL,
  3474.     0xef73d256a5c0f77cULL}},
  3475.   // (ten2mx >> 192) = ef73d256a5c0f77c963e66858f6d44404abc59e441fd6560
  3476.   {{0x6efd14b69b311de6ULL, 0xde98520472bdd033ULL,
  3477.     0xbf8fdb78849a5f96ULL}},
  3478.   // (ten2mx >> 192) = bf8fdb78849a5f96de98520472bdd0336efd14b69b311de6
  3479.   {{0x259743c548f417ebULL, 0xe546a8038efe4029ULL,
  3480.     0x993fe2c6d07b7fabULL}},
  3481.   // (ten2mx >> 192) = 993fe2c6d07b7fabe546a8038efe4029259743c548f417eb
  3482.   {{0x3c25393ba7ecf312ULL, 0xd53dd99f4b3066a8ULL,
  3483.     0xf53304714d9265dfULL}},
  3484.   // (ten2mx >> 192) = f53304714d9265dfd53dd99f4b3066a83c25393ba7ecf312
  3485.   {{0x96842dc95323f5a8ULL, 0xaa97e14c3c26b886ULL,
  3486.     0xc428d05aa4751e4cULL}},
  3487.   // (ten2mx >> 192) = c428d05aa4751e4caa97e14c3c26b88696842dc95323f5a8
  3488.   {{0xab9cf16ddc1cc486ULL, 0x55464dd69685606bULL,
  3489.     0x9ced737bb6c4183dULL}},
  3490.   // (ten2mx >> 192) = 9ced737bb6c4183d55464dd69685606bab9cf16ddc1cc486
  3491.   {{0xac2e4f162cfad40aULL, 0xeed6e2f0f0d56712ULL, 0xfb158592be068d2eULL}}
  3492.   // (ten2mx >> 192) = fb158592be068d2eeed6e2f0f0d56712ac2e4f162cfad40a
  3493. };
  3494.  
  3495. UINT256 Kx256[] = {
  3496.   {{0xcccccccccccccccdULL, 0xccccccccccccccccULL,
  3497.     0xccccccccccccccccULL, 0xccccccccccccccccULL}},
  3498.   // 10^-1 ~= cccccccccccccccc  cccccccccccccccc  
  3499.   //   cccccccccccccccccccccccccccccccd   * 2^-259
  3500.   {{0x70a3d70a3d70a3d8ULL, 0xd70a3d70a3d70a3dULL,
  3501.     0x3d70a3d70a3d70a3ULL, 0xa3d70a3d70a3d70aULL}},
  3502.   // 10^-2 ~= a3d70a3d70a3d70a  3d70a3d70a3d70a3  
  3503.   //   d70a3d70a3d70a3d70a3d70a3d70a3d8   * 2^-262
  3504.   {{0xc083126e978d4fe0ULL, 0x78d4fdf3b645a1caULL,
  3505.     0x645a1cac083126e9ULL, 0x83126e978d4fdf3bULL}},
  3506.   // 10^-3 ~= 83126e978d4fdf3b  645a1cac083126e9  
  3507.   //   78d4fdf3b645a1cac083126e978d4fe0   * 2^-265
  3508.   {{0x67381d7dbf487fccULL, 0xc154c985f06f6944ULL,
  3509.     0xd3c36113404ea4a8ULL, 0xd1b71758e219652bULL}},
  3510.   // 10^-4 ~= d1b71758e219652b  d3c36113404ea4a8  
  3511.   //   c154c985f06f694467381d7dbf487fcc   * 2^-269
  3512.   {{0x85c67dfe32a0663dULL, 0xcddd6e04c0592103ULL,
  3513.     0x0fcf80dc33721d53ULL, 0xa7c5ac471b478423ULL}},
  3514.   // 10^-5 ~= a7c5ac471b478423  fcf80dc33721d53  
  3515.   //   cddd6e04c059210385c67dfe32a0663d   * 2^-272
  3516.   {{0x37d1fe64f54d1e97ULL, 0xd7e45803cd141a69ULL,
  3517.     0xa63f9a49c2c1b10fULL, 0x8637bd05af6c69b5ULL}},
  3518.   // 10^-6 ~= 8637bd05af6c69b5  a63f9a49c2c1b10f  
  3519.   //   d7e45803cd141a6937d1fe64f54d1e97   * 2^-275
  3520.   {{0x8c8330a1887b6425ULL, 0x8ca08cd2e1b9c3dbULL,
  3521.     0x3d32907604691b4cULL, 0xd6bf94d5e57a42bcULL}},
  3522.   // 10^-7 ~= d6bf94d5e57a42bc  3d32907604691b4c  
  3523.   //   8ca08cd2e1b9c3db8c8330a1887b6425   * 2^-279
  3524.   {{0x7068f3b46d2f8351ULL, 0x3d4d3d758161697cULL,
  3525.     0xfdc20d2b36ba7c3dULL, 0xabcc77118461cefcULL}},
  3526.   // 10^-8 ~= abcc77118461cefc  fdc20d2b36ba7c3d  
  3527.   //   3d4d3d758161697c7068f3b46d2f8351   * 2^-282
  3528.   {{0xf387295d242602a7ULL, 0xfdd7645e011abac9ULL,
  3529.     0x31680a88f8953030ULL, 0x89705f4136b4a597ULL}},
  3530.   // 10^-9 ~= 89705f4136b4a597  31680a88f8953030  
  3531.   //   fdd7645e011abac9f387295d242602a7   * 2^-285
  3532.   {{0xb8d8422ea03cd10bULL, 0x2fbf06fcce912adcULL,
  3533.     0xb573440e5a884d1bULL, 0xdbe6fecebdedd5beULL}},
  3534.   // 10^-10 ~= dbe6fecebdedd5be  b573440e5a884d1b  
  3535.   //   2fbf06fcce912adcb8d8422ea03cd10b   * 2^-289
  3536.   {{0x93e034f219ca40d6ULL, 0xf2ff38ca3eda88b0ULL,
  3537.     0xf78f69a51539d748ULL, 0xafebff0bcb24aafeULL}},
  3538.   // 10^-11 ~= afebff0bcb24aafe  f78f69a51539d748  
  3539.   //   f2ff38ca3eda88b093e034f219ca40d6   * 2^-292
  3540.   {{0x4319c3f4e16e9a45ULL, 0xf598fa3b657ba08dULL,
  3541.     0xf93f87b7442e45d3ULL, 0x8cbccc096f5088cbULL}},
  3542.   // 10^-12 ~= 8cbccc096f5088cb  f93f87b7442e45d3  
  3543.   //   f598fa3b657ba08d4319c3f4e16e9a45   * 2^-295
  3544.   {{0x04f606549be42a07ULL, 0x88f4c3923bf900e2ULL,
  3545.     0x2865a5f206b06fb9ULL, 0xe12e13424bb40e13ULL}},
  3546.   // 10^-13 ~= e12e13424bb40e13  2865a5f206b06fb9  
  3547.   //   88f4c3923bf900e204f606549be42a07   * 2^-299
  3548.   {{0x03f805107cb68806ULL, 0x6d909c74fcc733e8ULL,
  3549.     0x538484c19ef38c94ULL, 0xb424dc35095cd80fULL}},
  3550.   // 10^-14 ~= b424dc35095cd80f  538484c19ef38c94  
  3551.   //   6d909c74fcc733e803f805107cb68806   * 2^-302
  3552.   {{0x3660040d3092066bULL, 0x57a6e390ca38f653ULL,
  3553.     0x0f9d37014bf60a10ULL, 0x901d7cf73ab0acd9ULL}},
  3554.   // 10^-15 ~= 901d7cf73ab0acd9  f9d37014bf60a10  
  3555.   //   57a6e390ca38f6533660040d3092066b   * 2^-305
  3556.   {{0x23ccd3484db670abULL, 0xbf716c1add27f085ULL,
  3557.     0x4c2ebe687989a9b3ULL, 0xe69594bec44de15bULL}},
  3558.   // 10^-16 ~= e69594bec44de15b  4c2ebe687989a9b3  
  3559.   //   bf716c1add27f08523ccd3484db670ab   * 2^-309
  3560.   {{0x4fd70f6d0af85a23ULL, 0xff8df0157db98d37ULL,
  3561.     0x09befeb9fad487c2ULL, 0xb877aa3236a4b449ULL}},
  3562.   // 10^-17 ~= b877aa3236a4b449  9befeb9fad487c2  
  3563.   //   ff8df0157db98d374fd70f6d0af85a23   * 2^-312
  3564.   {{0x0cac0c573bf9e1b6ULL, 0x32d7f344649470f9ULL,
  3565.     0x3aff322e62439fcfULL, 0x9392ee8e921d5d07ULL}},
  3566.   // 10^-18 ~= 9392ee8e921d5d07  3aff322e62439fcf  
  3567.   //   32d7f344649470f90cac0c573bf9e1b6   * 2^-315
  3568.   {{0xe11346f1f98fcf89ULL, 0x1e2652070753e7f4ULL,
  3569.     0x2b31e9e3d06c32e5ULL, 0xec1e4a7db69561a5ULL}},
  3570.   // 10^-19 ~= ec1e4a7db69561a5  2b31e9e3d06c32e5  
  3571.   //   1e2652070753e7f4e11346f1f98fcf89   * 2^-319
  3572.   {{0x4da9058e613fd93aULL, 0x181ea8059f76532aULL,
  3573.     0x88f4bb1ca6bcf584ULL, 0xbce5086492111aeaULL}},
  3574.   // 10^-20 ~= bce5086492111aea  88f4bb1ca6bcf584  
  3575.   //   181ea8059f76532a4da9058e613fd93a   * 2^-322
  3576.   {{0xa48737a51a997a95ULL, 0x467eecd14c5ea8eeULL,
  3577.     0xd3f6fc16ebca5e03ULL, 0x971da05074da7beeULL}},
  3578.   // 10^-21 ~= 971da05074da7bee  d3f6fc16ebca5e03  
  3579.   //   467eecd14c5ea8eea48737a51a997a95   * 2^-325
  3580.   {{0x3a71f2a1c428c421ULL, 0x70cb148213caa7e4ULL,
  3581.     0x5324c68b12dd6338ULL, 0xf1c90080baf72cb1ULL}},
  3582.   // 10^-22 ~= f1c90080baf72cb1  5324c68b12dd6338  
  3583.   //   70cb148213caa7e43a71f2a1c428c421   * 2^-329
  3584.   {{0x2ec18ee7d0209ce8ULL, 0x8d6f439b43088650ULL,
  3585.     0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}},
  3586.   // 10^-23 ~= c16d9a0095928a27  75b7053c0f178293  
  3587.   //   8d6f439b430886502ec18ee7d0209ce8   * 2^-332
  3588.   {{0xf23472530ce6e3edULL, 0xd78c3615cf3a050cULL,
  3589.     0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}},
  3590.   // 10^-24 ~= 9abe14cd44753b52  c4926a9672793542  
  3591.   //   d78c3615cf3a050cf23472530ce6e3ed   * 2^-335
  3592.   {{0xe9ed83b814a49fe1ULL, 0x8c1389bc7ec33b47ULL,
  3593.     0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}},
  3594.   // 10^-25 ~= f79687aed3eec551  3a83ddbd83f52204  
  3595.   //   8c1389bc7ec33b47e9ed83b814a49fe1   * 2^-339
  3596.   {{0x87f1362cdd507fe7ULL, 0x3cdc6e306568fc39ULL,
  3597.     0x95364afe032a819dULL, 0xc612062576589ddaULL}},
  3598.   // 10^-26 ~= c612062576589dda  95364afe032a819d  
  3599.   //   3cdc6e306568fc3987f1362cdd507fe7   * 2^-342
  3600.   {{0x9ff42b5717739986ULL, 0xca49f1c05120c9c7ULL,
  3601.     0x775ea264cf55347dULL, 0x9e74d1b791e07e48ULL}},
  3602.   // 10^-27 ~= 9e74d1b791e07e48  775ea264cf55347d  
  3603.   //   ca49f1c05120c9c79ff42b5717739986   * 2^-345
  3604.   {{0xccb9def1bf1f5c09ULL, 0x76dcb60081ce0fa5ULL,
  3605.     0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}},
  3606.   // 10^-28 ~= fd87b5f28300ca0d  8bca9d6e188853fc  
  3607.   //   76dcb60081ce0fa5ccb9def1bf1f5c09   * 2^-349
  3608.   {{0xa3c7e58e327f7cd4ULL, 0x5f16f80067d80c84ULL,
  3609.     0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}},
  3610.   // 10^-29 ~= cad2f7f5359a3b3e  96ee45813a04330  
  3611.   //   5f16f80067d80c84a3c7e58e327f7cd4   * 2^-352
  3612.   {{0xb6398471c1ff9710ULL, 0x18df2ccd1fe00a03ULL,
  3613.     0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}},
  3614.   // 10^-30 ~= a2425ff75e14fc31  a1258379a94d028d  
  3615.   //   18df2ccd1fe00a03b6398471c1ff9710   * 2^-355
  3616.   {{0xf82e038e34cc78daULL, 0x4718f0a419800802ULL,
  3617.     0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}},
  3618.   // 10^-31 ~= 81ceb32c4b43fcf4  80eacf948770ced7  
  3619.   //   4718f0a419800802f82e038e34cc78da   * 2^-358
  3620.   {{0x59e338e387ad8e29ULL, 0x0b5b1aa028ccd99eULL,
  3621.     0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}},
  3622.   // 10^-32 ~= cfb11ead453994ba  67de18eda5814af2  
  3623.   //   b5b1aa028ccd99e59e338e387ad8e29   * 2^-362
  3624.   {{0x47e8fa4f9fbe0b54ULL, 0x6f7c154ced70ae18ULL,
  3625.     0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}},
  3626.   // 10^-33 ~= a6274bbdd0fadd61  ecb1ad8aeacdd58e  
  3627.   //   6f7c154ced70ae1847e8fa4f9fbe0b54   * 2^-365
  3628.   {{0xd320c83fb2fe6f76ULL, 0xbf967770bdf3be79ULL,
  3629.     0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}},
  3630.   // 10^-34 ~= 84ec3c97da624ab4  bd5af13bef0b113e  
  3631.   //   bf967770bdf3be79d320c83fb2fe6f76   * 2^-368
  3632.   {{0x85014065eb30b257ULL, 0x65bd8be79652ca5cULL,
  3633.     0x955e4ec64b44e864ULL, 0xd4ad2dbfc3d07787ULL}},
  3634.   // 10^-35 ~= d4ad2dbfc3d07787  955e4ec64b44e864  
  3635.   //   65bd8be79652ca5c85014065eb30b257   * 2^-372
  3636.   {{0xd0cdcd1e55c08eacULL, 0xeafe098611dbd516ULL,
  3637.     0xdde50bd1d5d0b9e9ULL, 0xaa242499697392d2ULL}},
  3638.   // 10^-36 ~= aa242499697392d2  dde50bd1d5d0b9e9  
  3639.   //   eafe098611dbd516d0cdcd1e55c08eac   * 2^-375
  3640.   {{0x40a4a418449a0bbdULL, 0xbbfe6e04db164412ULL,
  3641.     0x7e50d64177da2e54ULL, 0x881cea14545c7575ULL}},
  3642.   // 10^-37 ~= 881cea14545c7575  7e50d64177da2e54  
  3643.   //   bbfe6e04db16441240a4a418449a0bbd   * 2^-378
  3644.   {{0x9aa1068d3a9012c8ULL, 0x2cca49a15e8a0683ULL,
  3645.     0x96e7bd358c904a21ULL, 0xd9c7dced53c72255ULL}},
  3646.   // 10^-38 ~= d9c7dced53c72255  96e7bd358c904a21  
  3647.   //   2cca49a15e8a06839aa1068d3a9012c8   * 2^-382
  3648.   {{0x154d9ed7620cdbd3ULL, 0x8a3b6e1ab2080536ULL,
  3649.     0xabec975e0a0d081aULL, 0xae397d8aa96c1b77ULL}},
  3650.   // 10^-39 ~= ae397d8aa96c1b77  abec975e0a0d081a  
  3651.   //   8a3b6e1ab2080536154d9ed7620cdbd3   * 2^-385
  3652.   {{0x443e18ac4e70afdcULL, 0x3b62be7bc1a0042bULL,
  3653.     0x2323ac4b3b3da015ULL, 0x8b61313bbabce2c6ULL}},
  3654.   // 10^-40 ~= 8b61313bbabce2c6  2323ac4b3b3da015  
  3655.   //   3b62be7bc1a0042b443e18ac4e70afdc   * 2^-388
  3656.   {{0x6d30277a171ab2f9ULL, 0x5f0463f935ccd378ULL,
  3657.     0x6b6c46dec52f6688ULL, 0xdf01e85f912e37a3ULL}},
  3658.   // 10^-41 ~= df01e85f912e37a3  6b6c46dec52f6688  
  3659.   //   5f0463f935ccd3786d30277a171ab2f9   * 2^-392
  3660.   {{0x8a8cec61ac155bfbULL, 0x7f36b660f7d70f93ULL,
  3661.     0x55f038b237591ed3ULL, 0xb267ed1940f1c61cULL}},
  3662.   // 10^-42 ~= b267ed1940f1c61c  55f038b237591ed3  
  3663.   //   7f36b660f7d70f938a8cec61ac155bfb   * 2^-395
  3664.   {{0x3ba3f04e23444996ULL, 0xcc2bc51a5fdf3fa9ULL,
  3665.     0x77f3608e92adb242ULL, 0x8eb98a7a9a5b04e3ULL}},
  3666.   // 10^-43 ~= 8eb98a7a9a5b04e3  77f3608e92adb242  
  3667.   //   cc2bc51a5fdf3fa93ba3f04e23444996   * 2^-398
  3668.   {{0xf9064d49d206dc22ULL, 0xe046082a32fecc41ULL,
  3669.     0x8cb89a7db77c506aULL, 0xe45c10c42a2b3b05ULL}},
  3670.   // 10^-44 ~= e45c10c42a2b3b05  8cb89a7db77c506a  
  3671.   //   e046082a32fecc41f9064d49d206dc22   * 2^-402
  3672.   {{0xfa6b7107db38b01bULL, 0x4d04d354f598a367ULL,
  3673.     0x3d607b97c5fd0d22ULL, 0xb6b00d69bb55c8d1ULL}},
  3674.   // 10^-45 ~= b6b00d69bb55c8d1  3d607b97c5fd0d22  
  3675.   //   4d04d354f598a367fa6b7107db38b01b   * 2^-405
  3676.   {{0xfb8927397c2d59b0ULL, 0x3d9d75dd9146e91fULL,
  3677.     0xcab3961304ca70e8ULL, 0x9226712162ab070dULL}},
  3678.   // 10^-46 ~= 9226712162ab070d  cab3961304ca70e8  
  3679.   //   3d9d75dd9146e91ffb8927397c2d59b0   * 2^-408
  3680.   {{0xf8db71f5937bc2b2ULL, 0xc8fbefc8e87174ffULL,
  3681.     0xaab8f01e6e10b4a6ULL, 0xe9d71b689dde71afULL}},
  3682.   // 10^-47 ~= e9d71b689dde71af  aab8f01e6e10b4a6  
  3683.   //   c8fbefc8e87174fff8db71f5937bc2b2   * 2^-412
  3684.   {{0x2d7c5b2adc630228ULL, 0x3a63263a538df733ULL,
  3685.     0x5560c018580d5d52ULL, 0xbb127c53b17ec159ULL}},
  3686.   // 10^-48 ~= bb127c53b17ec159  5560c018580d5d52  
  3687.   //   3a63263a538df7332d7c5b2adc630228   * 2^-415
  3688.   {{0x24637c2249e8ce87ULL, 0x2eb5b82ea93e5f5cULL,
  3689.     0xdde7001379a44aa8ULL, 0x95a8637627989aadULL}},
  3690.   // 10^-49 ~= 95a8637627989aad  dde7001379a44aa8  
  3691.   //   2eb5b82ea93e5f5c24637c2249e8ce87   * 2^-418
  3692.   {{0x3a38c69d430e173eULL, 0x4abc59e441fd6560ULL,
  3693.     0x963e66858f6d4440ULL, 0xef73d256a5c0f77cULL}},
  3694.   // 10^-50 ~= ef73d256a5c0f77c  963e66858f6d4440  
  3695.   //   4abc59e441fd65603a38c69d430e173e   * 2^-422
  3696.   {{0x94fa387dcf3e78feULL, 0x6efd14b69b311de6ULL,
  3697.     0xde98520472bdd033ULL, 0xbf8fdb78849a5f96ULL}},
  3698.   // 10^-51 ~= bf8fdb78849a5f96  de98520472bdd033  
  3699.   //   6efd14b69b311de694fa387dcf3e78fe   * 2^-425
  3700.   {{0xaa61c6cb0c31fa65ULL, 0x259743c548f417ebULL,
  3701.     0xe546a8038efe4029ULL, 0x993fe2c6d07b7fabULL}},
  3702.   // 10^-52 ~= 993fe2c6d07b7fab  e546a8038efe4029  
  3703.   //   259743c548f417ebaa61c6cb0c31fa65   * 2^-428
  3704.   {{0xaa360ade79e990a2ULL, 0x3c25393ba7ecf312ULL,
  3705.     0xd53dd99f4b3066a8ULL, 0xf53304714d9265dfULL}},
  3706.   // 10^-53 ~= f53304714d9265df  d53dd99f4b3066a8  
  3707.   //   3c25393ba7ecf312aa360ade79e990a2   * 2^-432
  3708.   {{0x882b3be52e5473b5ULL, 0x96842dc95323f5a8ULL,
  3709.     0xaa97e14c3c26b886ULL, 0xc428d05aa4751e4cULL}},
  3710.   // 10^-54 ~= c428d05aa4751e4c  aa97e14c3c26b886  
  3711.   //   96842dc95323f5a8882b3be52e5473b5   * 2^-435
  3712.   {{0xd355c98425105c91ULL, 0xab9cf16ddc1cc486ULL,
  3713.     0x55464dd69685606bULL, 0x9ced737bb6c4183dULL}},
  3714.   // 10^-55 ~= 9ced737bb6c4183d  55464dd69685606b  
  3715.   //   ab9cf16ddc1cc486d355c98425105c91   * 2^-438
  3716.   {{0xebbc75a03b4d60e7ULL, 0xac2e4f162cfad40aULL,
  3717.     0xeed6e2f0f0d56712ULL, 0xfb158592be068d2eULL}},
  3718.   // 10^-56 ~= fb158592be068d2e  eed6e2f0f0d56712  
  3719.   //   ac2e4f162cfad40aebbc75a03b4d60e7   * 2^-442
  3720.   {{0x8963914cfc3de71fULL, 0x568b727823fbdcd5ULL,
  3721.     0xf245825a5a445275ULL, 0xc8de047564d20a8bULL}},
  3722.   // 10^-57 ~= c8de047564d20a8b  f245825a5a445275  
  3723.   //   568b727823fbdcd58963914cfc3de71f   * 2^-445
  3724.   {{0xd44fa770c9cb1f4cULL, 0x453c5b934ffcb0aaULL,
  3725.     0x5b6aceaeae9d0ec4ULL, 0xa0b19d2ab70e6ed6ULL}},
  3726.   // 10^-58 ~= a0b19d2ab70e6ed6  5b6aceaeae9d0ec4  
  3727.   //   453c5b934ffcb0aad44fa770c9cb1f4c   * 2^-448
  3728.   {{0xdd0c85f3d4a27f70ULL, 0x37637c75d996f3bbULL,
  3729.     0xe2bbd88bbee40bd0ULL, 0x808e17555f3ebf11ULL}},
  3730.   // 10^-59 ~= 808e17555f3ebf11  e2bbd88bbee40bd0  
  3731.   //   37637c75d996f3bbdd0c85f3d4a27f70   * 2^-451
  3732.   {{0x61ada31fba9d98b3ULL, 0x256bfa5628f185f9ULL,
  3733.     0x3792f412cb06794dULL, 0xcdb02555653131b6ULL}},
  3734.   // 10^-60 ~= cdb02555653131b6  3792f412cb06794d  
  3735.   //   256bfa5628f185f961ada31fba9d98b3   * 2^-455
  3736.   {{0xe7be1c196217ad5cULL, 0x51232eab53f46b2dULL,
  3737.     0x5fa8c3423c052dd7ULL, 0xa48ceaaab75a8e2bULL}},
  3738.   // 10^-61 ~= a48ceaaab75a8e2b  5fa8c3423c052dd7  
  3739.   //   51232eab53f46b2de7be1c196217ad5c   * 2^-458
  3740.   {{0x52fe7ce11b46244aULL, 0x40e8f222a99055beULL,
  3741.     0x1953cf68300424acULL, 0x83a3eeeef9153e89ULL}},
  3742.   // 10^-62 ~= 83a3eeeef9153e89  1953cf68300424ac  
  3743.   //   40e8f222a99055be52fe7ce11b46244a   * 2^-461
  3744.   {{0x51972e34f8703a10ULL, 0x34a7e9d10f4d55fdULL,
  3745.     0x8eec7f0d19a03aadULL, 0xd29fe4b18e88640eULL}},
  3746.   // 10^-63 ~= d29fe4b18e88640e  8eec7f0d19a03aad  
  3747.   //   34a7e9d10f4d55fd51972e34f8703a10   * 2^-465
  3748.   {{0x0e128b5d938cfb40ULL, 0x2a1fee40d90aab31ULL,
  3749.     0x3f2398d747b36224ULL, 0xa87fea27a539e9a5ULL}},
  3750.   // 10^-64 ~= a87fea27a539e9a5  3f2398d747b36224  
  3751.   //   2a1fee40d90aab310e128b5d938cfb40   * 2^-468
  3752.   {{0x3e753c4adc70c900ULL, 0xbb4cbe9a473bbc27ULL,
  3753.     0x98e947129fc2b4e9ULL, 0x86ccbb52ea94baeaULL}},
  3754.   // 10^-65 ~= 86ccbb52ea94baea  98e947129fc2b4e9  
  3755.   //   bb4cbe9a473bbc273e753c4adc70c900   * 2^-471
  3756.   {{0x30bb93aafa4e0e66ULL, 0x9214642a0b92c6a5ULL,
  3757.     0x5b0ed81dcc6abb0fULL, 0xd7adf884aa879177ULL}},
  3758.   // 10^-66 ~= d7adf884aa879177  5b0ed81dcc6abb0f  
  3759.   //   9214642a0b92c6a530bb93aafa4e0e66   * 2^-475
  3760.   {{0xc0960fbbfb71a51fULL, 0xa8105021a2dbd21dULL,
  3761.     0xe272467e3d222f3fULL, 0xac8b2d36eed2dac5ULL}},
  3762.   // 10^-67 ~= ac8b2d36eed2dac5  e272467e3d222f3f  
  3763.   //   a8105021a2dbd21dc0960fbbfb71a51f   * 2^-478
  3764.   {{0x66de72fcc927b74cULL, 0xb9a6a6814f1641b1ULL,
  3765.     0x1b8e9ecb641b58ffULL, 0x8a08f0f8bf0f156bULL}},
  3766.   // 10^-68 ~= 8a08f0f8bf0f156b  1b8e9ecb641b58ff  
  3767.   //   b9a6a6814f1641b166de72fcc927b74c   * 2^-481
  3768.   {{0xd7ca5194750c5879ULL, 0xf5d770cee4f0691bULL,
  3769.     0xf8e431456cf88e65ULL, 0xdcdb1b2798182244ULL}},
  3770.   // 10^-69 ~= dcdb1b2798182244  f8e431456cf88e65  
  3771.   //   f5d770cee4f0691bd7ca5194750c5879   * 2^-485
  3772.   {{0xdfd50e105da379faULL, 0x9179270bea59edafULL,
  3773.     0x2d835a9df0c6d851ULL, 0xb0af48ec79ace837ULL}},
  3774.   // 10^-70 ~= b0af48ec79ace837  2d835a9df0c6d851  
  3775.   //   9179270bea59edafdfd50e105da379fa   * 2^-488
  3776.   {{0x19773e737e1c6195ULL, 0x0dfa85a321e18af3ULL,
  3777.     0x579c487e5a38ad0eULL, 0x8d590723948a535fULL}},
  3778.   // 10^-71 ~= 8d590723948a535f  579c487e5a38ad0e  
  3779.   //   dfa85a321e18af319773e737e1c6195   * 2^-491
  3780.   {{0xf58b971f302d68efULL, 0x165da29e9c9c1184ULL,
  3781.     0x25c6da63c38de1b0ULL, 0xe2280b6c20dd5232ULL}},
  3782.   // 10^-72 ~= e2280b6c20dd5232  25c6da63c38de1b0  
  3783.   //   165da29e9c9c1184f58b971f302d68ef   * 2^-495
  3784.   {{0xc46fac18f3578725ULL, 0x4517b54bb07cdad0ULL,
  3785.     0x1e38aeb6360b1af3ULL, 0xb4ecd5f01a4aa828ULL}},
  3786.   // 10^-73 ~= b4ecd5f01a4aa828  1e38aeb6360b1af3  
  3787.   //   4517b54bb07cdad0c46fac18f3578725   * 2^-498
  3788.   {{0x36bfbce0c2ac6c1eULL, 0x9dac910959fd7bdaULL,
  3789.     0xb1c6f22b5e6f48c2ULL, 0x90bd77f3483bb9b9ULL}},
  3790.   // 10^-74 ~= 90bd77f3483bb9b9  b1c6f22b5e6f48c2  
  3791.   //   9dac910959fd7bda36bfbce0c2ac6c1e   * 2^-501
  3792.   {{0x2465fb01377a4696ULL, 0x2f7a81a88ffbf95dULL,
  3793.     0xb60b1d1230b20e04ULL, 0xe7958cb87392c2c2ULL}}
  3794.   // 10^-75 ~= e7958cb87392c2c2  b60b1d1230b20e04  
  3795.   //   2f7a81a88ffbf95d2465fb01377a4696   * 2^-505
  3796. };
  3797.  
  3798. unsigned int Ex256m256[] = {
  3799.   3,    // 259 - 256, Ex = 259
  3800.   6,    // 262 - 256, Ex = 262
  3801.   9,    // 265 - 256, Ex = 265
  3802.   13,   // 269 - 256, Ex = 269
  3803.   16,   // 272 - 256, Ex = 272
  3804.   19,   // 275 - 256, Ex = 275
  3805.   23,   // 279 - 256, Ex = 279
  3806.   26,   // 282 - 256, Ex = 282
  3807.   29,   // 285 - 256, Ex = 285
  3808.   33,   // 289 - 256, Ex = 289
  3809.   36,   // 292 - 256, Ex = 292
  3810.   39,   // 295 - 256, Ex = 295
  3811.   43,   // 299 - 256, Ex = 299
  3812.   46,   // 302 - 256, Ex = 302
  3813.   49,   // 305 - 256, Ex = 305
  3814.   53,   // 309 - 256, Ex = 309
  3815.   56,   // 312 - 256, Ex = 312
  3816.   59,   // 315 - 256, Ex = 315
  3817.   63,   // 319 - 256, Ex = 319
  3818.   2,    // 322 - 320, Ex = 322
  3819.   5,    // 325 - 320, Ex = 325
  3820.   9,    // 329 - 320, Ex = 329
  3821.   12,   // 332 - 320, Ex = 332
  3822.   15,   // 335 - 320, Ex = 335
  3823.   19,   // 339 - 320, Ex = 339
  3824.   22,   // 342 - 320, Ex = 342
  3825.   25,   // 345 - 320, Ex = 345
  3826.   29,   // 349 - 320, Ex = 349
  3827.   32,   // 352 - 320, Ex = 352
  3828.   35,   // 355 - 320, Ex = 355
  3829.   38,   // 358 - 320, Ex = 358
  3830.   42,   // 362 - 320, Ex = 362
  3831.   45,   // 365 - 320, Ex = 365
  3832.   48,   // 368 - 320, Ex = 368
  3833.   52,   // 372 - 320, Ex = 372
  3834.   55,   // 375 - 320, Ex = 375
  3835.   58,   // 378 - 320, Ex = 378
  3836.   62,   // 382 - 320, Ex = 382
  3837.   1,    // 385 - 384, Ex = 385
  3838.   4,    // 388 - 384, Ex = 388
  3839.   8,    // 392 - 384, Ex = 392
  3840.   11,   // 395 - 384, Ex = 395
  3841.   14,   // 398 - 384, Ex = 398
  3842.   18,   // 402 - 384, Ex = 402
  3843.   21,   // 405 - 384, Ex = 405
  3844.   24,   // 408 - 384, Ex = 408
  3845.   28,   // 412 - 384, Ex = 412
  3846.   31,   // 415 - 384, Ex = 415
  3847.   34,   // 418 - 384, Ex = 418
  3848.   38,   // 422 - 384, Ex = 422
  3849.   41,   // 425 - 384, Ex = 425
  3850.   44,   // 428 - 384, Ex = 428
  3851.   48,   // 432 - 384, Ex = 432
  3852.   51,   // 435 - 384, Ex = 435
  3853.   54,   // 438 - 384, Ex = 438
  3854.   58,   // 442 - 384, Ex = 442
  3855.   61,   // 445 - 384, Ex = 445
  3856.   0,    // 448 - 448, Ex = 448
  3857.   3,    // 451 - 448, Ex = 451
  3858.   7,    // 455 - 448, Ex = 455
  3859.   10,   // 458 - 448, Ex = 458
  3860.   13,   // 461 - 448, Ex = 461
  3861.   17,   // 465 - 448, Ex = 465
  3862.   20,   // 468 - 448, Ex = 468
  3863.   23,   // 471 - 448, Ex = 471
  3864.   27,   // 475 - 448, Ex = 475
  3865.   30,   // 478 - 448, Ex = 478
  3866.   33,   // 481 - 448, Ex = 481
  3867.   37,   // 485 - 448, Ex = 485
  3868.   40,   // 488 - 448, Ex = 488
  3869.   43,   // 491 - 448, Ex = 491
  3870.   47,   // 495 - 448, Ex = 495
  3871.   50,   // 498 - 448, Ex = 498
  3872.   53,   // 501 - 448, Ex = 501
  3873.   57    // 505 - 448, Ex = 505
  3874. };
  3875.  
  3876. UINT64 half256[] = {
  3877.   0x0000000000000004ULL,        // half / 2^256 = 4
  3878.   0x0000000000000020ULL,        // half / 2^256 = 20
  3879.   0x0000000000000100ULL,        // half / 2^256 = 100
  3880.   0x0000000000001000ULL,        // half / 2^256 = 1000
  3881.   0x0000000000008000ULL,        // half / 2^256 = 8000
  3882.   0x0000000000040000ULL,        // half / 2^256 = 40000
  3883.   0x0000000000400000ULL,        // half / 2^256 = 400000
  3884.   0x0000000002000000ULL,        // half / 2^256 = 2000000
  3885.   0x0000000010000000ULL,        // half / 2^256 = 10000000
  3886.   0x0000000100000000ULL,        // half / 2^256 = 100000000
  3887.   0x0000000800000000ULL,        // half / 2^256 = 800000000
  3888.   0x0000004000000000ULL,        // half / 2^256 = 4000000000
  3889.   0x0000040000000000ULL,        // half / 2^256 = 40000000000
  3890.   0x0000200000000000ULL,        // half / 2^256 = 200000000000
  3891.   0x0001000000000000ULL,        // half / 2^256 = 1000000000000
  3892.   0x0010000000000000ULL,        // half / 2^256 = 10000000000000
  3893.   0x0080000000000000ULL,        // half / 2^256 = 80000000000000
  3894.   0x0400000000000000ULL,        // half / 2^256 = 400000000000000
  3895.   0x4000000000000000ULL,        // half / 2^256 = 4000000000000000
  3896.   0x0000000000000002ULL,        // half / 2^320 = 2
  3897.   0x0000000000000010ULL,        // half / 2^320 = 10
  3898.   0x0000000000000100ULL,        // half / 2^320 = 100
  3899.   0x0000000000000800ULL,        // half / 2^320 = 800
  3900.   0x0000000000004000ULL,        // half / 2^320 = 4000
  3901.   0x0000000000040000ULL,        // half / 2^320 = 40000
  3902.   0x0000000000200000ULL,        // half / 2^320 = 200000
  3903.   0x0000000001000000ULL,        // half / 2^320 = 1000000
  3904.   0x0000000010000000ULL,        // half / 2^320 = 10000000
  3905.   0x0000000080000000ULL,        // half / 2^320 = 80000000
  3906.   0x0000000400000000ULL,        // half / 2^320 = 400000000
  3907.   0x0000002000000000ULL,        // half / 2^320 = 2000000000
  3908.   0x0000020000000000ULL,        // half / 2^320 = 20000000000
  3909.   0x0000100000000000ULL,        // half / 2^320 = 100000000000
  3910.   0x0000800000000000ULL,        // half / 2^320 = 800000000000
  3911.   0x0008000000000000ULL,        // half / 2^320 = 8000000000000
  3912.   0x0040000000000000ULL,        // half / 2^320 = 40000000000000
  3913.   0x0200000000000000ULL,        // half / 2^320 = 200000000000000
  3914.   0x2000000000000000ULL,        // half / 2^320 = 2000000000000000
  3915.   0x0000000000000001ULL,        // half / 2^384 = 1
  3916.   0x0000000000000008ULL,        // half / 2^384 = 8
  3917.   0x0000000000000080ULL,        // half / 2^384 = 80
  3918.   0x0000000000000400ULL,        // half / 2^384 = 400
  3919.   0x0000000000002000ULL,        // half / 2^384 = 2000
  3920.   0x0000000000020000ULL,        // half / 2^384 = 20000
  3921.   0x0000000000100000ULL,        // half / 2^384 = 100000
  3922.   0x0000000000800000ULL,        // half / 2^384 = 800000
  3923.   0x0000000008000000ULL,        // half / 2^384 = 8000000
  3924.   0x0000000040000000ULL,        // half / 2^384 = 40000000
  3925.   0x0000000200000000ULL,        // half / 2^384 = 200000000
  3926.   0x0000002000000000ULL,        // half / 2^384 = 2000000000
  3927.   0x0000010000000000ULL,        // half / 2^384 = 10000000000
  3928.   0x0000080000000000ULL,        // half / 2^384 = 80000000000
  3929.   0x0000800000000000ULL,        // half / 2^384 = 800000000000
  3930.   0x0004000000000000ULL,        // half / 2^384 = 4000000000000
  3931.   0x0020000000000000ULL,        // half / 2^384 = 20000000000000
  3932.   0x0200000000000000ULL,        // half / 2^384 = 200000000000000
  3933.   0x1000000000000000ULL,        // half / 2^384 = 1000000000000000
  3934.   0x8000000000000000ULL,        // half / 2^384 = 8000000000000000
  3935.   0x0000000000000004ULL,        // half / 2^448 = 4
  3936.   0x0000000000000040ULL,        // half / 2^448 = 40
  3937.   0x0000000000000200ULL,        // half / 2^448 = 200
  3938.   0x0000000000001000ULL,        // half / 2^448 = 1000
  3939.   0x0000000000010000ULL,        // half / 2^448 = 10000
  3940.   0x0000000000080000ULL,        // half / 2^448 = 80000
  3941.   0x0000000000400000ULL,        // half / 2^448 = 400000
  3942.   0x0000000004000000ULL,        // half / 2^448 = 4000000
  3943.   0x0000000020000000ULL,        // half / 2^448 = 20000000
  3944.   0x0000000100000000ULL,        // half / 2^448 = 100000000
  3945.   0x0000001000000000ULL,        // half / 2^448 = 1000000000
  3946.   0x0000008000000000ULL,        // half / 2^448 = 8000000000
  3947.   0x0000040000000000ULL,        // half / 2^448 = 40000000000
  3948.   0x0000400000000000ULL,        // half / 2^448 = 400000000000
  3949.   0x0002000000000000ULL,        // half / 2^448 = 2000000000000
  3950.   0x0010000000000000ULL,        // half / 2^448 = 10000000000000
  3951.   0x0100000000000000ULL // half / 2^448 = 100000000000000
  3952. };
  3953.  
  3954. UINT64 mask256[] = {
  3955.   0x0000000000000007ULL,        // mask / 2^256
  3956.   0x000000000000003fULL,        // mask / 2^256
  3957.   0x00000000000001ffULL,        // mask / 2^256
  3958.   0x0000000000001fffULL,        // mask / 2^256
  3959.   0x000000000000ffffULL,        // mask / 2^256
  3960.   0x000000000007ffffULL,        // mask / 2^256
  3961.   0x00000000007fffffULL,        // mask / 2^256
  3962.   0x0000000003ffffffULL,        // mask / 2^256
  3963.   0x000000001fffffffULL,        // mask / 2^256
  3964.   0x00000001ffffffffULL,        // mask / 2^256
  3965.   0x0000000fffffffffULL,        // mask / 2^256
  3966.   0x0000007fffffffffULL,        // mask / 2^256
  3967.   0x000007ffffffffffULL,        // mask / 2^256
  3968.   0x00003fffffffffffULL,        // mask / 2^256
  3969.   0x0001ffffffffffffULL,        // mask / 2^256
  3970.   0x001fffffffffffffULL,        // mask / 2^256
  3971.   0x00ffffffffffffffULL,        // mask / 2^256
  3972.   0x07ffffffffffffffULL,        // mask / 2^256
  3973.   0x7fffffffffffffffULL,        // mask / 2^256
  3974.   0x0000000000000003ULL,        // mask / 2^320
  3975.   0x000000000000001fULL,        // mask / 2^320
  3976.   0x00000000000001ffULL,        // mask / 2^320
  3977.   0x0000000000000fffULL,        // mask / 2^320
  3978.   0x0000000000007fffULL,        // mask / 2^320
  3979.   0x000000000007ffffULL,        // mask / 2^320
  3980.   0x00000000003fffffULL,        // mask / 2^320
  3981.   0x0000000001ffffffULL,        // mask / 2^320
  3982.   0x000000001fffffffULL,        // mask / 2^320
  3983.   0x00000000ffffffffULL,        // mask / 2^320
  3984.   0x00000007ffffffffULL,        // mask / 2^320
  3985.   0x0000003fffffffffULL,        // mask / 2^320
  3986.   0x000003ffffffffffULL,        // mask / 2^320
  3987.   0x00001fffffffffffULL,        // mask / 2^320
  3988.   0x0000ffffffffffffULL,        // mask / 2^320
  3989.   0x000fffffffffffffULL,        // mask / 2^320
  3990.   0x007fffffffffffffULL,        // mask / 2^320
  3991.   0x03ffffffffffffffULL,        // mask / 2^320
  3992.   0x3fffffffffffffffULL,        // mask / 2^320
  3993.   0x0000000000000001ULL,        // mask / 2^384
  3994.   0x000000000000000fULL,        // mask / 2^384
  3995.   0x00000000000000ffULL,        // mask / 2^384
  3996.   0x00000000000007ffULL,        // mask / 2^384
  3997.   0x0000000000003fffULL,        // mask / 2^384
  3998.   0x000000000003ffffULL,        // mask / 2^384
  3999.   0x00000000001fffffULL,        // mask / 2^384
  4000.   0x0000000000ffffffULL,        // mask / 2^384
  4001.   0x000000000fffffffULL,        // mask / 2^384
  4002.   0x000000007fffffffULL,        // mask / 2^384
  4003.   0x00000003ffffffffULL,        // mask / 2^384
  4004.   0x0000003fffffffffULL,        // mask / 2^384
  4005.   0x000001ffffffffffULL,        // mask / 2^384
  4006.   0x00000fffffffffffULL,        // mask / 2^384
  4007.   0x0000ffffffffffffULL,        // mask / 2^384
  4008.   0x0007ffffffffffffULL,        // mask / 2^384
  4009.   0x003fffffffffffffULL,        // mask / 2^384
  4010.   0x03ffffffffffffffULL,        // mask / 2^384
  4011.   0x1fffffffffffffffULL,        // mask / 2^384
  4012.   0xffffffffffffffffULL,        // mask / 2^384
  4013.   0x0000000000000007ULL,        // mask / 2^448
  4014.   0x000000000000007fULL,        // mask / 2^448
  4015.   0x00000000000003ffULL,        // mask / 2^448
  4016.   0x0000000000001fffULL,        // mask / 2^448
  4017.   0x000000000001ffffULL,        // mask / 2^448
  4018.   0x00000000000fffffULL,        // mask / 2^448
  4019.   0x00000000007fffffULL,        // mask / 2^448
  4020.   0x0000000007ffffffULL,        // mask / 2^448
  4021.   0x000000003fffffffULL,        // mask / 2^448
  4022.   0x00000001ffffffffULL,        // mask / 2^448
  4023.   0x0000001fffffffffULL,        // mask / 2^448
  4024.   0x000000ffffffffffULL,        // mask / 2^448
  4025.   0x000007ffffffffffULL,        // mask / 2^448
  4026.   0x00007fffffffffffULL,        // mask / 2^448
  4027.   0x0003ffffffffffffULL,        // mask / 2^448
  4028.   0x001fffffffffffffULL,        // mask / 2^448
  4029.   0x01ffffffffffffffULL // mask / 2^448
  4030. };
  4031.  
  4032. UINT256 ten2mxtrunc256[] = {
  4033.   {{0xccccccccccccccccULL, 0xccccccccccccccccULL,
  4034.     0xccccccccccccccccULL, 0xccccccccccccccccULL}},
  4035.   // (ten2mx >> 256) = cccccccccccccccc  cccccccccccccccc  
  4036.   //   cccccccccccccccccccccccccccccccc
  4037.   {{0x70a3d70a3d70a3d7ULL, 0xd70a3d70a3d70a3dULL,
  4038.     0x3d70a3d70a3d70a3ULL, 0xa3d70a3d70a3d70aULL}},
  4039.   // (ten2mx >> 256) = a3d70a3d70a3d70a  3d70a3d70a3d70a3  
  4040.   //   d70a3d70a3d70a3d70a3d70a3d70a3d7
  4041.   {{0xc083126e978d4fdfULL, 0x78d4fdf3b645a1caULL,
  4042.     0x645a1cac083126e9ULL, 0x83126e978d4fdf3bULL}},
  4043.   // (ten2mx >> 256) = 83126e978d4fdf3b  645a1cac083126e9  
  4044.   //   78d4fdf3b645a1cac083126e978d4fdf
  4045.   {{0x67381d7dbf487fcbULL, 0xc154c985f06f6944ULL,
  4046.     0xd3c36113404ea4a8ULL, 0xd1b71758e219652bULL}},
  4047.   // (ten2mx >> 256) = d1b71758e219652b  d3c36113404ea4a8  
  4048.   //   c154c985f06f694467381d7dbf487fcb
  4049.   {{0x85c67dfe32a0663cULL, 0xcddd6e04c0592103ULL,
  4050.     0x0fcf80dc33721d53ULL, 0xa7c5ac471b478423ULL}},
  4051.   // (ten2mx >> 256) = a7c5ac471b478423  fcf80dc33721d53  
  4052.   //   cddd6e04c059210385c67dfe32a0663c
  4053.   {{0x37d1fe64f54d1e96ULL, 0xd7e45803cd141a69ULL,
  4054.     0xa63f9a49c2c1b10fULL, 0x8637bd05af6c69b5ULL}},
  4055.   // (ten2mx >> 256) = 8637bd05af6c69b5  a63f9a49c2c1b10f  
  4056.   //   d7e45803cd141a6937d1fe64f54d1e96
  4057.   {{0x8c8330a1887b6424ULL, 0x8ca08cd2e1b9c3dbULL,
  4058.     0x3d32907604691b4cULL, 0xd6bf94d5e57a42bcULL}},
  4059.   // (ten2mx >> 256) = d6bf94d5e57a42bc  3d32907604691b4c  
  4060.   //   8ca08cd2e1b9c3db8c8330a1887b6424
  4061.   {{0x7068f3b46d2f8350ULL, 0x3d4d3d758161697cULL,
  4062.     0xfdc20d2b36ba7c3dULL, 0xabcc77118461cefcULL}},
  4063.   // (ten2mx >> 256) = abcc77118461cefc  fdc20d2b36ba7c3d  
  4064.   //   3d4d3d758161697c7068f3b46d2f8350
  4065.   {{0xf387295d242602a6ULL, 0xfdd7645e011abac9ULL,
  4066.     0x31680a88f8953030ULL, 0x89705f4136b4a597ULL}},
  4067.   // (ten2mx >> 256) = 89705f4136b4a597  31680a88f8953030  
  4068.   //   fdd7645e011abac9f387295d242602a6
  4069.   {{0xb8d8422ea03cd10aULL, 0x2fbf06fcce912adcULL,
  4070.     0xb573440e5a884d1bULL, 0xdbe6fecebdedd5beULL}},
  4071.   // (ten2mx >> 256) = dbe6fecebdedd5be  b573440e5a884d1b  
  4072.   //   2fbf06fcce912adcb8d8422ea03cd10a
  4073.   {{0x93e034f219ca40d5ULL, 0xf2ff38ca3eda88b0ULL,
  4074.     0xf78f69a51539d748ULL, 0xafebff0bcb24aafeULL}},
  4075.   // (ten2mx >> 256) = afebff0bcb24aafe  f78f69a51539d748  
  4076.   //   f2ff38ca3eda88b093e034f219ca40d5
  4077.   {{0x4319c3f4e16e9a44ULL, 0xf598fa3b657ba08dULL,
  4078.     0xf93f87b7442e45d3ULL, 0x8cbccc096f5088cbULL}},
  4079.   // (ten2mx >> 256) = 8cbccc096f5088cb  f93f87b7442e45d3  
  4080.   //   f598fa3b657ba08d4319c3f4e16e9a44
  4081.   {{0x04f606549be42a06ULL, 0x88f4c3923bf900e2ULL,
  4082.     0x2865a5f206b06fb9ULL, 0xe12e13424bb40e13ULL}},
  4083.   // (ten2mx >> 256) = e12e13424bb40e13  2865a5f206b06fb9  
  4084.   //   88f4c3923bf900e204f606549be42a06
  4085.   {{0x03f805107cb68805ULL, 0x6d909c74fcc733e8ULL,
  4086.     0x538484c19ef38c94ULL, 0xb424dc35095cd80fULL}},
  4087.   // (ten2mx >> 256) = b424dc35095cd80f  538484c19ef38c94  
  4088.   //   6d909c74fcc733e803f805107cb68805
  4089.   {{0x3660040d3092066aULL, 0x57a6e390ca38f653ULL,
  4090.     0x0f9d37014bf60a10ULL, 0x901d7cf73ab0acd9ULL}},
  4091.   // (ten2mx >> 256) = 901d7cf73ab0acd9  f9d37014bf60a10  
  4092.   //   57a6e390ca38f6533660040d3092066a
  4093.   {{0x23ccd3484db670aaULL, 0xbf716c1add27f085ULL,
  4094.     0x4c2ebe687989a9b3ULL, 0xe69594bec44de15bULL}},
  4095.   // (ten2mx >> 256) = e69594bec44de15b  4c2ebe687989a9b3  
  4096.   //   bf716c1add27f08523ccd3484db670aa
  4097.   {{0x4fd70f6d0af85a22ULL, 0xff8df0157db98d37ULL,
  4098.     0x09befeb9fad487c2ULL, 0xb877aa3236a4b449ULL}},
  4099.   // (ten2mx >> 256) = b877aa3236a4b449  9befeb9fad487c2  
  4100.   //   ff8df0157db98d374fd70f6d0af85a22
  4101.   {{0x0cac0c573bf9e1b5ULL, 0x32d7f344649470f9ULL,
  4102.     0x3aff322e62439fcfULL, 0x9392ee8e921d5d07ULL}},
  4103.   // (ten2mx >> 256) = 9392ee8e921d5d07  3aff322e62439fcf  
  4104.   //   32d7f344649470f90cac0c573bf9e1b5
  4105.   {{0xe11346f1f98fcf88ULL, 0x1e2652070753e7f4ULL,
  4106.     0x2b31e9e3d06c32e5ULL, 0xec1e4a7db69561a5ULL}},
  4107.   // (ten2mx >> 256) = ec1e4a7db69561a5  2b31e9e3d06c32e5  
  4108.   //   1e2652070753e7f4e11346f1f98fcf88
  4109.   {{0x4da9058e613fd939ULL, 0x181ea8059f76532aULL,
  4110.     0x88f4bb1ca6bcf584ULL, 0xbce5086492111aeaULL}},
  4111.   // (ten2mx >> 256) = bce5086492111aea  88f4bb1ca6bcf584  
  4112.   //   181ea8059f76532a4da9058e613fd939
  4113.   {{0xa48737a51a997a94ULL, 0x467eecd14c5ea8eeULL,
  4114.     0xd3f6fc16ebca5e03ULL, 0x971da05074da7beeULL}},
  4115.   // (ten2mx >> 256) = 971da05074da7bee  d3f6fc16ebca5e03  
  4116.   //   467eecd14c5ea8eea48737a51a997a94
  4117.   {{0x3a71f2a1c428c420ULL, 0x70cb148213caa7e4ULL,
  4118.     0x5324c68b12dd6338ULL, 0xf1c90080baf72cb1ULL}},
  4119.   // (ten2mx >> 256) = f1c90080baf72cb1  5324c68b12dd6338  
  4120.   //   70cb148213caa7e43a71f2a1c428c420
  4121.   {{0x2ec18ee7d0209ce7ULL, 0x8d6f439b43088650ULL,
  4122.     0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}},
  4123.   // (ten2mx >> 256) = c16d9a0095928a27  75b7053c0f178293  
  4124.   //   8d6f439b430886502ec18ee7d0209ce7
  4125.   {{0xf23472530ce6e3ecULL, 0xd78c3615cf3a050cULL,
  4126.     0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}},
  4127.   // (ten2mx >> 256) = 9abe14cd44753b52  c4926a9672793542  
  4128.   //   d78c3615cf3a050cf23472530ce6e3ec
  4129.   {{0xe9ed83b814a49fe0ULL, 0x8c1389bc7ec33b47ULL,
  4130.     0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}},
  4131.   // (ten2mx >> 256) = f79687aed3eec551  3a83ddbd83f52204  
  4132.   //   8c1389bc7ec33b47e9ed83b814a49fe0
  4133.   {{0x87f1362cdd507fe6ULL, 0x3cdc6e306568fc39ULL,
  4134.     0x95364afe032a819dULL, 0xc612062576589ddaULL}},
  4135.   // (ten2mx >> 256) = c612062576589dda  95364afe032a819d  
  4136.   //   3cdc6e306568fc3987f1362cdd507fe6
  4137.   {{0x9ff42b5717739985ULL, 0xca49f1c05120c9c7ULL,
  4138.     0x775ea264cf55347dULL, 0x9e74d1b791e07e48ULL}},
  4139.   // (ten2mx >> 256) = 9e74d1b791e07e48  775ea264cf55347d  
  4140.   //   ca49f1c05120c9c79ff42b5717739985
  4141.   {{0xccb9def1bf1f5c08ULL, 0x76dcb60081ce0fa5ULL,
  4142.     0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}},
  4143.   // (ten2mx >> 256) = fd87b5f28300ca0d  8bca9d6e188853fc  
  4144.   //   76dcb60081ce0fa5ccb9def1bf1f5c08
  4145.   {{0xa3c7e58e327f7cd3ULL, 0x5f16f80067d80c84ULL,
  4146.     0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}},
  4147.   // (ten2mx >> 256) = cad2f7f5359a3b3e  96ee45813a04330  
  4148.   //   5f16f80067d80c84a3c7e58e327f7cd3
  4149.   {{0xb6398471c1ff970fULL, 0x18df2ccd1fe00a03ULL,
  4150.     0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}},
  4151.   // (ten2mx >> 256) = a2425ff75e14fc31  a1258379a94d028d  
  4152.   //   18df2ccd1fe00a03b6398471c1ff970f
  4153.   {{0xf82e038e34cc78d9ULL, 0x4718f0a419800802ULL,
  4154.     0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}},
  4155.   // (ten2mx >> 256) = 81ceb32c4b43fcf4  80eacf948770ced7  
  4156.   //   4718f0a419800802f82e038e34cc78d9
  4157.   {{0x59e338e387ad8e28ULL, 0x0b5b1aa028ccd99eULL,
  4158.     0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}},
  4159.   // (ten2mx >> 256) = cfb11ead453994ba  67de18eda5814af2  
  4160.   //   b5b1aa028ccd99e59e338e387ad8e28
  4161.   {{0x47e8fa4f9fbe0b53ULL, 0x6f7c154ced70ae18ULL,
  4162.     0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}},
  4163.   // (ten2mx >> 256) = a6274bbdd0fadd61  ecb1ad8aeacdd58e  
  4164.   //   6f7c154ced70ae1847e8fa4f9fbe0b53
  4165.   {{0xd320c83fb2fe6f75ULL, 0xbf967770bdf3be79ULL,
  4166.     0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}},
  4167.   // (ten2mx >> 256) = 84ec3c97da624ab4  bd5af13bef0b113e  
  4168.   //   bf967770bdf3be79d320c83fb2fe6f75
  4169.   {{0x85014065eb30b256ULL, 0x65bd8be79652ca5cULL,
  4170.     0x955e4ec64b44e864ULL, 0xd4ad2dbfc3d07787ULL}},
  4171.   // (ten2mx >> 256) = d4ad2dbfc3d07787  955e4ec64b44e864  
  4172.   //   65bd8be79652ca5c85014065eb30b256
  4173.   {{0xd0cdcd1e55c08eabULL, 0xeafe098611dbd516ULL,
  4174.     0xdde50bd1d5d0b9e9ULL, 0xaa242499697392d2ULL}},
  4175.   // (ten2mx >> 256) = aa242499697392d2  dde50bd1d5d0b9e9  
  4176.   //   eafe098611dbd516d0cdcd1e55c08eab
  4177.   {{0x40a4a418449a0bbcULL, 0xbbfe6e04db164412ULL,
  4178.     0x7e50d64177da2e54ULL, 0x881cea14545c7575ULL}},
  4179.   // (ten2mx >> 256) = 881cea14545c7575  7e50d64177da2e54  
  4180.   //   bbfe6e04db16441240a4a418449a0bbc
  4181.   {{0x9aa1068d3a9012c7ULL, 0x2cca49a15e8a0683ULL,
  4182.     0x96e7bd358c904a21ULL, 0xd9c7dced53c72255ULL}},
  4183.   // (ten2mx >> 256) = d9c7dced53c72255  96e7bd358c904a21  
  4184.   //   2cca49a15e8a06839aa1068d3a9012c7
  4185.   {{0x154d9ed7620cdbd2ULL, 0x8a3b6e1ab2080536ULL,
  4186.     0xabec975e0a0d081aULL, 0xae397d8aa96c1b77ULL}},
  4187.   // (ten2mx >> 256) = ae397d8aa96c1b77  abec975e0a0d081a  
  4188.   //   8a3b6e1ab2080536154d9ed7620cdbd2
  4189.   {{0x443e18ac4e70afdbULL, 0x3b62be7bc1a0042bULL,
  4190.     0x2323ac4b3b3da015ULL, 0x8b61313bbabce2c6ULL}},
  4191.   // (ten2mx >> 256) = 8b61313bbabce2c6  2323ac4b3b3da015  
  4192.   //   3b62be7bc1a0042b443e18ac4e70afdb
  4193.   {{0x6d30277a171ab2f8ULL, 0x5f0463f935ccd378ULL,
  4194.     0x6b6c46dec52f6688ULL, 0xdf01e85f912e37a3ULL}},
  4195.   // (ten2mx >> 256) = df01e85f912e37a3  6b6c46dec52f6688  
  4196.   //   5f0463f935ccd3786d30277a171ab2f8
  4197.   {{0x8a8cec61ac155bfaULL, 0x7f36b660f7d70f93ULL,
  4198.     0x55f038b237591ed3ULL, 0xb267ed1940f1c61cULL}},
  4199.   // (ten2mx >> 256) = b267ed1940f1c61c  55f038b237591ed3  
  4200.   //   7f36b660f7d70f938a8cec61ac155bfa
  4201.   {{0x3ba3f04e23444995ULL, 0xcc2bc51a5fdf3fa9ULL,
  4202.     0x77f3608e92adb242ULL, 0x8eb98a7a9a5b04e3ULL}},
  4203.   // (ten2mx >> 256) = 8eb98a7a9a5b04e3  77f3608e92adb242  
  4204.   //   cc2bc51a5fdf3fa93ba3f04e23444995
  4205.   {{0xf9064d49d206dc21ULL, 0xe046082a32fecc41ULL,
  4206.     0x8cb89a7db77c506aULL, 0xe45c10c42a2b3b05ULL}},
  4207.   // (ten2mx >> 256) = e45c10c42a2b3b05  8cb89a7db77c506a  
  4208.   //   e046082a32fecc41f9064d49d206dc21
  4209.   {{0xfa6b7107db38b01aULL, 0x4d04d354f598a367ULL,
  4210.     0x3d607b97c5fd0d22ULL, 0xb6b00d69bb55c8d1ULL}},
  4211.   // (ten2mx >> 256) = b6b00d69bb55c8d1  3d607b97c5fd0d22  
  4212.   //   4d04d354f598a367fa6b7107db38b01a
  4213.   {{0xfb8927397c2d59afULL, 0x3d9d75dd9146e91fULL,
  4214.     0xcab3961304ca70e8ULL, 0x9226712162ab070dULL}},
  4215.   // (ten2mx >> 256) = 9226712162ab070d  cab3961304ca70e8  
  4216.   //   3d9d75dd9146e91ffb8927397c2d59af
  4217.   {{0xf8db71f5937bc2b1ULL, 0xc8fbefc8e87174ffULL,
  4218.     0xaab8f01e6e10b4a6ULL, 0xe9d71b689dde71afULL}},
  4219.   // (ten2mx >> 256) = e9d71b689dde71af  aab8f01e6e10b4a6  
  4220.   //   c8fbefc8e87174fff8db71f5937bc2b1
  4221.   {{0x2d7c5b2adc630227ULL, 0x3a63263a538df733ULL,
  4222.     0x5560c018580d5d52ULL, 0xbb127c53b17ec159ULL}},
  4223.   // (ten2mx >> 256) = bb127c53b17ec159  5560c018580d5d52  
  4224.   //   3a63263a538df7332d7c5b2adc630227
  4225.   {{0x24637c2249e8ce86ULL, 0x2eb5b82ea93e5f5cULL,
  4226.     0xdde7001379a44aa8ULL, 0x95a8637627989aadULL}},
  4227.   // (ten2mx >> 256) = 95a8637627989aad  dde7001379a44aa8  
  4228.   //   2eb5b82ea93e5f5c24637c2249e8ce86
  4229.   {{0x3a38c69d430e173dULL, 0x4abc59e441fd6560ULL,
  4230.     0x963e66858f6d4440ULL, 0xef73d256a5c0f77cULL}},
  4231.   // (ten2mx >> 256) = ef73d256a5c0f77c  963e66858f6d4440  
  4232.   //   4abc59e441fd65603a38c69d430e173d
  4233.   {{0x94fa387dcf3e78fdULL, 0x6efd14b69b311de6ULL,
  4234.     0xde98520472bdd033ULL, 0xbf8fdb78849a5f96ULL}},
  4235.   // (ten2mx >> 256) = bf8fdb78849a5f96  de98520472bdd033  
  4236.   //   6efd14b69b311de694fa387dcf3e78fd
  4237.   {{0xaa61c6cb0c31fa64ULL, 0x259743c548f417ebULL,
  4238.     0xe546a8038efe4029ULL, 0x993fe2c6d07b7fabULL}},
  4239.   // (ten2mx >> 256) = 993fe2c6d07b7fab  e546a8038efe4029  
  4240.   //   259743c548f417ebaa61c6cb0c31fa64
  4241.   {{0xaa360ade79e990a1ULL, 0x3c25393ba7ecf312ULL,
  4242.     0xd53dd99f4b3066a8ULL, 0xf53304714d9265dfULL}},
  4243.   // (ten2mx >> 256) = f53304714d9265df  d53dd99f4b3066a8  
  4244.   //   3c25393ba7ecf312aa360ade79e990a1
  4245.   {{0x882b3be52e5473b4ULL, 0x96842dc95323f5a8ULL,
  4246.     0xaa97e14c3c26b886ULL, 0xc428d05aa4751e4cULL}},
  4247.   // (ten2mx >> 256) = c428d05aa4751e4c  aa97e14c3c26b886  
  4248.   //   96842dc95323f5a8882b3be52e5473b4
  4249.   {{0xd355c98425105c90ULL, 0xab9cf16ddc1cc486ULL,
  4250.     0x55464dd69685606bULL, 0x9ced737bb6c4183dULL}},
  4251.   // (ten2mx >> 256) = 9ced737bb6c4183d  55464dd69685606b  
  4252.   //   ab9cf16ddc1cc486d355c98425105c90
  4253.   {{0xebbc75a03b4d60e6ULL, 0xac2e4f162cfad40aULL,
  4254.     0xeed6e2f0f0d56712ULL, 0xfb158592be068d2eULL}},
  4255.   // (ten2mx >> 256) = fb158592be068d2e  eed6e2f0f0d56712  
  4256.   //   ac2e4f162cfad40aebbc75a03b4d60e6
  4257.   {{0x8963914cfc3de71eULL, 0x568b727823fbdcd5ULL,
  4258.     0xf245825a5a445275ULL, 0xc8de047564d20a8bULL}},
  4259.   // (ten2mx >> 256) = c8de047564d20a8b  f245825a5a445275  
  4260.   //   568b727823fbdcd58963914cfc3de71e
  4261.   {{0xd44fa770c9cb1f4bULL, 0x453c5b934ffcb0aaULL,
  4262.     0x5b6aceaeae9d0ec4ULL, 0xa0b19d2ab70e6ed6ULL}},
  4263.   // (ten2mx >> 256) = a0b19d2ab70e6ed6  5b6aceaeae9d0ec4  
  4264.   //   453c5b934ffcb0aad44fa770c9cb1f4b
  4265.   {{0xdd0c85f3d4a27f6fULL, 0x37637c75d996f3bbULL,
  4266.     0xe2bbd88bbee40bd0ULL, 0x808e17555f3ebf11ULL}},
  4267.   // (ten2mx >> 256) = 808e17555f3ebf11  e2bbd88bbee40bd0  
  4268.   //   37637c75d996f3bbdd0c85f3d4a27f6f
  4269.   {{0x61ada31fba9d98b2ULL, 0x256bfa5628f185f9ULL,
  4270.     0x3792f412cb06794dULL, 0xcdb02555653131b6ULL}},
  4271.   // (ten2mx >> 256) = cdb02555653131b6  3792f412cb06794d  
  4272.   //   256bfa5628f185f961ada31fba9d98b2
  4273.   {{0xe7be1c196217ad5bULL, 0x51232eab53f46b2dULL,
  4274.     0x5fa8c3423c052dd7ULL, 0xa48ceaaab75a8e2bULL}},
  4275.   // (ten2mx >> 256) = a48ceaaab75a8e2b  5fa8c3423c052dd7  
  4276.   //   51232eab53f46b2de7be1c196217ad5b
  4277.   {{0x52fe7ce11b462449ULL, 0x40e8f222a99055beULL,
  4278.     0x1953cf68300424acULL, 0x83a3eeeef9153e89ULL}},
  4279.   // (ten2mx >> 256) = 83a3eeeef9153e89  1953cf68300424ac  
  4280.   //   40e8f222a99055be52fe7ce11b462449
  4281.   {{0x51972e34f8703a0fULL, 0x34a7e9d10f4d55fdULL,
  4282.     0x8eec7f0d19a03aadULL, 0xd29fe4b18e88640eULL}},
  4283.   // (ten2mx >> 256) = d29fe4b18e88640e  8eec7f0d19a03aad  
  4284.   //   34a7e9d10f4d55fd51972e34f8703a0f
  4285.   {{0x0e128b5d938cfb3fULL, 0x2a1fee40d90aab31ULL,
  4286.     0x3f2398d747b36224ULL, 0xa87fea27a539e9a5ULL}},
  4287.   // (ten2mx >> 256) = a87fea27a539e9a5  3f2398d747b36224  
  4288.   //   2a1fee40d90aab310e128b5d938cfb3f
  4289.   {{0x3e753c4adc70c8ffULL, 0xbb4cbe9a473bbc27ULL,
  4290.     0x98e947129fc2b4e9ULL, 0x86ccbb52ea94baeaULL}},
  4291.   // (ten2mx >> 256) = 86ccbb52ea94baea  98e947129fc2b4e9  
  4292.   //   bb4cbe9a473bbc273e753c4adc70c8ff
  4293.   {{0x30bb93aafa4e0e65ULL, 0x9214642a0b92c6a5ULL,
  4294.     0x5b0ed81dcc6abb0fULL, 0xd7adf884aa879177ULL}},
  4295.   // (ten2mx >> 256) = d7adf884aa879177  5b0ed81dcc6abb0f  
  4296.   //   9214642a0b92c6a530bb93aafa4e0e65
  4297.   {{0xc0960fbbfb71a51eULL, 0xa8105021a2dbd21dULL,
  4298.     0xe272467e3d222f3fULL, 0xac8b2d36eed2dac5ULL}},
  4299.   // (ten2mx >> 256) = ac8b2d36eed2dac5  e272467e3d222f3f  
  4300.   //   a8105021a2dbd21dc0960fbbfb71a51e
  4301.   {{0x66de72fcc927b74bULL, 0xb9a6a6814f1641b1ULL,
  4302.     0x1b8e9ecb641b58ffULL, 0x8a08f0f8bf0f156bULL}},
  4303.   // (ten2mx >> 256) = 8a08f0f8bf0f156b  1b8e9ecb641b58ff  
  4304.   //   b9a6a6814f1641b166de72fcc927b74b
  4305.   {{0xd7ca5194750c5878ULL, 0xf5d770cee4f0691bULL,
  4306.     0xf8e431456cf88e65ULL, 0xdcdb1b2798182244ULL}},
  4307.   // (ten2mx >> 256) = dcdb1b2798182244  f8e431456cf88e65  
  4308.   //   f5d770cee4f0691bd7ca5194750c5878
  4309.   {{0xdfd50e105da379f9ULL, 0x9179270bea59edafULL,
  4310.     0x2d835a9df0c6d851ULL, 0xb0af48ec79ace837ULL}},
  4311.   // (ten2mx >> 256) = b0af48ec79ace837  2d835a9df0c6d851  
  4312.   //   9179270bea59edafdfd50e105da379f9
  4313.   {{0x19773e737e1c6194ULL, 0x0dfa85a321e18af3ULL,
  4314.     0x579c487e5a38ad0eULL, 0x8d590723948a535fULL}},
  4315.   // (ten2mx >> 256) = 8d590723948a535f  579c487e5a38ad0e  
  4316.   //   dfa85a321e18af319773e737e1c6194
  4317.   {{0xf58b971f302d68eeULL, 0x165da29e9c9c1184ULL,
  4318.     0x25c6da63c38de1b0ULL, 0xe2280b6c20dd5232ULL}},
  4319.   // (ten2mx >> 256) = e2280b6c20dd5232  25c6da63c38de1b0  
  4320.   //   165da29e9c9c1184f58b971f302d68ee
  4321.   {{0xc46fac18f3578724ULL, 0x4517b54bb07cdad0ULL,
  4322.     0x1e38aeb6360b1af3ULL, 0xb4ecd5f01a4aa828ULL}},
  4323.   // (ten2mx >> 256) = b4ecd5f01a4aa828  1e38aeb6360b1af3  
  4324.   //   4517b54bb07cdad0c46fac18f3578724
  4325.   {{0x36bfbce0c2ac6c1dULL, 0x9dac910959fd7bdaULL,
  4326.     0xb1c6f22b5e6f48c2ULL, 0x90bd77f3483bb9b9ULL}},
  4327.   // (ten2mx >> 256) = 90bd77f3483bb9b9  b1c6f22b5e6f48c2  
  4328.   //   9dac910959fd7bda36bfbce0c2ac6c1d
  4329.   {{0x2465fb01377a4695ULL, 0x2f7a81a88ffbf95dULL,
  4330.     0xb60b1d1230b20e04ULL, 0xe7958cb87392c2c2ULL}}
  4331.   // (ten2mx >> 256) = e7958cb87392c2c2  b60b1d1230b20e04  
  4332.   //   2f7a81a88ffbf95d2465fb01377a4695
  4333. };
  4334.