@based/db 0.2.5 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/dist/lib/darwin_aarch64/libnode-v22.node +0 -0
  2. package/dist/lib/darwin_aarch64/libnode-v23.node +0 -0
  3. package/dist/lib/darwin_aarch64/libnode-v24.node +0 -0
  4. package/dist/lib/darwin_aarch64/libnode-v25.node +0 -0
  5. package/dist/lib/darwin_aarch64/libselva.dylib +0 -0
  6. package/dist/lib/linux_aarch64/include/cdefs.h +324 -0
  7. package/dist/lib/linux_aarch64/include/jemalloc.h +468 -0
  8. package/dist/lib/linux_aarch64/include/libdeflate.h +345 -0
  9. package/dist/lib/linux_aarch64/include/libdeflate_strings.h +35 -0
  10. package/dist/lib/linux_aarch64/include/linker_set.h +109 -0
  11. package/dist/lib/linux_aarch64/include/queue.h +627 -0
  12. package/dist/lib/linux_aarch64/include/selva/_export.h +7 -0
  13. package/dist/lib/linux_aarch64/include/selva/align.h +9 -0
  14. package/dist/lib/linux_aarch64/include/selva/backoff_timeout.h +29 -0
  15. package/dist/lib/linux_aarch64/include/selva/bitmap.h +95 -0
  16. package/dist/lib/linux_aarch64/include/selva/colvec.h +71 -0
  17. package/dist/lib/linux_aarch64/include/selva/crc32c.h +17 -0
  18. package/dist/lib/linux_aarch64/include/selva/ctime.h +135 -0
  19. package/dist/lib/linux_aarch64/include/selva/db.h +450 -0
  20. package/dist/lib/linux_aarch64/include/selva/endian.h +301 -0
  21. package/dist/lib/linux_aarch64/include/selva/fast_linear_search.h +27 -0
  22. package/dist/lib/linux_aarch64/include/selva/fast_memcmp.h +18 -0
  23. package/dist/lib/linux_aarch64/include/selva/fast_memmem.h +11 -0
  24. package/dist/lib/linux_aarch64/include/selva/fast_parsei.h +36 -0
  25. package/dist/lib/linux_aarch64/include/selva/fields.h +341 -0
  26. package/dist/lib/linux_aarch64/include/selva/gmtime.h +137 -0
  27. package/dist/lib/linux_aarch64/include/selva/hll.h +85 -0
  28. package/dist/lib/linux_aarch64/include/selva/lpf.h +28 -0
  29. package/dist/lib/linux_aarch64/include/selva/mblen.h +40 -0
  30. package/dist/lib/linux_aarch64/include/selva/membar.h +32 -0
  31. package/dist/lib/linux_aarch64/include/selva/node_id_set.h +43 -0
  32. package/dist/lib/linux_aarch64/include/selva/poptop.h +114 -0
  33. package/dist/lib/linux_aarch64/include/selva/selva_hash128.h +49 -0
  34. package/dist/lib/linux_aarch64/include/selva/selva_lang.h +112 -0
  35. package/dist/lib/linux_aarch64/include/selva/selva_math.h +37 -0
  36. package/dist/lib/linux_aarch64/include/selva/selva_string.h +683 -0
  37. package/dist/lib/linux_aarch64/include/selva/sort.h +140 -0
  38. package/dist/lib/linux_aarch64/include/selva/strsearch.h +43 -0
  39. package/dist/lib/linux_aarch64/include/selva/thread.h +37 -0
  40. package/dist/lib/linux_aarch64/include/selva/timestamp.h +25 -0
  41. package/dist/lib/linux_aarch64/include/selva/types.h +115 -0
  42. package/dist/lib/linux_aarch64/include/selva/vector.h +35 -0
  43. package/dist/lib/linux_aarch64/include/selva_error.h +140 -0
  44. package/dist/lib/linux_aarch64/include/selva_lang_code.h +160 -0
  45. package/dist/lib/linux_aarch64/include/tree.h +852 -0
  46. package/dist/lib/linux_aarch64/libdeflate.so +0 -0
  47. package/dist/lib/linux_aarch64/libjemalloc_selva.so.2 +0 -0
  48. package/dist/lib/linux_aarch64/libnode-v22.node +0 -0
  49. package/dist/lib/linux_aarch64/libnode-v23.node +0 -0
  50. package/dist/lib/linux_aarch64/libnode-v24.node +0 -0
  51. package/dist/lib/linux_aarch64/libnode-v25.node +0 -0
  52. package/dist/lib/linux_aarch64/libselva.so +0 -0
  53. package/dist/lib/linux_aarch64/libxxhash.so.0 +0 -0
  54. package/dist/lib/linux_x86_64/include/cdefs.h +324 -0
  55. package/dist/lib/linux_x86_64/include/jemalloc.h +468 -0
  56. package/dist/lib/linux_x86_64/include/libdeflate.h +345 -0
  57. package/dist/lib/linux_x86_64/include/libdeflate_strings.h +35 -0
  58. package/dist/lib/linux_x86_64/include/linker_set.h +109 -0
  59. package/dist/lib/linux_x86_64/include/queue.h +627 -0
  60. package/dist/lib/linux_x86_64/include/selva/_export.h +7 -0
  61. package/dist/lib/linux_x86_64/include/selva/align.h +9 -0
  62. package/dist/lib/linux_x86_64/include/selva/backoff_timeout.h +29 -0
  63. package/dist/lib/linux_x86_64/include/selva/bitmap.h +95 -0
  64. package/dist/lib/linux_x86_64/include/selva/colvec.h +71 -0
  65. package/dist/lib/linux_x86_64/include/selva/crc32c.h +17 -0
  66. package/dist/lib/linux_x86_64/include/selva/ctime.h +135 -0
  67. package/dist/lib/linux_x86_64/include/selva/db.h +450 -0
  68. package/dist/lib/linux_x86_64/include/selva/endian.h +301 -0
  69. package/dist/lib/linux_x86_64/include/selva/fast_linear_search.h +27 -0
  70. package/dist/lib/linux_x86_64/include/selva/fast_memcmp.h +18 -0
  71. package/dist/lib/linux_x86_64/include/selva/fast_memmem.h +11 -0
  72. package/dist/lib/linux_x86_64/include/selva/fast_parsei.h +36 -0
  73. package/dist/lib/linux_x86_64/include/selva/fields.h +341 -0
  74. package/dist/lib/linux_x86_64/include/selva/gmtime.h +137 -0
  75. package/dist/lib/linux_x86_64/include/selva/hll.h +85 -0
  76. package/dist/lib/linux_x86_64/include/selva/lpf.h +28 -0
  77. package/dist/lib/linux_x86_64/include/selva/mblen.h +40 -0
  78. package/dist/lib/linux_x86_64/include/selva/membar.h +32 -0
  79. package/dist/lib/linux_x86_64/include/selva/node_id_set.h +43 -0
  80. package/dist/lib/linux_x86_64/include/selva/poptop.h +114 -0
  81. package/dist/lib/linux_x86_64/include/selva/selva_hash128.h +49 -0
  82. package/dist/lib/linux_x86_64/include/selva/selva_lang.h +112 -0
  83. package/dist/lib/linux_x86_64/include/selva/selva_math.h +37 -0
  84. package/dist/lib/linux_x86_64/include/selva/selva_string.h +683 -0
  85. package/dist/lib/linux_x86_64/include/selva/sort.h +140 -0
  86. package/dist/lib/linux_x86_64/include/selva/strsearch.h +43 -0
  87. package/dist/lib/linux_x86_64/include/selva/thread.h +37 -0
  88. package/dist/lib/linux_x86_64/include/selva/timestamp.h +25 -0
  89. package/dist/lib/linux_x86_64/include/selva/types.h +115 -0
  90. package/dist/lib/linux_x86_64/include/selva/vector.h +35 -0
  91. package/dist/lib/linux_x86_64/include/selva_error.h +140 -0
  92. package/dist/lib/linux_x86_64/include/selva_lang_code.h +160 -0
  93. package/dist/lib/linux_x86_64/include/tree.h +852 -0
  94. package/dist/lib/linux_x86_64/libdeflate.so +0 -0
  95. package/dist/lib/linux_x86_64/libjemalloc_selva.so.2 +0 -0
  96. package/dist/lib/linux_x86_64/libnode-v22.node +0 -0
  97. package/dist/lib/linux_x86_64/libnode-v23.node +0 -0
  98. package/dist/lib/linux_x86_64/libnode-v24.node +0 -0
  99. package/dist/lib/linux_x86_64/libnode-v25.node +0 -0
  100. package/dist/lib/linux_x86_64/libselva.so +0 -0
  101. package/dist/lib/linux_x86_64/libxxhash.so.0 +0 -0
  102. package/package.json +1 -1
@@ -0,0 +1,85 @@
1
+ #ifndef UTIL_HLL_H
2
+ #define UTIL_HLL_H
3
+
4
+ #include <stdlib.h>
5
+ #include <stdint.h>
6
+ #include "selva/_export.h"
7
+ #include "selva_string.h"
8
+ #include <stdbool.h>
9
+ #include "cdefs.h"
10
+
11
+ #define HLL_INIT_SIZE 8
12
+
13
+ SELVA_EXPORT
14
+ void hll_init(struct selva_string *hllss, uint8_t precision, bool is_sparse);
15
+ SELVA_EXPORT
16
+ void hll_init_like(struct selva_string *hlla, struct selva_string *hllb);
17
+ SELVA_EXPORT
18
+ void hll_add(struct selva_string *hllss, uint64_t element);
19
+ SELVA_EXPORT
20
+ uint8_t *hll_count(struct selva_string *hllss);
21
+ SELVA_EXPORT
22
+ void hll_array_union(struct selva_string *res, struct selva_string *hll_array, size_t count);
23
+ SELVA_EXPORT
24
+ void hll_union(struct selva_string *, struct selva_string *);
25
+
26
+ // size_t actual_cols[13] = { 79, 159, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200 };
27
+ // float raw_estimate_data[13][200] =
28
+ // {
29
+ // // precision 4
30
+ // { 11, 11.717, 12.207, 12.7896, 13.2882, 13.8204, 14.3772, 14.9342, 15.5202, 16.161, 16.7722,17.4636, 18.0396, 18.6766, 19.3566, 20.0454, 20.7936, 21.4856, 22.2666, 22.9946, 23.766,24.4692, 25.3638, 26.0764, 26.7864, 27.7602, 28.4814, 29.433, 30.2926, 31.0664, 31.9996,32.7956, 33.5366, 34.5894, 35.5738, 36.2698, 37.3682, 38.0544, 39.2342, 40.0108, 40.7966,41.9298, 42.8704, 43.6358, 44.5194, 45.773, 46.6772, 47.6174, 48.4888, 49.3304, 50.2506,51.4996, 52.3824, 53.3078, 54.3984, 55.5838, 56.6618, 57.2174, 58.3514, 59.0802, 60.1482,61.0376, 62.3598, 62.8078, 63.9744, 64.914, 65.781, 67.1806, 68.0594, 68.8446, 69.7928,70.8248, 71.8324, 72.8598, 73.6246, 74.7014, 75.393, 76.6708, 77.2394, },
31
+ // // precision 5
32
+ // { 23, 23.1194, 23.8208, 24.2318, 24.77, 25.2436, 25.7774, 26.2848, 26.8224, 27.3742,27.9336, 28.503, 29.0494, 29.6292, 30.2124, 30.798, 31.367, 31.9728, 32.5944, 33.217, 33.8438,34.3696, 35.0956, 35.7044, 36.324, 37.0668, 37.6698, 38.3644, 39.049, 39.6918, 40.4146,41.082, 41.687, 42.5398, 43.2462, 43.857, 44.6606, 45.4168, 46.1248, 46.9222, 47.6804, 48.447,49.3454, 49.9594, 50.7636, 51.5776, 52.331, 53.19, 53.9676, 54.7564, 55.5314, 56.4442,57.3708, 57.9774, 58.9624, 59.8796, 60.755, 61.472, 62.2076, 63.1024, 63.8908, 64.7338,65.7728, 66.629, 67.413, 68.3266, 69.1524, 70.2642, 71.1806, 72.0566, 72.9192, 73.7598,74.3516, 75.5802, 76.4386, 77.4916, 78.1524, 79.1892, 79.8414, 80.8798, 81.8376, 82.4698,83.7656, 84.331, 85.5914, 86.6012, 87.7016, 88.5582, 89.3394, 90.3544, 91.4912, 92.308,93.3552, 93.9746, 95.2052, 95.727, 97.1322, 98.3944, 98.7588, 100.242, 101.1914, 102.2538,102.8776, 103.6292, 105.1932, 105.9152, 107.0868, 107.6728, 108.7144, 110.3114, 110.8716,111.245, 112.7908, 113.7064, 114.636, 115.7464, 116.1788, 117.7464, 118.4896, 119.6166,120.5082, 121.7798, 122.9028, 123.4426, 124.8854, 125.705, 126.4652, 128.3464, 128.3462,130.0398, 131.0342, 131.0042, 132.4766, 133.511, 134.7252, 135.425, 136.5172, 138.0572,138.6694, 139.3712, 140.8598, 141.4594, 142.554, 143.4006, 144.7374, 146.1634, 146.8994,147.605, 147.9304, 149.1636, 150.2468, 151.5876, 152.2096, 153.7032, 154.7146, 155.807,156.9228, 157.0372, 158.5852, },
33
+ // // precision 6
34
+ // { 46, 46.1902, 47.271, 47.8358, 48.8142, 49.2854, 50.317, 51.354, 51.8924, 52.9436, 53.4596,54.5262, 55.6248, 56.1574, 57.2822, 57.837, 58.9636, 60.074, 60.7042, 61.7976, 62.4772,63.6564, 64.7942, 65.5004, 66.686, 67.291, 68.5672, 69.8556, 70.4982, 71.8204, 72.4252,73.7744, 75.0786, 75.8344, 77.0294, 77.8098, 79.0794, 80.5732, 81.1878, 82.5648, 83.2902,84.6784, 85.3352, 86.8946, 88.3712, 89.0852, 90.499, 91.2686, 92.6844, 94.2234, 94.9732,96.3356, 97.2286, 98.7262, 100.3284, 101.1048, 102.5962, 103.3562, 105.1272, 106.4184,107.4974, 109.0822, 109.856, 111.48, 113.2834, 114.0208, 115.637, 116.5174, 118.0576,119.7476, 120.427, 122.1326, 123.2372, 125.2788, 126.6776, 127.7926, 129.1952, 129.9564,131.6454, 133.87, 134.5428, 136.2, 137.0294, 138.6278, 139.6782, 141.792, 143.3516, 144.2832,146.0394, 147.0748, 148.4912, 150.849, 151.696, 153.5404, 154.073, 156.3714, 157.7216,158.7328, 160.4208, 161.4184, 163.9424, 165.2772, 166.411, 168.1308, 168.769, 170.9258,172.6828, 173.7502, 175.706, 176.3886, 179.0186, 180.4518, 181.927, 183.4172, 184.4114,186.033, 188.5124, 189.5564, 191.6008, 192.4172, 193.8044, 194.997, 197.4548, 198.8948,200.2346, 202.3086, 203.1548, 204.8842, 206.6508, 206.6772, 209.7254, 210.4752, 212.7228,214.6614, 215.1676, 217.793, 218.0006, 219.9052, 221.66, 223.5588, 225.1636, 225.6882,227.7126, 229.4502, 231.1978, 232.9756, 233.1654, 236.727, 238.1974, 237.7474, 241.1346,242.3048, 244.1948, 245.3134, 246.879, 249.1204, 249.853, 252.6792, 253.857, 254.4486,257.2362, 257.9534, 260.0286, 260.5632, 262.663, 264.723, 265.7566, 267.2566, 267.1624,270.62, 272.8216, 273.2166, 275.2056, 276.2202, 278.3726, 280.3344, 281.9284, 283.9728,284.1924, 286.4872, 287.587, 289.807, 291.1206, 292.769, 294.8708, 296.665, 297.1182,299.4012, 300.6352, 302.1354, 304.1756, 306.1606, 307.3462, 308.5214, 309.4134, 310.8352,313.9684, 315.837, 316.7796, 318.9858, },
35
+ // // precision 7
36
+ // { 92, 93.4934, 94.9758, 96.4574, 97.9718, 99.4954, 101.5302, 103.0756, 104.6374, 106.1782,107.7888, 109.9522, 111.592, 113.2532, 114.9086, 116.5938, 118.9474, 120.6796, 122.4394,124.2176, 125.9768, 128.4214, 130.2528, 132.0102, 133.8658, 135.7278, 138.3044, 140.1316,142.093, 144.0032, 145.9092, 148.6306, 150.5294, 152.5756, 154.6508, 156.662, 159.552,161.3724, 163.617, 165.5754, 167.7872, 169.8444, 172.7988, 174.8606, 177.2118, 179.3566,181.4476, 184.5882, 186.6816, 189.0824, 191.0258, 193.6048, 196.4436, 198.7274, 200.957,203.147, 205.4364, 208.7592, 211.3386, 213.781, 215.8028, 218.656, 221.6544, 223.996,226.4718, 229.1544, 231.6098, 234.5956, 237.0616, 239.5758, 242.4878, 244.5244, 248.2146,250.724, 252.8722, 255.5198, 258.0414, 261.941, 264.9048, 266.87, 269.4304, 272.028, 274.4708,278.37, 281.0624, 283.4668, 286.5532, 289.4352, 293.2564, 295.2744, 298.2118, 300.7472,304.1456, 307.2928, 309.7504, 312.5528, 315.979, 318.2102, 322.1834, 324.3494, 327.325,330.6614, 332.903, 337.2544, 339.9042, 343.215, 345.2864, 348.0814, 352.6764, 355.301,357.139, 360.658, 363.1732, 366.5902, 369.9538, 373.0828, 375.922, 378.9902, 382.7328,386.4538, 388.1136, 391.2234, 394.0878, 396.708, 401.1556, 404.1852, 406.6372, 409.6822,412.7796, 416.6078, 418.4916, 422.131, 424.5376, 428.1988, 432.211, 434.4502, 438.5282,440.912, 444.0448, 447.7432, 450.8524, 453.7988, 456.7858, 458.8868, 463.9886, 466.5064,468.9124, 472.6616, 475.4682, 478.582, 481.304, 485.2738, 488.6894, 490.329, 496.106,497.6908, 501.1374, 504.5322, 506.8848, 510.3324, 513.4512, 516.179, 520.4412, 522.6066,526.167, 528.7794, 533.379, 536.067, 538.46, 542.9116, 545.692, 547.9546, 552.493, 555.2722,557.335, 562.449, 564.2014, 569.0738, 571.0974, 574.8564, 578.2996, 581.409, 583.9704,585.8098, 589.6528, 594.5998, 595.958, 600.068, 603.3278, 608.2016, 609.9632, 612.864, 615.43,620.7794, 621.272, 625.8644, 629.206, 633.219, 634.5154, 638.6102, },
37
+ // // precision 8
38
+ // { 184.2152, 187.2454, 190.2096, 193.6652, 196.6312, 199.6822, 203.249, 206.3296, 210.0038,213.2074, 216.4612, 220.27, 223.5178, 227.4412, 230.8032, 234.1634, 238.1688, 241.6074,245.6946, 249.2664, 252.8228, 257.0432, 260.6824, 264.9464, 268.6268, 272.2626, 276.8376,280.4034, 284.8956, 288.8522, 292.7638, 297.3552, 301.3556, 305.7526, 309.9292, 313.8954,318.8198, 322.7668, 327.298, 331.6688, 335.9466, 340.9746, 345.1672, 349.3474, 354.3028,358.8912, 364.114, 368.4646, 372.9744, 378.4092, 382.6022, 387.843, 392.5684, 397.1652,402.5426, 407.4152, 412.5388, 417.3592, 422.1366, 427.486, 432.3918, 437.5076, 442.509,447.3834, 453.3498, 458.0668, 463.7346, 469.1228, 473.4528, 479.7, 484.644, 491.0518,495.5774, 500.9068, 506.432, 512.1666, 517.434, 522.6644, 527.4894, 533.6312, 538.3804,544.292, 550.5496, 556.0234, 562.8206, 566.6146, 572.4188, 579.117, 583.6762, 590.6576,595.7864, 601.509, 607.5334, 612.9204, 619.772, 624.2924, 630.8654, 636.1836, 642.745,649.1316, 655.0386, 660.0136, 666.6342, 671.6196, 678.1866, 684.4282, 689.3324, 695.4794,702.5038, 708.129, 713.528, 720.3204, 726.463, 732.7928, 739.123, 744.7418, 751.2192,756.5102, 762.6066, 769.0184, 775.2224, 781.4014, 787.7618, 794.1436, 798.6506, 805.6378,811.766, 819.7514, 824.5776, 828.7322, 837.8048, 843.6302, 849.9336, 854.4798, 861.3388,867.9894, 873.8196, 880.3136, 886.2308, 892.4588, 899.0816, 905.4076, 912.0064, 917.3878,923.619, 929.998, 937.3482, 943.9506, 947.991, 955.1144, 962.203, 968.8222, 975.7324,981.7826, 988.7666, 994.2648, 1000.3128, 1007.4082, 1013.7536, 1020.3376, 1026.7156,1031.7478, 1037.4292, 1045.393, 1051.2278, 1058.3434, 1062.8726, 1071.884, 1076.806,1082.9176, 1089.1678, 1095.5032, 1102.525, 1107.2264, 1115.315, 1120.93, 1127.252, 1134.1496,1139.0408, 1147.5448, 1153.3296, 1158.1974, 1166.5262, 1174.3328, 1175.657, 1184.4222,1190.9172, 1197.1292, 1204.4606, 1210.4578, 1218.8728, 1225.3336, 1226.6592, 1236.5768,1241.363, 1249.4074, 1254.6566, 1260.8014, 1266.5454, 1274.5192, },
39
+ // // precision 9 (has 201 values n the annex, last one was trimmed)
40
+ // { 369, 374.8294, 381.2452, 387.6698, 394.1464, 400.2024, 406.8782, 413.6598, 420.462,427.2826, 433.7102, 440.7416, 447.9366, 455.1046, 462.285, 469.0668, 476.306, 483.8448,491.301, 498.9886, 506.2422, 513.8138, 521.7074, 529.7428, 537.8402, 545.1664, 553.3534,561.594, 569.6886, 577.7876, 585.65, 594.228, 602.8036, 611.1666, 620.0818, 628.0824,637.2574, 646.302, 655.1644, 664.0056, 672.3802, 681.7192, 690.5234, 700.2084, 708.831,718.485, 728.1112, 737.4764, 746.76, 756.3368, 766.5538, 775.5058, 785.2646, 795.5902,804.3818, 814.8998, 824.9532, 835.2062, 845.2798, 854.4728, 864.9582, 875.3292, 886.171,896.781, 906.5716, 916.7048, 927.5322, 937.875, 949.3972, 958.3464, 969.7274, 980.2834,992.1444, 1003.4264, 1013.0166, 1024.018, 1035.0438, 1046.34, 1057.6856, 1068.9836, 1079.0312,1091.677, 1102.3188, 1113.4846, 1124.4424, 1135.739, 1147.1488, 1158.9202, 1169.406,1181.5342, 1193.2834, 1203.8954, 1216.3286, 1226.2146, 1239.6684, 1251.9946, 1262.123,1275.4338, 1285.7378, 1296.076, 1308.9692, 1320.4964, 1333.0998, 1343.9864, 1357.7754,1368.3208, 1380.4838, 1392.7388, 1406.0758, 1416.9098, 1428.9728, 1440.9228, 1453.9292,1462.617, 1476.05, 1490.2996, 1500.6128, 1513.7392, 1524.5174, 1536.6322, 1548.2584,1562.3766, 1572.423, 1587.1232, 1596.5164, 1610.5938, 1622.5972, 1633.1222, 1647.7674,1658.5044, 1671.57, 1683.7044, 1695.4142, 1708.7102, 1720.6094, 1732.6522, 1747.841,1756.4072, 1769.9786, 1782.3276, 1797.5216, 1808.3186, 1819.0694, 1834.354, 1844.575,1856.2808, 1871.1288, 1880.7852, 1893.9622, 1906.3418, 1920.6548, 1932.9302, 1945.8584,1955.473, 1968.8248, 1980.6446, 1995.9598, 2008.349, 2019.8556, 2033.0334, 2044.0206,2059.3956, 2069.9174, 2082.6084, 2093.7036, 2106.6108, 2118.9124, 2132.301, 2144.7628,2159.8422, 2171.0212, 2183.101, 2193.5112, 2208.052, 2221.3194, 2233.3282, 2247.295,2257.7222, 2273.342, 2286.5638, 2299.6786, 2310.8114, 2322.3312, 2335.516, 2349.874,2363.5968, 2373.865, 2387.1918, 2401.8328, 2414.8496, 2424.544, 2436.7592, 2447.1682,2464.1958, 2474.3438, 2489.0006, 2497.4526, 2513.6586, 2527.19, 2540.7028,},
41
+ // // precision 10
42
+ // { 738.1256, 750.4234, 763.1064, 775.4732, 788.4636, 801.0644, 814.488, 827.9654, 841.0832,854.7864, 868.1992, 882.2176, 896.5228, 910.1716, 924.7752, 938.899, 953.6126, 968.6492,982.9474, 998.5214, 1013.1064, 1028.6364, 1044.2468, 1059.4588, 1075.3832, 1091.0584,1106.8606, 1123.3868, 1139.5062, 1156.1862, 1172.463, 1189.339, 1206.1936, 1223.1292,1240.1854, 1257.2908, 1275.3324, 1292.8518, 1310.5204, 1328.4854, 1345.9318, 1364.552,1381.4658, 1400.4256, 1419.849, 1438.152, 1456.8956, 1474.8792, 1494.118, 1513.62, 1532.5132,1551.9322, 1570.7726, 1590.6086, 1610.5332, 1630.5918, 1650.4294, 1669.7662, 1690.4106,1710.7338, 1730.9012, 1750.4486, 1770.1556, 1791.6338, 1812.7312, 1833.6264, 1853.9526,1874.8742, 1896.8326, 1918.1966, 1939.5594, 1961.07, 1983.037, 2003.1804, 2026.071, 2047.4884,2070.0848, 2091.2944, 2114.333, 2135.9626, 2158.2902, 2181.0814, 2202.0334, 2224.4832,2246.39, 2269.7202, 2292.1714, 2314.2358, 2338.9346, 2360.891, 2384.0264, 2408.3834,2430.1544, 2454.8684, 2476.9896, 2501.4368, 2522.8702, 2548.0408, 2570.6738, 2593.5208,2617.0158, 2640.2302, 2664.0962, 2687.4986, 2714.2588, 2735.3914, 2759.6244, 2781.8378,2808.0072, 2830.6516, 2856.2454, 2877.2136, 2903.4546, 2926.785, 2951.2294, 2976.468,3000.867, 3023.6508, 3049.91, 3073.5984, 3098.162, 3121.5564, 3146.2328, 3170.9484, 3195.5902,3221.3346, 3242.7032, 3271.6112, 3296.5546, 3317.7376, 3345.072, 3369.9518, 3394.326,3418.1818, 3444.6926, 3469.086, 3494.2754, 3517.8698, 3544.248, 3565.3768, 3588.7234,3616.979, 3643.7504, 3668.6812, 3695.72, 3719.7392, 3742.6224, 3770.4456, 3795.6602,3819.9058, 3844.002, 3869.517, 3895.6824, 3920.8622, 3947.1364, 3973.985, 3995.4772, 4021.62,4046.628, 4074.65, 4096.2256, 4121.831, 4146.6406, 4173.276, 4195.0744, 4223.9696, 4251.3708,4272.9966, 4300.8046, 4326.302, 4353.1248, 4374.312, 4403.0322, 4426.819, 4450.0598,4478.5206, 4504.8116, 4528.8928, 4553.9584, 4578.8712, 4603.8384, 4632.3872, 4655.5128,4675.821, 4704.6222, 4731.9862, 4755.4174, 4781.2628, 4804.332, 4832.3048, 4862.8752,4883.4148, 4906.9544, 4935.3516, 4954.3532, 4984.0248, 5011.217, 5035.3258, 5057.3672,5084.1828, },
43
+ // // precision 11 (has 201 values n the annex, last one was trimmed)
44
+ // { 1477, 1501.6014, 1526.5802, 1551.7942, 1577.3042, 1603.2062, 1629.8402, 1656.2292,1682.9462, 1709.9926, 1737.3026, 1765.4252, 1793.0578, 1821.6092, 1849.626, 1878.5568,1908.527, 1937.5154, 1967.1874, 1997.3878, 2027.37, 2058.1972, 2089.5728, 2120.1012,2151.9668, 2183.292, 2216.0772, 2247.8578, 2280.6562, 2313.041, 2345.714, 2380.3112,2414.1806, 2447.9854, 2481.656, 2516.346, 2551.5154, 2586.8378, 2621.7448, 2656.6722,2693.5722, 2729.1462, 2765.4124, 2802.8728, 2838.898, 2876.408, 2913.4926, 2951.4938,2989.6776, 3026.282, 3065.7704, 3104.1012, 3143.7388, 3181.6876, 3221.1872, 3261.5048,3300.0214, 3339.806, 3381.409, 3421.4144, 3461.4294, 3502.2286, 3544.651, 3586.6156, 3627.337,3670.083, 3711.1538, 3753.5094, 3797.01, 3838.6686, 3882.1678, 3922.8116, 3967.9978,4009.9204, 4054.3286, 4097.5706, 4140.6014, 4185.544, 4229.5976, 4274.583, 4316.9438,4361.672, 4406.2786, 4451.8628, 4496.1834, 4543.505, 4589.1816, 4632.5188, 4678.2294,4724.8908, 4769.0194, 4817.052, 4861.4588, 4910.1596, 4956.4344, 5002.5238, 5048.13,5093.6374, 5142.8162, 5187.7894, 5237.3984, 5285.6078, 5331.0858, 5379.1036, 5428.6258,5474.6018, 5522.7618, 5571.5822, 5618.59, 5667.9992, 5714.88, 5763.454, 5808.6982, 5860.3644,5910.2914, 5953.571, 6005.9232, 6055.1914, 6104.5882, 6154.5702, 6199.7036, 6251.1764,6298.7596, 6350.0302, 6398.061, 6448.4694, 6495.933, 6548.0474, 6597.7166, 6646.9416,6695.9208, 6742.6328, 6793.5276, 6842.1934, 6894.2372, 6945.3864, 6996.9228, 7044.2372,7094.1374, 7142.2272, 7192.2942, 7238.8338, 7288.9006, 7344.0908, 7394.8544, 7443.5176,7490.4148, 7542.9314, 7595.6738, 7641.9878, 7694.3688, 7743.0448, 7797.522, 7845.53, 7899.594,7950.3132, 7996.455, 8050.9442, 8092.9114, 8153.1374, 8197.4472, 8252.8278, 8301.8728,8348.6776, 8401.4698, 8453.551, 8504.6598, 8553.8944, 8604.1276, 8657.6514, 8710.3062,8758.908, 8807.8706, 8862.1702, 8910.4668, 8960.77, 9007.2766, 9063.164, 9121.0534, 9164.1354,9218.1594, 9267.767, 9319.0594, 9372.155, 9419.7126, 9474.3722, 9520.1338, 9572.368,9622.7702, 9675.8448, 9726.5396, 9778.7378, 9827.6554, 9878.1922, 9928.7782, 9978.3984,10026.578, 10076.5626, 10137.1618, 10177.5244,},
45
+ // // precision 12 (has 201 values n the annex, last one was trimmed)
46
+ // { 2954, 3003.4782, 3053.3568, 3104.3666, 3155.324, 3206.9598, 3259.648, 3312.539, 3366.1474,3420.2576, 3474.8376, 3530.6076, 3586.451, 3643.38, 3700.4104, 3757.5638, 3815.9676, 3875.193,3934.838, 3994.8548, 4055.018, 4117.1742, 4178.4482, 4241.1294, 4304.4776, 4367.4044,4431.8724, 4496.3732, 4561.4304, 4627.5326, 4693.949, 4761.5532, 4828.7256, 4897.6182,4965.5186, 5034.4528, 5104.865, 5174.7164, 5244.6828, 5316.6708, 5387.8312, 5459.9036,5532.476, 5604.8652, 5679.6718, 5753.757, 5830.2072, 5905.2828, 5980.0434, 6056.6264,6134.3192, 6211.5746, 6290.0816, 6367.1176, 6447.9796, 6526.5576, 6606.1858, 6686.9144,6766.1142, 6847.0818, 6927.9664, 7010.9096, 7091.0816, 7175.3962, 7260.3454, 7344.018,7426.4214, 7511.3106, 7596.0686, 7679.8094, 7765.818, 7852.4248, 7936.834, 8022.363,8109.5066, 8200.4554, 8288.5832, 8373.366, 8463.4808, 8549.7682, 8642.0522, 8728.3288,8820.9528, 8907.727, 9001.0794, 9091.2522, 9179.988, 9269.852, 9362.6394, 9453.642, 9546.9024,9640.6616, 9732.6622, 9824.3254, 9917.7484, 10007.9392, 10106.7508, 10196.2152, 10289.8114,10383.5494, 10482.3064, 10576.8734, 10668.7872, 10764.7156, 10862.0196, 10952.793, 11049.9748,11146.0702, 11241.4492, 11339.2772, 11434.2336, 11530.741, 11627.6136, 11726.311, 11821.5964,11918.837, 12015.3724, 12113.0162, 12213.0424, 12306.9804, 12408.4518, 12504.8968, 12604.586,12700.9332, 12798.705, 12898.5142, 12997.0488, 13094.788, 13198.475, 13292.7764, 13392.9698,13486.8574, 13590.1616, 13686.5838, 13783.6264, 13887.2638, 13992.0978, 14081.0844,14189.9956, 14280.0912, 14382.4956, 14486.4384, 14588.1082, 14686.2392, 14782.276, 14888.0284,14985.1864, 15088.8596, 15187.0998, 15285.027, 15383.6694, 15495.8266, 15591.3736, 15694.2008,15790.3246, 15898.4116, 15997.4522, 16095.5014, 16198.8514, 16291.7492, 16402.6424,16499.1266, 16606.2436, 16697.7186, 16796.3946, 16902.3376, 17005.7672, 17100.814, 17206.8282,17305.8262, 17416.0744, 17508.4092, 17617.0178, 17715.4554, 17816.758, 17920.1748, 18012.9236,18119.7984, 18223.2248, 18324.2482, 18426.6276, 18525.0932, 18629.8976, 18733.2588,18831.0466, 18940.1366, 19032.2696, 19131.729, 19243.4864, 19349.6932, 19442.866, 19547.9448,19653.2798, 19754.4034, 19854.0692, 19965.1224, 20065.1774, 20158.2212, 20253.353, 20366.3264, },
47
+ // // precision 13
48
+ // { 5908.5052, 6007.2672, 6107.347, 6208.5794, 6311.2622, 6414.5514, 6519.3376, 6625.6952,6732.5988, 6841.3552, 6950.5972, 7061.3082, 7173.5646, 7287.109, 7401.8216, 7516.4344,7633.3802, 7751.2962, 7870.3784, 7990.292, 8110.79, 8233.4574, 8356.6036, 8482.2712,8607.7708, 8735.099, 8863.1858, 8993.4746, 9123.8496, 9255.6794, 9388.5448, 9522.7516,9657.3106, 9792.6094, 9930.5642, 10068.794, 10206.7256, 10347.81, 10490.3196, 10632.0778,10775.9916, 10920.4662, 11066.124, 11213.073, 11358.0362, 11508.1006, 11659.1716, 11808.7514,11959.4884, 12112.1314, 12265.037, 12420.3756, 12578.933, 12734.311, 12890.0006, 13047.2144,13207.3096, 13368.5144, 13528.024, 13689.847, 13852.7528, 14018.3168, 14180.5372, 14346.9668,14513.5074, 14677.867, 14846.2186, 15017.4186, 15184.9716, 15356.339, 15529.2972, 15697.3578,15871.8686, 16042.187, 16216.4094, 16389.4188, 16565.9126, 16742.3272, 16919.0042, 17094.7592,17273.965, 17451.8342, 17634.4254, 17810.5984, 17988.9242, 18171.051, 18354.7938, 18539.466,18721.0408, 18904.9972, 19081.867, 19271.9118, 19451.8694, 19637.9816, 19821.2922, 20013.1292,20199.3858, 20387.8726, 20572.9514, 20770.7764, 20955.1714, 21144.751, 21329.9952, 21520.709,21712.7016, 21906.3868, 22096.2626, 22286.0524, 22475.051, 22665.5098, 22862.8492, 23055.5294,23249.6138, 23437.848, 23636.273, 23826.093, 24020.3296, 24213.3896, 24411.7392, 24602.9614,24805.7952, 24998.1552, 25193.9588, 25389.0166, 25585.8392, 25780.6976, 25981.2728, 26175.977,26376.5252, 26570.1964, 26773.387, 26962.9812, 27163.0586, 27368.164, 27565.0534, 27758.7428,27961.1276, 28163.2324, 28362.3816, 28565.7668, 28758.644, 28956.9768, 29163.4722, 29354.7026,29561.1186, 29767.9948, 29959.9986, 30164.0492, 30366.9818, 30562.5338, 30762.9928,30976.1592, 31166.274, 31376.722, 31570.3734, 31770.809, 31974.8934, 32179.5286, 32387.5442,32582.3504, 32794.076, 32989.9528, 33191.842, 33392.4684, 33595.659, 33801.8672, 34000.3414,34200.0922, 34402.6792, 34610.0638, 34804.0084, 35011.13, 35218.669, 35418.6634, 35619.0792,35830.6534, 36028.4966, 36229.7902, 36438.6422, 36630.7764, 36833.3102, 37048.6728,37247.3916, 37453.5904, 37669.3614, 37854.5526, 38059.305, 38268.0936, 38470.2516, 38674.7064,38876.167, 39068.3794, 39281.9144, 39492.8566, 39684.8628, 39898.4108, 40093.1836, 40297.6858,40489.7086, 40717.2424, },
49
+ // // precision 14 (has 201 values n the annex, last one was trimmed)
50
+ // { 11817.475, 12015.0046, 12215.3792, 12417.7504, 12623.1814, 12830.0086, 13040.0072,13252.503, 13466.178, 13683.2738, 13902.0344, 14123.9798, 14347.394, 14573.7784, 14802.6894,15033.6824, 15266.9134, 15502.8624, 15741.4944, 15980.7956, 16223.8916, 16468.6316, 16715.733,16965.5726, 17217.204, 17470.666, 17727.8516, 17986.7886, 18247.6902, 18510.9632, 18775.304,19044.7486, 19314.4408, 19587.202, 19862.2576, 20135.924, 20417.0324, 20697.9788, 20979.6112,21265.0274, 21550.723, 21841.6906, 22132.162, 22428.1406, 22722.127, 23020.5606, 23319.7394,23620.4014, 23925.2728, 24226.9224, 24535.581, 24845.505, 25155.9618, 25470.3828, 25785.9702,26103.7764, 26420.4132, 26742.0186, 27062.8852, 27388.415, 27714.6024, 28042.296, 28365.4494,28701.1526, 29031.8008, 29364.2156, 29704.497, 30037.1458, 30380.111, 30723.8168, 31059.5114,31404.9498, 31751.6752, 32095.2686, 32444.7792, 32794.767, 33145.204, 33498.4226, 33847.6502,34209.006, 34560.849, 34919.4838, 35274.9778, 35635.1322, 35996.3266, 36359.1394, 36722.8266,37082.8516, 37447.7354, 37815.9606, 38191.0692, 38559.4106, 38924.8112, 39294.6726, 39663.973,40042.261, 40416.2036, 40779.2036, 41161.6436, 41540.9014, 41921.1998, 42294.7698, 42678.5264,43061.3464, 43432.375, 43818.432, 44198.6598, 44583.0138, 44970.4794, 45353.924, 45729.858,46118.2224, 46511.5724, 46900.7386, 47280.6964, 47668.1472, 48055.6796, 48446.9436,48838.7146, 49217.7296, 49613.7796, 50010.7508, 50410.0208, 50793.7886, 51190.2456,51583.1882, 51971.0796, 52376.5338, 52763.319, 53165.5534, 53556.5594, 53948.2702, 54346.352,54748.7914, 55138.577, 55543.4824, 55941.1748, 56333.7746, 56745.1552, 57142.7944, 57545.2236,57935.9956, 58348.5268, 58737.5474, 59158.5962, 59542.6896, 59958.8004, 60349.3788,60755.0212, 61147.6144, 61548.194, 61946.0696, 62348.6042, 62763.603, 63162.781, 63560.635,63974.3482, 64366.4908, 64771.5876, 65176.7346, 65597.3916, 65995.915, 66394.0384, 66822.9396,67203.6336, 67612.2032, 68019.0078, 68420.0388, 68821.22, 69235.8388, 69640.0724, 70055.155,70466.357, 70863.4266, 71276.2482, 71677.0306, 72080.2006, 72493.0214, 72893.5952, 73314.5856,73714.9852, 74125.3022, 74521.2122, 74933.6814, 75341.5904, 75743.0244, 76166.0278,76572.1322, 76973.1028, 77381.6284, 77800.6092, 78189.328, 78607.0962, 79012.2508, 79407.8358,79825.725, 80238.701, 80646.891, 81035.6436, 81460.0448,},
51
+ // // precision 15 (has 201 values n the annex, last one was trimmed)
52
+ // { 23635.0036, 24030.8034, 24431.4744, 24837.1524, 25246.7928, 25661.326, 26081.3532,26505.2806, 26933.9892, 27367.7098, 27805.318, 28248.799, 28696.4382, 29148.8244, 29605.5138,30066.8668, 30534.2344, 31006.32, 31480.778, 31962.2418, 32447.3324, 32938.0232, 33432.731,33930.728, 34433.9896, 34944.1402, 35457.5588, 35974.5958, 36497.3296, 37021.9096, 37554.326,38088.0826, 38628.8816, 39171.3192, 39723.2326, 40274.5554, 40832.3142, 41390.613, 41959.5908,42532.5466, 43102.0344, 43683.5072, 44266.694, 44851.2822, 45440.7862, 46038.0586, 46640.3164,47241.064, 47846.155, 48454.7396, 49076.9168, 49692.542, 50317.4778, 50939.65, 51572.5596,52210.2906, 52843.7396, 53481.3996, 54127.236, 54770.406, 55422.6598, 56078.7958, 56736.7174,57397.6784, 58064.5784, 58730.308, 59404.9784, 60077.0864, 60751.9158, 61444.1386, 62115.817,62808.7742, 63501.4774, 64187.5454, 64883.6622, 65582.7468, 66274.5318, 66976.9276,67688.7764, 68402.138, 69109.6274, 69822.9706, 70543.6108, 71265.5202, 71983.3848, 72708.4656,73433.384, 74158.4664, 74896.4868, 75620.9564, 76362.1434, 77098.3204, 77835.7662, 78582.6114,79323.9902, 80067.8658, 80814.9246, 81567.0136, 82310.8536, 83061.9952, 83821.4096,84580.8608, 85335.547, 86092.5802, 86851.6506, 87612.311, 88381.2016, 89146.3296, 89907.8974,90676.846, 91451.4152, 92224.5518, 92995.8686, 93763.5066, 94551.2796, 95315.1944, 96096.1806,96881.0918, 97665.679, 98442.68, 99229.3002, 100011.0994, 100790.6386, 101580.1564,102377.7484, 103152.1392, 103944.2712, 104730.216, 105528.6336, 106324.9398, 107117.6706,107890.3988, 108695.2266, 109485.238, 110294.7876, 111075.0958, 111878.0496, 112695.2864,113464.5486, 114270.0474, 115068.608, 115884.3626, 116673.2588, 117483.3716, 118275.097,119085.4092, 119879.2808, 120687.5868, 121499.9944, 122284.916, 123095.9254, 123912.5038,124709.0454, 125503.7182, 126323.259, 127138.9412, 127943.8294, 128755.646, 129556.5354,130375.3298, 131161.4734, 131971.1962, 132787.5458, 133588.1056, 134431.351, 135220.2906,136023.398, 136846.6558, 137667.0004, 138463.663, 139283.7154, 140074.6146, 140901.3072,141721.8548, 142543.2322, 143356.1096, 144173.7412, 144973.0948, 145794.3162, 146609.5714,147420.003, 148237.9784, 149050.5696, 149854.761, 150663.1966, 151494.0754, 152313.1416,153112.6902, 153935.7206, 154746.9262, 155559.547, 156401.9746, 157228.7036, 158008.7254,158820.75, 159646.9184, 160470.4458, 161279.5348, 162093.3114, 162918.542, },
53
+ // // precision 16
54
+ // { 47271, 48062.3584, 48862.7074, 49673.152, 50492.8416, 51322.9514, 52161.03, 53009.407,53867.6348, 54734.206, 55610.5144, 56496.2096, 57390.795, 58297.268, 59210.6448, 60134.665,61068.0248, 62010.4472, 62962.5204, 63923.5742, 64895.0194, 65876.4182, 66862.6136,67862.6968, 68868.8908, 69882.8544, 70911.271, 71944.0924, 72990.0326, 74040.692, 75100.6336,76174.7826, 77252.5998, 78340.2974, 79438.2572, 80545.4976, 81657.2796, 82784.6336, 83915.515,85059.7362, 86205.9368, 87364.4424, 88530.3358, 89707.3744, 90885.9638, 92080.197, 93275.5738,94479.391, 95695.918, 96919.2236, 98148.4602, 99382.3474, 100625.6974, 101878.0284,103141.6278, 104409.4588, 105686.2882, 106967.5402, 108261.6032, 109548.1578, 110852.0728,112162.231, 113479.0072, 114806.2626, 116137.9072, 117469.5048, 118813.5186, 120165.4876,121516.2556, 122875.766, 124250.5444, 125621.2222, 127003.2352, 128387.848, 129775.2644,131181.7776, 132577.3086, 133979.9458, 135394.1132, 136800.9078, 138233.217, 139668.5308,141085.212, 142535.2122, 143969.0684, 145420.2872, 146878.1542, 148332.7572, 149800.3202,151269.66, 152743.6104, 154213.0948, 155690.288, 157169.4246, 158672.1756, 160160.059,161650.6854, 163145.7772, 164645.6726, 166159.1952, 167682.1578, 169177.3328, 170700.0118,172228.8964, 173732.6664, 175265.5556, 176787.799, 178317.111, 179856.6914, 181400.865,182943.4612, 184486.742, 186033.4698, 187583.7886, 189148.1868, 190688.4526, 192250.1926,193810.9042, 195354.2972, 196938.7682, 198493.5898, 200079.2824, 201618.912, 203205.5492,204765.5798, 206356.1124, 207929.3064, 209498.7196, 211086.229, 212675.1324, 214256.7892,215826.2392, 217412.8474, 218995.6724, 220618.6038, 222207.1166, 223781.0364, 225387.4332,227005.7928, 228590.4336, 230217.8738, 231805.1054, 233408.9, 234995.3432, 236601.4956,238190.7904, 239817.2548, 241411.2832, 243002.4066, 244640.1884, 246255.3128, 247849.3508,249479.9734, 251106.8822, 252705.027, 254332.9242, 255935.129, 257526.9014, 259154.772,260777.625, 262390.253, 264004.4906, 265643.59, 267255.4076, 268873.426, 270470.7252,272106.4804, 273722.4456, 275337.794, 276945.7038, 278592.9154, 280204.3726, 281841.1606,283489.171, 285130.1716, 286735.3362, 288364.7164, 289961.1814, 291595.5524, 293285.683,294899.6668, 296499.3434, 298128.0462, 299761.8946, 301394.2424, 302997.6748, 304615.1478,306269.7724, 307886.114, 309543.1028, 311153.2862, 312782.8546, 314421.2008, 316033.2438,317692.9636, 319305.2648, 320948.7406, 322566.3364, 324228.4224, 325847.1542, },
55
+ // };
56
+
57
+ // float bias _data[13][200] = {
58
+ // // precision 4
59
+ // { 10, 9.717, 9.207, 8.7896, 8.2882, 7.8204, 7.3772, 6.9342, 6.5202, 6.161, 5.7722, 5.4636,5.0396, 4.6766, 4.3566, 4.0454, 3.7936, 3.4856, 3.2666, 2.9946, 2.766, 2.4692, 2.3638, 2.0764,1.7864, 1.7602, 1.4814, 1.433, 1.2926, 1.0664, 0.999600000000001, 0.7956, 0.5366,0.589399999999998, 0.573799999999999, 0.269799999999996, 0.368200000000002,0.0544000000000011, 0.234200000000001, 0.0108000000000033,-0.203400000000002,-0.0701999999999998,-0.129600000000003,-0.364199999999997,-0.480600000000003,-0.226999999999997,-0.322800000000001,-0.382599999999996,-0.511200000000002,-0.669600000000003,-0.749400000000001,-0.500399999999999,-0.617600000000003,-0.6922,-0.601599999999998,-0.416200000000003,-0.338200000000001,-0.782600000000002,-0.648600000000002,-1.1922,-1.0256,-1.2072,-1.1752,-0.919800000000002,-0.851799999999997,-1.086,-1.21899999999999,-0.819400000000002,-1.16759999999999,-1.14019999999999,-1.3754,-0.962400000000002,-0.6402,-0.940600000000003,-1.1554,-1.29859999999999,-1.607,-1.3292,-1.7606, },
60
+ // // precision 5
61
+ // { 22, 21.1194, 20.8208, 20.2318, 19.77, 19.2436, 18.7774, 18.2848, 17.8224, 17.3742,16.9336, 16.503, 16.0494, 15.6292, 15.2124, 14.798, 14.367, 13.9728, 13.5944, 13.217, 12.8438,12.3696, 12.0956, 11.7044, 11.324, 11.0668, 10.6698, 10.3644, 10.049, 9.6918, 9.4146, 9.082,8.687, 8.5398, 8.2462, 7.857, 7.6606, 7.4168, 7.1248, 6.9222, 6.6804, 6.447, 6.3454, 5.9594,5.7636, 5.5776, 5.331, 5.19, 4.9676, 4.7564, 4.5314, 4.4442, 4.3708, 3.9774, 3.9624, 3.8796,3.755, 3.472, 3.2076, 3.1024, 2.8908, 2.7338, 2.7728, 2.629, 2.413, 2.3266, 2.1524, 2.2642,2.1806, 2.0566, 1.9192, 1.7598, 1.3516, 1.5802, 1.43859999999999, 1.49160000000001, 1.1524,1.1892, 0.841399999999993, 0.879800000000003, 0.837599999999995, 0.469800000000006,0.765600000000006, 0.331000000000003, 0.591399999999993, 0.601200000000006, 0.701599999999999,0.558199999999999, 0.339399999999998, 0.354399999999998, 0.491200000000006, 0.308000000000007,0.355199999999996,-0.0254000000000048, 0.205200000000005,-0.272999999999996,0.132199999999997, 0.394400000000005,-0.241200000000006, 0.242000000000004,0.191400000000002, 0.253799999999998,-0.122399999999999,-0.370800000000003,0.193200000000004,-0.0848000000000013, 0.0867999999999967,-0.327200000000005,-0.285600000000002, 0.311400000000006,-0.128399999999999,-0.754999999999995,-0.209199999999996,-0.293599999999998,-0.364000000000004,-0.253600000000006,-0.821200000000005,-0.253600000000006,-0.510400000000004,-0.383399999999995,-0.491799999999998,-0.220200000000006,-0.0972000000000008,-0.557400000000001,-0.114599999999996,-0.295000000000002,-0.534800000000004, 0.346399999999988,-0.65379999999999, 0.0398000000000138, 0.0341999999999985,-0.995800000000003,-0.523400000000009,-0.489000000000004,-0.274799999999999,-0.574999999999989,-0.482799999999997, 0.0571999999999946,-0.330600000000004,-0.628800000000012,-0.140199999999993,-0.540600000000012,-0.445999999999998,-0.599400000000003,-0.262599999999992, 0.163399999999996,-0.100599999999986,-0.39500000000001,-1.06960000000001,-0.836399999999998,-0.753199999999993,-0.412399999999991,-0.790400000000005,-0.29679999999999,-0.28540000000001,-0.193000000000012,-0.0772000000000048,-0.962799999999987,-0.414800000000014, },
62
+ // // precision 6
63
+ // { 45, 44.1902, 43.271, 42.8358, 41.8142, 41.2854, 40.317, 39.354, 38.8924, 37.9436, 37.4596,36.5262, 35.6248, 35.1574, 34.2822, 33.837, 32.9636, 32.074, 31.7042, 30.7976, 30.4772,29.6564, 28.7942, 28.5004, 27.686, 27.291, 26.5672, 25.8556, 25.4982, 24.8204, 24.4252,23.7744, 23.0786, 22.8344, 22.0294, 21.8098, 21.0794, 20.5732, 20.1878, 19.5648, 19.2902,18.6784, 18.3352, 17.8946, 17.3712, 17.0852, 16.499, 16.2686, 15.6844, 15.2234, 14.9732,14.3356, 14.2286, 13.7262, 13.3284, 13.1048, 12.5962, 12.3562, 12.1272, 11.4184, 11.4974,11.0822, 10.856, 10.48, 10.2834, 10.0208, 9.637, 9.51739999999999, 9.05759999999999,8.74760000000001, 8.42700000000001, 8.1326, 8.2372, 8.2788, 7.6776, 7.79259999999999, 7.1952,6.9564, 6.6454, 6.87, 6.5428, 6.19999999999999, 6.02940000000001, 5.62780000000001, 5.6782,5.792, 5.35159999999999, 5.28319999999999, 5.0394, 5.07480000000001, 4.49119999999999,4.84899999999999, 4.696, 4.54040000000001, 4.07300000000001, 4.37139999999999, 3.7216, 3.7328,3.42080000000001, 3.41839999999999, 3.94239999999999, 3.27719999999999, 3.411,3.13079999999999, 2.76900000000001, 2.92580000000001, 2.68279999999999, 2.75020000000001,2.70599999999999, 2.3886, 3.01859999999999, 2.45179999999999, 2.92699999999999,2.41720000000001, 2.41139999999999, 2.03299999999999, 2.51240000000001, 2.5564,2.60079999999999, 2.41720000000001, 1.80439999999999, 1.99700000000001, 2.45480000000001,1.8948, 2.2346, 2.30860000000001, 2.15479999999999, 1.88419999999999, 1.6508,0.677199999999999, 1.72540000000001, 1.4752, 1.72280000000001, 1.66139999999999,1.16759999999999, 1.79300000000001, 1.00059999999999, 0.905200000000008, 0.659999999999997,1.55879999999999, 1.1636, 0.688199999999995, 0.712600000000009, 0.450199999999995, 1.1978,0.975599999999986, 0.165400000000005, 1.727, 1.19739999999999,-0.252600000000001,1.13460000000001, 1.3048, 1.19479999999999, 0.313400000000001, 0.878999999999991,1.12039999999999, 0.853000000000009, 1.67920000000001, 0.856999999999999, 0.448599999999999,1.2362, 0.953399999999988, 1.02859999999998, 0.563199999999995, 0.663000000000011,0.723000000000013, 0.756599999999992, 0.256599999999992,-0.837600000000009,0.620000000000005, 0.821599999999989, 0.216600000000028, 0.205600000000004, 0.220199999999977,0.372599999999977, 0.334400000000016, 0.928400000000011, 0.972800000000007, 0.192400000000021,0.487199999999973,-0.413000000000011, 0.807000000000016, 0.120600000000024,0.769000000000005, 0.870799999999974, 0.66500000000002, 0.118200000000002, 0.401200000000017,0.635199999999998, 0.135400000000004, 0.175599999999974, 1.16059999999999, 0.34620000000001,0.521400000000028,-0.586599999999976,-1.16480000000001, 0.968399999999974,0.836999999999989, 0.779600000000016, 0.985799999999983, },
64
+ // // precision 7
65
+ // { 91, 89.4934, 87.9758, 86.4574, 84.9718, 83.4954, 81.5302, 80.0756, 78.6374, 77.1782,75.7888, 73.9522, 72.592, 71.2532, 69.9086, 68.5938, 66.9474, 65.6796, 64.4394, 63.2176,61.9768, 60.4214, 59.2528, 58.0102, 56.8658, 55.7278, 54.3044, 53.1316, 52.093, 51.0032,49.9092, 48.6306, 47.5294, 46.5756, 45.6508, 44.662, 43.552, 42.3724, 41.617, 40.5754,39.7872, 38.8444, 37.7988, 36.8606, 36.2118, 35.3566, 34.4476, 33.5882, 32.6816, 32.0824,31.0258, 30.6048, 29.4436, 28.7274, 27.957, 27.147, 26.4364, 25.7592, 25.3386, 24.781,23.8028, 23.656, 22.6544, 21.996, 21.4718, 21.1544, 20.6098, 19.5956, 19.0616, 18.5758,18.4878, 17.5244, 17.2146, 16.724, 15.8722, 15.5198, 15.0414, 14.941, 14.9048, 13.87, 13.4304,13.028, 12.4708, 12.37, 12.0624, 11.4668, 11.5532, 11.4352, 11.2564, 10.2744, 10.2118,9.74720000000002, 10.1456, 9.2928, 8.75040000000001, 8.55279999999999, 8.97899999999998,8.21019999999999, 8.18340000000001, 7.3494, 7.32499999999999, 7.66140000000001,6.90300000000002, 7.25439999999998, 6.9042, 7.21499999999997, 6.28640000000001,6.08139999999997, 6.6764, 6.30099999999999, 5.13900000000001, 5.65800000000002,5.17320000000001, 4.59019999999998, 4.9538, 5.08280000000002, 4.92200000000003,4.99020000000002, 4.7328, 5.4538, 4.11360000000002, 4.22340000000003, 4.08780000000002,3.70800000000003, 4.15559999999999, 4.18520000000001, 3.63720000000001, 3.68220000000002,3.77960000000002, 3.6078, 2.49160000000001, 3.13099999999997, 2.5376, 3.19880000000001,3.21100000000001, 2.4502, 3.52820000000003, 2.91199999999998, 3.04480000000001, 2.7432,2.85239999999999, 2.79880000000003, 2.78579999999999, 1.88679999999999, 2.98860000000002,2.50639999999999, 1.91239999999999, 2.66160000000002, 2.46820000000002, 1.58199999999999,1.30399999999997, 2.27379999999999, 2.68939999999998, 1.32900000000001, 3.10599999999999,1.69080000000002, 2.13740000000001, 2.53219999999999, 1.88479999999998, 1.33240000000001,1.45119999999997, 1.17899999999997, 2.44119999999998, 1.60659999999996, 2.16700000000003,0.77940000000001, 2.37900000000002, 2.06700000000001, 1.46000000000004, 2.91160000000002,1.69200000000001, 0.954600000000028, 2.49300000000005, 2.2722, 1.33500000000004,2.44899999999996, 1.20140000000004, 3.07380000000001, 2.09739999999999, 2.85640000000001,2.29960000000005, 2.40899999999999, 1.97040000000004, 0.809799999999996, 1.65279999999996,2.59979999999996, 0.95799999999997, 2.06799999999998, 2.32780000000002, 4.20159999999998,1.96320000000003, 1.86400000000003, 1.42999999999995, 3.77940000000001, 1.27200000000005,1.86440000000005, 2.20600000000002, 3.21900000000005, 1.5154, 2.61019999999996, },
66
+ // // precision 8
67
+ // { 183.2152, 180.2454, 177.2096, 173.6652, 170.6312, 167.6822, 164.249, 161.3296, 158.0038,155.2074, 152.4612, 149.27, 146.5178, 143.4412, 140.8032, 138.1634, 135.1688, 132.6074,129.6946, 127.2664, 124.8228, 122.0432, 119.6824, 116.9464, 114.6268, 112.2626, 109.8376,107.4034, 104.8956, 102.8522, 100.7638, 98.3552, 96.3556, 93.7526, 91.9292, 89.8954, 87.8198,85.7668, 83.298, 81.6688, 79.9466, 77.9746, 76.1672, 74.3474, 72.3028, 70.8912, 69.114,67.4646, 65.9744, 64.4092, 62.6022, 60.843, 59.5684, 58.1652, 56.5426, 55.4152, 53.5388,52.3592, 51.1366, 49.486, 48.3918, 46.5076, 45.509, 44.3834, 43.3498, 42.0668, 40.7346,40.1228, 38.4528, 37.7, 36.644, 36.0518, 34.5774, 33.9068, 32.432, 32.1666, 30.434, 29.6644,28.4894, 27.6312, 26.3804, 26.292, 25.5496000000001, 25.0234, 24.8206, 22.6146, 22.4188,22.117, 20.6762, 20.6576, 19.7864, 19.509, 18.5334, 17.9204, 17.772, 16.2924, 16.8654,15.1836, 15.745, 15.1316, 15.0386, 14.0136, 13.6342, 12.6196, 12.1866, 12.4281999999999,11.3324, 10.4794000000001, 11.5038, 10.129, 9.52800000000002, 10.3203999999999,9.46299999999997, 9.79280000000006, 9.12300000000005, 8.74180000000001, 9.2192,7.51020000000005, 7.60659999999996, 7.01840000000004, 7.22239999999999, 7.40139999999997,6.76179999999999, 7.14359999999999, 5.65060000000005, 5.63779999999997, 5.76599999999996,6.75139999999999, 5.57759999999996, 3.73220000000003, 5.8048, 5.63019999999995,4.93359999999996, 3.47979999999995, 4.33879999999999, 3.98940000000005, 3.81960000000004,3.31359999999995, 3.23080000000004, 3.4588, 3.08159999999998, 3.4076, 3.00639999999999,2.38779999999997, 2.61900000000003, 1.99800000000005, 3.34820000000002, 2.95060000000001,0.990999999999985, 2.11440000000005, 2.20299999999997, 2.82219999999995, 2.73239999999998,2.7826, 3.76660000000004, 2.26480000000004, 2.31280000000004, 2.40819999999997,2.75360000000001, 3.33759999999995, 2.71559999999999, 1.7478000000001, 1.42920000000004,2.39300000000003, 2.22779999999989, 2.34339999999997, 0.87259999999992, 3.88400000000001,1.80600000000004, 1.91759999999999, 1.16779999999994, 1.50320000000011, 2.52500000000009,0.226400000000012, 2.31500000000005, 0.930000000000064, 1.25199999999995, 2.14959999999996,0.0407999999999902, 2.5447999999999, 1.32960000000003, 0.197400000000016, 2.52620000000002,3.33279999999991,-1.34300000000007, 0.422199999999975, 0.917200000000093, 1.12920000000008,1.46060000000011, 1.45779999999991, 2.8728000000001, 3.33359999999993,-1.34079999999994,1.57680000000005, 0.363000000000056, 1.40740000000005, 0.656600000000026, 0.801400000000058,-0.454600000000028, 1.51919999999996, },
68
+ // // precision 9
69
+ // { 368, 361.8294, 355.2452, 348.6698, 342.1464, 336.2024, 329.8782, 323.6598, 317.462,311.2826, 305.7102, 299.7416, 293.9366, 288.1046, 282.285, 277.0668, 271.306, 265.8448,260.301, 254.9886, 250.2422, 244.8138, 239.7074, 234.7428, 229.8402, 225.1664, 220.3534,215.594, 210.6886, 205.7876, 201.65, 197.228, 192.8036, 188.1666, 184.0818, 180.0824,176.2574, 172.302, 168.1644, 164.0056, 160.3802, 156.7192, 152.5234, 149.2084, 145.831,142.485, 139.1112, 135.4764, 131.76, 129.3368, 126.5538, 122.5058, 119.2646, 116.5902,113.3818, 110.8998, 107.9532, 105.2062, 102.2798, 99.4728, 96.9582, 94.3292, 92.171,89.7809999999999, 87.5716, 84.7048, 82.5322, 79.875, 78.3972, 75.3464, 73.7274, 71.2834,70.1444, 68.4263999999999, 66.0166, 64.018, 62.0437999999999, 60.3399999999999, 58.6856,57.9836, 55.0311999999999, 54.6769999999999, 52.3188, 51.4846, 49.4423999999999, 47.739,46.1487999999999, 44.9202, 43.4059999999999, 42.5342000000001, 41.2834, 38.8954000000001,38.3286000000001, 36.2146, 36.6684, 35.9946, 33.123, 33.4338, 31.7378000000001, 29.076,28.9692, 27.4964, 27.0998, 25.9864, 26.7754, 24.3208, 23.4838, 22.7388000000001,24.0758000000001, 21.9097999999999, 20.9728, 19.9228000000001, 19.9292, 16.617, 17.05,18.2996000000001, 15.6128000000001, 15.7392, 14.5174, 13.6322, 12.2583999999999,13.3766000000001, 11.423, 13.1232, 9.51639999999998, 10.5938000000001, 9.59719999999993,8.12220000000002, 9.76739999999995, 7.50440000000003, 7.56999999999994, 6.70440000000008,6.41419999999994, 6.71019999999999, 5.60940000000005, 4.65219999999999, 6.84099999999989,3.4072000000001, 3.97859999999991, 3.32760000000007, 5.52160000000003, 3.31860000000006,2.06940000000009, 4.35400000000004, 1.57500000000005, 0.280799999999999, 2.12879999999996,-0.214799999999968,-0.0378000000000611,-0.658200000000079, 0.654800000000023,-0.0697999999999865, 0.858400000000074,-2.52700000000004,-2.1751999999999,-3.35539999999992,-1.04019999999991,-0.651000000000067,-2.14439999999991,-1.96659999999997,-3.97939999999994,-0.604400000000169,-3.08260000000018,-3.39159999999993,-5.29640000000018,-5.38920000000007,-5.08759999999984,-5.23720000000003,-3.15779999999995,-4.97879999999986,-4.89899999999989,-5.94799999999987,-5.68060000000014,-6.67180000000008,-4.70499999999993,-4.6579999999999,-4.4362000000001,-4.32139999999981,-5.18859999999995,-6.48399999999992,-5.1260000000002,-4.4032000000002,-6.13500000000022,-4.16719999999987,-4.15039999999999,-7.45600000000013,-7.24080000000004,-5.80420000000004,-8.6561999999999,-6.99940000000015,-10.5473999999999,-4.69900000000007,-7.48880000000008,-7.27779999999984,-6.66879999999992,-5.80819999999994,-9.83179999999993,-7.34139999999979,-6.80999999999995,-6.29719999999998,-6.23199999999997, },
70
+ // // precision 10
71
+ // { 737.1256, 724.4234, 711.1064, 698.4732, 685.4636, 673.0644, 660.488, 647.9654, 636.0832,623.7864, 612.1992, 600.2176, 588.5228, 577.1716, 565.7752, 554.899, 543.6126, 532.6492,521.9474, 511.5214, 501.1064, 490.6364, 480.2468, 470.4588, 460.3832, 451.0584, 440.8606,431.3868, 422.5062, 413.1862, 404.463, 395.339, 386.1936, 378.1292, 369.1854, 361.2908,353.3324, 344.8518, 337.5204, 329.4854, 321.9318, 314.552, 306.4658, 299.4256, 292.849,286.152, 278.8956, 271.8792, 265.118, 258.62, 252.5132, 245.9322, 239.7726, 233.6086,227.5332, 222.5918, 216.4294, 210.7662, 205.4106, 199.7338, 194.9012, 188.4486, 183.1556,178.6338, 173.7312, 169.6264, 163.9526, 159.8742, 155.8326, 151.1966, 147.5594, 143.07,140.037, 134.1804, 131.071, 127.4884, 124.0848, 120.2944, 117.333, 112.9626, 110.2902,107.0814, 103.0334, 99.4832000000001, 96.3899999999999, 93.7202000000002, 90.1714000000002,87.2357999999999, 85.9346, 82.8910000000001, 80.0264000000002, 78.3834000000002,75.1543999999999, 73.8683999999998, 70.9895999999999, 69.4367999999999, 64.8701999999998,65.0408000000002, 61.6738, 59.5207999999998, 57.0158000000001, 54.2302, 53.0962,50.4985999999999, 52.2588000000001, 47.3914, 45.6244000000002, 42.8377999999998, 43.0072,40.6516000000001, 40.2453999999998, 35.2136, 36.4546, 33.7849999999999, 33.2294000000002,32.4679999999998, 30.8670000000002, 28.6507999999999, 28.9099999999999, 27.5983999999999,26.1619999999998, 24.5563999999999, 23.2328000000002, 21.9484000000002, 21.5902000000001,21.3346000000001, 17.7031999999999, 20.6111999999998, 19.5545999999999, 15.7375999999999,17.0720000000001, 16.9517999999998, 15.326, 13.1817999999998, 14.6925999999999,13.0859999999998, 13.2754, 10.8697999999999, 11.248, 7.3768, 4.72339999999986,7.97899999999981, 8.7503999999999, 7.68119999999999, 9.7199999999998, 7.73919999999998,5.6224000000002, 7.44560000000001, 6.6601999999998, 5.9058, 4.00199999999995,4.51699999999983, 4.68240000000014, 3.86220000000003, 5.13639999999987, 5.98500000000013,2.47719999999981, 2.61999999999989, 1.62800000000016, 4.65000000000009, 0.225599999999758,0.831000000000131,-0.359400000000278, 1.27599999999984,-2.92559999999958,-0.0303999999996449, 2.37079999999969,-2.0033999999996, 0.804600000000391, 0.30199999999968,1.1247999999996,-2.6880000000001, 0.0321999999996478,-1.18099999999959,-3.9402,-1.47940000000017,-0.188400000000001,-2.10720000000038,-2.04159999999956,-3.12880000000041,-4.16160000000036,-0.612799999999879,-3.48719999999958,-8.17900000000009,-5.37780000000021,-4.01379999999972,-5.58259999999973,-7.66799999999967,-5.69520000000011,-1.1247999999996,-5.58520000000044,-4.64840000000004,-11.6468000000004,-7.97519999999986,-5.78300000000036,-5.73719999999958,-8.04560000000038,-7.67420000000038,-10.6328000000003,-9.81720000000041, },
72
+ // // precision 11
73
+ // { 1476, 1449.6014, 1423.5802, 1397.7942, 1372.3042, 1347.2062, 1321.8402, 1297.2292,1272.9462, 1248.9926, 1225.3026, 1201.4252, 1178.0578, 1155.6092, 1132.626, 1110.5568,1088.527, 1066.5154, 1045.1874, 1024.3878, 1003.37, 982.1972, 962.5728, 942.1012, 922.9668,903.292, 884.0772, 864.8578, 846.6562, 828.041, 809.714, 792.3112, 775.1806, 757.9854,740.656, 724.346, 707.5154, 691.8378, 675.7448, 659.6722, 645.5722, 630.1462, 614.4124,600.8728, 585.898, 572.408, 558.4926, 544.4938, 531.6776, 517.282, 505.7704, 493.1012,480.7388, 467.6876, 456.1872, 445.5048, 433.0214, 420.806, 411.409, 400.4144, 389.4294,379.2286, 369.651, 360.6156, 350.337, 342.083, 332.1538, 322.5094, 315.01, 305.6686, 298.1678,287.8116, 280.9978, 271.9204, 265.3286, 257.5706, 249.6014, 242.544, 235.5976, 229.583,220.9438, 214.672, 208.2786, 201.8628, 195.1834, 191.505, 186.1816, 178.5188, 172.2294,167.8908, 161.0194, 158.052, 151.4588, 148.1596, 143.4344, 138.5238, 133.13, 127.6374,124.8162, 118.7894, 117.3984, 114.6078, 109.0858, 105.1036, 103.6258, 98.6018000000004,95.7618000000002, 93.5821999999998, 88.5900000000001, 86.9992000000002, 82.8800000000001,80.4539999999997, 74.6981999999998, 74.3644000000004, 73.2914000000001, 65.5709999999999,66.9232000000002, 65.1913999999997, 62.5882000000001, 61.5702000000001, 55.7035999999998,56.1764000000003, 52.7596000000003, 53.0302000000001, 49.0609999999997, 48.4694, 44.933,46.0474000000004, 44.7165999999997, 41.9416000000001, 39.9207999999999, 35.6328000000003,35.5276000000003, 33.1934000000001, 33.2371999999996, 33.3864000000003, 33.9228000000003,30.2371999999996, 29.1373999999996, 25.2272000000003, 24.2942000000003, 19.8338000000003,18.9005999999999, 23.0907999999999, 21.8544000000002, 19.5176000000001, 15.4147999999996,16.9314000000004, 18.6737999999996, 12.9877999999999, 14.3688000000002, 12.0447999999997,15.5219999999999, 12.5299999999997, 14.5940000000001, 14.3131999999996, 9.45499999999993,12.9441999999999, 3.91139999999996, 13.1373999999996, 5.44720000000052, 9.82779999999912,7.87279999999919, 3.67760000000089, 5.46980000000076, 5.55099999999948, 5.65979999999945,3.89439999999922, 3.1275999999998, 5.65140000000065, 6.3062000000009, 3.90799999999945,1.87060000000019, 5.17020000000048, 2.46680000000015, 0.770000000000437,-3.72340000000077,1.16400000000067, 8.05340000000069, 0.135399999999208, 2.15940000000046, 0.766999999999825,1.0594000000001, 3.15500000000065,-0.287399999999252, 2.37219999999979,-2.86620000000039,-1.63199999999961,-2.22979999999916,-0.15519999999924,-1.46039999999994,-0.262199999999211,-2.34460000000036,-2.8078000000005,-3.22179999999935,-8.42200000000048,-9.43740000000071, 0.161799999999857,-10.4755999999998,-5.60159999999996,-10.0823999999993,},
74
+ // // precision 12
75
+ // { 2953, 2900.4782, 2848.3568, 2796.3666, 2745.324, 2694.9598, 2644.648, 2595.539, 2546.1474,2498.2576, 2450.8376, 2403.6076, 2357.451, 2311.38, 2266.4104, 2221.5638, 2176.9676, 2134.193,2090.838, 2048.8548, 2007.018, 1966.1742, 1925.4482, 1885.1294, 1846.4776, 1807.4044,1768.8724, 1731.3732, 1693.4304, 1657.5326, 1621.949, 1586.5532, 1551.7256, 1517.6182,1483.5186, 1450.4528, 1417.865, 1385.7164, 1352.6828, 1322.6708, 1291.8312, 1260.9036,1231.476, 1201.8652, 1173.6718, 1145.757, 1119.2072, 1092.2828, 1065.0434, 1038.6264,1014.3192, 988.5746, 965.0816, 940.1176, 917.9796, 894.5576, 871.1858, 849.9144, 827.1142,805.0818, 783.9664, 763.9096, 742.0816, 724.3962, 706.3454, 688.018, 667.4214, 650.3106,633.0686, 613.8094, 597.818, 581.4248, 563.834, 547.363, 531.5066, 520.455400000001,505.583199999999, 488.366, 476.480799999999, 459.7682, 450.0522, 434.328799999999,423.952799999999, 408.727000000001, 399.079400000001, 387.252200000001, 373.987999999999,360.852000000001, 351.6394, 339.642, 330.902400000001, 322.661599999999, 311.662200000001,301.3254, 291.7484, 279.939200000001, 276.7508, 263.215200000001, 254.811400000001, 245.5494,242.306399999999, 234.8734, 223.787200000001, 217.7156, 212.0196, 200.793, 195.9748, 189.0702,182.449199999999, 177.2772, 170.2336, 164.741, 158.613600000001, 155.311, 147.5964, 142.837,137.3724, 132.0162, 130.0424, 121.9804, 120.451800000001, 114.8968, 111.585999999999,105.933199999999, 101.705, 98.5141999999996, 95.0488000000005, 89.7880000000005,91.4750000000004, 83.7764000000006, 80.9698000000008, 72.8574000000008, 73.1615999999995,67.5838000000003, 62.6263999999992, 63.2638000000006, 66.0977999999996, 52.0843999999997,58.9956000000002, 47.0912000000008, 46.4956000000002, 48.4383999999991, 47.1082000000006,43.2392, 37.2759999999998, 40.0283999999992, 35.1864000000005, 35.8595999999998, 32.0998,28.027, 23.6694000000007, 33.8266000000003, 26.3736000000008, 27.2008000000005,21.3245999999999, 26.4115999999995, 23.4521999999997, 19.5013999999992, 19.8513999999996,10.7492000000002, 18.6424000000006, 13.1265999999996, 18.2436000000016, 6.71860000000015,3.39459999999963, 6.33759999999893, 7.76719999999841, 0.813999999998487, 3.82819999999992,0.826199999999517, 8.07440000000133,-1.59080000000176, 5.01780000000144, 0.455399999998917,-0.24199999999837, 0.174800000000687,-9.07640000000174,-4.20160000000033,-3.77520000000004,-4.75179999999818,-5.3724000000002,-8.90680000000066,-6.10239999999976,-5.74120000000039,-9.95339999999851,-3.86339999999836,-13.7304000000004,-16.2710000000006,-7.51359999999841,-3.30679999999847,-13.1339999999982,-10.0551999999989,-6.72019999999975,-8.59660000000076,-10.9307999999983,-1.8775999999998,-4.82259999999951,-13.7788,-21.6470000000008,-10.6735999999983,-15.7799999999988, },
76
+ // // precision 13
77
+ // { 5907.5052, 5802.2672, 5697.347, 5593.5794, 5491.2622, 5390.5514, 5290.3376, 5191.6952,5093.5988, 4997.3552, 4902.5972, 4808.3082, 4715.5646, 4624.109, 4533.8216, 4444.4344,4356.3802, 4269.2962, 4183.3784, 4098.292, 4014.79, 3932.4574, 3850.6036, 3771.2712,3691.7708, 3615.099, 3538.1858, 3463.4746, 3388.8496, 3315.6794, 3244.5448, 3173.7516,3103.3106, 3033.6094, 2966.5642, 2900.794, 2833.7256, 2769.81, 2707.3196, 2644.0778,2583.9916, 2523.4662, 2464.124, 2406.073, 2347.0362, 2292.1006, 2238.1716, 2182.7514,2128.4884, 2077.1314, 2025.037, 1975.3756, 1928.933, 1879.311, 1831.0006, 1783.2144,1738.3096, 1694.5144, 1649.024, 1606.847, 1564.7528, 1525.3168, 1482.5372, 1443.9668,1406.5074, 1365.867, 1329.2186, 1295.4186, 1257.9716, 1225.339, 1193.2972, 1156.3578,1125.8686, 1091.187, 1061.4094, 1029.4188, 1000.9126, 972.3272, 944.004199999999, 915.7592,889.965, 862.834200000001, 840.4254, 812.598399999999, 785.924200000001, 763.050999999999,741.793799999999, 721.466, 699.040799999999, 677.997200000002, 649.866999999998,634.911800000002, 609.8694, 591.981599999999, 570.2922, 557.129199999999, 538.3858,521.872599999999, 502.951400000002, 495.776399999999, 475.171399999999, 459.751,439.995200000001, 426.708999999999, 413.7016, 402.3868, 387.262599999998, 372.0524,357.050999999999, 342.5098, 334.849200000001, 322.529399999999, 311.613799999999,295.848000000002, 289.273000000001, 274.093000000001, 263.329600000001, 251.389599999999,245.7392, 231.9614, 229.7952, 217.155200000001, 208.9588, 199.016599999999, 190.839199999999,180.6976, 176.272799999999, 166.976999999999, 162.5252, 151.196400000001, 149.386999999999,133.981199999998, 130.0586, 130.164000000001, 122.053400000001, 110.7428, 108.1276,106.232400000001, 100.381600000001, 98.7668000000012, 86.6440000000002, 79.9768000000004,82.4722000000002, 68.7026000000005, 70.1186000000016, 71.9948000000004, 58.998599999999,59.0492000000013, 56.9818000000014, 47.5338000000011, 42.9928, 51.1591999999982,37.2740000000013, 42.7220000000016, 31.3734000000004, 26.8090000000011, 25.8934000000008,26.5286000000015, 29.5442000000003, 19.3503999999994, 26.0760000000009, 17.9527999999991,14.8419999999969, 10.4683999999979, 8.65899999999965, 9.86720000000059, 4.34139999999752,-0.907800000000861,-3.32080000000133,-0.936199999996461,-11.9916000000012,-8.87000000000262,-6.33099999999831,-11.3366000000024,-15.9207999999999,-15.5034000000014,-19.2097999999969,-15.357799999998,-28.2235999999975,-19.3271999999997,-25.6083999999973,-24.409599999999,-13.6385999999984,-32.6949999999997,-28.9063999999998,-31.7483999999968,-32.2935999999972,-47.620600000002,-39.0855999999985,-33.1434000000008,-46.1371999999974,-9.34659999999712,-30.6898000000001,-33.4473999999973,-35.8329999999987,-37.5892000000022,-46.8164000000033,-47.3142000000007,-60.2914000000019,-37.7575999999972, },
78
+ // // precision 14
79
+ // { 11816.475, 11605.0046, 11395.3792, 11188.7504, 10984.1814, 10782.0086, 10582.0072,10384.503, 10189.178, 9996.2738, 9806.0344, 9617.9798, 9431.394, 9248.7784, 9067.6894,8889.6824, 8712.9134, 8538.8624, 8368.4944, 8197.7956, 8031.8916, 7866.6316, 7703.733,7544.5726, 7386.204, 7230.666, 7077.8516, 6926.7886, 6778.6902, 6631.9632, 6487.304,6346.7486, 6206.4408, 6070.202, 5935.2576, 5799.924, 5671.0324, 5541.9788, 5414.6112,5290.0274, 5166.723, 5047.6906, 4929.162, 4815.1406, 4699.127, 4588.5606, 4477.7394,4369.4014, 4264.2728, 4155.9224, 4055.581, 3955.505, 3856.9618, 3761.3828, 3666.9702,3575.7764, 3482.4132, 3395.0186, 3305.8852, 3221.415, 3138.6024, 3056.296, 2970.4494,2896.1526, 2816.8008, 2740.2156, 2670.497, 2594.1458, 2527.111, 2460.8168, 2387.5114,2322.9498, 2260.6752, 2194.2686, 2133.7792, 2074.767, 2015.204, 1959.4226, 1898.6502,1850.006, 1792.849, 1741.4838, 1687.9778, 1638.1322, 1589.3266, 1543.1394, 1496.8266,1447.8516, 1402.7354, 1361.9606, 1327.0692, 1285.4106, 1241.8112, 1201.6726, 1161.973,1130.261, 1094.2036, 1048.2036, 1020.6436, 990.901400000002, 961.199800000002,924.769800000002, 899.526400000002, 872.346400000002, 834.375, 810.432000000001,780.659800000001, 756.013800000001, 733.479399999997, 707.923999999999, 673.858,652.222399999999, 636.572399999997, 615.738599999997, 586.696400000001, 564.147199999999,541.679600000003, 523.943599999999, 505.714599999999, 475.729599999999, 461.779600000002,449.750800000002, 439.020799999998, 412.7886, 400.245600000002, 383.188199999997,362.079599999997, 357.533799999997, 334.319000000003, 327.553399999997, 308.559399999998,291.270199999999, 279.351999999999, 271.791400000002, 252.576999999997, 247.482400000001,236.174800000001, 218.774599999997, 220.155200000001, 208.794399999999, 201.223599999998,182.995600000002, 185.5268, 164.547400000003, 176.5962, 150.689599999998, 157.8004,138.378799999999, 134.021200000003, 117.614399999999, 108.194000000003, 97.0696000000025,89.6042000000016, 95.6030000000028, 84.7810000000027, 72.635000000002, 77.3482000000004,59.4907999999996, 55.5875999999989, 50.7346000000034, 61.3916000000027, 50.9149999999936,39.0384000000049, 58.9395999999979, 29.633600000001, 28.2032000000036, 26.0078000000067,17.0387999999948, 9.22000000000116, 13.8387999999977, 8.07240000000456, 14.1549999999988,15.3570000000036, 3.42660000000615, 6.24820000000182,-2.96940000000177,-8.79940000000352,-5.97860000000219,-14.4048000000039,-3.4143999999942,-13.0148000000045,-11.6977999999945,-25.7878000000055,-22.3185999999987,-24.409599999999,-31.9756000000052,-18.9722000000038,-22.8678000000073,-30.8972000000067,-32.3715999999986,-22.3907999999938,-43.6720000000059,-35.9038,-39.7492000000057,-54.1641999999993,-45.2749999999942,-42.2989999999991,-44.1089999999967,-64.3564000000042,-49.9551999999967,-42.6116000000038, },
80
+ // // precision 15
81
+ // { 23634.0036, 23210.8034, 22792.4744, 22379.1524, 21969.7928, 21565.326, 21165.3532,20770.2806, 20379.9892, 19994.7098, 19613.318, 19236.799, 18865.4382, 18498.8244, 18136.5138,17778.8668, 17426.2344, 17079.32, 16734.778, 16397.2418, 16063.3324, 15734.0232, 15409.731,15088.728, 14772.9896, 14464.1402, 14157.5588, 13855.5958, 13559.3296, 13264.9096, 12978.326,12692.0826, 12413.8816, 12137.3192, 11870.2326, 11602.5554, 11340.3142, 11079.613, 10829.5908,10583.5466, 10334.0344, 10095.5072, 9859.694, 9625.2822, 9395.7862, 9174.0586, 8957.3164,8738.064, 8524.155, 8313.7396, 8116.9168, 7913.542, 7718.4778, 7521.65, 7335.5596, 7154.2906,6968.7396, 6786.3996, 6613.236, 6437.406, 6270.6598, 6107.7958, 5945.7174, 5787.6784,5635.5784, 5482.308, 5337.9784, 5190.0864, 5045.9158, 4919.1386, 4771.817, 4645.7742,4518.4774, 4385.5454, 4262.6622, 4142.74679999999, 4015.5318, 3897.9276, 3790.7764,3685.13800000001, 3573.6274, 3467.9706, 3368.61079999999, 3271.5202, 3170.3848, 3076.4656,2982.38400000001, 2888.4664, 2806.4868, 2711.9564, 2634.1434, 2551.3204, 2469.7662,2396.61139999999, 2318.9902, 2243.8658, 2171.9246, 2105.01360000001, 2028.8536, 1960.9952,1901.4096, 1841.86079999999, 1777.54700000001, 1714.5802, 1654.65059999999, 1596.311,1546.2016, 1492.3296, 1433.8974, 1383.84600000001, 1339.4152, 1293.5518, 1245.8686,1193.50659999999, 1162.27959999999, 1107.19439999999, 1069.18060000001, 1035.09179999999,999.679000000004, 957.679999999993, 925.300199999998, 888.099400000006, 848.638600000006,818.156400000007, 796.748399999997, 752.139200000005, 725.271200000003, 692.216,671.633600000001, 647.939799999993, 621.670599999998, 575.398799999995, 561.226599999995,532.237999999998, 521.787599999996, 483.095799999996, 467.049599999998, 465.286399999997,415.548599999995, 401.047399999996, 380.607999999993, 377.362599999993, 347.258799999996,338.371599999999, 310.096999999994, 301.409199999995, 276.280799999993, 265.586800000005,258.994399999996, 223.915999999997, 215.925399999993, 213.503800000006, 191.045400000003,166.718200000003, 166.259000000005, 162.941200000001, 148.829400000002, 141.645999999993,123.535399999993, 122.329800000007, 89.473399999988, 80.1962000000058, 77.5457999999926,59.1056000000099, 83.3509999999951, 52.2906000000075, 36.3979999999865, 40.6558000000077,42.0003999999899, 19.6630000000005, 19.7153999999864,-8.38539999999921,-0.692799999989802,0.854800000000978, 3.23219999999856,-3.89040000000386,-5.25880000001052,-24.9052000000083,-22.6837999999989,-26.4286000000138,-34.997000000003,-37.0216000000073,-43.430400000012,-58.2390000000014,-68.8034000000043,-56.9245999999985,-57.8583999999973,-77.3097999999882,-73.2793999999994,-81.0738000000129,-87.4530000000086,-65.0254000000132,-57.296399999992,-96.2746000000043,-103.25,-96.081600000005,-91.5542000000132,-102.465200000006,-107.688599999994,-101.458000000013,-109.715800000005, },
82
+ // // precision 16
83
+ // { 47270, 46423.3584, 45585.7074, 44757.152, 43938.8416, 43130.9514, 42330.03, 41540.407,40759.6348, 39988.206, 39226.5144, 38473.2096, 37729.795, 36997.268, 36272.6448, 35558.665,34853.0248, 34157.4472, 33470.5204, 32793.5742, 32127.0194, 31469.4182, 30817.6136,30178.6968, 29546.8908, 28922.8544, 28312.271, 27707.0924, 27114.0326, 26526.692, 25948.6336,25383.7826, 24823.5998, 24272.2974, 23732.2572, 23201.4976, 22674.2796, 22163.6336, 21656.515,21161.7362, 20669.9368, 20189.4424, 19717.3358, 19256.3744, 18795.9638, 18352.197, 17908.5738,17474.391, 17052.918, 16637.2236, 16228.4602, 15823.3474, 15428.6974, 15043.0284, 14667.6278,14297.4588, 13935.2882, 13578.5402, 13234.6032, 12882.1578, 12548.0728, 12219.231, 11898.0072,11587.2626, 11279.9072, 10973.5048, 10678.5186, 10392.4876, 10105.2556, 9825.766, 9562.5444,9294.2222, 9038.2352, 8784.848, 8533.2644, 8301.7776, 8058.30859999999, 7822.94579999999,7599.11319999999, 7366.90779999999, 7161.217, 6957.53080000001, 6736.212, 6548.21220000001,6343.06839999999, 6156.28719999999, 5975.15419999999, 5791.75719999999, 5621.32019999999,5451.66, 5287.61040000001, 5118.09479999999, 4957.288, 4798.4246, 4662.17559999999,4512.05900000001, 4364.68539999999, 4220.77720000001, 4082.67259999999, 3957.19519999999,3842.15779999999, 3699.3328, 3583.01180000001, 3473.8964, 3338.66639999999, 3233.55559999999,3117.799, 3008.111, 2909.69140000001, 2814.86499999999, 2719.46119999999, 2624.742,2532.46979999999, 2444.7886, 2370.1868, 2272.45259999999, 2196.19260000001, 2117.90419999999,2023.2972, 1969.76819999999, 1885.58979999999, 1833.2824, 1733.91200000001, 1682.54920000001,1604.57980000001, 1556.11240000001, 1491.3064, 1421.71960000001, 1371.22899999999, 1322.1324,1264.7892, 1196.23920000001, 1143.8474, 1088.67240000001, 1073.60380000001, 1023.11660000001,959.036400000012, 927.433199999999, 906.792799999996, 853.433599999989, 841.873800000001,791.1054, 756.899999999994, 704.343200000003, 672.495599999995, 622.790399999998,611.254799999995, 567.283200000005, 519.406599999988, 519.188400000014, 495.312800000014,451.350799999986, 443.973399999988, 431.882199999993, 392.027000000002, 380.924200000009,345.128999999986, 298.901400000002, 287.771999999997, 272.625, 247.253000000026,222.490600000019, 223.590000000026, 196.407599999977, 176.425999999978, 134.725199999986,132.4804, 110.445599999977, 86.7939999999944, 56.7038000000175, 64.915399999998,38.3726000000024, 37.1606000000029, 46.170999999973, 49.1716000000015, 15.3362000000197,6.71639999997569,-34.8185999999987,-39.4476000000141, 12.6830000000191,-12.3331999999937,-50.6565999999875,-59.9538000000175,-65.1054000000004,-70.7576000000117,-106.325200000021,-126.852200000023,-110.227599999984,-132.885999999999,-113.897200000007,-142.713800000027,-151.145399999979,-150.799200000009,-177.756200000003,-156.036399999983,-182.735199999996,-177.259399999981,-198.663600000029,-174.577600000019,-193.84580000001, },
84
+ // };
85
+ #endif
@@ -0,0 +1,28 @@
1
+ /*
2
+ * Copyright (c) 2021-2022 SAULX
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+ #pragma once
6
+ #ifndef _UTIL_LPF_H_
7
+ #define _UTIL_LPF_H_
8
+
9
+ /**
10
+ * Calculate the alpha coefficient for the lpf.
11
+ */
12
+ __constfn static inline float lpf_geta(float period, float sample_interval);
13
+ static inline float lpf_geta(float period, float sample_interval) {
14
+ return __builtin_expf(-(sample_interval / period));
15
+ }
16
+
17
+ /**
18
+ * Calculate the next output value of the lpf.
19
+ * @param prev is the previous output of this function.
20
+ * @param a is the coefficient calculated by lpf_geta().
21
+ * @param sample is the current sample.
22
+ */
23
+ __constfn static inline float lpf_calc_next(float a, float prev, float sample);
24
+ static inline float lpf_calc_next(float a, float prev, float sample) {
25
+ return a * prev + (1.0f - a) * sample;
26
+ }
27
+
28
+ #endif /* _UTIL_LPF_H_ */
@@ -0,0 +1,40 @@
1
+ /*
2
+ * Copyright (c) 2025 SAULX
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+ #pragma once
6
+ #include "selva/_export.h"
7
+ #include <stdint.h>
8
+
9
+ /***
10
+ * Get the length of multibyte char.
11
+ */
12
+ SELVA_EXPORT
13
+ #if defined(__clang__)
14
+ /*
15
+ * optnone is needed at least on clang to not optimize out the clz.
16
+ * Otherwise this function will always return 0.
17
+ */
18
+ __attribute__((optnone))
19
+ #endif
20
+ inline unsigned selva_mblen(char first_byte)
21
+ #ifndef __zig
22
+ {
23
+ uint8_t x = first_byte;
24
+ unsigned l = 0;
25
+
26
+ if (x & 0x80) {
27
+ #if __has_builtin(__builtin_clzg)
28
+ l = __builtin_clzg((uint8_t)~x, 0) - 1;
29
+ #elif __has_builtin(__builtin_clz)
30
+ l = __builtin_clz((unsigned)(~x << 24)) - 1;
31
+ #else
32
+ #error "No luck"
33
+ #endif
34
+ }
35
+
36
+ return l;
37
+ }
38
+ #else
39
+ ;
40
+ #endif /* __zig */
@@ -0,0 +1,32 @@
1
+ /*
2
+ * Copyright (c) 2025 SAULX
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+ #include "selva/_export.h"
6
+
7
+ /*
8
+ * When you run threads on different cores on Graviton it doesn't guarantee that
9
+ * a write in one thread is seen in the other one immediately.
10
+ * https://github.com/aws/aws-graviton-getting-started/blob/main/optimizing.md#ordering-issues
11
+ *
12
+ * This is also true on the Apple M arch:
13
+ * https://developer.apple.com/documentation/apple-silicon/addressing-architectural-differences-in-your-macos-code
14
+ */
15
+
16
+ /**
17
+ * Read memory barrier.
18
+ * Call this function before read in case another thread has potentially
19
+ * written to the memory addresses the current thread is going to access.
20
+ */
21
+ SELVA_EXPORT
22
+ __attribute__((no_reorder))
23
+ void membar_sync_read(void);
24
+
25
+ /**
26
+ * Write memory barrier.
27
+ * Call this function after write to memory when another thread is expected to
28
+ * read the written data.
29
+ */
30
+ SELVA_EXPORT
31
+ __attribute__((no_reorder))
32
+ void membar_sync_write(void);
@@ -0,0 +1,43 @@
1
+ /*
2
+ * Copyright (c) 2024 SAULX
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+ #pragma once
6
+
7
+ #include <stddef.h>
8
+ #include <sys/types.h>
9
+ #include "selva/types.h"
10
+
11
+ /*
12
+ * node_id set is an array that is always sorted for fast lookups.
13
+ */
14
+
15
+ /**
16
+ * Search from a node_id set.
17
+ */
18
+ SELVA_EXPORT
19
+ ssize_t node_id_set_bsearch(const node_id_t *a, size_t n, node_id_t x)
20
+ __attribute__((access(read_only, 1, 2)));
21
+
22
+ static inline bool node_id_set_has(const node_id_t *set, size_t len, node_id_t id)
23
+ {
24
+ if (len == 0) {
25
+ return false;
26
+ }
27
+
28
+ return node_id_set_bsearch(set, len, id) >= 0;
29
+ }
30
+
31
+ /**
32
+ * Sorted insert to a node_id set.
33
+ * @param set_p is an array allocated with jemalloc_selva.
34
+ */
35
+ SELVA_EXPORT
36
+ bool node_id_set_add(node_id_t **set_p, size_t *len, node_id_t id);
37
+
38
+ /**
39
+ * Remove from a node_id set.
40
+ * @param set_p is an array allocated with jemalloc_selva.
41
+ */
42
+ SELVA_EXPORT
43
+ bool node_id_set_remove(node_id_t **set_p, size_t *len, node_id_t id);
@@ -0,0 +1,114 @@
1
+ /*
2
+ * Copyright (c) 2021-2022, 2025 SAULX
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+ #pragma once
6
+
7
+ #include "selva/_export.h"
8
+
9
+ /**
10
+ * An element in the poptop list.
11
+ */
12
+ struct poptop_list_el {
13
+ float score;
14
+ void *p;
15
+ };
16
+
17
+ /**
18
+ * A poptop structure.
19
+ * Poptop is a data structure that attempts to keep a list of the most popular
20
+ * entries based on a score seen on each insert. The list is kept at least
21
+ * half-full at all times.
22
+ *
23
+ * The data structure has a maximum size of `max_size` and a cutoff limit that's
24
+ * the median of the score of elements currently on the list. A new cutoff is
25
+ * calculated when `poptop_maintenance()` is called and each call to
26
+ * `poptop_maintenance_drop()` removes one element falling under the cutoff
27
+ * limit until every element of the list has no more elements with score under
28
+ * the cutoff limit.
29
+ *
30
+ * The list can be iterated using the `POPTOP_FOREACH()` macro.
31
+ *
32
+ * The list is not guaranteed to be ordered, in fact, it's typically unordered
33
+ * unless `poptop_maintenance()` was called and no new inserts have been made
34
+ * since that call.
35
+ */
36
+ struct poptop {
37
+ /**
38
+ * Maximum size of the top list.
39
+ */
40
+ unsigned int max_size;
41
+ /**
42
+ * Current number of elements on the top list.
43
+ */
44
+ unsigned int current_size;
45
+ /**
46
+ * Minimum score.
47
+ * A long term minimum score for an element to get into and remain in the
48
+ * data structure. This is updated when poptop_maintenance() is called.
49
+ */
50
+ float cut_limit;
51
+ struct poptop_list_el *list;
52
+ };
53
+
54
+ /**
55
+ * An iterator for `struct poptop`.
56
+ * Note that the elements in the poptop list are not returned in any
57
+ * particular order.
58
+ * @param[out] _el_ is a pointer to a `poptop_list_el` structure. Can be NULL.
59
+ * @param _l_ is a pointer to the poptop instance to be iterated over.
60
+ */
61
+ #define POPTOP_FOREACH(_el_, _l_) \
62
+ _el_ = (_l_)->list - 1; \
63
+ while (++_el_ != ((_l_)->list + (_l_)->max_size))
64
+
65
+ /**
66
+ * Initialize a poptop structure.
67
+ * @param l is a pointer to an uninitalized poptop structure.
68
+ * @param max_size is the maximum number of elements allowed in the data
69
+ * structure. Poptop will attempt to maintain a list of about half of the
70
+ * maximum size.
71
+ * @param initial_cut is an initial value for the cut limit.
72
+ * @returns 0 if succeed; Otherwise a non-zero value is returned.
73
+ */
74
+ SELVA_EXPORT
75
+ int poptop_init(struct poptop *l, unsigned int max_size, float initial_cut);
76
+
77
+ /**
78
+ * Deinit a poptop structure.
79
+ * @param l is a pointer to an initialized poptop structure.
80
+ */
81
+ SELVA_EXPORT
82
+ void poptop_deinit(struct poptop *l);
83
+
84
+ /**
85
+ * Add an element to the top list if it's above the self-determined score limit.
86
+ * If the element already exists the score is updated.
87
+ * @param l is a pointer to the poptop structure.
88
+ */
89
+ SELVA_EXPORT
90
+ void poptop_maybe_add(struct poptop * restrict l, float score, void * restrict p);
91
+
92
+ /**
93
+ * Remove an element from the top list.
94
+ * @param l is a pointer to the poptop structure.
95
+ */
96
+ SELVA_EXPORT
97
+ void poptop_remove(struct poptop * restrict l, const void * restrict p);
98
+
99
+ /**
100
+ * Periodic maintenance.
101
+ * Find the median score and establish a new cut limit.
102
+ * @param l is a pointer to the poptop structure.
103
+ */
104
+ SELVA_EXPORT
105
+ int poptop_maintenance(struct poptop *l);
106
+
107
+ /**
108
+ * Drop an element that has a score below the cut limit.
109
+ * This function should be called repeatedly until no entry is returned.
110
+ * @param l is a pointer to the poptop structure.
111
+ * @returns a pointer to the element that was removed from the data structure l.
112
+ */
113
+ SELVA_EXPORT
114
+ void *poptop_maintenance_drop(struct poptop *l);
@@ -0,0 +1,49 @@
1
+ /*
2
+ * Copyright (c) 2024-2025 SAULX
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+ #pragma once
6
+ #include "xxhash.h"
7
+ #include "jemalloc_selva.h"
8
+ #include "selva/types.h"
9
+
10
+ typedef struct XXH3_state_s selva_hash_state_t;
11
+
12
+ #define selva_hash_reset XXH3_128bits_reset
13
+ #define selva_hash_update XXH3_128bits_update
14
+
15
+ SELVA_EXPORT
16
+ selva_hash_state_t *selva_hash_create_state(void);
17
+
18
+ SELVA_EXPORT
19
+ inline void selva_hash_free_state(selva_hash_state_t *state)
20
+ #ifndef __zig
21
+ {
22
+ selva_free(state);
23
+ }
24
+ #else
25
+ ;
26
+ #endif
27
+
28
+ SELVA_EXPORT
29
+ inline selva_hash128_t selva_hash_digest(selva_hash_state_t *hash_state)
30
+ #ifndef __zig
31
+ {
32
+ XXH128_hash_t res;
33
+
34
+ retry:
35
+ res = XXH3_128bits_digest(hash_state);
36
+ if (res.low64 == 0 && res.high64 == 0) {
37
+ /*
38
+ * We don't allow zero hash.
39
+ * RFE Is this a good approach?
40
+ */
41
+ XXH3_128bits_update(hash_state, &(int64_t){ 1 }, sizeof(int64_t));
42
+ goto retry;
43
+ }
44
+
45
+ return (selva_hash128_t)res.low64 | (selva_hash128_t)res.high64 << 64;
46
+ }
47
+ #else
48
+ ;
49
+ #endif
@@ -0,0 +1,112 @@
1
+ /*
2
+ * Copyright (c) 2022, 2024-2025 SAULX
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+ #pragma once
6
+
7
+ #include <stddef.h>
8
+ #if defined(__APPLE__) && __MACH__
9
+ #include <xlocale.h>
10
+ #endif
11
+ #include <locale.h>
12
+ #include <wchar.h>
13
+ #include <wctype.h>
14
+ #include "selva/_export.h"
15
+ #include "selva_lang_code.h"
16
+
17
+ #define SELVA_LANG_NAME_MAX 4ul
18
+
19
+ struct libdeflate_decompressor;
20
+ struct libdeflate_block_state;
21
+
22
+ SELVA_EXPORT
23
+ extern const char selva_lang_all_str[];
24
+
25
+ SELVA_EXPORT
26
+ extern const size_t selva_lang_all_len;
27
+
28
+ int selva_lang_set_fallback(const char *lang_str, size_t lang_len);
29
+
30
+ /**
31
+ * Get locale for a lang string.
32
+ * @param lang_str is a pointer to the language name.
33
+ * @param lang_len is the length of lang_str excluding any possible nul-character(s).
34
+ * @returns a POSIX locale.
35
+ */
36
+ SELVA_EXPORT
37
+ locale_t selva_lang_getlocale(const char *lang_str, size_t lang_len);
38
+
39
+ SELVA_EXPORT
40
+ locale_t selva_lang_getlocale2(enum selva_lang_code lang);
41
+
42
+ /* TODO rename these */
43
+ enum selva_langs_trans {
44
+ SELVA_LANGS_TRANS_NONE = 0,
45
+ SELVA_LANGS_TRANS_TOUPPER,
46
+ SELVA_LANGS_TRANS_TOLOWER,
47
+ SELVA_LANGS_TRANS_TOJHIRA, /*!< When lang is selva_lang_ja. */
48
+ SELVA_LANGS_TRANS_TOJKATA, /*!< When lang is selva_lang_ja. */
49
+ };
50
+
51
+ SELVA_EXPORT
52
+ wctrans_t selva_lang_wctrans(enum selva_lang_code lang, enum selva_langs_trans trans);
53
+
54
+ /**
55
+ * Transform a multibyte string.
56
+ * @returns a selva_malloc'd c-string.
57
+ */
58
+ SELVA_EXPORT
59
+ char *selva_mbstrans(locale_t loc, const char *src, size_t len, wctrans_t trans);
60
+
61
+ /**
62
+ * Read a symbol from a multibyte string.
63
+ * @param wc symbol read from mbs_str.
64
+ * @returns bytes consumed from mbs_str.
65
+ */
66
+ SELVA_EXPORT
67
+ size_t selva_mbstowc(wchar_t *wc, const char *mbs_str, size_t mbs_len, mbstate_t *ps, wctrans_t trans, locale_t loc);
68
+
69
+ /**
70
+ * Compare two multibyte strings by transforming each character.
71
+ * Unicode normalization and flattening is not supported.
72
+ */
73
+ SELVA_EXPORT
74
+ int selva_mbscmp(const char *mbs1_str, size_t mbs1_len, const char *mbs2_str, size_t mbs2_len, wctrans_t trans, locale_t loc);
75
+
76
+ SELVA_EXPORT
77
+ int selva_deflate_mbscmp(
78
+ struct libdeflate_decompressor *decompressor,
79
+ struct libdeflate_block_state *state,
80
+ const char *in_buf, size_t in_len,
81
+ const char *mbs2_str, size_t mbs2_len,
82
+ wctrans_t trans, locale_t loc);
83
+
84
+ SELVA_EXPORT
85
+ const char *selva_mbsstrstr(const char *mbs1_str, size_t mbs1_len, const char *mbs2_str, size_t mbs2_len, wctrans_t trans, locale_t loc);
86
+
87
+ SELVA_EXPORT
88
+ bool selva_deflate_mbsstrstr(
89
+ struct libdeflate_decompressor *decompressor,
90
+ struct libdeflate_block_state *state,
91
+ const char *in_buf, size_t in_len,
92
+ const void *needle_buf, size_t needle_len,
93
+ wctrans_t trans, locale_t loc);
94
+
95
+ /**
96
+ * Constructs a value of type wctrans_t that describes a LC_CTYPE category of wide character mapping.
97
+ * - "" none
98
+ * - "toupper"
99
+ * - "tolower"
100
+ * - "tojhira" when lang is "jp"
101
+ * - "tojkata" when lang is "jp"
102
+ */
103
+ static inline wctrans_t selva_wctrans(const char *class_str, size_t class_len, locale_t loc)
104
+ {
105
+ char charclass[16] = {};
106
+
107
+ if (likely(class_len < sizeof(charclass))) {
108
+ __builtin_memcpy(charclass, class_str, class_len);
109
+ }
110
+
111
+ return wctrans_l(charclass, loc);
112
+ }
@@ -0,0 +1,37 @@
1
+ /*
2
+ * Copyright (c) 2022-2024 SAULX
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+ #pragma once
6
+ #include <math.h>
7
+
8
+ static inline double nan_undefined(void)
9
+ {
10
+ return nan("1");
11
+ }
12
+
13
+ static inline int isnan_undefined(double x)
14
+ {
15
+ long long i;
16
+
17
+ if (!isnan(x)) {
18
+ return 0;
19
+ }
20
+
21
+ __builtin_memcpy(&i, &x, sizeof(i));
22
+
23
+ return i & 1;
24
+ }
25
+
26
+ /**
27
+ * Mod (%) like it is in JS.
28
+ */
29
+ static inline double js_fmod(double x, double y)
30
+ {
31
+ double result = remainder(fabs(x), (y = fabs(y)));
32
+ if (signbit(result)) {
33
+ result += y;
34
+ }
35
+
36
+ return copysign(result, x);
37
+ }