diff --git a/src/halton.py b/src/halton.py index bd5c0b9..82137c3 100644 --- a/src/halton.py +++ b/src/halton.py @@ -24,7 +24,7 @@ # Generate Rust code for evaluating Halton points with Faure-permutations for different bases. # How many components to generate. -num_dimensions = 256 +num_dimensions = 128 # Check primality. Not optimized, since it's not performance-critical. def is_prime(p): @@ -89,6 +89,7 @@ def invert(base, index, digits): # Print the beginning bits of the file print '''#![allow(dead_code)] +#![cfg_attr(rustfmt, rustfmt_skip)] // Copyright (c) 2012 Leonhard Gruenschloss (leonhard@gruenschloss.org) // // Permission is hereby granted, free of charge, to any person obtaining a copy @@ -113,14 +114,12 @@ print '''#![allow(dead_code)] // Compute points of the Halton sequence with with Faure-permutations for different bases. -pub const MAX_DIMENSION: u32 = %d; -''' % num_dimensions +pub const MAX_DIMENSION: u32 = %d;''' % num_dimensions # Print the sampling function print ''' pub fn sample(dimension: u32, index: u32) -> f32 { - match dimension { -''' + match dimension {''' for i in range(num_dimensions): print ' %d => halton%d(index),' % (i, primes[i]) @@ -134,7 +133,6 @@ print ''' # Print the special-cased first dimension print ''' // Special case: radical inverse in base 2, with direct bit reversal. -#[inline(always)] fn halton2(mut index: u32) -> f32 { index = (index << 16) | (index >> 16); index = ((index & 0x00ff00ff) << 8) | ((index & 0xff00ff00) >> 8); @@ -168,8 +166,6 @@ for i in range(1, num_dimensions): # Skip base 2. power = max_power / pow_base print ''' - -#[inline(always)] fn halton%d(index: u32) -> f32 { const PERM%d: [u16; %d] = [%s]; ''' % (base, base, len(perm), ', '.join(str(k) for k in perm)) diff --git a/src/halton.rs b/src/halton.rs index 8b732cd..21cbc7e 100644 --- a/src/halton.rs +++ b/src/halton.rs @@ -1,4 +1,5 @@ #![allow(dead_code)] +#![cfg_attr(rustfmt, rustfmt_skip)] // Copyright (c) 2012 Leonhard Gruenschloss (leonhard@gruenschloss.org) // // Permission is hereby granted, free of charge, to any person obtaining a copy @@ -23,12 +24,10 @@ // Compute points of the Halton sequence with with Faure-permutations for different bases. -pub const MAX_DIMENSION: u32 = 256; - +pub const MAX_DIMENSION: u32 = 128; pub fn sample(dimension: u32, index: u32) -> f32 { match dimension { - 0 => halton2(index), 1 => halton3(index), 2 => halton5(index), @@ -157,134 +156,6 @@ pub fn sample(dimension: u32, index: u32) -> f32 { 125 => halton701(index), 126 => halton709(index), 127 => halton719(index), - 128 => halton727(index), - 129 => halton733(index), - 130 => halton739(index), - 131 => halton743(index), - 132 => halton751(index), - 133 => halton757(index), - 134 => halton761(index), - 135 => halton769(index), - 136 => halton773(index), - 137 => halton787(index), - 138 => halton797(index), - 139 => halton809(index), - 140 => halton811(index), - 141 => halton821(index), - 142 => halton823(index), - 143 => halton827(index), - 144 => halton829(index), - 145 => halton839(index), - 146 => halton853(index), - 147 => halton857(index), - 148 => halton859(index), - 149 => halton863(index), - 150 => halton877(index), - 151 => halton881(index), - 152 => halton883(index), - 153 => halton887(index), - 154 => halton907(index), - 155 => halton911(index), - 156 => halton919(index), - 157 => halton929(index), - 158 => halton937(index), - 159 => halton941(index), - 160 => halton947(index), - 161 => halton953(index), - 162 => halton967(index), - 163 => halton971(index), - 164 => halton977(index), - 165 => halton983(index), - 166 => halton991(index), - 167 => halton997(index), - 168 => halton1009(index), - 169 => halton1013(index), - 170 => halton1019(index), - 171 => halton1021(index), - 172 => halton1031(index), - 173 => halton1033(index), - 174 => halton1039(index), - 175 => halton1049(index), - 176 => halton1051(index), - 177 => halton1061(index), - 178 => halton1063(index), - 179 => halton1069(index), - 180 => halton1087(index), - 181 => halton1091(index), - 182 => halton1093(index), - 183 => halton1097(index), - 184 => halton1103(index), - 185 => halton1109(index), - 186 => halton1117(index), - 187 => halton1123(index), - 188 => halton1129(index), - 189 => halton1151(index), - 190 => halton1153(index), - 191 => halton1163(index), - 192 => halton1171(index), - 193 => halton1181(index), - 194 => halton1187(index), - 195 => halton1193(index), - 196 => halton1201(index), - 197 => halton1213(index), - 198 => halton1217(index), - 199 => halton1223(index), - 200 => halton1229(index), - 201 => halton1231(index), - 202 => halton1237(index), - 203 => halton1249(index), - 204 => halton1259(index), - 205 => halton1277(index), - 206 => halton1279(index), - 207 => halton1283(index), - 208 => halton1289(index), - 209 => halton1291(index), - 210 => halton1297(index), - 211 => halton1301(index), - 212 => halton1303(index), - 213 => halton1307(index), - 214 => halton1319(index), - 215 => halton1321(index), - 216 => halton1327(index), - 217 => halton1361(index), - 218 => halton1367(index), - 219 => halton1373(index), - 220 => halton1381(index), - 221 => halton1399(index), - 222 => halton1409(index), - 223 => halton1423(index), - 224 => halton1427(index), - 225 => halton1429(index), - 226 => halton1433(index), - 227 => halton1439(index), - 228 => halton1447(index), - 229 => halton1451(index), - 230 => halton1453(index), - 231 => halton1459(index), - 232 => halton1471(index), - 233 => halton1481(index), - 234 => halton1483(index), - 235 => halton1487(index), - 236 => halton1489(index), - 237 => halton1493(index), - 238 => halton1499(index), - 239 => halton1511(index), - 240 => halton1523(index), - 241 => halton1531(index), - 242 => halton1543(index), - 243 => halton1549(index), - 244 => halton1553(index), - 245 => halton1559(index), - 246 => halton1567(index), - 247 => halton1571(index), - 248 => halton1579(index), - 249 => halton1583(index), - 250 => halton1597(index), - 251 => halton1601(index), - 252 => halton1607(index), - 253 => halton1609(index), - 254 => halton1613(index), - 255 => halton1619(index), _ => panic!("Exceeded max dimensions."), } @@ -292,7 +163,6 @@ pub fn sample(dimension: u32, index: u32) -> f32 { // Special case: radical inverse in base 2, with direct bit reversal. -#[inline(always)] fn halton2(mut index: u32) -> f32 { index = (index << 16) | (index >> 16); index = ((index & 0x00ff00ff) << 8) | ((index & 0xff00ff00) >> 8); @@ -303,18645 +173,1215 @@ fn halton2(mut index: u32) -> f32 { } - -#[inline(always)] fn halton3(index: u32) -> f32 { - const PERM3: [u16; 243] = [0, 81, 162, 27, 108, 189, 54, 135, 216, 9, 90, 171, 36, 117, 198, - 63, 144, 225, 18, 99, 180, 45, 126, 207, 72, 153, 234, 3, 84, 165, - 30, 111, 192, 57, 138, 219, 12, 93, 174, 39, 120, 201, 66, 147, - 228, 21, 102, 183, 48, 129, 210, 75, 156, 237, 6, 87, 168, 33, 114, - 195, 60, 141, 222, 15, 96, 177, 42, 123, 204, 69, 150, 231, 24, - 105, 186, 51, 132, 213, 78, 159, 240, 1, 82, 163, 28, 109, 190, 55, - 136, 217, 10, 91, 172, 37, 118, 199, 64, 145, 226, 19, 100, 181, - 46, 127, 208, 73, 154, 235, 4, 85, 166, 31, 112, 193, 58, 139, 220, - 13, 94, 175, 40, 121, 202, 67, 148, 229, 22, 103, 184, 49, 130, - 211, 76, 157, 238, 7, 88, 169, 34, 115, 196, 61, 142, 223, 16, 97, - 178, 43, 124, 205, 70, 151, 232, 25, 106, 187, 52, 133, 214, 79, - 160, 241, 2, 83, 164, 29, 110, 191, 56, 137, 218, 11, 92, 173, 38, - 119, 200, 65, 146, 227, 20, 101, 182, 47, 128, 209, 74, 155, 236, - 5, 86, 167, 32, 113, 194, 59, 140, 221, 14, 95, 176, 41, 122, 203, - 68, 149, 230, 23, 104, 185, 50, 131, 212, 77, 158, 239, 8, 89, 170, - 35, 116, 197, 62, 143, 224, 17, 98, 179, 44, 125, 206, 71, 152, - 233, 26, 107, 188, 53, 134, 215, 80, 161, 242]; - - return (unsafe { *PERM3.get_unchecked((index % 243) as usize) } as u32 * 14348907 + - unsafe { *PERM3.get_unchecked(((index / 243) % 243) as usize) } as u32 * 59049 + - unsafe { *PERM3.get_unchecked(((index / 59049) % 243) as usize) } as u32 * 243 + - unsafe { - *PERM3.get_unchecked(((index / 14348907) % 243) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3486784401u32 as f32)); // Results in [0,1). + const PERM3: [u16; 243] = [0, 81, 162, 27, 108, 189, 54, 135, 216, 9, 90, 171, 36, 117, 198, 63, 144, 225, 18, 99, 180, 45, 126, 207, 72, 153, 234, 3, 84, 165, 30, 111, 192, 57, 138, 219, 12, 93, 174, 39, 120, 201, 66, 147, 228, 21, 102, 183, 48, 129, 210, 75, 156, 237, 6, 87, 168, 33, 114, 195, 60, 141, 222, 15, 96, 177, 42, 123, 204, 69, 150, 231, 24, 105, 186, 51, 132, 213, 78, 159, 240, 1, 82, 163, 28, 109, 190, 55, 136, 217, 10, 91, 172, 37, 118, 199, 64, 145, 226, 19, 100, 181, 46, 127, 208, 73, 154, 235, 4, 85, 166, 31, 112, 193, 58, 139, 220, 13, 94, 175, 40, 121, 202, 67, 148, 229, 22, 103, 184, 49, 130, 211, 76, 157, 238, 7, 88, 169, 34, 115, 196, 61, 142, 223, 16, 97, 178, 43, 124, 205, 70, 151, 232, 25, 106, 187, 52, 133, 214, 79, 160, 241, 2, 83, 164, 29, 110, 191, 56, 137, 218, 11, 92, 173, 38, 119, 200, 65, 146, 227, 20, 101, 182, 47, 128, 209, 74, 155, 236, 5, 86, 167, 32, 113, 194, 59, 140, 221, 14, 95, 176, 41, 122, 203, 68, 149, 230, 23, 104, 185, 50, 131, 212, 77, 158, 239, 8, 89, 170, 35, 116, 197, 62, 143, 224, 17, 98, 179, 44, 125, 206, 71, 152, 233, 26, 107, 188, 53, 134, 215, 80, 161, 242]; + + return (unsafe{*PERM3.get_unchecked((index % 243) as usize)} as u32 * 14348907 + + unsafe{*PERM3.get_unchecked(((index / 243) % 243) as usize)} as u32 * 59049 + + unsafe{*PERM3.get_unchecked(((index / 59049) % 243) as usize)} as u32 * 243 + + unsafe{*PERM3.get_unchecked(((index / 14348907) % 243) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (3486784401u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton5(index: u32) -> f32 { - const PERM5: [u16; 125] = [0, 75, 50, 25, 100, 15, 90, 65, 40, 115, 10, 85, 60, 35, 110, 5, - 80, 55, 30, 105, 20, 95, 70, 45, 120, 3, 78, 53, 28, 103, 18, 93, - 68, 43, 118, 13, 88, 63, 38, 113, 8, 83, 58, 33, 108, 23, 98, 73, - 48, 123, 2, 77, 52, 27, 102, 17, 92, 67, 42, 117, 12, 87, 62, 37, - 112, 7, 82, 57, 32, 107, 22, 97, 72, 47, 122, 1, 76, 51, 26, 101, - 16, 91, 66, 41, 116, 11, 86, 61, 36, 111, 6, 81, 56, 31, 106, 21, - 96, 71, 46, 121, 4, 79, 54, 29, 104, 19, 94, 69, 44, 119, 14, 89, - 64, 39, 114, 9, 84, 59, 34, 109, 24, 99, 74, 49, 124]; - - return (unsafe { *PERM5.get_unchecked((index % 125) as usize) } as u32 * 1953125 + - unsafe { *PERM5.get_unchecked(((index / 125) % 125) as usize) } as u32 * 15625 + - unsafe { *PERM5.get_unchecked(((index / 15625) % 125) as usize) } as u32 * 125 + - unsafe { - *PERM5.get_unchecked(((index / 1953125) % 125) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (244140625u32 as f32)); // Results in [0,1). + const PERM5: [u16; 125] = [0, 75, 50, 25, 100, 15, 90, 65, 40, 115, 10, 85, 60, 35, 110, 5, 80, 55, 30, 105, 20, 95, 70, 45, 120, 3, 78, 53, 28, 103, 18, 93, 68, 43, 118, 13, 88, 63, 38, 113, 8, 83, 58, 33, 108, 23, 98, 73, 48, 123, 2, 77, 52, 27, 102, 17, 92, 67, 42, 117, 12, 87, 62, 37, 112, 7, 82, 57, 32, 107, 22, 97, 72, 47, 122, 1, 76, 51, 26, 101, 16, 91, 66, 41, 116, 11, 86, 61, 36, 111, 6, 81, 56, 31, 106, 21, 96, 71, 46, 121, 4, 79, 54, 29, 104, 19, 94, 69, 44, 119, 14, 89, 64, 39, 114, 9, 84, 59, 34, 109, 24, 99, 74, 49, 124]; + + return (unsafe{*PERM5.get_unchecked((index % 125) as usize)} as u32 * 1953125 + + unsafe{*PERM5.get_unchecked(((index / 125) % 125) as usize)} as u32 * 15625 + + unsafe{*PERM5.get_unchecked(((index / 15625) % 125) as usize)} as u32 * 125 + + unsafe{*PERM5.get_unchecked(((index / 1953125) % 125) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (244140625u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton7(index: u32) -> f32 { - const PERM7: [u16; 343] = [0, 98, 245, 147, 49, 196, 294, 14, 112, 259, 161, 63, 210, 308, 35, - 133, 280, 182, 84, 231, 329, 21, 119, 266, 168, 70, 217, 315, 7, - 105, 252, 154, 56, 203, 301, 28, 126, 273, 175, 77, 224, 322, 42, - 140, 287, 189, 91, 238, 336, 2, 100, 247, 149, 51, 198, 296, 16, - 114, 261, 163, 65, 212, 310, 37, 135, 282, 184, 86, 233, 331, 23, - 121, 268, 170, 72, 219, 317, 9, 107, 254, 156, 58, 205, 303, 30, - 128, 275, 177, 79, 226, 324, 44, 142, 289, 191, 93, 240, 338, 5, - 103, 250, 152, 54, 201, 299, 19, 117, 264, 166, 68, 215, 313, 40, - 138, 285, 187, 89, 236, 334, 26, 124, 271, 173, 75, 222, 320, 12, - 110, 257, 159, 61, 208, 306, 33, 131, 278, 180, 82, 229, 327, 47, - 145, 292, 194, 96, 243, 341, 3, 101, 248, 150, 52, 199, 297, 17, - 115, 262, 164, 66, 213, 311, 38, 136, 283, 185, 87, 234, 332, 24, - 122, 269, 171, 73, 220, 318, 10, 108, 255, 157, 59, 206, 304, 31, - 129, 276, 178, 80, 227, 325, 45, 143, 290, 192, 94, 241, 339, 1, - 99, 246, 148, 50, 197, 295, 15, 113, 260, 162, 64, 211, 309, 36, - 134, 281, 183, 85, 232, 330, 22, 120, 267, 169, 71, 218, 316, 8, - 106, 253, 155, 57, 204, 302, 29, 127, 274, 176, 78, 225, 323, 43, - 141, 288, 190, 92, 239, 337, 4, 102, 249, 151, 53, 200, 298, 18, - 116, 263, 165, 67, 214, 312, 39, 137, 284, 186, 88, 235, 333, 25, - 123, 270, 172, 74, 221, 319, 11, 109, 256, 158, 60, 207, 305, 32, - 130, 277, 179, 81, 228, 326, 46, 144, 291, 193, 95, 242, 340, 6, - 104, 251, 153, 55, 202, 300, 20, 118, 265, 167, 69, 216, 314, 41, - 139, 286, 188, 90, 237, 335, 27, 125, 272, 174, 76, 223, 321, 13, - 111, 258, 160, 62, 209, 307, 34, 132, 279, 181, 83, 230, 328, 48, - 146, 293, 195, 97, 244, 342]; - - return (unsafe { *PERM7.get_unchecked((index % 343) as usize) } as u32 * 117649 + - unsafe { *PERM7.get_unchecked(((index / 343) % 343) as usize) } as u32 * 343 + - unsafe { - *PERM7.get_unchecked(((index / 117649) % 343) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (40353607u32 as f32)); // Results in [0,1). + const PERM7: [u16; 343] = [0, 98, 245, 147, 49, 196, 294, 14, 112, 259, 161, 63, 210, 308, 35, 133, 280, 182, 84, 231, 329, 21, 119, 266, 168, 70, 217, 315, 7, 105, 252, 154, 56, 203, 301, 28, 126, 273, 175, 77, 224, 322, 42, 140, 287, 189, 91, 238, 336, 2, 100, 247, 149, 51, 198, 296, 16, 114, 261, 163, 65, 212, 310, 37, 135, 282, 184, 86, 233, 331, 23, 121, 268, 170, 72, 219, 317, 9, 107, 254, 156, 58, 205, 303, 30, 128, 275, 177, 79, 226, 324, 44, 142, 289, 191, 93, 240, 338, 5, 103, 250, 152, 54, 201, 299, 19, 117, 264, 166, 68, 215, 313, 40, 138, 285, 187, 89, 236, 334, 26, 124, 271, 173, 75, 222, 320, 12, 110, 257, 159, 61, 208, 306, 33, 131, 278, 180, 82, 229, 327, 47, 145, 292, 194, 96, 243, 341, 3, 101, 248, 150, 52, 199, 297, 17, 115, 262, 164, 66, 213, 311, 38, 136, 283, 185, 87, 234, 332, 24, 122, 269, 171, 73, 220, 318, 10, 108, 255, 157, 59, 206, 304, 31, 129, 276, 178, 80, 227, 325, 45, 143, 290, 192, 94, 241, 339, 1, 99, 246, 148, 50, 197, 295, 15, 113, 260, 162, 64, 211, 309, 36, 134, 281, 183, 85, 232, 330, 22, 120, 267, 169, 71, 218, 316, 8, 106, 253, 155, 57, 204, 302, 29, 127, 274, 176, 78, 225, 323, 43, 141, 288, 190, 92, 239, 337, 4, 102, 249, 151, 53, 200, 298, 18, 116, 263, 165, 67, 214, 312, 39, 137, 284, 186, 88, 235, 333, 25, 123, 270, 172, 74, 221, 319, 11, 109, 256, 158, 60, 207, 305, 32, 130, 277, 179, 81, 228, 326, 46, 144, 291, 193, 95, 242, 340, 6, 104, 251, 153, 55, 202, 300, 20, 118, 265, 167, 69, 216, 314, 41, 139, 286, 188, 90, 237, 335, 27, 125, 272, 174, 76, 223, 321, 13, 111, 258, 160, 62, 209, 307, 34, 132, 279, 181, 83, 230, 328, 48, 146, 293, 195, 97, 244, 342]; + + return (unsafe{*PERM7.get_unchecked((index % 343) as usize)} as u32 * 117649 + + unsafe{*PERM7.get_unchecked(((index / 343) % 343) as usize)} as u32 * 343 + + unsafe{*PERM7.get_unchecked(((index / 117649) % 343) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (40353607u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton11(index: u32) -> f32 { - const PERM11: [u16; 121] = [0, 77, 44, 22, 99, 55, 11, 88, 66, 33, 110, 7, 84, 51, 29, 106, - 62, 18, 95, 73, 40, 117, 4, 81, 48, 26, 103, 59, 15, 92, 70, 37, - 114, 2, 79, 46, 24, 101, 57, 13, 90, 68, 35, 112, 9, 86, 53, 31, - 108, 64, 20, 97, 75, 42, 119, 5, 82, 49, 27, 104, 60, 16, 93, 71, - 38, 115, 1, 78, 45, 23, 100, 56, 12, 89, 67, 34, 111, 8, 85, 52, - 30, 107, 63, 19, 96, 74, 41, 118, 6, 83, 50, 28, 105, 61, 17, 94, - 72, 39, 116, 3, 80, 47, 25, 102, 58, 14, 91, 69, 36, 113, 10, 87, - 54, 32, 109, 65, 21, 98, 76, 43, 120]; - - return (unsafe { *PERM11.get_unchecked((index % 121) as usize) } as u32 * 1771561 + - unsafe { *PERM11.get_unchecked(((index / 121) % 121) as usize) } as u32 * 14641 + - unsafe { *PERM11.get_unchecked(((index / 14641) % 121) as usize) } as u32 * 121 + - unsafe { - *PERM11.get_unchecked(((index / 1771561) % 121) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (214358881u32 as f32)); // Results in [0,1). + const PERM11: [u16; 121] = [0, 77, 44, 22, 99, 55, 11, 88, 66, 33, 110, 7, 84, 51, 29, 106, 62, 18, 95, 73, 40, 117, 4, 81, 48, 26, 103, 59, 15, 92, 70, 37, 114, 2, 79, 46, 24, 101, 57, 13, 90, 68, 35, 112, 9, 86, 53, 31, 108, 64, 20, 97, 75, 42, 119, 5, 82, 49, 27, 104, 60, 16, 93, 71, 38, 115, 1, 78, 45, 23, 100, 56, 12, 89, 67, 34, 111, 8, 85, 52, 30, 107, 63, 19, 96, 74, 41, 118, 6, 83, 50, 28, 105, 61, 17, 94, 72, 39, 116, 3, 80, 47, 25, 102, 58, 14, 91, 69, 36, 113, 10, 87, 54, 32, 109, 65, 21, 98, 76, 43, 120]; + + return (unsafe{*PERM11.get_unchecked((index % 121) as usize)} as u32 * 1771561 + + unsafe{*PERM11.get_unchecked(((index / 121) % 121) as usize)} as u32 * 14641 + + unsafe{*PERM11.get_unchecked(((index / 14641) % 121) as usize)} as u32 * 121 + + unsafe{*PERM11.get_unchecked(((index / 1771561) % 121) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (214358881u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton13(index: u32) -> f32 { - const PERM13: [u16; 169] = [0, 52, 117, 26, 91, 143, 78, 13, 65, 130, 39, 104, 156, 4, 56, - 121, 30, 95, 147, 82, 17, 69, 134, 43, 108, 160, 9, 61, 126, 35, - 100, 152, 87, 22, 74, 139, 48, 113, 165, 2, 54, 119, 28, 93, 145, - 80, 15, 67, 132, 41, 106, 158, 7, 59, 124, 33, 98, 150, 85, 20, - 72, 137, 46, 111, 163, 11, 63, 128, 37, 102, 154, 89, 24, 76, 141, - 50, 115, 167, 6, 58, 123, 32, 97, 149, 84, 19, 71, 136, 45, 110, - 162, 1, 53, 118, 27, 92, 144, 79, 14, 66, 131, 40, 105, 157, 5, - 57, 122, 31, 96, 148, 83, 18, 70, 135, 44, 109, 161, 10, 62, 127, - 36, 101, 153, 88, 23, 75, 140, 49, 114, 166, 3, 55, 120, 29, 94, - 146, 81, 16, 68, 133, 42, 107, 159, 8, 60, 125, 34, 99, 151, 86, - 21, 73, 138, 47, 112, 164, 12, 64, 129, 38, 103, 155, 90, 25, 77, - 142, 51, 116, 168]; - - return (unsafe { *PERM13.get_unchecked((index % 169) as usize) } as u32 * 4826809 + - unsafe { *PERM13.get_unchecked(((index / 169) % 169) as usize) } as u32 * 28561 + - unsafe { *PERM13.get_unchecked(((index / 28561) % 169) as usize) } as u32 * 169 + - unsafe { - *PERM13.get_unchecked(((index / 4826809) % 169) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (815730721u32 as f32)); // Results in [0,1). + const PERM13: [u16; 169] = [0, 52, 117, 26, 91, 143, 78, 13, 65, 130, 39, 104, 156, 4, 56, 121, 30, 95, 147, 82, 17, 69, 134, 43, 108, 160, 9, 61, 126, 35, 100, 152, 87, 22, 74, 139, 48, 113, 165, 2, 54, 119, 28, 93, 145, 80, 15, 67, 132, 41, 106, 158, 7, 59, 124, 33, 98, 150, 85, 20, 72, 137, 46, 111, 163, 11, 63, 128, 37, 102, 154, 89, 24, 76, 141, 50, 115, 167, 6, 58, 123, 32, 97, 149, 84, 19, 71, 136, 45, 110, 162, 1, 53, 118, 27, 92, 144, 79, 14, 66, 131, 40, 105, 157, 5, 57, 122, 31, 96, 148, 83, 18, 70, 135, 44, 109, 161, 10, 62, 127, 36, 101, 153, 88, 23, 75, 140, 49, 114, 166, 3, 55, 120, 29, 94, 146, 81, 16, 68, 133, 42, 107, 159, 8, 60, 125, 34, 99, 151, 86, 21, 73, 138, 47, 112, 164, 12, 64, 129, 38, 103, 155, 90, 25, 77, 142, 51, 116, 168]; + + return (unsafe{*PERM13.get_unchecked((index % 169) as usize)} as u32 * 4826809 + + unsafe{*PERM13.get_unchecked(((index / 169) % 169) as usize)} as u32 * 28561 + + unsafe{*PERM13.get_unchecked(((index / 28561) % 169) as usize)} as u32 * 169 + + unsafe{*PERM13.get_unchecked(((index / 4826809) % 169) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (815730721u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton17(index: u32) -> f32 { - const PERM17: [u16; 289] = [0, 153, 68, 221, 34, 187, 102, 255, 136, 17, 170, 85, 238, 51, - 204, 119, 272, 9, 162, 77, 230, 43, 196, 111, 264, 145, 26, 179, - 94, 247, 60, 213, 128, 281, 4, 157, 72, 225, 38, 191, 106, 259, - 140, 21, 174, 89, 242, 55, 208, 123, 276, 13, 166, 81, 234, 47, - 200, 115, 268, 149, 30, 183, 98, 251, 64, 217, 132, 285, 2, 155, - 70, 223, 36, 189, 104, 257, 138, 19, 172, 87, 240, 53, 206, 121, - 274, 11, 164, 79, 232, 45, 198, 113, 266, 147, 28, 181, 96, 249, - 62, 215, 130, 283, 6, 159, 74, 227, 40, 193, 108, 261, 142, 23, - 176, 91, 244, 57, 210, 125, 278, 15, 168, 83, 236, 49, 202, 117, - 270, 151, 32, 185, 100, 253, 66, 219, 134, 287, 8, 161, 76, 229, - 42, 195, 110, 263, 144, 25, 178, 93, 246, 59, 212, 127, 280, 1, - 154, 69, 222, 35, 188, 103, 256, 137, 18, 171, 86, 239, 52, 205, - 120, 273, 10, 163, 78, 231, 44, 197, 112, 265, 146, 27, 180, 95, - 248, 61, 214, 129, 282, 5, 158, 73, 226, 39, 192, 107, 260, 141, - 22, 175, 90, 243, 56, 209, 124, 277, 14, 167, 82, 235, 48, 201, - 116, 269, 150, 31, 184, 99, 252, 65, 218, 133, 286, 3, 156, 71, - 224, 37, 190, 105, 258, 139, 20, 173, 88, 241, 54, 207, 122, 275, - 12, 165, 80, 233, 46, 199, 114, 267, 148, 29, 182, 97, 250, 63, - 216, 131, 284, 7, 160, 75, 228, 41, 194, 109, 262, 143, 24, 177, - 92, 245, 58, 211, 126, 279, 16, 169, 84, 237, 50, 203, 118, 271, - 152, 33, 186, 101, 254, 67, 220, 135, 288]; - - return (unsafe { *PERM17.get_unchecked((index % 289) as usize) } as u32 * 83521 + - unsafe { *PERM17.get_unchecked(((index / 289) % 289) as usize) } as u32 * 289 + - unsafe { - *PERM17.get_unchecked(((index / 83521) % 289) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (24137569u32 as f32)); // Results in [0,1). + const PERM17: [u16; 289] = [0, 153, 68, 221, 34, 187, 102, 255, 136, 17, 170, 85, 238, 51, 204, 119, 272, 9, 162, 77, 230, 43, 196, 111, 264, 145, 26, 179, 94, 247, 60, 213, 128, 281, 4, 157, 72, 225, 38, 191, 106, 259, 140, 21, 174, 89, 242, 55, 208, 123, 276, 13, 166, 81, 234, 47, 200, 115, 268, 149, 30, 183, 98, 251, 64, 217, 132, 285, 2, 155, 70, 223, 36, 189, 104, 257, 138, 19, 172, 87, 240, 53, 206, 121, 274, 11, 164, 79, 232, 45, 198, 113, 266, 147, 28, 181, 96, 249, 62, 215, 130, 283, 6, 159, 74, 227, 40, 193, 108, 261, 142, 23, 176, 91, 244, 57, 210, 125, 278, 15, 168, 83, 236, 49, 202, 117, 270, 151, 32, 185, 100, 253, 66, 219, 134, 287, 8, 161, 76, 229, 42, 195, 110, 263, 144, 25, 178, 93, 246, 59, 212, 127, 280, 1, 154, 69, 222, 35, 188, 103, 256, 137, 18, 171, 86, 239, 52, 205, 120, 273, 10, 163, 78, 231, 44, 197, 112, 265, 146, 27, 180, 95, 248, 61, 214, 129, 282, 5, 158, 73, 226, 39, 192, 107, 260, 141, 22, 175, 90, 243, 56, 209, 124, 277, 14, 167, 82, 235, 48, 201, 116, 269, 150, 31, 184, 99, 252, 65, 218, 133, 286, 3, 156, 71, 224, 37, 190, 105, 258, 139, 20, 173, 88, 241, 54, 207, 122, 275, 12, 165, 80, 233, 46, 199, 114, 267, 148, 29, 182, 97, 250, 63, 216, 131, 284, 7, 160, 75, 228, 41, 194, 109, 262, 143, 24, 177, 92, 245, 58, 211, 126, 279, 16, 169, 84, 237, 50, 203, 118, 271, 152, 33, 186, 101, 254, 67, 220, 135, 288]; + + return (unsafe{*PERM17.get_unchecked((index % 289) as usize)} as u32 * 83521 + + unsafe{*PERM17.get_unchecked(((index / 289) % 289) as usize)} as u32 * 289 + + unsafe{*PERM17.get_unchecked(((index / 83521) % 289) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (24137569u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton19(index: u32) -> f32 { - const PERM19: [u16; 361] = [0, 209, 76, 285, 152, 38, 247, 114, 323, 171, 19, 228, 95, 304, - 190, 57, 266, 133, 342, 11, 220, 87, 296, 163, 49, 258, 125, 334, - 182, 30, 239, 106, 315, 201, 68, 277, 144, 353, 4, 213, 80, 289, - 156, 42, 251, 118, 327, 175, 23, 232, 99, 308, 194, 61, 270, 137, - 346, 15, 224, 91, 300, 167, 53, 262, 129, 338, 186, 34, 243, 110, - 319, 205, 72, 281, 148, 357, 8, 217, 84, 293, 160, 46, 255, 122, - 331, 179, 27, 236, 103, 312, 198, 65, 274, 141, 350, 2, 211, 78, - 287, 154, 40, 249, 116, 325, 173, 21, 230, 97, 306, 192, 59, 268, - 135, 344, 13, 222, 89, 298, 165, 51, 260, 127, 336, 184, 32, 241, - 108, 317, 203, 70, 279, 146, 355, 6, 215, 82, 291, 158, 44, 253, - 120, 329, 177, 25, 234, 101, 310, 196, 63, 272, 139, 348, 17, 226, - 93, 302, 169, 55, 264, 131, 340, 188, 36, 245, 112, 321, 207, 74, - 283, 150, 359, 9, 218, 85, 294, 161, 47, 256, 123, 332, 180, 28, - 237, 104, 313, 199, 66, 275, 142, 351, 1, 210, 77, 286, 153, 39, - 248, 115, 324, 172, 20, 229, 96, 305, 191, 58, 267, 134, 343, 12, - 221, 88, 297, 164, 50, 259, 126, 335, 183, 31, 240, 107, 316, 202, - 69, 278, 145, 354, 5, 214, 81, 290, 157, 43, 252, 119, 328, 176, - 24, 233, 100, 309, 195, 62, 271, 138, 347, 16, 225, 92, 301, 168, - 54, 263, 130, 339, 187, 35, 244, 111, 320, 206, 73, 282, 149, 358, - 10, 219, 86, 295, 162, 48, 257, 124, 333, 181, 29, 238, 105, 314, - 200, 67, 276, 143, 352, 3, 212, 79, 288, 155, 41, 250, 117, 326, - 174, 22, 231, 98, 307, 193, 60, 269, 136, 345, 14, 223, 90, 299, - 166, 52, 261, 128, 337, 185, 33, 242, 109, 318, 204, 71, 280, 147, - 356, 7, 216, 83, 292, 159, 45, 254, 121, 330, 178, 26, 235, 102, - 311, 197, 64, 273, 140, 349, 18, 227, 94, 303, 170, 56, 265, 132, - 341, 189, 37, 246, 113, 322, 208, 75, 284, 151, 360]; - - return (unsafe { *PERM19.get_unchecked((index % 361) as usize) } as u32 * 130321 + - unsafe { *PERM19.get_unchecked(((index / 361) % 361) as usize) } as u32 * 361 + - unsafe { - *PERM19.get_unchecked(((index / 130321) % 361) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (47045881u32 as f32)); // Results in [0,1). + const PERM19: [u16; 361] = [0, 209, 76, 285, 152, 38, 247, 114, 323, 171, 19, 228, 95, 304, 190, 57, 266, 133, 342, 11, 220, 87, 296, 163, 49, 258, 125, 334, 182, 30, 239, 106, 315, 201, 68, 277, 144, 353, 4, 213, 80, 289, 156, 42, 251, 118, 327, 175, 23, 232, 99, 308, 194, 61, 270, 137, 346, 15, 224, 91, 300, 167, 53, 262, 129, 338, 186, 34, 243, 110, 319, 205, 72, 281, 148, 357, 8, 217, 84, 293, 160, 46, 255, 122, 331, 179, 27, 236, 103, 312, 198, 65, 274, 141, 350, 2, 211, 78, 287, 154, 40, 249, 116, 325, 173, 21, 230, 97, 306, 192, 59, 268, 135, 344, 13, 222, 89, 298, 165, 51, 260, 127, 336, 184, 32, 241, 108, 317, 203, 70, 279, 146, 355, 6, 215, 82, 291, 158, 44, 253, 120, 329, 177, 25, 234, 101, 310, 196, 63, 272, 139, 348, 17, 226, 93, 302, 169, 55, 264, 131, 340, 188, 36, 245, 112, 321, 207, 74, 283, 150, 359, 9, 218, 85, 294, 161, 47, 256, 123, 332, 180, 28, 237, 104, 313, 199, 66, 275, 142, 351, 1, 210, 77, 286, 153, 39, 248, 115, 324, 172, 20, 229, 96, 305, 191, 58, 267, 134, 343, 12, 221, 88, 297, 164, 50, 259, 126, 335, 183, 31, 240, 107, 316, 202, 69, 278, 145, 354, 5, 214, 81, 290, 157, 43, 252, 119, 328, 176, 24, 233, 100, 309, 195, 62, 271, 138, 347, 16, 225, 92, 301, 168, 54, 263, 130, 339, 187, 35, 244, 111, 320, 206, 73, 282, 149, 358, 10, 219, 86, 295, 162, 48, 257, 124, 333, 181, 29, 238, 105, 314, 200, 67, 276, 143, 352, 3, 212, 79, 288, 155, 41, 250, 117, 326, 174, 22, 231, 98, 307, 193, 60, 269, 136, 345, 14, 223, 90, 299, 166, 52, 261, 128, 337, 185, 33, 242, 109, 318, 204, 71, 280, 147, 356, 7, 216, 83, 292, 159, 45, 254, 121, 330, 178, 26, 235, 102, 311, 197, 64, 273, 140, 349, 18, 227, 94, 303, 170, 56, 265, 132, 341, 189, 37, 246, 113, 322, 208, 75, 284, 151, 360]; + + return (unsafe{*PERM19.get_unchecked((index % 361) as usize)} as u32 * 130321 + + unsafe{*PERM19.get_unchecked(((index / 361) % 361) as usize)} as u32 * 361 + + unsafe{*PERM19.get_unchecked(((index / 130321) % 361) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (47045881u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton23(index: u32) -> f32 { - const PERM23: [u16; 23] = [0, 15, 8, 4, 19, 10, 2, 17, 13, 6, 21, 11, 1, 16, 9, 5, 20, 12, 3, - 18, 14, 7, 22]; - - return (unsafe { *PERM23.get_unchecked((index % 23) as usize) } as u32 * 148035889 + - unsafe { *PERM23.get_unchecked(((index / 23) % 23) as usize) } as u32 * 6436343 + - unsafe { *PERM23.get_unchecked(((index / 529) % 23) as usize) } as u32 * 279841 + - unsafe { *PERM23.get_unchecked(((index / 12167) % 23) as usize) } as u32 * 12167 + - unsafe { *PERM23.get_unchecked(((index / 279841) % 23) as usize) } as u32 * 529 + - unsafe { *PERM23.get_unchecked(((index / 6436343) % 23) as usize) } as u32 * 23 + - unsafe { - *PERM23.get_unchecked(((index / 148035889) % 23) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3404825447u32 as f32)); // Results in [0,1). + const PERM23: [u16; 23] = [0, 15, 8, 4, 19, 10, 2, 17, 13, 6, 21, 11, 1, 16, 9, 5, 20, 12, 3, 18, 14, 7, 22]; + + return (unsafe{*PERM23.get_unchecked((index % 23) as usize)} as u32 * 148035889 + + unsafe{*PERM23.get_unchecked(((index / 23) % 23) as usize)} as u32 * 6436343 + + unsafe{*PERM23.get_unchecked(((index / 529) % 23) as usize)} as u32 * 279841 + + unsafe{*PERM23.get_unchecked(((index / 12167) % 23) as usize)} as u32 * 12167 + + unsafe{*PERM23.get_unchecked(((index / 279841) % 23) as usize)} as u32 * 529 + + unsafe{*PERM23.get_unchecked(((index / 6436343) % 23) as usize)} as u32 * 23 + + unsafe{*PERM23.get_unchecked(((index / 148035889) % 23) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (3404825447u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton29(index: u32) -> f32 { - const PERM29: [u16; 29] = [0, 8, 21, 12, 4, 17, 25, 2, 10, 23, 15, 6, 19, 27, 14, 1, 9, 22, - 13, 5, 18, 26, 3, 11, 24, 16, 7, 20, 28]; - - return (unsafe { *PERM29.get_unchecked((index % 29) as usize) } as u32 * 20511149 + - unsafe { *PERM29.get_unchecked(((index / 29) % 29) as usize) } as u32 * 707281 + - unsafe { *PERM29.get_unchecked(((index / 841) % 29) as usize) } as u32 * 24389 + - unsafe { *PERM29.get_unchecked(((index / 24389) % 29) as usize) } as u32 * 841 + - unsafe { *PERM29.get_unchecked(((index / 707281) % 29) as usize) } as u32 * 29 + - unsafe { - *PERM29.get_unchecked(((index / 20511149) % 29) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (594823321u32 as f32)); // Results in [0,1). + const PERM29: [u16; 29] = [0, 8, 21, 12, 4, 17, 25, 2, 10, 23, 15, 6, 19, 27, 14, 1, 9, 22, 13, 5, 18, 26, 3, 11, 24, 16, 7, 20, 28]; + + return (unsafe{*PERM29.get_unchecked((index % 29) as usize)} as u32 * 20511149 + + unsafe{*PERM29.get_unchecked(((index / 29) % 29) as usize)} as u32 * 707281 + + unsafe{*PERM29.get_unchecked(((index / 841) % 29) as usize)} as u32 * 24389 + + unsafe{*PERM29.get_unchecked(((index / 24389) % 29) as usize)} as u32 * 841 + + unsafe{*PERM29.get_unchecked(((index / 707281) % 29) as usize)} as u32 * 29 + + unsafe{*PERM29.get_unchecked(((index / 20511149) % 29) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (594823321u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton31(index: u32) -> f32 { - const PERM31: [u16; 31] = [0, 8, 23, 12, 4, 19, 27, 14, 2, 10, 25, 17, 6, 21, 29, 15, 1, 9, - 24, 13, 5, 20, 28, 16, 3, 11, 26, 18, 7, 22, 30]; - - return (unsafe { *PERM31.get_unchecked((index % 31) as usize) } as u32 * 28629151 + - unsafe { *PERM31.get_unchecked(((index / 31) % 31) as usize) } as u32 * 923521 + - unsafe { *PERM31.get_unchecked(((index / 961) % 31) as usize) } as u32 * 29791 + - unsafe { *PERM31.get_unchecked(((index / 29791) % 31) as usize) } as u32 * 961 + - unsafe { *PERM31.get_unchecked(((index / 923521) % 31) as usize) } as u32 * 31 + - unsafe { - *PERM31.get_unchecked(((index / 28629151) % 31) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (887503681u32 as f32)); // Results in [0,1). + const PERM31: [u16; 31] = [0, 8, 23, 12, 4, 19, 27, 14, 2, 10, 25, 17, 6, 21, 29, 15, 1, 9, 24, 13, 5, 20, 28, 16, 3, 11, 26, 18, 7, 22, 30]; + + return (unsafe{*PERM31.get_unchecked((index % 31) as usize)} as u32 * 28629151 + + unsafe{*PERM31.get_unchecked(((index / 31) % 31) as usize)} as u32 * 923521 + + unsafe{*PERM31.get_unchecked(((index / 961) % 31) as usize)} as u32 * 29791 + + unsafe{*PERM31.get_unchecked(((index / 29791) % 31) as usize)} as u32 * 961 + + unsafe{*PERM31.get_unchecked(((index / 923521) % 31) as usize)} as u32 * 31 + + unsafe{*PERM31.get_unchecked(((index / 28629151) % 31) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (887503681u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton37(index: u32) -> f32 { - const PERM37: [u16; 37] = [0, 21, 8, 29, 16, 4, 25, 12, 33, 2, 23, 10, 31, 19, 6, 27, 14, 35, - 18, 1, 22, 9, 30, 17, 5, 26, 13, 34, 3, 24, 11, 32, 20, 7, 28, 15, - 36]; - - return (unsafe { *PERM37.get_unchecked((index % 37) as usize) } as u32 * 69343957 + - unsafe { *PERM37.get_unchecked(((index / 37) % 37) as usize) } as u32 * 1874161 + - unsafe { *PERM37.get_unchecked(((index / 1369) % 37) as usize) } as u32 * 50653 + - unsafe { *PERM37.get_unchecked(((index / 50653) % 37) as usize) } as u32 * 1369 + - unsafe { *PERM37.get_unchecked(((index / 1874161) % 37) as usize) } as u32 * 37 + - unsafe { - *PERM37.get_unchecked(((index / 69343957) % 37) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2565726409u32 as f32)); // Results in [0,1). + const PERM37: [u16; 37] = [0, 21, 8, 29, 16, 4, 25, 12, 33, 2, 23, 10, 31, 19, 6, 27, 14, 35, 18, 1, 22, 9, 30, 17, 5, 26, 13, 34, 3, 24, 11, 32, 20, 7, 28, 15, 36]; + + return (unsafe{*PERM37.get_unchecked((index % 37) as usize)} as u32 * 69343957 + + unsafe{*PERM37.get_unchecked(((index / 37) % 37) as usize)} as u32 * 1874161 + + unsafe{*PERM37.get_unchecked(((index / 1369) % 37) as usize)} as u32 * 50653 + + unsafe{*PERM37.get_unchecked(((index / 50653) % 37) as usize)} as u32 * 1369 + + unsafe{*PERM37.get_unchecked(((index / 1874161) % 37) as usize)} as u32 * 37 + + unsafe{*PERM37.get_unchecked(((index / 69343957) % 37) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (2565726409u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton41(index: u32) -> f32 { - const PERM41: [u16; 41] = [0, 25, 16, 8, 33, 4, 29, 21, 12, 37, 2, 27, 18, 10, 35, 6, 31, 23, - 14, 39, 20, 1, 26, 17, 9, 34, 5, 30, 22, 13, 38, 3, 28, 19, 11, 36, - 7, 32, 24, 15, 40]; - - return (unsafe { *PERM41.get_unchecked((index % 41) as usize) } as u32 * 2825761 + - unsafe { *PERM41.get_unchecked(((index / 41) % 41) as usize) } as u32 * 68921 + - unsafe { *PERM41.get_unchecked(((index / 1681) % 41) as usize) } as u32 * 1681 + - unsafe { *PERM41.get_unchecked(((index / 68921) % 41) as usize) } as u32 * 41 + - unsafe { - *PERM41.get_unchecked(((index / 2825761) % 41) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (115856201u32 as f32)); // Results in [0,1). + const PERM41: [u16; 41] = [0, 25, 16, 8, 33, 4, 29, 21, 12, 37, 2, 27, 18, 10, 35, 6, 31, 23, 14, 39, 20, 1, 26, 17, 9, 34, 5, 30, 22, 13, 38, 3, 28, 19, 11, 36, 7, 32, 24, 15, 40]; + + return (unsafe{*PERM41.get_unchecked((index % 41) as usize)} as u32 * 2825761 + + unsafe{*PERM41.get_unchecked(((index / 41) % 41) as usize)} as u32 * 68921 + + unsafe{*PERM41.get_unchecked(((index / 1681) % 41) as usize)} as u32 * 1681 + + unsafe{*PERM41.get_unchecked(((index / 68921) % 41) as usize)} as u32 * 41 + + unsafe{*PERM41.get_unchecked(((index / 2825761) % 41) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (115856201u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton43(index: u32) -> f32 { - const PERM43: [u16; 43] = [0, 27, 16, 8, 35, 4, 31, 23, 12, 39, 20, 2, 29, 18, 10, 37, 6, 33, - 25, 14, 41, 21, 1, 28, 17, 9, 36, 5, 32, 24, 13, 40, 22, 3, 30, 19, - 11, 38, 7, 34, 26, 15, 42]; - - return (unsafe { *PERM43.get_unchecked((index % 43) as usize) } as u32 * 3418801 + - unsafe { *PERM43.get_unchecked(((index / 43) % 43) as usize) } as u32 * 79507 + - unsafe { *PERM43.get_unchecked(((index / 1849) % 43) as usize) } as u32 * 1849 + - unsafe { *PERM43.get_unchecked(((index / 79507) % 43) as usize) } as u32 * 43 + - unsafe { - *PERM43.get_unchecked(((index / 3418801) % 43) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (147008443u32 as f32)); // Results in [0,1). + const PERM43: [u16; 43] = [0, 27, 16, 8, 35, 4, 31, 23, 12, 39, 20, 2, 29, 18, 10, 37, 6, 33, 25, 14, 41, 21, 1, 28, 17, 9, 36, 5, 32, 24, 13, 40, 22, 3, 30, 19, 11, 38, 7, 34, 26, 15, 42]; + + return (unsafe{*PERM43.get_unchecked((index % 43) as usize)} as u32 * 3418801 + + unsafe{*PERM43.get_unchecked(((index / 43) % 43) as usize)} as u32 * 79507 + + unsafe{*PERM43.get_unchecked(((index / 1849) % 43) as usize)} as u32 * 1849 + + unsafe{*PERM43.get_unchecked(((index / 79507) % 43) as usize)} as u32 * 43 + + unsafe{*PERM43.get_unchecked(((index / 3418801) % 43) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (147008443u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton47(index: u32) -> f32 { - const PERM47: [u16; 47] = [0, 31, 16, 8, 39, 20, 4, 35, 27, 12, 43, 22, 2, 33, 18, 10, 41, 25, - 6, 37, 29, 14, 45, 23, 1, 32, 17, 9, 40, 21, 5, 36, 28, 13, 44, 24, - 3, 34, 19, 11, 42, 26, 7, 38, 30, 15, 46]; - - return (unsafe { *PERM47.get_unchecked((index % 47) as usize) } as u32 * 4879681 + - unsafe { *PERM47.get_unchecked(((index / 47) % 47) as usize) } as u32 * 103823 + - unsafe { *PERM47.get_unchecked(((index / 2209) % 47) as usize) } as u32 * 2209 + - unsafe { *PERM47.get_unchecked(((index / 103823) % 47) as usize) } as u32 * 47 + - unsafe { - *PERM47.get_unchecked(((index / 4879681) % 47) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (229345007u32 as f32)); // Results in [0,1). + const PERM47: [u16; 47] = [0, 31, 16, 8, 39, 20, 4, 35, 27, 12, 43, 22, 2, 33, 18, 10, 41, 25, 6, 37, 29, 14, 45, 23, 1, 32, 17, 9, 40, 21, 5, 36, 28, 13, 44, 24, 3, 34, 19, 11, 42, 26, 7, 38, 30, 15, 46]; + + return (unsafe{*PERM47.get_unchecked((index % 47) as usize)} as u32 * 4879681 + + unsafe{*PERM47.get_unchecked(((index / 47) % 47) as usize)} as u32 * 103823 + + unsafe{*PERM47.get_unchecked(((index / 2209) % 47) as usize)} as u32 * 2209 + + unsafe{*PERM47.get_unchecked(((index / 103823) % 47) as usize)} as u32 * 47 + + unsafe{*PERM47.get_unchecked(((index / 4879681) % 47) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (229345007u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton53(index: u32) -> f32 { - const PERM53: [u16; 53] = [0, 16, 37, 8, 29, 45, 24, 4, 20, 41, 12, 33, 49, 2, 18, 39, 10, 31, - 47, 27, 6, 22, 43, 14, 35, 51, 26, 1, 17, 38, 9, 30, 46, 25, 5, 21, - 42, 13, 34, 50, 3, 19, 40, 11, 32, 48, 28, 7, 23, 44, 15, 36, 52]; - - return (unsafe { *PERM53.get_unchecked((index % 53) as usize) } as u32 * 7890481 + - unsafe { *PERM53.get_unchecked(((index / 53) % 53) as usize) } as u32 * 148877 + - unsafe { *PERM53.get_unchecked(((index / 2809) % 53) as usize) } as u32 * 2809 + - unsafe { *PERM53.get_unchecked(((index / 148877) % 53) as usize) } as u32 * 53 + - unsafe { - *PERM53.get_unchecked(((index / 7890481) % 53) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (418195493u32 as f32)); // Results in [0,1). + const PERM53: [u16; 53] = [0, 16, 37, 8, 29, 45, 24, 4, 20, 41, 12, 33, 49, 2, 18, 39, 10, 31, 47, 27, 6, 22, 43, 14, 35, 51, 26, 1, 17, 38, 9, 30, 46, 25, 5, 21, 42, 13, 34, 50, 3, 19, 40, 11, 32, 48, 28, 7, 23, 44, 15, 36, 52]; + + return (unsafe{*PERM53.get_unchecked((index % 53) as usize)} as u32 * 7890481 + + unsafe{*PERM53.get_unchecked(((index / 53) % 53) as usize)} as u32 * 148877 + + unsafe{*PERM53.get_unchecked(((index / 2809) % 53) as usize)} as u32 * 2809 + + unsafe{*PERM53.get_unchecked(((index / 148877) % 53) as usize)} as u32 * 53 + + unsafe{*PERM53.get_unchecked(((index / 7890481) % 53) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (418195493u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton59(index: u32) -> f32 { - const PERM59: [u16; 59] = [0, 16, 43, 24, 8, 35, 51, 4, 20, 47, 31, 12, 39, 55, 28, 2, 18, 45, - 26, 10, 37, 53, 6, 22, 49, 33, 14, 41, 57, 29, 1, 17, 44, 25, 9, - 36, 52, 5, 21, 48, 32, 13, 40, 56, 30, 3, 19, 46, 27, 11, 38, 54, - 7, 23, 50, 34, 15, 42, 58]; - - return (unsafe { *PERM59.get_unchecked((index % 59) as usize) } as u32 * 12117361 + - unsafe { *PERM59.get_unchecked(((index / 59) % 59) as usize) } as u32 * 205379 + - unsafe { *PERM59.get_unchecked(((index / 3481) % 59) as usize) } as u32 * 3481 + - unsafe { *PERM59.get_unchecked(((index / 205379) % 59) as usize) } as u32 * 59 + - unsafe { - *PERM59.get_unchecked(((index / 12117361) % 59) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (714924299u32 as f32)); // Results in [0,1). + const PERM59: [u16; 59] = [0, 16, 43, 24, 8, 35, 51, 4, 20, 47, 31, 12, 39, 55, 28, 2, 18, 45, 26, 10, 37, 53, 6, 22, 49, 33, 14, 41, 57, 29, 1, 17, 44, 25, 9, 36, 52, 5, 21, 48, 32, 13, 40, 56, 30, 3, 19, 46, 27, 11, 38, 54, 7, 23, 50, 34, 15, 42, 58]; + + return (unsafe{*PERM59.get_unchecked((index % 59) as usize)} as u32 * 12117361 + + unsafe{*PERM59.get_unchecked(((index / 59) % 59) as usize)} as u32 * 205379 + + unsafe{*PERM59.get_unchecked(((index / 3481) % 59) as usize)} as u32 * 3481 + + unsafe{*PERM59.get_unchecked(((index / 205379) % 59) as usize)} as u32 * 59 + + unsafe{*PERM59.get_unchecked(((index / 12117361) % 59) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (714924299u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton61(index: u32) -> f32 { - const PERM61: [u16; 61] = [0, 16, 45, 24, 8, 37, 53, 28, 4, 20, 49, 33, 12, 41, 57, 2, 18, 47, - 26, 10, 39, 55, 31, 6, 22, 51, 35, 14, 43, 59, 30, 1, 17, 46, 25, - 9, 38, 54, 29, 5, 21, 50, 34, 13, 42, 58, 3, 19, 48, 27, 11, 40, - 56, 32, 7, 23, 52, 36, 15, 44, 60]; - - return (unsafe { *PERM61.get_unchecked((index % 61) as usize) } as u32 * 13845841 + - unsafe { *PERM61.get_unchecked(((index / 61) % 61) as usize) } as u32 * 226981 + - unsafe { *PERM61.get_unchecked(((index / 3721) % 61) as usize) } as u32 * 3721 + - unsafe { *PERM61.get_unchecked(((index / 226981) % 61) as usize) } as u32 * 61 + - unsafe { - *PERM61.get_unchecked(((index / 13845841) % 61) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (844596301u32 as f32)); // Results in [0,1). + const PERM61: [u16; 61] = [0, 16, 45, 24, 8, 37, 53, 28, 4, 20, 49, 33, 12, 41, 57, 2, 18, 47, 26, 10, 39, 55, 31, 6, 22, 51, 35, 14, 43, 59, 30, 1, 17, 46, 25, 9, 38, 54, 29, 5, 21, 50, 34, 13, 42, 58, 3, 19, 48, 27, 11, 40, 56, 32, 7, 23, 52, 36, 15, 44, 60]; + + return (unsafe{*PERM61.get_unchecked((index % 61) as usize)} as u32 * 13845841 + + unsafe{*PERM61.get_unchecked(((index / 61) % 61) as usize)} as u32 * 226981 + + unsafe{*PERM61.get_unchecked(((index / 3721) % 61) as usize)} as u32 * 3721 + + unsafe{*PERM61.get_unchecked(((index / 226981) % 61) as usize)} as u32 * 61 + + unsafe{*PERM61.get_unchecked(((index / 13845841) % 61) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (844596301u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton67(index: u32) -> f32 { - const PERM67: [u16; 67] = [0, 35, 16, 51, 8, 43, 24, 59, 4, 39, 20, 55, 12, 47, 28, 63, 32, 2, - 37, 18, 53, 10, 45, 26, 61, 6, 41, 22, 57, 14, 49, 30, 65, 33, 1, - 36, 17, 52, 9, 44, 25, 60, 5, 40, 21, 56, 13, 48, 29, 64, 34, 3, - 38, 19, 54, 11, 46, 27, 62, 7, 42, 23, 58, 15, 50, 31, 66]; - - return (unsafe { *PERM67.get_unchecked((index % 67) as usize) } as u32 * 20151121 + - unsafe { *PERM67.get_unchecked(((index / 67) % 67) as usize) } as u32 * 300763 + - unsafe { *PERM67.get_unchecked(((index / 4489) % 67) as usize) } as u32 * 4489 + - unsafe { *PERM67.get_unchecked(((index / 300763) % 67) as usize) } as u32 * 67 + - unsafe { - *PERM67.get_unchecked(((index / 20151121) % 67) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1350125107u32 as f32)); // Results in [0,1). + const PERM67: [u16; 67] = [0, 35, 16, 51, 8, 43, 24, 59, 4, 39, 20, 55, 12, 47, 28, 63, 32, 2, 37, 18, 53, 10, 45, 26, 61, 6, 41, 22, 57, 14, 49, 30, 65, 33, 1, 36, 17, 52, 9, 44, 25, 60, 5, 40, 21, 56, 13, 48, 29, 64, 34, 3, 38, 19, 54, 11, 46, 27, 62, 7, 42, 23, 58, 15, 50, 31, 66]; + + return (unsafe{*PERM67.get_unchecked((index % 67) as usize)} as u32 * 20151121 + + unsafe{*PERM67.get_unchecked(((index / 67) % 67) as usize)} as u32 * 300763 + + unsafe{*PERM67.get_unchecked(((index / 4489) % 67) as usize)} as u32 * 4489 + + unsafe{*PERM67.get_unchecked(((index / 300763) % 67) as usize)} as u32 * 67 + + unsafe{*PERM67.get_unchecked(((index / 20151121) % 67) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (1350125107u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton71(index: u32) -> f32 { - const PERM71: [u16; 71] = [0, 39, 16, 55, 8, 47, 24, 63, 32, 4, 43, 20, 59, 12, 51, 28, 67, - 34, 2, 41, 18, 57, 10, 49, 26, 65, 37, 6, 45, 22, 61, 14, 53, 30, - 69, 35, 1, 40, 17, 56, 9, 48, 25, 64, 33, 5, 44, 21, 60, 13, 52, - 29, 68, 36, 3, 42, 19, 58, 11, 50, 27, 66, 38, 7, 46, 23, 62, 15, - 54, 31, 70]; - - return (unsafe { *PERM71.get_unchecked((index % 71) as usize) } as u32 * 25411681 + - unsafe { *PERM71.get_unchecked(((index / 71) % 71) as usize) } as u32 * 357911 + - unsafe { *PERM71.get_unchecked(((index / 5041) % 71) as usize) } as u32 * 5041 + - unsafe { *PERM71.get_unchecked(((index / 357911) % 71) as usize) } as u32 * 71 + - unsafe { - *PERM71.get_unchecked(((index / 25411681) % 71) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1804229351u32 as f32)); // Results in [0,1). + const PERM71: [u16; 71] = [0, 39, 16, 55, 8, 47, 24, 63, 32, 4, 43, 20, 59, 12, 51, 28, 67, 34, 2, 41, 18, 57, 10, 49, 26, 65, 37, 6, 45, 22, 61, 14, 53, 30, 69, 35, 1, 40, 17, 56, 9, 48, 25, 64, 33, 5, 44, 21, 60, 13, 52, 29, 68, 36, 3, 42, 19, 58, 11, 50, 27, 66, 38, 7, 46, 23, 62, 15, 54, 31, 70]; + + return (unsafe{*PERM71.get_unchecked((index % 71) as usize)} as u32 * 25411681 + + unsafe{*PERM71.get_unchecked(((index / 71) % 71) as usize)} as u32 * 357911 + + unsafe{*PERM71.get_unchecked(((index / 5041) % 71) as usize)} as u32 * 5041 + + unsafe{*PERM71.get_unchecked(((index / 357911) % 71) as usize)} as u32 * 71 + + unsafe{*PERM71.get_unchecked(((index / 25411681) % 71) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (1804229351u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton73(index: u32) -> f32 { - const PERM73: [u16; 73] = [0, 41, 16, 57, 32, 8, 49, 24, 65, 4, 45, 20, 61, 37, 12, 53, 28, - 69, 2, 43, 18, 59, 34, 10, 51, 26, 67, 6, 47, 22, 63, 39, 14, 55, - 30, 71, 36, 1, 42, 17, 58, 33, 9, 50, 25, 66, 5, 46, 21, 62, 38, - 13, 54, 29, 70, 3, 44, 19, 60, 35, 11, 52, 27, 68, 7, 48, 23, 64, - 40, 15, 56, 31, 72]; - - return (unsafe { *PERM73.get_unchecked((index % 73) as usize) } as u32 * 28398241 + - unsafe { *PERM73.get_unchecked(((index / 73) % 73) as usize) } as u32 * 389017 + - unsafe { *PERM73.get_unchecked(((index / 5329) % 73) as usize) } as u32 * 5329 + - unsafe { *PERM73.get_unchecked(((index / 389017) % 73) as usize) } as u32 * 73 + - unsafe { - *PERM73.get_unchecked(((index / 28398241) % 73) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2073071593u32 as f32)); // Results in [0,1). + const PERM73: [u16; 73] = [0, 41, 16, 57, 32, 8, 49, 24, 65, 4, 45, 20, 61, 37, 12, 53, 28, 69, 2, 43, 18, 59, 34, 10, 51, 26, 67, 6, 47, 22, 63, 39, 14, 55, 30, 71, 36, 1, 42, 17, 58, 33, 9, 50, 25, 66, 5, 46, 21, 62, 38, 13, 54, 29, 70, 3, 44, 19, 60, 35, 11, 52, 27, 68, 7, 48, 23, 64, 40, 15, 56, 31, 72]; + + return (unsafe{*PERM73.get_unchecked((index % 73) as usize)} as u32 * 28398241 + + unsafe{*PERM73.get_unchecked(((index / 73) % 73) as usize)} as u32 * 389017 + + unsafe{*PERM73.get_unchecked(((index / 5329) % 73) as usize)} as u32 * 5329 + + unsafe{*PERM73.get_unchecked(((index / 389017) % 73) as usize)} as u32 * 73 + + unsafe{*PERM73.get_unchecked(((index / 28398241) % 73) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (2073071593u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton79(index: u32) -> f32 { - const PERM79: [u16; 79] = [0, 47, 16, 63, 32, 8, 55, 24, 71, 36, 4, 51, 20, 67, 43, 12, 59, - 28, 75, 38, 2, 49, 18, 65, 34, 10, 57, 26, 73, 41, 6, 53, 22, 69, - 45, 14, 61, 30, 77, 39, 1, 48, 17, 64, 33, 9, 56, 25, 72, 37, 5, - 52, 21, 68, 44, 13, 60, 29, 76, 40, 3, 50, 19, 66, 35, 11, 58, 27, - 74, 42, 7, 54, 23, 70, 46, 15, 62, 31, 78]; - - return (unsafe { *PERM79.get_unchecked((index % 79) as usize) } as u32 * 38950081 + - unsafe { *PERM79.get_unchecked(((index / 79) % 79) as usize) } as u32 * 493039 + - unsafe { *PERM79.get_unchecked(((index / 6241) % 79) as usize) } as u32 * 6241 + - unsafe { *PERM79.get_unchecked(((index / 493039) % 79) as usize) } as u32 * 79 + - unsafe { - *PERM79.get_unchecked(((index / 38950081) % 79) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3077056399u32 as f32)); // Results in [0,1). + const PERM79: [u16; 79] = [0, 47, 16, 63, 32, 8, 55, 24, 71, 36, 4, 51, 20, 67, 43, 12, 59, 28, 75, 38, 2, 49, 18, 65, 34, 10, 57, 26, 73, 41, 6, 53, 22, 69, 45, 14, 61, 30, 77, 39, 1, 48, 17, 64, 33, 9, 56, 25, 72, 37, 5, 52, 21, 68, 44, 13, 60, 29, 76, 40, 3, 50, 19, 66, 35, 11, 58, 27, 74, 42, 7, 54, 23, 70, 46, 15, 62, 31, 78]; + + return (unsafe{*PERM79.get_unchecked((index % 79) as usize)} as u32 * 38950081 + + unsafe{*PERM79.get_unchecked(((index / 79) % 79) as usize)} as u32 * 493039 + + unsafe{*PERM79.get_unchecked(((index / 6241) % 79) as usize)} as u32 * 6241 + + unsafe{*PERM79.get_unchecked(((index / 493039) % 79) as usize)} as u32 * 79 + + unsafe{*PERM79.get_unchecked(((index / 38950081) % 79) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (3077056399u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton83(index: u32) -> f32 { - const PERM83: [u16; 83] = [0, 51, 32, 16, 67, 8, 59, 43, 24, 75, 4, 55, 36, 20, 71, 12, 63, - 47, 28, 79, 40, 2, 53, 34, 18, 69, 10, 61, 45, 26, 77, 6, 57, 38, - 22, 73, 14, 65, 49, 30, 81, 41, 1, 52, 33, 17, 68, 9, 60, 44, 25, - 76, 5, 56, 37, 21, 72, 13, 64, 48, 29, 80, 42, 3, 54, 35, 19, 70, - 11, 62, 46, 27, 78, 7, 58, 39, 23, 74, 15, 66, 50, 31, 82]; - - return (unsafe { *PERM83.get_unchecked((index % 83) as usize) } as u32 * 47458321 + - unsafe { *PERM83.get_unchecked(((index / 83) % 83) as usize) } as u32 * 571787 + - unsafe { *PERM83.get_unchecked(((index / 6889) % 83) as usize) } as u32 * 6889 + - unsafe { *PERM83.get_unchecked(((index / 571787) % 83) as usize) } as u32 * 83 + - unsafe { - *PERM83.get_unchecked(((index / 47458321) % 83) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3939040643u32 as f32)); // Results in [0,1). + const PERM83: [u16; 83] = [0, 51, 32, 16, 67, 8, 59, 43, 24, 75, 4, 55, 36, 20, 71, 12, 63, 47, 28, 79, 40, 2, 53, 34, 18, 69, 10, 61, 45, 26, 77, 6, 57, 38, 22, 73, 14, 65, 49, 30, 81, 41, 1, 52, 33, 17, 68, 9, 60, 44, 25, 76, 5, 56, 37, 21, 72, 13, 64, 48, 29, 80, 42, 3, 54, 35, 19, 70, 11, 62, 46, 27, 78, 7, 58, 39, 23, 74, 15, 66, 50, 31, 82]; + + return (unsafe{*PERM83.get_unchecked((index % 83) as usize)} as u32 * 47458321 + + unsafe{*PERM83.get_unchecked(((index / 83) % 83) as usize)} as u32 * 571787 + + unsafe{*PERM83.get_unchecked(((index / 6889) % 83) as usize)} as u32 * 6889 + + unsafe{*PERM83.get_unchecked(((index / 571787) % 83) as usize)} as u32 * 83 + + unsafe{*PERM83.get_unchecked(((index / 47458321) % 83) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (3939040643u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton89(index: u32) -> f32 { - const PERM89: [u16; 89] = [0, 57, 32, 16, 73, 40, 8, 65, 49, 24, 81, 4, 61, 36, 20, 77, 45, - 12, 69, 53, 28, 85, 2, 59, 34, 18, 75, 42, 10, 67, 51, 26, 83, 6, - 63, 38, 22, 79, 47, 14, 71, 55, 30, 87, 44, 1, 58, 33, 17, 74, 41, - 9, 66, 50, 25, 82, 5, 62, 37, 21, 78, 46, 13, 70, 54, 29, 86, 3, - 60, 35, 19, 76, 43, 11, 68, 52, 27, 84, 7, 64, 39, 23, 80, 48, 15, - 72, 56, 31, 88]; - - return (unsafe { *PERM89.get_unchecked((index % 89) as usize) } as u32 * 704969 + - unsafe { *PERM89.get_unchecked(((index / 89) % 89) as usize) } as u32 * 7921 + - unsafe { *PERM89.get_unchecked(((index / 7921) % 89) as usize) } as u32 * 89 + - unsafe { - *PERM89.get_unchecked(((index / 704969) % 89) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (62742241u32 as f32)); // Results in [0,1). + const PERM89: [u16; 89] = [0, 57, 32, 16, 73, 40, 8, 65, 49, 24, 81, 4, 61, 36, 20, 77, 45, 12, 69, 53, 28, 85, 2, 59, 34, 18, 75, 42, 10, 67, 51, 26, 83, 6, 63, 38, 22, 79, 47, 14, 71, 55, 30, 87, 44, 1, 58, 33, 17, 74, 41, 9, 66, 50, 25, 82, 5, 62, 37, 21, 78, 46, 13, 70, 54, 29, 86, 3, 60, 35, 19, 76, 43, 11, 68, 52, 27, 84, 7, 64, 39, 23, 80, 48, 15, 72, 56, 31, 88]; + + return (unsafe{*PERM89.get_unchecked((index % 89) as usize)} as u32 * 704969 + + unsafe{*PERM89.get_unchecked(((index / 89) % 89) as usize)} as u32 * 7921 + + unsafe{*PERM89.get_unchecked(((index / 7921) % 89) as usize)} as u32 * 89 + + unsafe{*PERM89.get_unchecked(((index / 704969) % 89) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (62742241u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton97(index: u32) -> f32 { - const PERM97: [u16; 97] = [0, 32, 65, 16, 49, 81, 8, 40, 73, 24, 57, 89, 4, 36, 69, 20, 53, - 85, 12, 44, 77, 28, 61, 93, 2, 34, 67, 18, 51, 83, 10, 42, 75, 26, - 59, 91, 6, 38, 71, 22, 55, 87, 14, 46, 79, 30, 63, 95, 48, 1, 33, - 66, 17, 50, 82, 9, 41, 74, 25, 58, 90, 5, 37, 70, 21, 54, 86, 13, - 45, 78, 29, 62, 94, 3, 35, 68, 19, 52, 84, 11, 43, 76, 27, 60, 92, - 7, 39, 72, 23, 56, 88, 15, 47, 80, 31, 64, 96]; - - return (unsafe { *PERM97.get_unchecked((index % 97) as usize) } as u32 * 912673 + - unsafe { *PERM97.get_unchecked(((index / 97) % 97) as usize) } as u32 * 9409 + - unsafe { *PERM97.get_unchecked(((index / 9409) % 97) as usize) } as u32 * 97 + - unsafe { - *PERM97.get_unchecked(((index / 912673) % 97) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (88529281u32 as f32)); // Results in [0,1). + const PERM97: [u16; 97] = [0, 32, 65, 16, 49, 81, 8, 40, 73, 24, 57, 89, 4, 36, 69, 20, 53, 85, 12, 44, 77, 28, 61, 93, 2, 34, 67, 18, 51, 83, 10, 42, 75, 26, 59, 91, 6, 38, 71, 22, 55, 87, 14, 46, 79, 30, 63, 95, 48, 1, 33, 66, 17, 50, 82, 9, 41, 74, 25, 58, 90, 5, 37, 70, 21, 54, 86, 13, 45, 78, 29, 62, 94, 3, 35, 68, 19, 52, 84, 11, 43, 76, 27, 60, 92, 7, 39, 72, 23, 56, 88, 15, 47, 80, 31, 64, 96]; + + return (unsafe{*PERM97.get_unchecked((index % 97) as usize)} as u32 * 912673 + + unsafe{*PERM97.get_unchecked(((index / 97) % 97) as usize)} as u32 * 9409 + + unsafe{*PERM97.get_unchecked(((index / 9409) % 97) as usize)} as u32 * 97 + + unsafe{*PERM97.get_unchecked(((index / 912673) % 97) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (88529281u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton101(index: u32) -> f32 { - const PERM101: [u16; 101] = [0, 32, 69, 16, 53, 85, 8, 40, 77, 24, 61, 93, 48, 4, 36, 73, 20, - 57, 89, 12, 44, 81, 28, 65, 97, 2, 34, 71, 18, 55, 87, 10, 42, - 79, 26, 63, 95, 51, 6, 38, 75, 22, 59, 91, 14, 46, 83, 30, 67, - 99, 50, 1, 33, 70, 17, 54, 86, 9, 41, 78, 25, 62, 94, 49, 5, 37, - 74, 21, 58, 90, 13, 45, 82, 29, 66, 98, 3, 35, 72, 19, 56, 88, - 11, 43, 80, 27, 64, 96, 52, 7, 39, 76, 23, 60, 92, 15, 47, 84, - 31, 68, 100]; - - return (unsafe { *PERM101.get_unchecked((index % 101) as usize) } as u32 * 1030301 + - unsafe { *PERM101.get_unchecked(((index / 101) % 101) as usize) } as u32 * 10201 + - unsafe { *PERM101.get_unchecked(((index / 10201) % 101) as usize) } as u32 * 101 + - unsafe { - *PERM101.get_unchecked(((index / 1030301) % 101) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (104060401u32 as f32)); // Results in [0,1). + const PERM101: [u16; 101] = [0, 32, 69, 16, 53, 85, 8, 40, 77, 24, 61, 93, 48, 4, 36, 73, 20, 57, 89, 12, 44, 81, 28, 65, 97, 2, 34, 71, 18, 55, 87, 10, 42, 79, 26, 63, 95, 51, 6, 38, 75, 22, 59, 91, 14, 46, 83, 30, 67, 99, 50, 1, 33, 70, 17, 54, 86, 9, 41, 78, 25, 62, 94, 49, 5, 37, 74, 21, 58, 90, 13, 45, 82, 29, 66, 98, 3, 35, 72, 19, 56, 88, 11, 43, 80, 27, 64, 96, 52, 7, 39, 76, 23, 60, 92, 15, 47, 84, 31, 68, 100]; + + return (unsafe{*PERM101.get_unchecked((index % 101) as usize)} as u32 * 1030301 + + unsafe{*PERM101.get_unchecked(((index / 101) % 101) as usize)} as u32 * 10201 + + unsafe{*PERM101.get_unchecked(((index / 10201) % 101) as usize)} as u32 * 101 + + unsafe{*PERM101.get_unchecked(((index / 1030301) % 101) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (104060401u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton103(index: u32) -> f32 { - const PERM103: [u16; 103] = [0, 32, 71, 16, 55, 87, 8, 40, 79, 24, 63, 95, 48, 4, 36, 75, 20, - 59, 91, 12, 44, 83, 28, 67, 99, 50, 2, 34, 73, 18, 57, 89, 10, - 42, 81, 26, 65, 97, 53, 6, 38, 77, 22, 61, 93, 14, 46, 85, 30, - 69, 101, 51, 1, 33, 72, 17, 56, 88, 9, 41, 80, 25, 64, 96, 49, 5, - 37, 76, 21, 60, 92, 13, 45, 84, 29, 68, 100, 52, 3, 35, 74, 19, - 58, 90, 11, 43, 82, 27, 66, 98, 54, 7, 39, 78, 23, 62, 94, 15, - 47, 86, 31, 70, 102]; - - return (unsafe { *PERM103.get_unchecked((index % 103) as usize) } as u32 * 1092727 + - unsafe { *PERM103.get_unchecked(((index / 103) % 103) as usize) } as u32 * 10609 + - unsafe { *PERM103.get_unchecked(((index / 10609) % 103) as usize) } as u32 * 103 + - unsafe { - *PERM103.get_unchecked(((index / 1092727) % 103) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (112550881u32 as f32)); // Results in [0,1). + const PERM103: [u16; 103] = [0, 32, 71, 16, 55, 87, 8, 40, 79, 24, 63, 95, 48, 4, 36, 75, 20, 59, 91, 12, 44, 83, 28, 67, 99, 50, 2, 34, 73, 18, 57, 89, 10, 42, 81, 26, 65, 97, 53, 6, 38, 77, 22, 61, 93, 14, 46, 85, 30, 69, 101, 51, 1, 33, 72, 17, 56, 88, 9, 41, 80, 25, 64, 96, 49, 5, 37, 76, 21, 60, 92, 13, 45, 84, 29, 68, 100, 52, 3, 35, 74, 19, 58, 90, 11, 43, 82, 27, 66, 98, 54, 7, 39, 78, 23, 62, 94, 15, 47, 86, 31, 70, 102]; + + return (unsafe{*PERM103.get_unchecked((index % 103) as usize)} as u32 * 1092727 + + unsafe{*PERM103.get_unchecked(((index / 103) % 103) as usize)} as u32 * 10609 + + unsafe{*PERM103.get_unchecked(((index / 10609) % 103) as usize)} as u32 * 103 + + unsafe{*PERM103.get_unchecked(((index / 1092727) % 103) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (112550881u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton107(index: u32) -> f32 { - const PERM107: [u16; 107] = [0, 32, 75, 16, 59, 91, 48, 8, 40, 83, 24, 67, 99, 4, 36, 79, 20, - 63, 95, 55, 12, 44, 87, 28, 71, 103, 52, 2, 34, 77, 18, 61, 93, - 50, 10, 42, 85, 26, 69, 101, 6, 38, 81, 22, 65, 97, 57, 14, 46, - 89, 30, 73, 105, 53, 1, 33, 76, 17, 60, 92, 49, 9, 41, 84, 25, - 68, 100, 5, 37, 80, 21, 64, 96, 56, 13, 45, 88, 29, 72, 104, 54, - 3, 35, 78, 19, 62, 94, 51, 11, 43, 86, 27, 70, 102, 7, 39, 82, - 23, 66, 98, 58, 15, 47, 90, 31, 74, 106]; - - return (unsafe { *PERM107.get_unchecked((index % 107) as usize) } as u32 * 1225043 + - unsafe { *PERM107.get_unchecked(((index / 107) % 107) as usize) } as u32 * 11449 + - unsafe { *PERM107.get_unchecked(((index / 11449) % 107) as usize) } as u32 * 107 + - unsafe { - *PERM107.get_unchecked(((index / 1225043) % 107) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (131079601u32 as f32)); // Results in [0,1). + const PERM107: [u16; 107] = [0, 32, 75, 16, 59, 91, 48, 8, 40, 83, 24, 67, 99, 4, 36, 79, 20, 63, 95, 55, 12, 44, 87, 28, 71, 103, 52, 2, 34, 77, 18, 61, 93, 50, 10, 42, 85, 26, 69, 101, 6, 38, 81, 22, 65, 97, 57, 14, 46, 89, 30, 73, 105, 53, 1, 33, 76, 17, 60, 92, 49, 9, 41, 84, 25, 68, 100, 5, 37, 80, 21, 64, 96, 56, 13, 45, 88, 29, 72, 104, 54, 3, 35, 78, 19, 62, 94, 51, 11, 43, 86, 27, 70, 102, 7, 39, 82, 23, 66, 98, 58, 15, 47, 90, 31, 74, 106]; + + return (unsafe{*PERM107.get_unchecked((index % 107) as usize)} as u32 * 1225043 + + unsafe{*PERM107.get_unchecked(((index / 107) % 107) as usize)} as u32 * 11449 + + unsafe{*PERM107.get_unchecked(((index / 11449) % 107) as usize)} as u32 * 107 + + unsafe{*PERM107.get_unchecked(((index / 1225043) % 107) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (131079601u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton109(index: u32) -> f32 { - const PERM109: [u16; 109] = [0, 32, 77, 16, 61, 93, 48, 8, 40, 85, 24, 69, 101, 52, 4, 36, 81, - 20, 65, 97, 57, 12, 44, 89, 28, 73, 105, 2, 34, 79, 18, 63, 95, - 50, 10, 42, 87, 26, 71, 103, 55, 6, 38, 83, 22, 67, 99, 59, 14, - 46, 91, 30, 75, 107, 54, 1, 33, 78, 17, 62, 94, 49, 9, 41, 86, - 25, 70, 102, 53, 5, 37, 82, 21, 66, 98, 58, 13, 45, 90, 29, 74, - 106, 3, 35, 80, 19, 64, 96, 51, 11, 43, 88, 27, 72, 104, 56, 7, - 39, 84, 23, 68, 100, 60, 15, 47, 92, 31, 76, 108]; - - return (unsafe { *PERM109.get_unchecked((index % 109) as usize) } as u32 * 1295029 + - unsafe { *PERM109.get_unchecked(((index / 109) % 109) as usize) } as u32 * 11881 + - unsafe { *PERM109.get_unchecked(((index / 11881) % 109) as usize) } as u32 * 109 + - unsafe { - *PERM109.get_unchecked(((index / 1295029) % 109) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (141158161u32 as f32)); // Results in [0,1). + const PERM109: [u16; 109] = [0, 32, 77, 16, 61, 93, 48, 8, 40, 85, 24, 69, 101, 52, 4, 36, 81, 20, 65, 97, 57, 12, 44, 89, 28, 73, 105, 2, 34, 79, 18, 63, 95, 50, 10, 42, 87, 26, 71, 103, 55, 6, 38, 83, 22, 67, 99, 59, 14, 46, 91, 30, 75, 107, 54, 1, 33, 78, 17, 62, 94, 49, 9, 41, 86, 25, 70, 102, 53, 5, 37, 82, 21, 66, 98, 58, 13, 45, 90, 29, 74, 106, 3, 35, 80, 19, 64, 96, 51, 11, 43, 88, 27, 72, 104, 56, 7, 39, 84, 23, 68, 100, 60, 15, 47, 92, 31, 76, 108]; + + return (unsafe{*PERM109.get_unchecked((index % 109) as usize)} as u32 * 1295029 + + unsafe{*PERM109.get_unchecked(((index / 109) % 109) as usize)} as u32 * 11881 + + unsafe{*PERM109.get_unchecked(((index / 11881) % 109) as usize)} as u32 * 109 + + unsafe{*PERM109.get_unchecked(((index / 1295029) % 109) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (141158161u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton113(index: u32) -> f32 { - const PERM113: [u16; 113] = [0, 32, 81, 48, 16, 65, 97, 8, 40, 89, 57, 24, 73, 105, 4, 36, 85, - 52, 20, 69, 101, 12, 44, 93, 61, 28, 77, 109, 2, 34, 83, 50, 18, - 67, 99, 10, 42, 91, 59, 26, 75, 107, 6, 38, 87, 54, 22, 71, 103, - 14, 46, 95, 63, 30, 79, 111, 56, 1, 33, 82, 49, 17, 66, 98, 9, - 41, 90, 58, 25, 74, 106, 5, 37, 86, 53, 21, 70, 102, 13, 45, 94, - 62, 29, 78, 110, 3, 35, 84, 51, 19, 68, 100, 11, 43, 92, 60, 27, - 76, 108, 7, 39, 88, 55, 23, 72, 104, 15, 47, 96, 64, 31, 80, 112]; - - return (unsafe { *PERM113.get_unchecked((index % 113) as usize) } as u32 * 1442897 + - unsafe { *PERM113.get_unchecked(((index / 113) % 113) as usize) } as u32 * 12769 + - unsafe { *PERM113.get_unchecked(((index / 12769) % 113) as usize) } as u32 * 113 + - unsafe { - *PERM113.get_unchecked(((index / 1442897) % 113) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (163047361u32 as f32)); // Results in [0,1). + const PERM113: [u16; 113] = [0, 32, 81, 48, 16, 65, 97, 8, 40, 89, 57, 24, 73, 105, 4, 36, 85, 52, 20, 69, 101, 12, 44, 93, 61, 28, 77, 109, 2, 34, 83, 50, 18, 67, 99, 10, 42, 91, 59, 26, 75, 107, 6, 38, 87, 54, 22, 71, 103, 14, 46, 95, 63, 30, 79, 111, 56, 1, 33, 82, 49, 17, 66, 98, 9, 41, 90, 58, 25, 74, 106, 5, 37, 86, 53, 21, 70, 102, 13, 45, 94, 62, 29, 78, 110, 3, 35, 84, 51, 19, 68, 100, 11, 43, 92, 60, 27, 76, 108, 7, 39, 88, 55, 23, 72, 104, 15, 47, 96, 64, 31, 80, 112]; + + return (unsafe{*PERM113.get_unchecked((index % 113) as usize)} as u32 * 1442897 + + unsafe{*PERM113.get_unchecked(((index / 113) % 113) as usize)} as u32 * 12769 + + unsafe{*PERM113.get_unchecked(((index / 12769) % 113) as usize)} as u32 * 113 + + unsafe{*PERM113.get_unchecked(((index / 1442897) % 113) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (163047361u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton127(index: u32) -> f32 { - const PERM127: [u16; 127] = [0, 32, 95, 48, 16, 79, 111, 56, 8, 40, 103, 71, 24, 87, 119, 60, - 4, 36, 99, 52, 20, 83, 115, 67, 12, 44, 107, 75, 28, 91, 123, 62, - 2, 34, 97, 50, 18, 81, 113, 58, 10, 42, 105, 73, 26, 89, 121, 65, - 6, 38, 101, 54, 22, 85, 117, 69, 14, 46, 109, 77, 30, 93, 125, - 63, 1, 33, 96, 49, 17, 80, 112, 57, 9, 41, 104, 72, 25, 88, 120, - 61, 5, 37, 100, 53, 21, 84, 116, 68, 13, 45, 108, 76, 29, 92, - 124, 64, 3, 35, 98, 51, 19, 82, 114, 59, 11, 43, 106, 74, 27, 90, - 122, 66, 7, 39, 102, 55, 23, 86, 118, 70, 15, 47, 110, 78, 31, - 94, 126]; - - return (unsafe { *PERM127.get_unchecked((index % 127) as usize) } as u32 * 2048383 + - unsafe { *PERM127.get_unchecked(((index / 127) % 127) as usize) } as u32 * 16129 + - unsafe { *PERM127.get_unchecked(((index / 16129) % 127) as usize) } as u32 * 127 + - unsafe { - *PERM127.get_unchecked(((index / 2048383) % 127) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (260144641u32 as f32)); // Results in [0,1). + const PERM127: [u16; 127] = [0, 32, 95, 48, 16, 79, 111, 56, 8, 40, 103, 71, 24, 87, 119, 60, 4, 36, 99, 52, 20, 83, 115, 67, 12, 44, 107, 75, 28, 91, 123, 62, 2, 34, 97, 50, 18, 81, 113, 58, 10, 42, 105, 73, 26, 89, 121, 65, 6, 38, 101, 54, 22, 85, 117, 69, 14, 46, 109, 77, 30, 93, 125, 63, 1, 33, 96, 49, 17, 80, 112, 57, 9, 41, 104, 72, 25, 88, 120, 61, 5, 37, 100, 53, 21, 84, 116, 68, 13, 45, 108, 76, 29, 92, 124, 64, 3, 35, 98, 51, 19, 82, 114, 59, 11, 43, 106, 74, 27, 90, 122, 66, 7, 39, 102, 55, 23, 86, 118, 70, 15, 47, 110, 78, 31, 94, 126]; + + return (unsafe{*PERM127.get_unchecked((index % 127) as usize)} as u32 * 2048383 + + unsafe{*PERM127.get_unchecked(((index / 127) % 127) as usize)} as u32 * 16129 + + unsafe{*PERM127.get_unchecked(((index / 16129) % 127) as usize)} as u32 * 127 + + unsafe{*PERM127.get_unchecked(((index / 2048383) % 127) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (260144641u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton131(index: u32) -> f32 { - const PERM131: [u16; 131] = [0, 67, 32, 99, 16, 83, 48, 115, 8, 75, 40, 107, 24, 91, 56, 123, - 4, 71, 36, 103, 20, 87, 52, 119, 12, 79, 44, 111, 28, 95, 60, - 127, 64, 2, 69, 34, 101, 18, 85, 50, 117, 10, 77, 42, 109, 26, - 93, 58, 125, 6, 73, 38, 105, 22, 89, 54, 121, 14, 81, 46, 113, - 30, 97, 62, 129, 65, 1, 68, 33, 100, 17, 84, 49, 116, 9, 76, 41, - 108, 25, 92, 57, 124, 5, 72, 37, 104, 21, 88, 53, 120, 13, 80, - 45, 112, 29, 96, 61, 128, 66, 3, 70, 35, 102, 19, 86, 51, 118, - 11, 78, 43, 110, 27, 94, 59, 126, 7, 74, 39, 106, 23, 90, 55, - 122, 15, 82, 47, 114, 31, 98, 63, 130]; - - return (unsafe { *PERM131.get_unchecked((index % 131) as usize) } as u32 * 2248091 + - unsafe { *PERM131.get_unchecked(((index / 131) % 131) as usize) } as u32 * 17161 + - unsafe { *PERM131.get_unchecked(((index / 17161) % 131) as usize) } as u32 * 131 + - unsafe { - *PERM131.get_unchecked(((index / 2248091) % 131) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (294499921u32 as f32)); // Results in [0,1). + const PERM131: [u16; 131] = [0, 67, 32, 99, 16, 83, 48, 115, 8, 75, 40, 107, 24, 91, 56, 123, 4, 71, 36, 103, 20, 87, 52, 119, 12, 79, 44, 111, 28, 95, 60, 127, 64, 2, 69, 34, 101, 18, 85, 50, 117, 10, 77, 42, 109, 26, 93, 58, 125, 6, 73, 38, 105, 22, 89, 54, 121, 14, 81, 46, 113, 30, 97, 62, 129, 65, 1, 68, 33, 100, 17, 84, 49, 116, 9, 76, 41, 108, 25, 92, 57, 124, 5, 72, 37, 104, 21, 88, 53, 120, 13, 80, 45, 112, 29, 96, 61, 128, 66, 3, 70, 35, 102, 19, 86, 51, 118, 11, 78, 43, 110, 27, 94, 59, 126, 7, 74, 39, 106, 23, 90, 55, 122, 15, 82, 47, 114, 31, 98, 63, 130]; + + return (unsafe{*PERM131.get_unchecked((index % 131) as usize)} as u32 * 2248091 + + unsafe{*PERM131.get_unchecked(((index / 131) % 131) as usize)} as u32 * 17161 + + unsafe{*PERM131.get_unchecked(((index / 17161) % 131) as usize)} as u32 * 131 + + unsafe{*PERM131.get_unchecked(((index / 2248091) % 131) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (294499921u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton137(index: u32) -> f32 { - const PERM137: [u16; 137] = [0, 73, 32, 105, 16, 89, 48, 121, 64, 8, 81, 40, 113, 24, 97, 56, - 129, 4, 77, 36, 109, 20, 93, 52, 125, 69, 12, 85, 44, 117, 28, - 101, 60, 133, 2, 75, 34, 107, 18, 91, 50, 123, 66, 10, 83, 42, - 115, 26, 99, 58, 131, 6, 79, 38, 111, 22, 95, 54, 127, 71, 14, - 87, 46, 119, 30, 103, 62, 135, 68, 1, 74, 33, 106, 17, 90, 49, - 122, 65, 9, 82, 41, 114, 25, 98, 57, 130, 5, 78, 37, 110, 21, 94, - 53, 126, 70, 13, 86, 45, 118, 29, 102, 61, 134, 3, 76, 35, 108, - 19, 92, 51, 124, 67, 11, 84, 43, 116, 27, 100, 59, 132, 7, 80, - 39, 112, 23, 96, 55, 128, 72, 15, 88, 47, 120, 31, 104, 63, 136]; - - return (unsafe { *PERM137.get_unchecked((index % 137) as usize) } as u32 * 2571353 + - unsafe { *PERM137.get_unchecked(((index / 137) % 137) as usize) } as u32 * 18769 + - unsafe { *PERM137.get_unchecked(((index / 18769) % 137) as usize) } as u32 * 137 + - unsafe { - *PERM137.get_unchecked(((index / 2571353) % 137) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (352275361u32 as f32)); // Results in [0,1). + const PERM137: [u16; 137] = [0, 73, 32, 105, 16, 89, 48, 121, 64, 8, 81, 40, 113, 24, 97, 56, 129, 4, 77, 36, 109, 20, 93, 52, 125, 69, 12, 85, 44, 117, 28, 101, 60, 133, 2, 75, 34, 107, 18, 91, 50, 123, 66, 10, 83, 42, 115, 26, 99, 58, 131, 6, 79, 38, 111, 22, 95, 54, 127, 71, 14, 87, 46, 119, 30, 103, 62, 135, 68, 1, 74, 33, 106, 17, 90, 49, 122, 65, 9, 82, 41, 114, 25, 98, 57, 130, 5, 78, 37, 110, 21, 94, 53, 126, 70, 13, 86, 45, 118, 29, 102, 61, 134, 3, 76, 35, 108, 19, 92, 51, 124, 67, 11, 84, 43, 116, 27, 100, 59, 132, 7, 80, 39, 112, 23, 96, 55, 128, 72, 15, 88, 47, 120, 31, 104, 63, 136]; + + return (unsafe{*PERM137.get_unchecked((index % 137) as usize)} as u32 * 2571353 + + unsafe{*PERM137.get_unchecked(((index / 137) % 137) as usize)} as u32 * 18769 + + unsafe{*PERM137.get_unchecked(((index / 18769) % 137) as usize)} as u32 * 137 + + unsafe{*PERM137.get_unchecked(((index / 2571353) % 137) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (352275361u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton139(index: u32) -> f32 { - const PERM139: [u16; 139] = [0, 75, 32, 107, 16, 91, 48, 123, 64, 8, 83, 40, 115, 24, 99, 56, - 131, 4, 79, 36, 111, 20, 95, 52, 127, 71, 12, 87, 44, 119, 28, - 103, 60, 135, 68, 2, 77, 34, 109, 18, 93, 50, 125, 66, 10, 85, - 42, 117, 26, 101, 58, 133, 6, 81, 38, 113, 22, 97, 54, 129, 73, - 14, 89, 46, 121, 30, 105, 62, 137, 69, 1, 76, 33, 108, 17, 92, - 49, 124, 65, 9, 84, 41, 116, 25, 100, 57, 132, 5, 80, 37, 112, - 21, 96, 53, 128, 72, 13, 88, 45, 120, 29, 104, 61, 136, 70, 3, - 78, 35, 110, 19, 94, 51, 126, 67, 11, 86, 43, 118, 27, 102, 59, - 134, 7, 82, 39, 114, 23, 98, 55, 130, 74, 15, 90, 47, 122, 31, - 106, 63, 138]; - - return (unsafe { *PERM139.get_unchecked((index % 139) as usize) } as u32 * 2685619 + - unsafe { *PERM139.get_unchecked(((index / 139) % 139) as usize) } as u32 * 19321 + - unsafe { *PERM139.get_unchecked(((index / 19321) % 139) as usize) } as u32 * 139 + - unsafe { - *PERM139.get_unchecked(((index / 2685619) % 139) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (373301041u32 as f32)); // Results in [0,1). + const PERM139: [u16; 139] = [0, 75, 32, 107, 16, 91, 48, 123, 64, 8, 83, 40, 115, 24, 99, 56, 131, 4, 79, 36, 111, 20, 95, 52, 127, 71, 12, 87, 44, 119, 28, 103, 60, 135, 68, 2, 77, 34, 109, 18, 93, 50, 125, 66, 10, 85, 42, 117, 26, 101, 58, 133, 6, 81, 38, 113, 22, 97, 54, 129, 73, 14, 89, 46, 121, 30, 105, 62, 137, 69, 1, 76, 33, 108, 17, 92, 49, 124, 65, 9, 84, 41, 116, 25, 100, 57, 132, 5, 80, 37, 112, 21, 96, 53, 128, 72, 13, 88, 45, 120, 29, 104, 61, 136, 70, 3, 78, 35, 110, 19, 94, 51, 126, 67, 11, 86, 43, 118, 27, 102, 59, 134, 7, 82, 39, 114, 23, 98, 55, 130, 74, 15, 90, 47, 122, 31, 106, 63, 138]; + + return (unsafe{*PERM139.get_unchecked((index % 139) as usize)} as u32 * 2685619 + + unsafe{*PERM139.get_unchecked(((index / 139) % 139) as usize)} as u32 * 19321 + + unsafe{*PERM139.get_unchecked(((index / 19321) % 139) as usize)} as u32 * 139 + + unsafe{*PERM139.get_unchecked(((index / 2685619) % 139) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (373301041u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton149(index: u32) -> f32 { - const PERM149: [u16; 149] = [0, 85, 32, 117, 64, 16, 101, 48, 133, 8, 93, 40, 125, 77, 24, - 109, 56, 141, 72, 4, 89, 36, 121, 68, 20, 105, 52, 137, 12, 97, - 44, 129, 81, 28, 113, 60, 145, 2, 87, 34, 119, 66, 18, 103, 50, - 135, 10, 95, 42, 127, 79, 26, 111, 58, 143, 75, 6, 91, 38, 123, - 70, 22, 107, 54, 139, 14, 99, 46, 131, 83, 30, 115, 62, 147, 74, - 1, 86, 33, 118, 65, 17, 102, 49, 134, 9, 94, 41, 126, 78, 25, - 110, 57, 142, 73, 5, 90, 37, 122, 69, 21, 106, 53, 138, 13, 98, - 45, 130, 82, 29, 114, 61, 146, 3, 88, 35, 120, 67, 19, 104, 51, - 136, 11, 96, 43, 128, 80, 27, 112, 59, 144, 76, 7, 92, 39, 124, - 71, 23, 108, 55, 140, 15, 100, 47, 132, 84, 31, 116, 63, 148]; - - return (unsafe { *PERM149.get_unchecked((index % 149) as usize) } as u32 * 3307949 + - unsafe { *PERM149.get_unchecked(((index / 149) % 149) as usize) } as u32 * 22201 + - unsafe { *PERM149.get_unchecked(((index / 22201) % 149) as usize) } as u32 * 149 + - unsafe { - *PERM149.get_unchecked(((index / 3307949) % 149) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (492884401u32 as f32)); // Results in [0,1). + const PERM149: [u16; 149] = [0, 85, 32, 117, 64, 16, 101, 48, 133, 8, 93, 40, 125, 77, 24, 109, 56, 141, 72, 4, 89, 36, 121, 68, 20, 105, 52, 137, 12, 97, 44, 129, 81, 28, 113, 60, 145, 2, 87, 34, 119, 66, 18, 103, 50, 135, 10, 95, 42, 127, 79, 26, 111, 58, 143, 75, 6, 91, 38, 123, 70, 22, 107, 54, 139, 14, 99, 46, 131, 83, 30, 115, 62, 147, 74, 1, 86, 33, 118, 65, 17, 102, 49, 134, 9, 94, 41, 126, 78, 25, 110, 57, 142, 73, 5, 90, 37, 122, 69, 21, 106, 53, 138, 13, 98, 45, 130, 82, 29, 114, 61, 146, 3, 88, 35, 120, 67, 19, 104, 51, 136, 11, 96, 43, 128, 80, 27, 112, 59, 144, 76, 7, 92, 39, 124, 71, 23, 108, 55, 140, 15, 100, 47, 132, 84, 31, 116, 63, 148]; + + return (unsafe{*PERM149.get_unchecked((index % 149) as usize)} as u32 * 3307949 + + unsafe{*PERM149.get_unchecked(((index / 149) % 149) as usize)} as u32 * 22201 + + unsafe{*PERM149.get_unchecked(((index / 22201) % 149) as usize)} as u32 * 149 + + unsafe{*PERM149.get_unchecked(((index / 3307949) % 149) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (492884401u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton151(index: u32) -> f32 { - const PERM151: [u16; 151] = [0, 87, 32, 119, 64, 16, 103, 48, 135, 8, 95, 40, 127, 79, 24, - 111, 56, 143, 72, 4, 91, 36, 123, 68, 20, 107, 52, 139, 12, 99, - 44, 131, 83, 28, 115, 60, 147, 74, 2, 89, 34, 121, 66, 18, 105, - 50, 137, 10, 97, 42, 129, 81, 26, 113, 58, 145, 77, 6, 93, 38, - 125, 70, 22, 109, 54, 141, 14, 101, 46, 133, 85, 30, 117, 62, - 149, 75, 1, 88, 33, 120, 65, 17, 104, 49, 136, 9, 96, 41, 128, - 80, 25, 112, 57, 144, 73, 5, 92, 37, 124, 69, 21, 108, 53, 140, - 13, 100, 45, 132, 84, 29, 116, 61, 148, 76, 3, 90, 35, 122, 67, - 19, 106, 51, 138, 11, 98, 43, 130, 82, 27, 114, 59, 146, 78, 7, - 94, 39, 126, 71, 23, 110, 55, 142, 15, 102, 47, 134, 86, 31, 118, - 63, 150]; - - return (unsafe { *PERM151.get_unchecked((index % 151) as usize) } as u32 * 3442951 + - unsafe { *PERM151.get_unchecked(((index / 151) % 151) as usize) } as u32 * 22801 + - unsafe { *PERM151.get_unchecked(((index / 22801) % 151) as usize) } as u32 * 151 + - unsafe { - *PERM151.get_unchecked(((index / 3442951) % 151) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (519885601u32 as f32)); // Results in [0,1). + const PERM151: [u16; 151] = [0, 87, 32, 119, 64, 16, 103, 48, 135, 8, 95, 40, 127, 79, 24, 111, 56, 143, 72, 4, 91, 36, 123, 68, 20, 107, 52, 139, 12, 99, 44, 131, 83, 28, 115, 60, 147, 74, 2, 89, 34, 121, 66, 18, 105, 50, 137, 10, 97, 42, 129, 81, 26, 113, 58, 145, 77, 6, 93, 38, 125, 70, 22, 109, 54, 141, 14, 101, 46, 133, 85, 30, 117, 62, 149, 75, 1, 88, 33, 120, 65, 17, 104, 49, 136, 9, 96, 41, 128, 80, 25, 112, 57, 144, 73, 5, 92, 37, 124, 69, 21, 108, 53, 140, 13, 100, 45, 132, 84, 29, 116, 61, 148, 76, 3, 90, 35, 122, 67, 19, 106, 51, 138, 11, 98, 43, 130, 82, 27, 114, 59, 146, 78, 7, 94, 39, 126, 71, 23, 110, 55, 142, 15, 102, 47, 134, 86, 31, 118, 63, 150]; + + return (unsafe{*PERM151.get_unchecked((index % 151) as usize)} as u32 * 3442951 + + unsafe{*PERM151.get_unchecked(((index / 151) % 151) as usize)} as u32 * 22801 + + unsafe{*PERM151.get_unchecked(((index / 22801) % 151) as usize)} as u32 * 151 + + unsafe{*PERM151.get_unchecked(((index / 3442951) % 151) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (519885601u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton157(index: u32) -> f32 { - const PERM157: [u16; 157] = [0, 93, 32, 125, 64, 16, 109, 48, 141, 72, 8, 101, 40, 133, 85, - 24, 117, 56, 149, 76, 4, 97, 36, 129, 68, 20, 113, 52, 145, 81, - 12, 105, 44, 137, 89, 28, 121, 60, 153, 2, 95, 34, 127, 66, 18, - 111, 50, 143, 74, 10, 103, 42, 135, 87, 26, 119, 58, 151, 79, 6, - 99, 38, 131, 70, 22, 115, 54, 147, 83, 14, 107, 46, 139, 91, 30, - 123, 62, 155, 78, 1, 94, 33, 126, 65, 17, 110, 49, 142, 73, 9, - 102, 41, 134, 86, 25, 118, 57, 150, 77, 5, 98, 37, 130, 69, 21, - 114, 53, 146, 82, 13, 106, 45, 138, 90, 29, 122, 61, 154, 3, 96, - 35, 128, 67, 19, 112, 51, 144, 75, 11, 104, 43, 136, 88, 27, 120, - 59, 152, 80, 7, 100, 39, 132, 71, 23, 116, 55, 148, 84, 15, 108, - 47, 140, 92, 31, 124, 63, 156]; - - return (unsafe { *PERM157.get_unchecked((index % 157) as usize) } as u32 * 3869893 + - unsafe { *PERM157.get_unchecked(((index / 157) % 157) as usize) } as u32 * 24649 + - unsafe { *PERM157.get_unchecked(((index / 24649) % 157) as usize) } as u32 * 157 + - unsafe { - *PERM157.get_unchecked(((index / 3869893) % 157) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (607573201u32 as f32)); // Results in [0,1). + const PERM157: [u16; 157] = [0, 93, 32, 125, 64, 16, 109, 48, 141, 72, 8, 101, 40, 133, 85, 24, 117, 56, 149, 76, 4, 97, 36, 129, 68, 20, 113, 52, 145, 81, 12, 105, 44, 137, 89, 28, 121, 60, 153, 2, 95, 34, 127, 66, 18, 111, 50, 143, 74, 10, 103, 42, 135, 87, 26, 119, 58, 151, 79, 6, 99, 38, 131, 70, 22, 115, 54, 147, 83, 14, 107, 46, 139, 91, 30, 123, 62, 155, 78, 1, 94, 33, 126, 65, 17, 110, 49, 142, 73, 9, 102, 41, 134, 86, 25, 118, 57, 150, 77, 5, 98, 37, 130, 69, 21, 114, 53, 146, 82, 13, 106, 45, 138, 90, 29, 122, 61, 154, 3, 96, 35, 128, 67, 19, 112, 51, 144, 75, 11, 104, 43, 136, 88, 27, 120, 59, 152, 80, 7, 100, 39, 132, 71, 23, 116, 55, 148, 84, 15, 108, 47, 140, 92, 31, 124, 63, 156]; + + return (unsafe{*PERM157.get_unchecked((index % 157) as usize)} as u32 * 3869893 + + unsafe{*PERM157.get_unchecked(((index / 157) % 157) as usize)} as u32 * 24649 + + unsafe{*PERM157.get_unchecked(((index / 24649) % 157) as usize)} as u32 * 157 + + unsafe{*PERM157.get_unchecked(((index / 3869893) % 157) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (607573201u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton163(index: u32) -> f32 { - const PERM163: [u16; 163] = [0, 99, 64, 32, 131, 16, 115, 83, 48, 147, 8, 107, 72, 40, 139, - 24, 123, 91, 56, 155, 4, 103, 68, 36, 135, 20, 119, 87, 52, 151, - 12, 111, 76, 44, 143, 28, 127, 95, 60, 159, 80, 2, 101, 66, 34, - 133, 18, 117, 85, 50, 149, 10, 109, 74, 42, 141, 26, 125, 93, 58, - 157, 6, 105, 70, 38, 137, 22, 121, 89, 54, 153, 14, 113, 78, 46, - 145, 30, 129, 97, 62, 161, 81, 1, 100, 65, 33, 132, 17, 116, 84, - 49, 148, 9, 108, 73, 41, 140, 25, 124, 92, 57, 156, 5, 104, 69, - 37, 136, 21, 120, 88, 53, 152, 13, 112, 77, 45, 144, 29, 128, 96, - 61, 160, 82, 3, 102, 67, 35, 134, 19, 118, 86, 51, 150, 11, 110, - 75, 43, 142, 27, 126, 94, 59, 158, 7, 106, 71, 39, 138, 23, 122, - 90, 55, 154, 15, 114, 79, 47, 146, 31, 130, 98, 63, 162]; - - return (unsafe { *PERM163.get_unchecked((index % 163) as usize) } as u32 * 4330747 + - unsafe { *PERM163.get_unchecked(((index / 163) % 163) as usize) } as u32 * 26569 + - unsafe { *PERM163.get_unchecked(((index / 26569) % 163) as usize) } as u32 * 163 + - unsafe { - *PERM163.get_unchecked(((index / 4330747) % 163) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (705911761u32 as f32)); // Results in [0,1). + const PERM163: [u16; 163] = [0, 99, 64, 32, 131, 16, 115, 83, 48, 147, 8, 107, 72, 40, 139, 24, 123, 91, 56, 155, 4, 103, 68, 36, 135, 20, 119, 87, 52, 151, 12, 111, 76, 44, 143, 28, 127, 95, 60, 159, 80, 2, 101, 66, 34, 133, 18, 117, 85, 50, 149, 10, 109, 74, 42, 141, 26, 125, 93, 58, 157, 6, 105, 70, 38, 137, 22, 121, 89, 54, 153, 14, 113, 78, 46, 145, 30, 129, 97, 62, 161, 81, 1, 100, 65, 33, 132, 17, 116, 84, 49, 148, 9, 108, 73, 41, 140, 25, 124, 92, 57, 156, 5, 104, 69, 37, 136, 21, 120, 88, 53, 152, 13, 112, 77, 45, 144, 29, 128, 96, 61, 160, 82, 3, 102, 67, 35, 134, 19, 118, 86, 51, 150, 11, 110, 75, 43, 142, 27, 126, 94, 59, 158, 7, 106, 71, 39, 138, 23, 122, 90, 55, 154, 15, 114, 79, 47, 146, 31, 130, 98, 63, 162]; + + return (unsafe{*PERM163.get_unchecked((index % 163) as usize)} as u32 * 4330747 + + unsafe{*PERM163.get_unchecked(((index / 163) % 163) as usize)} as u32 * 26569 + + unsafe{*PERM163.get_unchecked(((index / 26569) % 163) as usize)} as u32 * 163 + + unsafe{*PERM163.get_unchecked(((index / 4330747) % 163) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (705911761u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton167(index: u32) -> f32 { - const PERM167: [u16; 167] = [0, 103, 64, 32, 135, 16, 119, 87, 48, 151, 8, 111, 72, 40, 143, - 24, 127, 95, 56, 159, 80, 4, 107, 68, 36, 139, 20, 123, 91, 52, - 155, 12, 115, 76, 44, 147, 28, 131, 99, 60, 163, 82, 2, 105, 66, - 34, 137, 18, 121, 89, 50, 153, 10, 113, 74, 42, 145, 26, 129, 97, - 58, 161, 85, 6, 109, 70, 38, 141, 22, 125, 93, 54, 157, 14, 117, - 78, 46, 149, 30, 133, 101, 62, 165, 83, 1, 104, 65, 33, 136, 17, - 120, 88, 49, 152, 9, 112, 73, 41, 144, 25, 128, 96, 57, 160, 81, - 5, 108, 69, 37, 140, 21, 124, 92, 53, 156, 13, 116, 77, 45, 148, - 29, 132, 100, 61, 164, 84, 3, 106, 67, 35, 138, 19, 122, 90, 51, - 154, 11, 114, 75, 43, 146, 27, 130, 98, 59, 162, 86, 7, 110, 71, - 39, 142, 23, 126, 94, 55, 158, 15, 118, 79, 47, 150, 31, 134, - 102, 63, 166]; - - return (unsafe { *PERM167.get_unchecked((index % 167) as usize) } as u32 * 4657463 + - unsafe { *PERM167.get_unchecked(((index / 167) % 167) as usize) } as u32 * 27889 + - unsafe { *PERM167.get_unchecked(((index / 27889) % 167) as usize) } as u32 * 167 + - unsafe { - *PERM167.get_unchecked(((index / 4657463) % 167) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (777796321u32 as f32)); // Results in [0,1). + const PERM167: [u16; 167] = [0, 103, 64, 32, 135, 16, 119, 87, 48, 151, 8, 111, 72, 40, 143, 24, 127, 95, 56, 159, 80, 4, 107, 68, 36, 139, 20, 123, 91, 52, 155, 12, 115, 76, 44, 147, 28, 131, 99, 60, 163, 82, 2, 105, 66, 34, 137, 18, 121, 89, 50, 153, 10, 113, 74, 42, 145, 26, 129, 97, 58, 161, 85, 6, 109, 70, 38, 141, 22, 125, 93, 54, 157, 14, 117, 78, 46, 149, 30, 133, 101, 62, 165, 83, 1, 104, 65, 33, 136, 17, 120, 88, 49, 152, 9, 112, 73, 41, 144, 25, 128, 96, 57, 160, 81, 5, 108, 69, 37, 140, 21, 124, 92, 53, 156, 13, 116, 77, 45, 148, 29, 132, 100, 61, 164, 84, 3, 106, 67, 35, 138, 19, 122, 90, 51, 154, 11, 114, 75, 43, 146, 27, 130, 98, 59, 162, 86, 7, 110, 71, 39, 142, 23, 126, 94, 55, 158, 15, 118, 79, 47, 150, 31, 134, 102, 63, 166]; + + return (unsafe{*PERM167.get_unchecked((index % 167) as usize)} as u32 * 4657463 + + unsafe{*PERM167.get_unchecked(((index / 167) % 167) as usize)} as u32 * 27889 + + unsafe{*PERM167.get_unchecked(((index / 27889) % 167) as usize)} as u32 * 167 + + unsafe{*PERM167.get_unchecked(((index / 4657463) % 167) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (777796321u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton173(index: u32) -> f32 { - const PERM173: [u16; 173] = [0, 109, 64, 32, 141, 16, 125, 93, 48, 157, 80, 8, 117, 72, 40, - 149, 24, 133, 101, 56, 165, 84, 4, 113, 68, 36, 145, 20, 129, 97, - 52, 161, 89, 12, 121, 76, 44, 153, 28, 137, 105, 60, 169, 2, 111, - 66, 34, 143, 18, 127, 95, 50, 159, 82, 10, 119, 74, 42, 151, 26, - 135, 103, 58, 167, 87, 6, 115, 70, 38, 147, 22, 131, 99, 54, 163, - 91, 14, 123, 78, 46, 155, 30, 139, 107, 62, 171, 86, 1, 110, 65, - 33, 142, 17, 126, 94, 49, 158, 81, 9, 118, 73, 41, 150, 25, 134, - 102, 57, 166, 85, 5, 114, 69, 37, 146, 21, 130, 98, 53, 162, 90, - 13, 122, 77, 45, 154, 29, 138, 106, 61, 170, 3, 112, 67, 35, 144, - 19, 128, 96, 51, 160, 83, 11, 120, 75, 43, 152, 27, 136, 104, 59, - 168, 88, 7, 116, 71, 39, 148, 23, 132, 100, 55, 164, 92, 15, 124, - 79, 47, 156, 31, 140, 108, 63, 172]; - - return (unsafe { *PERM173.get_unchecked((index % 173) as usize) } as u32 * 5177717 + - unsafe { *PERM173.get_unchecked(((index / 173) % 173) as usize) } as u32 * 29929 + - unsafe { *PERM173.get_unchecked(((index / 29929) % 173) as usize) } as u32 * 173 + - unsafe { - *PERM173.get_unchecked(((index / 5177717) % 173) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (895745041u32 as f32)); // Results in [0,1). + const PERM173: [u16; 173] = [0, 109, 64, 32, 141, 16, 125, 93, 48, 157, 80, 8, 117, 72, 40, 149, 24, 133, 101, 56, 165, 84, 4, 113, 68, 36, 145, 20, 129, 97, 52, 161, 89, 12, 121, 76, 44, 153, 28, 137, 105, 60, 169, 2, 111, 66, 34, 143, 18, 127, 95, 50, 159, 82, 10, 119, 74, 42, 151, 26, 135, 103, 58, 167, 87, 6, 115, 70, 38, 147, 22, 131, 99, 54, 163, 91, 14, 123, 78, 46, 155, 30, 139, 107, 62, 171, 86, 1, 110, 65, 33, 142, 17, 126, 94, 49, 158, 81, 9, 118, 73, 41, 150, 25, 134, 102, 57, 166, 85, 5, 114, 69, 37, 146, 21, 130, 98, 53, 162, 90, 13, 122, 77, 45, 154, 29, 138, 106, 61, 170, 3, 112, 67, 35, 144, 19, 128, 96, 51, 160, 83, 11, 120, 75, 43, 152, 27, 136, 104, 59, 168, 88, 7, 116, 71, 39, 148, 23, 132, 100, 55, 164, 92, 15, 124, 79, 47, 156, 31, 140, 108, 63, 172]; + + return (unsafe{*PERM173.get_unchecked((index % 173) as usize)} as u32 * 5177717 + + unsafe{*PERM173.get_unchecked(((index / 173) % 173) as usize)} as u32 * 29929 + + unsafe{*PERM173.get_unchecked(((index / 29929) % 173) as usize)} as u32 * 173 + + unsafe{*PERM173.get_unchecked(((index / 5177717) % 173) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (895745041u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton179(index: u32) -> f32 { - const PERM179: [u16; 179] = [0, 115, 64, 32, 147, 80, 16, 131, 99, 48, 163, 8, 123, 72, 40, - 155, 91, 24, 139, 107, 56, 171, 4, 119, 68, 36, 151, 84, 20, 135, - 103, 52, 167, 12, 127, 76, 44, 159, 95, 28, 143, 111, 60, 175, - 88, 2, 117, 66, 34, 149, 82, 18, 133, 101, 50, 165, 10, 125, 74, - 42, 157, 93, 26, 141, 109, 58, 173, 6, 121, 70, 38, 153, 86, 22, - 137, 105, 54, 169, 14, 129, 78, 46, 161, 97, 30, 145, 113, 62, - 177, 89, 1, 116, 65, 33, 148, 81, 17, 132, 100, 49, 164, 9, 124, - 73, 41, 156, 92, 25, 140, 108, 57, 172, 5, 120, 69, 37, 152, 85, - 21, 136, 104, 53, 168, 13, 128, 77, 45, 160, 96, 29, 144, 112, - 61, 176, 90, 3, 118, 67, 35, 150, 83, 19, 134, 102, 51, 166, 11, - 126, 75, 43, 158, 94, 27, 142, 110, 59, 174, 7, 122, 71, 39, 154, - 87, 23, 138, 106, 55, 170, 15, 130, 79, 47, 162, 98, 31, 146, - 114, 63, 178]; - - return (unsafe { *PERM179.get_unchecked((index % 179) as usize) } as u32 * 5735339 + - unsafe { *PERM179.get_unchecked(((index / 179) % 179) as usize) } as u32 * 32041 + - unsafe { *PERM179.get_unchecked(((index / 32041) % 179) as usize) } as u32 * 179 + - unsafe { - *PERM179.get_unchecked(((index / 5735339) % 179) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1026625681u32 as f32)); // Results in [0,1). + const PERM179: [u16; 179] = [0, 115, 64, 32, 147, 80, 16, 131, 99, 48, 163, 8, 123, 72, 40, 155, 91, 24, 139, 107, 56, 171, 4, 119, 68, 36, 151, 84, 20, 135, 103, 52, 167, 12, 127, 76, 44, 159, 95, 28, 143, 111, 60, 175, 88, 2, 117, 66, 34, 149, 82, 18, 133, 101, 50, 165, 10, 125, 74, 42, 157, 93, 26, 141, 109, 58, 173, 6, 121, 70, 38, 153, 86, 22, 137, 105, 54, 169, 14, 129, 78, 46, 161, 97, 30, 145, 113, 62, 177, 89, 1, 116, 65, 33, 148, 81, 17, 132, 100, 49, 164, 9, 124, 73, 41, 156, 92, 25, 140, 108, 57, 172, 5, 120, 69, 37, 152, 85, 21, 136, 104, 53, 168, 13, 128, 77, 45, 160, 96, 29, 144, 112, 61, 176, 90, 3, 118, 67, 35, 150, 83, 19, 134, 102, 51, 166, 11, 126, 75, 43, 158, 94, 27, 142, 110, 59, 174, 7, 122, 71, 39, 154, 87, 23, 138, 106, 55, 170, 15, 130, 79, 47, 162, 98, 31, 146, 114, 63, 178]; + + return (unsafe{*PERM179.get_unchecked((index % 179) as usize)} as u32 * 5735339 + + unsafe{*PERM179.get_unchecked(((index / 179) % 179) as usize)} as u32 * 32041 + + unsafe{*PERM179.get_unchecked(((index / 32041) % 179) as usize)} as u32 * 179 + + unsafe{*PERM179.get_unchecked(((index / 5735339) % 179) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (1026625681u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton181(index: u32) -> f32 { - const PERM181: [u16; 181] = [0, 117, 64, 32, 149, 80, 16, 133, 101, 48, 165, 8, 125, 72, 40, - 157, 93, 24, 141, 109, 56, 173, 88, 4, 121, 68, 36, 153, 84, 20, - 137, 105, 52, 169, 12, 129, 76, 44, 161, 97, 28, 145, 113, 60, - 177, 2, 119, 66, 34, 151, 82, 18, 135, 103, 50, 167, 10, 127, 74, - 42, 159, 95, 26, 143, 111, 58, 175, 91, 6, 123, 70, 38, 155, 86, - 22, 139, 107, 54, 171, 14, 131, 78, 46, 163, 99, 30, 147, 115, - 62, 179, 90, 1, 118, 65, 33, 150, 81, 17, 134, 102, 49, 166, 9, - 126, 73, 41, 158, 94, 25, 142, 110, 57, 174, 89, 5, 122, 69, 37, - 154, 85, 21, 138, 106, 53, 170, 13, 130, 77, 45, 162, 98, 29, - 146, 114, 61, 178, 3, 120, 67, 35, 152, 83, 19, 136, 104, 51, - 168, 11, 128, 75, 43, 160, 96, 27, 144, 112, 59, 176, 92, 7, 124, - 71, 39, 156, 87, 23, 140, 108, 55, 172, 15, 132, 79, 47, 164, - 100, 31, 148, 116, 63, 180]; - - return (unsafe { *PERM181.get_unchecked((index % 181) as usize) } as u32 * 5929741 + - unsafe { *PERM181.get_unchecked(((index / 181) % 181) as usize) } as u32 * 32761 + - unsafe { *PERM181.get_unchecked(((index / 32761) % 181) as usize) } as u32 * 181 + - unsafe { - *PERM181.get_unchecked(((index / 5929741) % 181) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1073283121u32 as f32)); // Results in [0,1). + const PERM181: [u16; 181] = [0, 117, 64, 32, 149, 80, 16, 133, 101, 48, 165, 8, 125, 72, 40, 157, 93, 24, 141, 109, 56, 173, 88, 4, 121, 68, 36, 153, 84, 20, 137, 105, 52, 169, 12, 129, 76, 44, 161, 97, 28, 145, 113, 60, 177, 2, 119, 66, 34, 151, 82, 18, 135, 103, 50, 167, 10, 127, 74, 42, 159, 95, 26, 143, 111, 58, 175, 91, 6, 123, 70, 38, 155, 86, 22, 139, 107, 54, 171, 14, 131, 78, 46, 163, 99, 30, 147, 115, 62, 179, 90, 1, 118, 65, 33, 150, 81, 17, 134, 102, 49, 166, 9, 126, 73, 41, 158, 94, 25, 142, 110, 57, 174, 89, 5, 122, 69, 37, 154, 85, 21, 138, 106, 53, 170, 13, 130, 77, 45, 162, 98, 29, 146, 114, 61, 178, 3, 120, 67, 35, 152, 83, 19, 136, 104, 51, 168, 11, 128, 75, 43, 160, 96, 27, 144, 112, 59, 176, 92, 7, 124, 71, 39, 156, 87, 23, 140, 108, 55, 172, 15, 132, 79, 47, 164, 100, 31, 148, 116, 63, 180]; + + return (unsafe{*PERM181.get_unchecked((index % 181) as usize)} as u32 * 5929741 + + unsafe{*PERM181.get_unchecked(((index / 181) % 181) as usize)} as u32 * 32761 + + unsafe{*PERM181.get_unchecked(((index / 32761) % 181) as usize)} as u32 * 181 + + unsafe{*PERM181.get_unchecked(((index / 5929741) % 181) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (1073283121u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton191(index: u32) -> f32 { - const PERM191: [u16; 191] = [0, 127, 64, 32, 159, 80, 16, 143, 111, 48, 175, 88, 8, 135, 72, - 40, 167, 103, 24, 151, 119, 56, 183, 92, 4, 131, 68, 36, 163, 84, - 20, 147, 115, 52, 179, 99, 12, 139, 76, 44, 171, 107, 28, 155, - 123, 60, 187, 94, 2, 129, 66, 34, 161, 82, 18, 145, 113, 50, 177, - 90, 10, 137, 74, 42, 169, 105, 26, 153, 121, 58, 185, 97, 6, 133, - 70, 38, 165, 86, 22, 149, 117, 54, 181, 101, 14, 141, 78, 46, - 173, 109, 30, 157, 125, 62, 189, 95, 1, 128, 65, 33, 160, 81, 17, - 144, 112, 49, 176, 89, 9, 136, 73, 41, 168, 104, 25, 152, 120, - 57, 184, 93, 5, 132, 69, 37, 164, 85, 21, 148, 116, 53, 180, 100, - 13, 140, 77, 45, 172, 108, 29, 156, 124, 61, 188, 96, 3, 130, 67, - 35, 162, 83, 19, 146, 114, 51, 178, 91, 11, 138, 75, 43, 170, - 106, 27, 154, 122, 59, 186, 98, 7, 134, 71, 39, 166, 87, 23, 150, - 118, 55, 182, 102, 15, 142, 79, 47, 174, 110, 31, 158, 126, 63, - 190]; - - return (unsafe { *PERM191.get_unchecked((index % 191) as usize) } as u32 * 6967871 + - unsafe { *PERM191.get_unchecked(((index / 191) % 191) as usize) } as u32 * 36481 + - unsafe { *PERM191.get_unchecked(((index / 36481) % 191) as usize) } as u32 * 191 + - unsafe { - *PERM191.get_unchecked(((index / 6967871) % 191) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1330863361u32 as f32)); // Results in [0,1). + const PERM191: [u16; 191] = [0, 127, 64, 32, 159, 80, 16, 143, 111, 48, 175, 88, 8, 135, 72, 40, 167, 103, 24, 151, 119, 56, 183, 92, 4, 131, 68, 36, 163, 84, 20, 147, 115, 52, 179, 99, 12, 139, 76, 44, 171, 107, 28, 155, 123, 60, 187, 94, 2, 129, 66, 34, 161, 82, 18, 145, 113, 50, 177, 90, 10, 137, 74, 42, 169, 105, 26, 153, 121, 58, 185, 97, 6, 133, 70, 38, 165, 86, 22, 149, 117, 54, 181, 101, 14, 141, 78, 46, 173, 109, 30, 157, 125, 62, 189, 95, 1, 128, 65, 33, 160, 81, 17, 144, 112, 49, 176, 89, 9, 136, 73, 41, 168, 104, 25, 152, 120, 57, 184, 93, 5, 132, 69, 37, 164, 85, 21, 148, 116, 53, 180, 100, 13, 140, 77, 45, 172, 108, 29, 156, 124, 61, 188, 96, 3, 130, 67, 35, 162, 83, 19, 146, 114, 51, 178, 91, 11, 138, 75, 43, 170, 106, 27, 154, 122, 59, 186, 98, 7, 134, 71, 39, 166, 87, 23, 150, 118, 55, 182, 102, 15, 142, 79, 47, 174, 110, 31, 158, 126, 63, 190]; + + return (unsafe{*PERM191.get_unchecked((index % 191) as usize)} as u32 * 6967871 + + unsafe{*PERM191.get_unchecked(((index / 191) % 191) as usize)} as u32 * 36481 + + unsafe{*PERM191.get_unchecked(((index / 36481) % 191) as usize)} as u32 * 191 + + unsafe{*PERM191.get_unchecked(((index / 6967871) % 191) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (1330863361u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton193(index: u32) -> f32 { - const PERM193: [u16; 193] = [0, 64, 129, 32, 97, 161, 16, 80, 145, 48, 113, 177, 8, 72, 137, - 40, 105, 169, 24, 88, 153, 56, 121, 185, 4, 68, 133, 36, 101, - 165, 20, 84, 149, 52, 117, 181, 12, 76, 141, 44, 109, 173, 28, - 92, 157, 60, 125, 189, 2, 66, 131, 34, 99, 163, 18, 82, 147, 50, - 115, 179, 10, 74, 139, 42, 107, 171, 26, 90, 155, 58, 123, 187, - 6, 70, 135, 38, 103, 167, 22, 86, 151, 54, 119, 183, 14, 78, 143, - 46, 111, 175, 30, 94, 159, 62, 127, 191, 96, 1, 65, 130, 33, 98, - 162, 17, 81, 146, 49, 114, 178, 9, 73, 138, 41, 106, 170, 25, 89, - 154, 57, 122, 186, 5, 69, 134, 37, 102, 166, 21, 85, 150, 53, - 118, 182, 13, 77, 142, 45, 110, 174, 29, 93, 158, 61, 126, 190, - 3, 67, 132, 35, 100, 164, 19, 83, 148, 51, 116, 180, 11, 75, 140, - 43, 108, 172, 27, 91, 156, 59, 124, 188, 7, 71, 136, 39, 104, - 168, 23, 87, 152, 55, 120, 184, 15, 79, 144, 47, 112, 176, 31, - 95, 160, 63, 128, 192]; - - return (unsafe { *PERM193.get_unchecked((index % 193) as usize) } as u32 * 7189057 + - unsafe { *PERM193.get_unchecked(((index / 193) % 193) as usize) } as u32 * 37249 + - unsafe { *PERM193.get_unchecked(((index / 37249) % 193) as usize) } as u32 * 193 + - unsafe { - *PERM193.get_unchecked(((index / 7189057) % 193) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1387488001u32 as f32)); // Results in [0,1). + const PERM193: [u16; 193] = [0, 64, 129, 32, 97, 161, 16, 80, 145, 48, 113, 177, 8, 72, 137, 40, 105, 169, 24, 88, 153, 56, 121, 185, 4, 68, 133, 36, 101, 165, 20, 84, 149, 52, 117, 181, 12, 76, 141, 44, 109, 173, 28, 92, 157, 60, 125, 189, 2, 66, 131, 34, 99, 163, 18, 82, 147, 50, 115, 179, 10, 74, 139, 42, 107, 171, 26, 90, 155, 58, 123, 187, 6, 70, 135, 38, 103, 167, 22, 86, 151, 54, 119, 183, 14, 78, 143, 46, 111, 175, 30, 94, 159, 62, 127, 191, 96, 1, 65, 130, 33, 98, 162, 17, 81, 146, 49, 114, 178, 9, 73, 138, 41, 106, 170, 25, 89, 154, 57, 122, 186, 5, 69, 134, 37, 102, 166, 21, 85, 150, 53, 118, 182, 13, 77, 142, 45, 110, 174, 29, 93, 158, 61, 126, 190, 3, 67, 132, 35, 100, 164, 19, 83, 148, 51, 116, 180, 11, 75, 140, 43, 108, 172, 27, 91, 156, 59, 124, 188, 7, 71, 136, 39, 104, 168, 23, 87, 152, 55, 120, 184, 15, 79, 144, 47, 112, 176, 31, 95, 160, 63, 128, 192]; + + return (unsafe{*PERM193.get_unchecked((index % 193) as usize)} as u32 * 7189057 + + unsafe{*PERM193.get_unchecked(((index / 193) % 193) as usize)} as u32 * 37249 + + unsafe{*PERM193.get_unchecked(((index / 37249) % 193) as usize)} as u32 * 193 + + unsafe{*PERM193.get_unchecked(((index / 7189057) % 193) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (1387488001u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton197(index: u32) -> f32 { - const PERM197: [u16; 197] = [0, 64, 133, 32, 101, 165, 16, 80, 149, 48, 117, 181, 8, 72, 141, - 40, 109, 173, 24, 88, 157, 56, 125, 189, 96, 4, 68, 137, 36, 105, - 169, 20, 84, 153, 52, 121, 185, 12, 76, 145, 44, 113, 177, 28, - 92, 161, 60, 129, 193, 2, 66, 135, 34, 103, 167, 18, 82, 151, 50, - 119, 183, 10, 74, 143, 42, 111, 175, 26, 90, 159, 58, 127, 191, - 99, 6, 70, 139, 38, 107, 171, 22, 86, 155, 54, 123, 187, 14, 78, - 147, 46, 115, 179, 30, 94, 163, 62, 131, 195, 98, 1, 65, 134, 33, - 102, 166, 17, 81, 150, 49, 118, 182, 9, 73, 142, 41, 110, 174, - 25, 89, 158, 57, 126, 190, 97, 5, 69, 138, 37, 106, 170, 21, 85, - 154, 53, 122, 186, 13, 77, 146, 45, 114, 178, 29, 93, 162, 61, - 130, 194, 3, 67, 136, 35, 104, 168, 19, 83, 152, 51, 120, 184, - 11, 75, 144, 43, 112, 176, 27, 91, 160, 59, 128, 192, 100, 7, 71, - 140, 39, 108, 172, 23, 87, 156, 55, 124, 188, 15, 79, 148, 47, - 116, 180, 31, 95, 164, 63, 132, 196]; - - return (unsafe { *PERM197.get_unchecked((index % 197) as usize) } as u32 * 7645373 + - unsafe { *PERM197.get_unchecked(((index / 197) % 197) as usize) } as u32 * 38809 + - unsafe { *PERM197.get_unchecked(((index / 38809) % 197) as usize) } as u32 * 197 + - unsafe { - *PERM197.get_unchecked(((index / 7645373) % 197) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1506138481u32 as f32)); // Results in [0,1). + const PERM197: [u16; 197] = [0, 64, 133, 32, 101, 165, 16, 80, 149, 48, 117, 181, 8, 72, 141, 40, 109, 173, 24, 88, 157, 56, 125, 189, 96, 4, 68, 137, 36, 105, 169, 20, 84, 153, 52, 121, 185, 12, 76, 145, 44, 113, 177, 28, 92, 161, 60, 129, 193, 2, 66, 135, 34, 103, 167, 18, 82, 151, 50, 119, 183, 10, 74, 143, 42, 111, 175, 26, 90, 159, 58, 127, 191, 99, 6, 70, 139, 38, 107, 171, 22, 86, 155, 54, 123, 187, 14, 78, 147, 46, 115, 179, 30, 94, 163, 62, 131, 195, 98, 1, 65, 134, 33, 102, 166, 17, 81, 150, 49, 118, 182, 9, 73, 142, 41, 110, 174, 25, 89, 158, 57, 126, 190, 97, 5, 69, 138, 37, 106, 170, 21, 85, 154, 53, 122, 186, 13, 77, 146, 45, 114, 178, 29, 93, 162, 61, 130, 194, 3, 67, 136, 35, 104, 168, 19, 83, 152, 51, 120, 184, 11, 75, 144, 43, 112, 176, 27, 91, 160, 59, 128, 192, 100, 7, 71, 140, 39, 108, 172, 23, 87, 156, 55, 124, 188, 15, 79, 148, 47, 116, 180, 31, 95, 164, 63, 132, 196]; + + return (unsafe{*PERM197.get_unchecked((index % 197) as usize)} as u32 * 7645373 + + unsafe{*PERM197.get_unchecked(((index / 197) % 197) as usize)} as u32 * 38809 + + unsafe{*PERM197.get_unchecked(((index / 38809) % 197) as usize)} as u32 * 197 + + unsafe{*PERM197.get_unchecked(((index / 7645373) % 197) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (1506138481u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton199(index: u32) -> f32 { - const PERM199: [u16; 199] = [0, 64, 135, 32, 103, 167, 16, 80, 151, 48, 119, 183, 8, 72, 143, - 40, 111, 175, 24, 88, 159, 56, 127, 191, 96, 4, 68, 139, 36, 107, - 171, 20, 84, 155, 52, 123, 187, 12, 76, 147, 44, 115, 179, 28, - 92, 163, 60, 131, 195, 98, 2, 66, 137, 34, 105, 169, 18, 82, 153, - 50, 121, 185, 10, 74, 145, 42, 113, 177, 26, 90, 161, 58, 129, - 193, 101, 6, 70, 141, 38, 109, 173, 22, 86, 157, 54, 125, 189, - 14, 78, 149, 46, 117, 181, 30, 94, 165, 62, 133, 197, 99, 1, 65, - 136, 33, 104, 168, 17, 81, 152, 49, 120, 184, 9, 73, 144, 41, - 112, 176, 25, 89, 160, 57, 128, 192, 97, 5, 69, 140, 37, 108, - 172, 21, 85, 156, 53, 124, 188, 13, 77, 148, 45, 116, 180, 29, - 93, 164, 61, 132, 196, 100, 3, 67, 138, 35, 106, 170, 19, 83, - 154, 51, 122, 186, 11, 75, 146, 43, 114, 178, 27, 91, 162, 59, - 130, 194, 102, 7, 71, 142, 39, 110, 174, 23, 87, 158, 55, 126, - 190, 15, 79, 150, 47, 118, 182, 31, 95, 166, 63, 134, 198]; - - return (unsafe { *PERM199.get_unchecked((index % 199) as usize) } as u32 * 7880599 + - unsafe { *PERM199.get_unchecked(((index / 199) % 199) as usize) } as u32 * 39601 + - unsafe { *PERM199.get_unchecked(((index / 39601) % 199) as usize) } as u32 * 199 + - unsafe { - *PERM199.get_unchecked(((index / 7880599) % 199) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1568239201u32 as f32)); // Results in [0,1). + const PERM199: [u16; 199] = [0, 64, 135, 32, 103, 167, 16, 80, 151, 48, 119, 183, 8, 72, 143, 40, 111, 175, 24, 88, 159, 56, 127, 191, 96, 4, 68, 139, 36, 107, 171, 20, 84, 155, 52, 123, 187, 12, 76, 147, 44, 115, 179, 28, 92, 163, 60, 131, 195, 98, 2, 66, 137, 34, 105, 169, 18, 82, 153, 50, 121, 185, 10, 74, 145, 42, 113, 177, 26, 90, 161, 58, 129, 193, 101, 6, 70, 141, 38, 109, 173, 22, 86, 157, 54, 125, 189, 14, 78, 149, 46, 117, 181, 30, 94, 165, 62, 133, 197, 99, 1, 65, 136, 33, 104, 168, 17, 81, 152, 49, 120, 184, 9, 73, 144, 41, 112, 176, 25, 89, 160, 57, 128, 192, 97, 5, 69, 140, 37, 108, 172, 21, 85, 156, 53, 124, 188, 13, 77, 148, 45, 116, 180, 29, 93, 164, 61, 132, 196, 100, 3, 67, 138, 35, 106, 170, 19, 83, 154, 51, 122, 186, 11, 75, 146, 43, 114, 178, 27, 91, 162, 59, 130, 194, 102, 7, 71, 142, 39, 110, 174, 23, 87, 158, 55, 126, 190, 15, 79, 150, 47, 118, 182, 31, 95, 166, 63, 134, 198]; + + return (unsafe{*PERM199.get_unchecked((index % 199) as usize)} as u32 * 7880599 + + unsafe{*PERM199.get_unchecked(((index / 199) % 199) as usize)} as u32 * 39601 + + unsafe{*PERM199.get_unchecked(((index / 39601) % 199) as usize)} as u32 * 199 + + unsafe{*PERM199.get_unchecked(((index / 7880599) % 199) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (1568239201u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton211(index: u32) -> f32 { - const PERM211: [u16; 211] = [0, 64, 147, 32, 115, 179, 96, 16, 80, 163, 48, 131, 195, 8, 72, - 155, 40, 123, 187, 107, 24, 88, 171, 56, 139, 203, 4, 68, 151, - 36, 119, 183, 100, 20, 84, 167, 52, 135, 199, 12, 76, 159, 44, - 127, 191, 111, 28, 92, 175, 60, 143, 207, 104, 2, 66, 149, 34, - 117, 181, 98, 18, 82, 165, 50, 133, 197, 10, 74, 157, 42, 125, - 189, 109, 26, 90, 173, 58, 141, 205, 6, 70, 153, 38, 121, 185, - 102, 22, 86, 169, 54, 137, 201, 14, 78, 161, 46, 129, 193, 113, - 30, 94, 177, 62, 145, 209, 105, 1, 65, 148, 33, 116, 180, 97, 17, - 81, 164, 49, 132, 196, 9, 73, 156, 41, 124, 188, 108, 25, 89, - 172, 57, 140, 204, 5, 69, 152, 37, 120, 184, 101, 21, 85, 168, - 53, 136, 200, 13, 77, 160, 45, 128, 192, 112, 29, 93, 176, 61, - 144, 208, 106, 3, 67, 150, 35, 118, 182, 99, 19, 83, 166, 51, - 134, 198, 11, 75, 158, 43, 126, 190, 110, 27, 91, 174, 59, 142, - 206, 7, 71, 154, 39, 122, 186, 103, 23, 87, 170, 55, 138, 202, - 15, 79, 162, 47, 130, 194, 114, 31, 95, 178, 63, 146, 210]; - - return (unsafe { *PERM211.get_unchecked((index % 211) as usize) } as u32 * 9393931 + - unsafe { *PERM211.get_unchecked(((index / 211) % 211) as usize) } as u32 * 44521 + - unsafe { *PERM211.get_unchecked(((index / 44521) % 211) as usize) } as u32 * 211 + - unsafe { - *PERM211.get_unchecked(((index / 9393931) % 211) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1982119441u32 as f32)); // Results in [0,1). + const PERM211: [u16; 211] = [0, 64, 147, 32, 115, 179, 96, 16, 80, 163, 48, 131, 195, 8, 72, 155, 40, 123, 187, 107, 24, 88, 171, 56, 139, 203, 4, 68, 151, 36, 119, 183, 100, 20, 84, 167, 52, 135, 199, 12, 76, 159, 44, 127, 191, 111, 28, 92, 175, 60, 143, 207, 104, 2, 66, 149, 34, 117, 181, 98, 18, 82, 165, 50, 133, 197, 10, 74, 157, 42, 125, 189, 109, 26, 90, 173, 58, 141, 205, 6, 70, 153, 38, 121, 185, 102, 22, 86, 169, 54, 137, 201, 14, 78, 161, 46, 129, 193, 113, 30, 94, 177, 62, 145, 209, 105, 1, 65, 148, 33, 116, 180, 97, 17, 81, 164, 49, 132, 196, 9, 73, 156, 41, 124, 188, 108, 25, 89, 172, 57, 140, 204, 5, 69, 152, 37, 120, 184, 101, 21, 85, 168, 53, 136, 200, 13, 77, 160, 45, 128, 192, 112, 29, 93, 176, 61, 144, 208, 106, 3, 67, 150, 35, 118, 182, 99, 19, 83, 166, 51, 134, 198, 11, 75, 158, 43, 126, 190, 110, 27, 91, 174, 59, 142, 206, 7, 71, 154, 39, 122, 186, 103, 23, 87, 170, 55, 138, 202, 15, 79, 162, 47, 130, 194, 114, 31, 95, 178, 63, 146, 210]; + + return (unsafe{*PERM211.get_unchecked((index % 211) as usize)} as u32 * 9393931 + + unsafe{*PERM211.get_unchecked(((index / 211) % 211) as usize)} as u32 * 44521 + + unsafe{*PERM211.get_unchecked(((index / 44521) % 211) as usize)} as u32 * 211 + + unsafe{*PERM211.get_unchecked(((index / 9393931) % 211) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (1982119441u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton223(index: u32) -> f32 { - const PERM223: [u16; 223] = [0, 64, 159, 32, 127, 191, 96, 16, 80, 175, 48, 143, 207, 104, 8, - 72, 167, 40, 135, 199, 119, 24, 88, 183, 56, 151, 215, 108, 4, - 68, 163, 36, 131, 195, 100, 20, 84, 179, 52, 147, 211, 115, 12, - 76, 171, 44, 139, 203, 123, 28, 92, 187, 60, 155, 219, 110, 2, - 66, 161, 34, 129, 193, 98, 18, 82, 177, 50, 145, 209, 106, 10, - 74, 169, 42, 137, 201, 121, 26, 90, 185, 58, 153, 217, 113, 6, - 70, 165, 38, 133, 197, 102, 22, 86, 181, 54, 149, 213, 117, 14, - 78, 173, 46, 141, 205, 125, 30, 94, 189, 62, 157, 221, 111, 1, - 65, 160, 33, 128, 192, 97, 17, 81, 176, 49, 144, 208, 105, 9, 73, - 168, 41, 136, 200, 120, 25, 89, 184, 57, 152, 216, 109, 5, 69, - 164, 37, 132, 196, 101, 21, 85, 180, 53, 148, 212, 116, 13, 77, - 172, 45, 140, 204, 124, 29, 93, 188, 61, 156, 220, 112, 3, 67, - 162, 35, 130, 194, 99, 19, 83, 178, 51, 146, 210, 107, 11, 75, - 170, 43, 138, 202, 122, 27, 91, 186, 59, 154, 218, 114, 7, 71, - 166, 39, 134, 198, 103, 23, 87, 182, 55, 150, 214, 118, 15, 79, - 174, 47, 142, 206, 126, 31, 95, 190, 63, 158, 222]; - - return (unsafe { *PERM223.get_unchecked((index % 223) as usize) } as u32 * 11089567 + - unsafe { *PERM223.get_unchecked(((index / 223) % 223) as usize) } as u32 * 49729 + - unsafe { *PERM223.get_unchecked(((index / 49729) % 223) as usize) } as u32 * 223 + - unsafe { - *PERM223.get_unchecked(((index / 11089567) % 223) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2472973441u32 as f32)); // Results in [0,1). + const PERM223: [u16; 223] = [0, 64, 159, 32, 127, 191, 96, 16, 80, 175, 48, 143, 207, 104, 8, 72, 167, 40, 135, 199, 119, 24, 88, 183, 56, 151, 215, 108, 4, 68, 163, 36, 131, 195, 100, 20, 84, 179, 52, 147, 211, 115, 12, 76, 171, 44, 139, 203, 123, 28, 92, 187, 60, 155, 219, 110, 2, 66, 161, 34, 129, 193, 98, 18, 82, 177, 50, 145, 209, 106, 10, 74, 169, 42, 137, 201, 121, 26, 90, 185, 58, 153, 217, 113, 6, 70, 165, 38, 133, 197, 102, 22, 86, 181, 54, 149, 213, 117, 14, 78, 173, 46, 141, 205, 125, 30, 94, 189, 62, 157, 221, 111, 1, 65, 160, 33, 128, 192, 97, 17, 81, 176, 49, 144, 208, 105, 9, 73, 168, 41, 136, 200, 120, 25, 89, 184, 57, 152, 216, 109, 5, 69, 164, 37, 132, 196, 101, 21, 85, 180, 53, 148, 212, 116, 13, 77, 172, 45, 140, 204, 124, 29, 93, 188, 61, 156, 220, 112, 3, 67, 162, 35, 130, 194, 99, 19, 83, 178, 51, 146, 210, 107, 11, 75, 170, 43, 138, 202, 122, 27, 91, 186, 59, 154, 218, 114, 7, 71, 166, 39, 134, 198, 103, 23, 87, 182, 55, 150, 214, 118, 15, 79, 174, 47, 142, 206, 126, 31, 95, 190, 63, 158, 222]; + + return (unsafe{*PERM223.get_unchecked((index % 223) as usize)} as u32 * 11089567 + + unsafe{*PERM223.get_unchecked(((index / 223) % 223) as usize)} as u32 * 49729 + + unsafe{*PERM223.get_unchecked(((index / 49729) % 223) as usize)} as u32 * 223 + + unsafe{*PERM223.get_unchecked(((index / 11089567) % 223) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (2472973441u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton227(index: u32) -> f32 { - const PERM227: [u16; 227] = [0, 64, 163, 96, 32, 131, 195, 16, 80, 179, 115, 48, 147, 211, 8, - 72, 171, 104, 40, 139, 203, 24, 88, 187, 123, 56, 155, 219, 4, - 68, 167, 100, 36, 135, 199, 20, 84, 183, 119, 52, 151, 215, 12, - 76, 175, 108, 44, 143, 207, 28, 92, 191, 127, 60, 159, 223, 112, - 2, 66, 165, 98, 34, 133, 197, 18, 82, 181, 117, 50, 149, 213, 10, - 74, 173, 106, 42, 141, 205, 26, 90, 189, 125, 58, 157, 221, 6, - 70, 169, 102, 38, 137, 201, 22, 86, 185, 121, 54, 153, 217, 14, - 78, 177, 110, 46, 145, 209, 30, 94, 193, 129, 62, 161, 225, 113, - 1, 65, 164, 97, 33, 132, 196, 17, 81, 180, 116, 49, 148, 212, 9, - 73, 172, 105, 41, 140, 204, 25, 89, 188, 124, 57, 156, 220, 5, - 69, 168, 101, 37, 136, 200, 21, 85, 184, 120, 53, 152, 216, 13, - 77, 176, 109, 45, 144, 208, 29, 93, 192, 128, 61, 160, 224, 114, - 3, 67, 166, 99, 35, 134, 198, 19, 83, 182, 118, 51, 150, 214, 11, - 75, 174, 107, 43, 142, 206, 27, 91, 190, 126, 59, 158, 222, 7, - 71, 170, 103, 39, 138, 202, 23, 87, 186, 122, 55, 154, 218, 15, - 79, 178, 111, 47, 146, 210, 31, 95, 194, 130, 63, 162, 226]; - - return (unsafe { *PERM227.get_unchecked((index % 227) as usize) } as u32 * 11697083 + - unsafe { *PERM227.get_unchecked(((index / 227) % 227) as usize) } as u32 * 51529 + - unsafe { *PERM227.get_unchecked(((index / 51529) % 227) as usize) } as u32 * 227 + - unsafe { - *PERM227.get_unchecked(((index / 11697083) % 227) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2655237841u32 as f32)); // Results in [0,1). + const PERM227: [u16; 227] = [0, 64, 163, 96, 32, 131, 195, 16, 80, 179, 115, 48, 147, 211, 8, 72, 171, 104, 40, 139, 203, 24, 88, 187, 123, 56, 155, 219, 4, 68, 167, 100, 36, 135, 199, 20, 84, 183, 119, 52, 151, 215, 12, 76, 175, 108, 44, 143, 207, 28, 92, 191, 127, 60, 159, 223, 112, 2, 66, 165, 98, 34, 133, 197, 18, 82, 181, 117, 50, 149, 213, 10, 74, 173, 106, 42, 141, 205, 26, 90, 189, 125, 58, 157, 221, 6, 70, 169, 102, 38, 137, 201, 22, 86, 185, 121, 54, 153, 217, 14, 78, 177, 110, 46, 145, 209, 30, 94, 193, 129, 62, 161, 225, 113, 1, 65, 164, 97, 33, 132, 196, 17, 81, 180, 116, 49, 148, 212, 9, 73, 172, 105, 41, 140, 204, 25, 89, 188, 124, 57, 156, 220, 5, 69, 168, 101, 37, 136, 200, 21, 85, 184, 120, 53, 152, 216, 13, 77, 176, 109, 45, 144, 208, 29, 93, 192, 128, 61, 160, 224, 114, 3, 67, 166, 99, 35, 134, 198, 19, 83, 182, 118, 51, 150, 214, 11, 75, 174, 107, 43, 142, 206, 27, 91, 190, 126, 59, 158, 222, 7, 71, 170, 103, 39, 138, 202, 23, 87, 186, 122, 55, 154, 218, 15, 79, 178, 111, 47, 146, 210, 31, 95, 194, 130, 63, 162, 226]; + + return (unsafe{*PERM227.get_unchecked((index % 227) as usize)} as u32 * 11697083 + + unsafe{*PERM227.get_unchecked(((index / 227) % 227) as usize)} as u32 * 51529 + + unsafe{*PERM227.get_unchecked(((index / 51529) % 227) as usize)} as u32 * 227 + + unsafe{*PERM227.get_unchecked(((index / 11697083) % 227) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (2655237841u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton229(index: u32) -> f32 { - const PERM229: [u16; 229] = [0, 64, 165, 96, 32, 133, 197, 16, 80, 181, 117, 48, 149, 213, 8, - 72, 173, 104, 40, 141, 205, 24, 88, 189, 125, 56, 157, 221, 112, - 4, 68, 169, 100, 36, 137, 201, 20, 84, 185, 121, 52, 153, 217, - 12, 76, 177, 108, 44, 145, 209, 28, 92, 193, 129, 60, 161, 225, - 2, 66, 167, 98, 34, 135, 199, 18, 82, 183, 119, 50, 151, 215, 10, - 74, 175, 106, 42, 143, 207, 26, 90, 191, 127, 58, 159, 223, 115, - 6, 70, 171, 102, 38, 139, 203, 22, 86, 187, 123, 54, 155, 219, - 14, 78, 179, 110, 46, 147, 211, 30, 94, 195, 131, 62, 163, 227, - 114, 1, 65, 166, 97, 33, 134, 198, 17, 81, 182, 118, 49, 150, - 214, 9, 73, 174, 105, 41, 142, 206, 25, 89, 190, 126, 57, 158, - 222, 113, 5, 69, 170, 101, 37, 138, 202, 21, 85, 186, 122, 53, - 154, 218, 13, 77, 178, 109, 45, 146, 210, 29, 93, 194, 130, 61, - 162, 226, 3, 67, 168, 99, 35, 136, 200, 19, 83, 184, 120, 51, - 152, 216, 11, 75, 176, 107, 43, 144, 208, 27, 91, 192, 128, 59, - 160, 224, 116, 7, 71, 172, 103, 39, 140, 204, 23, 87, 188, 124, - 55, 156, 220, 15, 79, 180, 111, 47, 148, 212, 31, 95, 196, 132, - 63, 164, 228]; - - return (unsafe { *PERM229.get_unchecked((index % 229) as usize) } as u32 * 12008989 + - unsafe { *PERM229.get_unchecked(((index / 229) % 229) as usize) } as u32 * 52441 + - unsafe { *PERM229.get_unchecked(((index / 52441) % 229) as usize) } as u32 * 229 + - unsafe { - *PERM229.get_unchecked(((index / 12008989) % 229) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2750058481u32 as f32)); // Results in [0,1). + const PERM229: [u16; 229] = [0, 64, 165, 96, 32, 133, 197, 16, 80, 181, 117, 48, 149, 213, 8, 72, 173, 104, 40, 141, 205, 24, 88, 189, 125, 56, 157, 221, 112, 4, 68, 169, 100, 36, 137, 201, 20, 84, 185, 121, 52, 153, 217, 12, 76, 177, 108, 44, 145, 209, 28, 92, 193, 129, 60, 161, 225, 2, 66, 167, 98, 34, 135, 199, 18, 82, 183, 119, 50, 151, 215, 10, 74, 175, 106, 42, 143, 207, 26, 90, 191, 127, 58, 159, 223, 115, 6, 70, 171, 102, 38, 139, 203, 22, 86, 187, 123, 54, 155, 219, 14, 78, 179, 110, 46, 147, 211, 30, 94, 195, 131, 62, 163, 227, 114, 1, 65, 166, 97, 33, 134, 198, 17, 81, 182, 118, 49, 150, 214, 9, 73, 174, 105, 41, 142, 206, 25, 89, 190, 126, 57, 158, 222, 113, 5, 69, 170, 101, 37, 138, 202, 21, 85, 186, 122, 53, 154, 218, 13, 77, 178, 109, 45, 146, 210, 29, 93, 194, 130, 61, 162, 226, 3, 67, 168, 99, 35, 136, 200, 19, 83, 184, 120, 51, 152, 216, 11, 75, 176, 107, 43, 144, 208, 27, 91, 192, 128, 59, 160, 224, 116, 7, 71, 172, 103, 39, 140, 204, 23, 87, 188, 124, 55, 156, 220, 15, 79, 180, 111, 47, 148, 212, 31, 95, 196, 132, 63, 164, 228]; + + return (unsafe{*PERM229.get_unchecked((index % 229) as usize)} as u32 * 12008989 + + unsafe{*PERM229.get_unchecked(((index / 229) % 229) as usize)} as u32 * 52441 + + unsafe{*PERM229.get_unchecked(((index / 52441) % 229) as usize)} as u32 * 229 + + unsafe{*PERM229.get_unchecked(((index / 12008989) % 229) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (2750058481u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton233(index: u32) -> f32 { - const PERM233: [u16; 233] = [0, 64, 169, 96, 32, 137, 201, 16, 80, 185, 121, 48, 153, 217, - 112, 8, 72, 177, 104, 40, 145, 209, 24, 88, 193, 129, 56, 161, - 225, 4, 68, 173, 100, 36, 141, 205, 20, 84, 189, 125, 52, 157, - 221, 117, 12, 76, 181, 108, 44, 149, 213, 28, 92, 197, 133, 60, - 165, 229, 2, 66, 171, 98, 34, 139, 203, 18, 82, 187, 123, 50, - 155, 219, 114, 10, 74, 179, 106, 42, 147, 211, 26, 90, 195, 131, - 58, 163, 227, 6, 70, 175, 102, 38, 143, 207, 22, 86, 191, 127, - 54, 159, 223, 119, 14, 78, 183, 110, 46, 151, 215, 30, 94, 199, - 135, 62, 167, 231, 116, 1, 65, 170, 97, 33, 138, 202, 17, 81, - 186, 122, 49, 154, 218, 113, 9, 73, 178, 105, 41, 146, 210, 25, - 89, 194, 130, 57, 162, 226, 5, 69, 174, 101, 37, 142, 206, 21, - 85, 190, 126, 53, 158, 222, 118, 13, 77, 182, 109, 45, 150, 214, - 29, 93, 198, 134, 61, 166, 230, 3, 67, 172, 99, 35, 140, 204, 19, - 83, 188, 124, 51, 156, 220, 115, 11, 75, 180, 107, 43, 148, 212, - 27, 91, 196, 132, 59, 164, 228, 7, 71, 176, 103, 39, 144, 208, - 23, 87, 192, 128, 55, 160, 224, 120, 15, 79, 184, 111, 47, 152, - 216, 31, 95, 200, 136, 63, 168, 232]; - - return (unsafe { *PERM233.get_unchecked((index % 233) as usize) } as u32 * 12649337 + - unsafe { *PERM233.get_unchecked(((index / 233) % 233) as usize) } as u32 * 54289 + - unsafe { *PERM233.get_unchecked(((index / 54289) % 233) as usize) } as u32 * 233 + - unsafe { - *PERM233.get_unchecked(((index / 12649337) % 233) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2947295521u32 as f32)); // Results in [0,1). + const PERM233: [u16; 233] = [0, 64, 169, 96, 32, 137, 201, 16, 80, 185, 121, 48, 153, 217, 112, 8, 72, 177, 104, 40, 145, 209, 24, 88, 193, 129, 56, 161, 225, 4, 68, 173, 100, 36, 141, 205, 20, 84, 189, 125, 52, 157, 221, 117, 12, 76, 181, 108, 44, 149, 213, 28, 92, 197, 133, 60, 165, 229, 2, 66, 171, 98, 34, 139, 203, 18, 82, 187, 123, 50, 155, 219, 114, 10, 74, 179, 106, 42, 147, 211, 26, 90, 195, 131, 58, 163, 227, 6, 70, 175, 102, 38, 143, 207, 22, 86, 191, 127, 54, 159, 223, 119, 14, 78, 183, 110, 46, 151, 215, 30, 94, 199, 135, 62, 167, 231, 116, 1, 65, 170, 97, 33, 138, 202, 17, 81, 186, 122, 49, 154, 218, 113, 9, 73, 178, 105, 41, 146, 210, 25, 89, 194, 130, 57, 162, 226, 5, 69, 174, 101, 37, 142, 206, 21, 85, 190, 126, 53, 158, 222, 118, 13, 77, 182, 109, 45, 150, 214, 29, 93, 198, 134, 61, 166, 230, 3, 67, 172, 99, 35, 140, 204, 19, 83, 188, 124, 51, 156, 220, 115, 11, 75, 180, 107, 43, 148, 212, 27, 91, 196, 132, 59, 164, 228, 7, 71, 176, 103, 39, 144, 208, 23, 87, 192, 128, 55, 160, 224, 120, 15, 79, 184, 111, 47, 152, 216, 31, 95, 200, 136, 63, 168, 232]; + + return (unsafe{*PERM233.get_unchecked((index % 233) as usize)} as u32 * 12649337 + + unsafe{*PERM233.get_unchecked(((index / 233) % 233) as usize)} as u32 * 54289 + + unsafe{*PERM233.get_unchecked(((index / 54289) % 233) as usize)} as u32 * 233 + + unsafe{*PERM233.get_unchecked(((index / 12649337) % 233) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (2947295521u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton239(index: u32) -> f32 { - const PERM239: [u16; 239] = [0, 64, 175, 96, 32, 143, 207, 16, 80, 191, 127, 48, 159, 223, - 112, 8, 72, 183, 104, 40, 151, 215, 24, 88, 199, 135, 56, 167, - 231, 116, 4, 68, 179, 100, 36, 147, 211, 20, 84, 195, 131, 52, - 163, 227, 123, 12, 76, 187, 108, 44, 155, 219, 28, 92, 203, 139, - 60, 171, 235, 118, 2, 66, 177, 98, 34, 145, 209, 18, 82, 193, - 129, 50, 161, 225, 114, 10, 74, 185, 106, 42, 153, 217, 26, 90, - 201, 137, 58, 169, 233, 121, 6, 70, 181, 102, 38, 149, 213, 22, - 86, 197, 133, 54, 165, 229, 125, 14, 78, 189, 110, 46, 157, 221, - 30, 94, 205, 141, 62, 173, 237, 119, 1, 65, 176, 97, 33, 144, - 208, 17, 81, 192, 128, 49, 160, 224, 113, 9, 73, 184, 105, 41, - 152, 216, 25, 89, 200, 136, 57, 168, 232, 117, 5, 69, 180, 101, - 37, 148, 212, 21, 85, 196, 132, 53, 164, 228, 124, 13, 77, 188, - 109, 45, 156, 220, 29, 93, 204, 140, 61, 172, 236, 120, 3, 67, - 178, 99, 35, 146, 210, 19, 83, 194, 130, 51, 162, 226, 115, 11, - 75, 186, 107, 43, 154, 218, 27, 91, 202, 138, 59, 170, 234, 122, - 7, 71, 182, 103, 39, 150, 214, 23, 87, 198, 134, 55, 166, 230, - 126, 15, 79, 190, 111, 47, 158, 222, 31, 95, 206, 142, 63, 174, - 238]; - - return (unsafe { *PERM239.get_unchecked((index % 239) as usize) } as u32 * 13651919 + - unsafe { *PERM239.get_unchecked(((index / 239) % 239) as usize) } as u32 * 57121 + - unsafe { *PERM239.get_unchecked(((index / 57121) % 239) as usize) } as u32 * 239 + - unsafe { - *PERM239.get_unchecked(((index / 13651919) % 239) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3262808641u32 as f32)); // Results in [0,1). + const PERM239: [u16; 239] = [0, 64, 175, 96, 32, 143, 207, 16, 80, 191, 127, 48, 159, 223, 112, 8, 72, 183, 104, 40, 151, 215, 24, 88, 199, 135, 56, 167, 231, 116, 4, 68, 179, 100, 36, 147, 211, 20, 84, 195, 131, 52, 163, 227, 123, 12, 76, 187, 108, 44, 155, 219, 28, 92, 203, 139, 60, 171, 235, 118, 2, 66, 177, 98, 34, 145, 209, 18, 82, 193, 129, 50, 161, 225, 114, 10, 74, 185, 106, 42, 153, 217, 26, 90, 201, 137, 58, 169, 233, 121, 6, 70, 181, 102, 38, 149, 213, 22, 86, 197, 133, 54, 165, 229, 125, 14, 78, 189, 110, 46, 157, 221, 30, 94, 205, 141, 62, 173, 237, 119, 1, 65, 176, 97, 33, 144, 208, 17, 81, 192, 128, 49, 160, 224, 113, 9, 73, 184, 105, 41, 152, 216, 25, 89, 200, 136, 57, 168, 232, 117, 5, 69, 180, 101, 37, 148, 212, 21, 85, 196, 132, 53, 164, 228, 124, 13, 77, 188, 109, 45, 156, 220, 29, 93, 204, 140, 61, 172, 236, 120, 3, 67, 178, 99, 35, 146, 210, 19, 83, 194, 130, 51, 162, 226, 115, 11, 75, 186, 107, 43, 154, 218, 27, 91, 202, 138, 59, 170, 234, 122, 7, 71, 182, 103, 39, 150, 214, 23, 87, 198, 134, 55, 166, 230, 126, 15, 79, 190, 111, 47, 158, 222, 31, 95, 206, 142, 63, 174, 238]; + + return (unsafe{*PERM239.get_unchecked((index % 239) as usize)} as u32 * 13651919 + + unsafe{*PERM239.get_unchecked(((index / 239) % 239) as usize)} as u32 * 57121 + + unsafe{*PERM239.get_unchecked(((index / 57121) % 239) as usize)} as u32 * 239 + + unsafe{*PERM239.get_unchecked(((index / 13651919) % 239) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (3262808641u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton241(index: u32) -> f32 { - const PERM241: [u16; 241] = [0, 64, 177, 96, 32, 145, 209, 112, 16, 80, 193, 129, 48, 161, - 225, 8, 72, 185, 104, 40, 153, 217, 121, 24, 88, 201, 137, 56, - 169, 233, 4, 68, 181, 100, 36, 149, 213, 116, 20, 84, 197, 133, - 52, 165, 229, 12, 76, 189, 108, 44, 157, 221, 125, 28, 92, 205, - 141, 60, 173, 237, 2, 66, 179, 98, 34, 147, 211, 114, 18, 82, - 195, 131, 50, 163, 227, 10, 74, 187, 106, 42, 155, 219, 123, 26, - 90, 203, 139, 58, 171, 235, 6, 70, 183, 102, 38, 151, 215, 118, - 22, 86, 199, 135, 54, 167, 231, 14, 78, 191, 110, 46, 159, 223, - 127, 30, 94, 207, 143, 62, 175, 239, 120, 1, 65, 178, 97, 33, - 146, 210, 113, 17, 81, 194, 130, 49, 162, 226, 9, 73, 186, 105, - 41, 154, 218, 122, 25, 89, 202, 138, 57, 170, 234, 5, 69, 182, - 101, 37, 150, 214, 117, 21, 85, 198, 134, 53, 166, 230, 13, 77, - 190, 109, 45, 158, 222, 126, 29, 93, 206, 142, 61, 174, 238, 3, - 67, 180, 99, 35, 148, 212, 115, 19, 83, 196, 132, 51, 164, 228, - 11, 75, 188, 107, 43, 156, 220, 124, 27, 91, 204, 140, 59, 172, - 236, 7, 71, 184, 103, 39, 152, 216, 119, 23, 87, 200, 136, 55, - 168, 232, 15, 79, 192, 111, 47, 160, 224, 128, 31, 95, 208, 144, - 63, 176, 240]; - - return (unsafe { *PERM241.get_unchecked((index % 241) as usize) } as u32 * 13997521 + - unsafe { *PERM241.get_unchecked(((index / 241) % 241) as usize) } as u32 * 58081 + - unsafe { *PERM241.get_unchecked(((index / 58081) % 241) as usize) } as u32 * 241 + - unsafe { - *PERM241.get_unchecked(((index / 13997521) % 241) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3373402561u32 as f32)); // Results in [0,1). + const PERM241: [u16; 241] = [0, 64, 177, 96, 32, 145, 209, 112, 16, 80, 193, 129, 48, 161, 225, 8, 72, 185, 104, 40, 153, 217, 121, 24, 88, 201, 137, 56, 169, 233, 4, 68, 181, 100, 36, 149, 213, 116, 20, 84, 197, 133, 52, 165, 229, 12, 76, 189, 108, 44, 157, 221, 125, 28, 92, 205, 141, 60, 173, 237, 2, 66, 179, 98, 34, 147, 211, 114, 18, 82, 195, 131, 50, 163, 227, 10, 74, 187, 106, 42, 155, 219, 123, 26, 90, 203, 139, 58, 171, 235, 6, 70, 183, 102, 38, 151, 215, 118, 22, 86, 199, 135, 54, 167, 231, 14, 78, 191, 110, 46, 159, 223, 127, 30, 94, 207, 143, 62, 175, 239, 120, 1, 65, 178, 97, 33, 146, 210, 113, 17, 81, 194, 130, 49, 162, 226, 9, 73, 186, 105, 41, 154, 218, 122, 25, 89, 202, 138, 57, 170, 234, 5, 69, 182, 101, 37, 150, 214, 117, 21, 85, 198, 134, 53, 166, 230, 13, 77, 190, 109, 45, 158, 222, 126, 29, 93, 206, 142, 61, 174, 238, 3, 67, 180, 99, 35, 148, 212, 115, 19, 83, 196, 132, 51, 164, 228, 11, 75, 188, 107, 43, 156, 220, 124, 27, 91, 204, 140, 59, 172, 236, 7, 71, 184, 103, 39, 152, 216, 119, 23, 87, 200, 136, 55, 168, 232, 15, 79, 192, 111, 47, 160, 224, 128, 31, 95, 208, 144, 63, 176, 240]; + + return (unsafe{*PERM241.get_unchecked((index % 241) as usize)} as u32 * 13997521 + + unsafe{*PERM241.get_unchecked(((index / 241) % 241) as usize)} as u32 * 58081 + + unsafe{*PERM241.get_unchecked(((index / 58081) % 241) as usize)} as u32 * 241 + + unsafe{*PERM241.get_unchecked(((index / 13997521) % 241) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (3373402561u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton251(index: u32) -> f32 { - const PERM251: [u16; 251] = [0, 64, 187, 96, 32, 155, 219, 112, 16, 80, 203, 139, 48, 171, - 235, 120, 8, 72, 195, 104, 40, 163, 227, 131, 24, 88, 211, 147, - 56, 179, 243, 4, 68, 191, 100, 36, 159, 223, 116, 20, 84, 207, - 143, 52, 175, 239, 127, 12, 76, 199, 108, 44, 167, 231, 135, 28, - 92, 215, 151, 60, 183, 247, 124, 2, 66, 189, 98, 34, 157, 221, - 114, 18, 82, 205, 141, 50, 173, 237, 122, 10, 74, 197, 106, 42, - 165, 229, 133, 26, 90, 213, 149, 58, 181, 245, 6, 70, 193, 102, - 38, 161, 225, 118, 22, 86, 209, 145, 54, 177, 241, 129, 14, 78, - 201, 110, 46, 169, 233, 137, 30, 94, 217, 153, 62, 185, 249, 125, - 1, 65, 188, 97, 33, 156, 220, 113, 17, 81, 204, 140, 49, 172, - 236, 121, 9, 73, 196, 105, 41, 164, 228, 132, 25, 89, 212, 148, - 57, 180, 244, 5, 69, 192, 101, 37, 160, 224, 117, 21, 85, 208, - 144, 53, 176, 240, 128, 13, 77, 200, 109, 45, 168, 232, 136, 29, - 93, 216, 152, 61, 184, 248, 126, 3, 67, 190, 99, 35, 158, 222, - 115, 19, 83, 206, 142, 51, 174, 238, 123, 11, 75, 198, 107, 43, - 166, 230, 134, 27, 91, 214, 150, 59, 182, 246, 7, 71, 194, 103, - 39, 162, 226, 119, 23, 87, 210, 146, 55, 178, 242, 130, 15, 79, - 202, 111, 47, 170, 234, 138, 31, 95, 218, 154, 63, 186, 250]; - - return (unsafe { *PERM251.get_unchecked((index % 251) as usize) } as u32 * 15813251 + - unsafe { *PERM251.get_unchecked(((index / 251) % 251) as usize) } as u32 * 63001 + - unsafe { *PERM251.get_unchecked(((index / 63001) % 251) as usize) } as u32 * 251 + - unsafe { - *PERM251.get_unchecked(((index / 15813251) % 251) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3969126001u32 as f32)); // Results in [0,1). + const PERM251: [u16; 251] = [0, 64, 187, 96, 32, 155, 219, 112, 16, 80, 203, 139, 48, 171, 235, 120, 8, 72, 195, 104, 40, 163, 227, 131, 24, 88, 211, 147, 56, 179, 243, 4, 68, 191, 100, 36, 159, 223, 116, 20, 84, 207, 143, 52, 175, 239, 127, 12, 76, 199, 108, 44, 167, 231, 135, 28, 92, 215, 151, 60, 183, 247, 124, 2, 66, 189, 98, 34, 157, 221, 114, 18, 82, 205, 141, 50, 173, 237, 122, 10, 74, 197, 106, 42, 165, 229, 133, 26, 90, 213, 149, 58, 181, 245, 6, 70, 193, 102, 38, 161, 225, 118, 22, 86, 209, 145, 54, 177, 241, 129, 14, 78, 201, 110, 46, 169, 233, 137, 30, 94, 217, 153, 62, 185, 249, 125, 1, 65, 188, 97, 33, 156, 220, 113, 17, 81, 204, 140, 49, 172, 236, 121, 9, 73, 196, 105, 41, 164, 228, 132, 25, 89, 212, 148, 57, 180, 244, 5, 69, 192, 101, 37, 160, 224, 117, 21, 85, 208, 144, 53, 176, 240, 128, 13, 77, 200, 109, 45, 168, 232, 136, 29, 93, 216, 152, 61, 184, 248, 126, 3, 67, 190, 99, 35, 158, 222, 115, 19, 83, 206, 142, 51, 174, 238, 123, 11, 75, 198, 107, 43, 166, 230, 134, 27, 91, 214, 150, 59, 182, 246, 7, 71, 194, 103, 39, 162, 226, 119, 23, 87, 210, 146, 55, 178, 242, 130, 15, 79, 202, 111, 47, 170, 234, 138, 31, 95, 218, 154, 63, 186, 250]; + + return (unsafe{*PERM251.get_unchecked((index % 251) as usize)} as u32 * 15813251 + + unsafe{*PERM251.get_unchecked(((index / 251) % 251) as usize)} as u32 * 63001 + + unsafe{*PERM251.get_unchecked(((index / 63001) % 251) as usize)} as u32 * 251 + + unsafe{*PERM251.get_unchecked(((index / 15813251) % 251) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (3969126001u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton257(index: u32) -> f32 { - const PERM257: [u16; 257] = [0, 129, 64, 193, 32, 161, 96, 225, 16, 145, 80, 209, 48, 177, - 112, 241, 8, 137, 72, 201, 40, 169, 104, 233, 24, 153, 88, 217, - 56, 185, 120, 249, 4, 133, 68, 197, 36, 165, 100, 229, 20, 149, - 84, 213, 52, 181, 116, 245, 12, 141, 76, 205, 44, 173, 108, 237, - 28, 157, 92, 221, 60, 189, 124, 253, 2, 131, 66, 195, 34, 163, - 98, 227, 18, 147, 82, 211, 50, 179, 114, 243, 10, 139, 74, 203, - 42, 171, 106, 235, 26, 155, 90, 219, 58, 187, 122, 251, 6, 135, - 70, 199, 38, 167, 102, 231, 22, 151, 86, 215, 54, 183, 118, 247, - 14, 143, 78, 207, 46, 175, 110, 239, 30, 159, 94, 223, 62, 191, - 126, 255, 128, 1, 130, 65, 194, 33, 162, 97, 226, 17, 146, 81, - 210, 49, 178, 113, 242, 9, 138, 73, 202, 41, 170, 105, 234, 25, - 154, 89, 218, 57, 186, 121, 250, 5, 134, 69, 198, 37, 166, 101, - 230, 21, 150, 85, 214, 53, 182, 117, 246, 13, 142, 77, 206, 45, - 174, 109, 238, 29, 158, 93, 222, 61, 190, 125, 254, 3, 132, 67, - 196, 35, 164, 99, 228, 19, 148, 83, 212, 51, 180, 115, 244, 11, - 140, 75, 204, 43, 172, 107, 236, 27, 156, 91, 220, 59, 188, 123, - 252, 7, 136, 71, 200, 39, 168, 103, 232, 23, 152, 87, 216, 55, - 184, 119, 248, 15, 144, 79, 208, 47, 176, 111, 240, 31, 160, 95, - 224, 63, 192, 127, 256]; - - return (unsafe { *PERM257.get_unchecked((index % 257) as usize) } as u32 * 66049 + - unsafe { *PERM257.get_unchecked(((index / 257) % 257) as usize) } as u32 * 257 + - unsafe { - *PERM257.get_unchecked(((index / 66049) % 257) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (16974593u32 as f32)); // Results in [0,1). + const PERM257: [u16; 257] = [0, 129, 64, 193, 32, 161, 96, 225, 16, 145, 80, 209, 48, 177, 112, 241, 8, 137, 72, 201, 40, 169, 104, 233, 24, 153, 88, 217, 56, 185, 120, 249, 4, 133, 68, 197, 36, 165, 100, 229, 20, 149, 84, 213, 52, 181, 116, 245, 12, 141, 76, 205, 44, 173, 108, 237, 28, 157, 92, 221, 60, 189, 124, 253, 2, 131, 66, 195, 34, 163, 98, 227, 18, 147, 82, 211, 50, 179, 114, 243, 10, 139, 74, 203, 42, 171, 106, 235, 26, 155, 90, 219, 58, 187, 122, 251, 6, 135, 70, 199, 38, 167, 102, 231, 22, 151, 86, 215, 54, 183, 118, 247, 14, 143, 78, 207, 46, 175, 110, 239, 30, 159, 94, 223, 62, 191, 126, 255, 128, 1, 130, 65, 194, 33, 162, 97, 226, 17, 146, 81, 210, 49, 178, 113, 242, 9, 138, 73, 202, 41, 170, 105, 234, 25, 154, 89, 218, 57, 186, 121, 250, 5, 134, 69, 198, 37, 166, 101, 230, 21, 150, 85, 214, 53, 182, 117, 246, 13, 142, 77, 206, 45, 174, 109, 238, 29, 158, 93, 222, 61, 190, 125, 254, 3, 132, 67, 196, 35, 164, 99, 228, 19, 148, 83, 212, 51, 180, 115, 244, 11, 140, 75, 204, 43, 172, 107, 236, 27, 156, 91, 220, 59, 188, 123, 252, 7, 136, 71, 200, 39, 168, 103, 232, 23, 152, 87, 216, 55, 184, 119, 248, 15, 144, 79, 208, 47, 176, 111, 240, 31, 160, 95, 224, 63, 192, 127, 256]; + + return (unsafe{*PERM257.get_unchecked((index % 257) as usize)} as u32 * 66049 + + unsafe{*PERM257.get_unchecked(((index / 257) % 257) as usize)} as u32 * 257 + + unsafe{*PERM257.get_unchecked(((index / 66049) % 257) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (16974593u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton263(index: u32) -> f32 { - const PERM263: [u16; 263] = [0, 135, 64, 199, 32, 167, 96, 231, 16, 151, 80, 215, 48, 183, - 112, 247, 8, 143, 72, 207, 40, 175, 104, 239, 24, 159, 88, 223, - 56, 191, 120, 255, 128, 4, 139, 68, 203, 36, 171, 100, 235, 20, - 155, 84, 219, 52, 187, 116, 251, 12, 147, 76, 211, 44, 179, 108, - 243, 28, 163, 92, 227, 60, 195, 124, 259, 130, 2, 137, 66, 201, - 34, 169, 98, 233, 18, 153, 82, 217, 50, 185, 114, 249, 10, 145, - 74, 209, 42, 177, 106, 241, 26, 161, 90, 225, 58, 193, 122, 257, - 133, 6, 141, 70, 205, 38, 173, 102, 237, 22, 157, 86, 221, 54, - 189, 118, 253, 14, 149, 78, 213, 46, 181, 110, 245, 30, 165, 94, - 229, 62, 197, 126, 261, 131, 1, 136, 65, 200, 33, 168, 97, 232, - 17, 152, 81, 216, 49, 184, 113, 248, 9, 144, 73, 208, 41, 176, - 105, 240, 25, 160, 89, 224, 57, 192, 121, 256, 129, 5, 140, 69, - 204, 37, 172, 101, 236, 21, 156, 85, 220, 53, 188, 117, 252, 13, - 148, 77, 212, 45, 180, 109, 244, 29, 164, 93, 228, 61, 196, 125, - 260, 132, 3, 138, 67, 202, 35, 170, 99, 234, 19, 154, 83, 218, - 51, 186, 115, 250, 11, 146, 75, 210, 43, 178, 107, 242, 27, 162, - 91, 226, 59, 194, 123, 258, 134, 7, 142, 71, 206, 39, 174, 103, - 238, 23, 158, 87, 222, 55, 190, 119, 254, 15, 150, 79, 214, 47, - 182, 111, 246, 31, 166, 95, 230, 63, 198, 127, 262]; - - return (unsafe { *PERM263.get_unchecked((index % 263) as usize) } as u32 * 69169 + - unsafe { *PERM263.get_unchecked(((index / 263) % 263) as usize) } as u32 * 263 + - unsafe { - *PERM263.get_unchecked(((index / 69169) % 263) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (18191447u32 as f32)); // Results in [0,1). + const PERM263: [u16; 263] = [0, 135, 64, 199, 32, 167, 96, 231, 16, 151, 80, 215, 48, 183, 112, 247, 8, 143, 72, 207, 40, 175, 104, 239, 24, 159, 88, 223, 56, 191, 120, 255, 128, 4, 139, 68, 203, 36, 171, 100, 235, 20, 155, 84, 219, 52, 187, 116, 251, 12, 147, 76, 211, 44, 179, 108, 243, 28, 163, 92, 227, 60, 195, 124, 259, 130, 2, 137, 66, 201, 34, 169, 98, 233, 18, 153, 82, 217, 50, 185, 114, 249, 10, 145, 74, 209, 42, 177, 106, 241, 26, 161, 90, 225, 58, 193, 122, 257, 133, 6, 141, 70, 205, 38, 173, 102, 237, 22, 157, 86, 221, 54, 189, 118, 253, 14, 149, 78, 213, 46, 181, 110, 245, 30, 165, 94, 229, 62, 197, 126, 261, 131, 1, 136, 65, 200, 33, 168, 97, 232, 17, 152, 81, 216, 49, 184, 113, 248, 9, 144, 73, 208, 41, 176, 105, 240, 25, 160, 89, 224, 57, 192, 121, 256, 129, 5, 140, 69, 204, 37, 172, 101, 236, 21, 156, 85, 220, 53, 188, 117, 252, 13, 148, 77, 212, 45, 180, 109, 244, 29, 164, 93, 228, 61, 196, 125, 260, 132, 3, 138, 67, 202, 35, 170, 99, 234, 19, 154, 83, 218, 51, 186, 115, 250, 11, 146, 75, 210, 43, 178, 107, 242, 27, 162, 91, 226, 59, 194, 123, 258, 134, 7, 142, 71, 206, 39, 174, 103, 238, 23, 158, 87, 222, 55, 190, 119, 254, 15, 150, 79, 214, 47, 182, 111, 246, 31, 166, 95, 230, 63, 198, 127, 262]; + + return (unsafe{*PERM263.get_unchecked((index % 263) as usize)} as u32 * 69169 + + unsafe{*PERM263.get_unchecked(((index / 263) % 263) as usize)} as u32 * 263 + + unsafe{*PERM263.get_unchecked(((index / 69169) % 263) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (18191447u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton269(index: u32) -> f32 { - const PERM269: [u16; 269] = [0, 141, 64, 205, 32, 173, 96, 237, 16, 157, 80, 221, 48, 189, - 112, 253, 128, 8, 149, 72, 213, 40, 181, 104, 245, 24, 165, 88, - 229, 56, 197, 120, 261, 132, 4, 145, 68, 209, 36, 177, 100, 241, - 20, 161, 84, 225, 52, 193, 116, 257, 137, 12, 153, 76, 217, 44, - 185, 108, 249, 28, 169, 92, 233, 60, 201, 124, 265, 2, 143, 66, - 207, 34, 175, 98, 239, 18, 159, 82, 223, 50, 191, 114, 255, 130, - 10, 151, 74, 215, 42, 183, 106, 247, 26, 167, 90, 231, 58, 199, - 122, 263, 135, 6, 147, 70, 211, 38, 179, 102, 243, 22, 163, 86, - 227, 54, 195, 118, 259, 139, 14, 155, 78, 219, 46, 187, 110, 251, - 30, 171, 94, 235, 62, 203, 126, 267, 134, 1, 142, 65, 206, 33, - 174, 97, 238, 17, 158, 81, 222, 49, 190, 113, 254, 129, 9, 150, - 73, 214, 41, 182, 105, 246, 25, 166, 89, 230, 57, 198, 121, 262, - 133, 5, 146, 69, 210, 37, 178, 101, 242, 21, 162, 85, 226, 53, - 194, 117, 258, 138, 13, 154, 77, 218, 45, 186, 109, 250, 29, 170, - 93, 234, 61, 202, 125, 266, 3, 144, 67, 208, 35, 176, 99, 240, - 19, 160, 83, 224, 51, 192, 115, 256, 131, 11, 152, 75, 216, 43, - 184, 107, 248, 27, 168, 91, 232, 59, 200, 123, 264, 136, 7, 148, - 71, 212, 39, 180, 103, 244, 23, 164, 87, 228, 55, 196, 119, 260, - 140, 15, 156, 79, 220, 47, 188, 111, 252, 31, 172, 95, 236, 63, - 204, 127, 268]; - - return (unsafe { *PERM269.get_unchecked((index % 269) as usize) } as u32 * 72361 + - unsafe { *PERM269.get_unchecked(((index / 269) % 269) as usize) } as u32 * 269 + - unsafe { - *PERM269.get_unchecked(((index / 72361) % 269) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (19465109u32 as f32)); // Results in [0,1). + const PERM269: [u16; 269] = [0, 141, 64, 205, 32, 173, 96, 237, 16, 157, 80, 221, 48, 189, 112, 253, 128, 8, 149, 72, 213, 40, 181, 104, 245, 24, 165, 88, 229, 56, 197, 120, 261, 132, 4, 145, 68, 209, 36, 177, 100, 241, 20, 161, 84, 225, 52, 193, 116, 257, 137, 12, 153, 76, 217, 44, 185, 108, 249, 28, 169, 92, 233, 60, 201, 124, 265, 2, 143, 66, 207, 34, 175, 98, 239, 18, 159, 82, 223, 50, 191, 114, 255, 130, 10, 151, 74, 215, 42, 183, 106, 247, 26, 167, 90, 231, 58, 199, 122, 263, 135, 6, 147, 70, 211, 38, 179, 102, 243, 22, 163, 86, 227, 54, 195, 118, 259, 139, 14, 155, 78, 219, 46, 187, 110, 251, 30, 171, 94, 235, 62, 203, 126, 267, 134, 1, 142, 65, 206, 33, 174, 97, 238, 17, 158, 81, 222, 49, 190, 113, 254, 129, 9, 150, 73, 214, 41, 182, 105, 246, 25, 166, 89, 230, 57, 198, 121, 262, 133, 5, 146, 69, 210, 37, 178, 101, 242, 21, 162, 85, 226, 53, 194, 117, 258, 138, 13, 154, 77, 218, 45, 186, 109, 250, 29, 170, 93, 234, 61, 202, 125, 266, 3, 144, 67, 208, 35, 176, 99, 240, 19, 160, 83, 224, 51, 192, 115, 256, 131, 11, 152, 75, 216, 43, 184, 107, 248, 27, 168, 91, 232, 59, 200, 123, 264, 136, 7, 148, 71, 212, 39, 180, 103, 244, 23, 164, 87, 228, 55, 196, 119, 260, 140, 15, 156, 79, 220, 47, 188, 111, 252, 31, 172, 95, 236, 63, 204, 127, 268]; + + return (unsafe{*PERM269.get_unchecked((index % 269) as usize)} as u32 * 72361 + + unsafe{*PERM269.get_unchecked(((index / 269) % 269) as usize)} as u32 * 269 + + unsafe{*PERM269.get_unchecked(((index / 72361) % 269) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (19465109u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton271(index: u32) -> f32 { - const PERM271: [u16; 271] = [0, 143, 64, 207, 32, 175, 96, 239, 16, 159, 80, 223, 48, 191, - 112, 255, 128, 8, 151, 72, 215, 40, 183, 104, 247, 24, 167, 88, - 231, 56, 199, 120, 263, 132, 4, 147, 68, 211, 36, 179, 100, 243, - 20, 163, 84, 227, 52, 195, 116, 259, 139, 12, 155, 76, 219, 44, - 187, 108, 251, 28, 171, 92, 235, 60, 203, 124, 267, 134, 2, 145, - 66, 209, 34, 177, 98, 241, 18, 161, 82, 225, 50, 193, 114, 257, - 130, 10, 153, 74, 217, 42, 185, 106, 249, 26, 169, 90, 233, 58, - 201, 122, 265, 137, 6, 149, 70, 213, 38, 181, 102, 245, 22, 165, - 86, 229, 54, 197, 118, 261, 141, 14, 157, 78, 221, 46, 189, 110, - 253, 30, 173, 94, 237, 62, 205, 126, 269, 135, 1, 144, 65, 208, - 33, 176, 97, 240, 17, 160, 81, 224, 49, 192, 113, 256, 129, 9, - 152, 73, 216, 41, 184, 105, 248, 25, 168, 89, 232, 57, 200, 121, - 264, 133, 5, 148, 69, 212, 37, 180, 101, 244, 21, 164, 85, 228, - 53, 196, 117, 260, 140, 13, 156, 77, 220, 45, 188, 109, 252, 29, - 172, 93, 236, 61, 204, 125, 268, 136, 3, 146, 67, 210, 35, 178, - 99, 242, 19, 162, 83, 226, 51, 194, 115, 258, 131, 11, 154, 75, - 218, 43, 186, 107, 250, 27, 170, 91, 234, 59, 202, 123, 266, 138, - 7, 150, 71, 214, 39, 182, 103, 246, 23, 166, 87, 230, 55, 198, - 119, 262, 142, 15, 158, 79, 222, 47, 190, 111, 254, 31, 174, 95, - 238, 63, 206, 127, 270]; - - return (unsafe { *PERM271.get_unchecked((index % 271) as usize) } as u32 * 73441 + - unsafe { *PERM271.get_unchecked(((index / 271) % 271) as usize) } as u32 * 271 + - unsafe { - *PERM271.get_unchecked(((index / 73441) % 271) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (19902511u32 as f32)); // Results in [0,1). + const PERM271: [u16; 271] = [0, 143, 64, 207, 32, 175, 96, 239, 16, 159, 80, 223, 48, 191, 112, 255, 128, 8, 151, 72, 215, 40, 183, 104, 247, 24, 167, 88, 231, 56, 199, 120, 263, 132, 4, 147, 68, 211, 36, 179, 100, 243, 20, 163, 84, 227, 52, 195, 116, 259, 139, 12, 155, 76, 219, 44, 187, 108, 251, 28, 171, 92, 235, 60, 203, 124, 267, 134, 2, 145, 66, 209, 34, 177, 98, 241, 18, 161, 82, 225, 50, 193, 114, 257, 130, 10, 153, 74, 217, 42, 185, 106, 249, 26, 169, 90, 233, 58, 201, 122, 265, 137, 6, 149, 70, 213, 38, 181, 102, 245, 22, 165, 86, 229, 54, 197, 118, 261, 141, 14, 157, 78, 221, 46, 189, 110, 253, 30, 173, 94, 237, 62, 205, 126, 269, 135, 1, 144, 65, 208, 33, 176, 97, 240, 17, 160, 81, 224, 49, 192, 113, 256, 129, 9, 152, 73, 216, 41, 184, 105, 248, 25, 168, 89, 232, 57, 200, 121, 264, 133, 5, 148, 69, 212, 37, 180, 101, 244, 21, 164, 85, 228, 53, 196, 117, 260, 140, 13, 156, 77, 220, 45, 188, 109, 252, 29, 172, 93, 236, 61, 204, 125, 268, 136, 3, 146, 67, 210, 35, 178, 99, 242, 19, 162, 83, 226, 51, 194, 115, 258, 131, 11, 154, 75, 218, 43, 186, 107, 250, 27, 170, 91, 234, 59, 202, 123, 266, 138, 7, 150, 71, 214, 39, 182, 103, 246, 23, 166, 87, 230, 55, 198, 119, 262, 142, 15, 158, 79, 222, 47, 190, 111, 254, 31, 174, 95, 238, 63, 206, 127, 270]; + + return (unsafe{*PERM271.get_unchecked((index % 271) as usize)} as u32 * 73441 + + unsafe{*PERM271.get_unchecked(((index / 271) % 271) as usize)} as u32 * 271 + + unsafe{*PERM271.get_unchecked(((index / 73441) % 271) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (19902511u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton277(index: u32) -> f32 { - const PERM277: [u16; 277] = [0, 149, 64, 213, 32, 181, 96, 245, 128, 16, 165, 80, 229, 48, - 197, 112, 261, 8, 157, 72, 221, 40, 189, 104, 253, 141, 24, 173, - 88, 237, 56, 205, 120, 269, 136, 4, 153, 68, 217, 36, 185, 100, - 249, 132, 20, 169, 84, 233, 52, 201, 116, 265, 12, 161, 76, 225, - 44, 193, 108, 257, 145, 28, 177, 92, 241, 60, 209, 124, 273, 2, - 151, 66, 215, 34, 183, 98, 247, 130, 18, 167, 82, 231, 50, 199, - 114, 263, 10, 159, 74, 223, 42, 191, 106, 255, 143, 26, 175, 90, - 239, 58, 207, 122, 271, 139, 6, 155, 70, 219, 38, 187, 102, 251, - 134, 22, 171, 86, 235, 54, 203, 118, 267, 14, 163, 78, 227, 46, - 195, 110, 259, 147, 30, 179, 94, 243, 62, 211, 126, 275, 138, 1, - 150, 65, 214, 33, 182, 97, 246, 129, 17, 166, 81, 230, 49, 198, - 113, 262, 9, 158, 73, 222, 41, 190, 105, 254, 142, 25, 174, 89, - 238, 57, 206, 121, 270, 137, 5, 154, 69, 218, 37, 186, 101, 250, - 133, 21, 170, 85, 234, 53, 202, 117, 266, 13, 162, 77, 226, 45, - 194, 109, 258, 146, 29, 178, 93, 242, 61, 210, 125, 274, 3, 152, - 67, 216, 35, 184, 99, 248, 131, 19, 168, 83, 232, 51, 200, 115, - 264, 11, 160, 75, 224, 43, 192, 107, 256, 144, 27, 176, 91, 240, - 59, 208, 123, 272, 140, 7, 156, 71, 220, 39, 188, 103, 252, 135, - 23, 172, 87, 236, 55, 204, 119, 268, 15, 164, 79, 228, 47, 196, - 111, 260, 148, 31, 180, 95, 244, 63, 212, 127, 276]; - - return (unsafe { *PERM277.get_unchecked((index % 277) as usize) } as u32 * 76729 + - unsafe { *PERM277.get_unchecked(((index / 277) % 277) as usize) } as u32 * 277 + - unsafe { - *PERM277.get_unchecked(((index / 76729) % 277) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (21253933u32 as f32)); // Results in [0,1). + const PERM277: [u16; 277] = [0, 149, 64, 213, 32, 181, 96, 245, 128, 16, 165, 80, 229, 48, 197, 112, 261, 8, 157, 72, 221, 40, 189, 104, 253, 141, 24, 173, 88, 237, 56, 205, 120, 269, 136, 4, 153, 68, 217, 36, 185, 100, 249, 132, 20, 169, 84, 233, 52, 201, 116, 265, 12, 161, 76, 225, 44, 193, 108, 257, 145, 28, 177, 92, 241, 60, 209, 124, 273, 2, 151, 66, 215, 34, 183, 98, 247, 130, 18, 167, 82, 231, 50, 199, 114, 263, 10, 159, 74, 223, 42, 191, 106, 255, 143, 26, 175, 90, 239, 58, 207, 122, 271, 139, 6, 155, 70, 219, 38, 187, 102, 251, 134, 22, 171, 86, 235, 54, 203, 118, 267, 14, 163, 78, 227, 46, 195, 110, 259, 147, 30, 179, 94, 243, 62, 211, 126, 275, 138, 1, 150, 65, 214, 33, 182, 97, 246, 129, 17, 166, 81, 230, 49, 198, 113, 262, 9, 158, 73, 222, 41, 190, 105, 254, 142, 25, 174, 89, 238, 57, 206, 121, 270, 137, 5, 154, 69, 218, 37, 186, 101, 250, 133, 21, 170, 85, 234, 53, 202, 117, 266, 13, 162, 77, 226, 45, 194, 109, 258, 146, 29, 178, 93, 242, 61, 210, 125, 274, 3, 152, 67, 216, 35, 184, 99, 248, 131, 19, 168, 83, 232, 51, 200, 115, 264, 11, 160, 75, 224, 43, 192, 107, 256, 144, 27, 176, 91, 240, 59, 208, 123, 272, 140, 7, 156, 71, 220, 39, 188, 103, 252, 135, 23, 172, 87, 236, 55, 204, 119, 268, 15, 164, 79, 228, 47, 196, 111, 260, 148, 31, 180, 95, 244, 63, 212, 127, 276]; + + return (unsafe{*PERM277.get_unchecked((index % 277) as usize)} as u32 * 76729 + + unsafe{*PERM277.get_unchecked(((index / 277) % 277) as usize)} as u32 * 277 + + unsafe{*PERM277.get_unchecked(((index / 76729) % 277) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (21253933u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton281(index: u32) -> f32 { - const PERM281: [u16; 281] = [0, 153, 64, 217, 32, 185, 96, 249, 128, 16, 169, 80, 233, 48, - 201, 112, 265, 136, 8, 161, 72, 225, 40, 193, 104, 257, 145, 24, - 177, 88, 241, 56, 209, 120, 273, 4, 157, 68, 221, 36, 189, 100, - 253, 132, 20, 173, 84, 237, 52, 205, 116, 269, 141, 12, 165, 76, - 229, 44, 197, 108, 261, 149, 28, 181, 92, 245, 60, 213, 124, 277, - 2, 155, 66, 219, 34, 187, 98, 251, 130, 18, 171, 82, 235, 50, - 203, 114, 267, 138, 10, 163, 74, 227, 42, 195, 106, 259, 147, 26, - 179, 90, 243, 58, 211, 122, 275, 6, 159, 70, 223, 38, 191, 102, - 255, 134, 22, 175, 86, 239, 54, 207, 118, 271, 143, 14, 167, 78, - 231, 46, 199, 110, 263, 151, 30, 183, 94, 247, 62, 215, 126, 279, - 140, 1, 154, 65, 218, 33, 186, 97, 250, 129, 17, 170, 81, 234, - 49, 202, 113, 266, 137, 9, 162, 73, 226, 41, 194, 105, 258, 146, - 25, 178, 89, 242, 57, 210, 121, 274, 5, 158, 69, 222, 37, 190, - 101, 254, 133, 21, 174, 85, 238, 53, 206, 117, 270, 142, 13, 166, - 77, 230, 45, 198, 109, 262, 150, 29, 182, 93, 246, 61, 214, 125, - 278, 3, 156, 67, 220, 35, 188, 99, 252, 131, 19, 172, 83, 236, - 51, 204, 115, 268, 139, 11, 164, 75, 228, 43, 196, 107, 260, 148, - 27, 180, 91, 244, 59, 212, 123, 276, 7, 160, 71, 224, 39, 192, - 103, 256, 135, 23, 176, 87, 240, 55, 208, 119, 272, 144, 15, 168, - 79, 232, 47, 200, 111, 264, 152, 31, 184, 95, 248, 63, 216, 127, - 280]; - - return (unsafe { *PERM281.get_unchecked((index % 281) as usize) } as u32 * 78961 + - unsafe { *PERM281.get_unchecked(((index / 281) % 281) as usize) } as u32 * 281 + - unsafe { - *PERM281.get_unchecked(((index / 78961) % 281) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (22188041u32 as f32)); // Results in [0,1). + const PERM281: [u16; 281] = [0, 153, 64, 217, 32, 185, 96, 249, 128, 16, 169, 80, 233, 48, 201, 112, 265, 136, 8, 161, 72, 225, 40, 193, 104, 257, 145, 24, 177, 88, 241, 56, 209, 120, 273, 4, 157, 68, 221, 36, 189, 100, 253, 132, 20, 173, 84, 237, 52, 205, 116, 269, 141, 12, 165, 76, 229, 44, 197, 108, 261, 149, 28, 181, 92, 245, 60, 213, 124, 277, 2, 155, 66, 219, 34, 187, 98, 251, 130, 18, 171, 82, 235, 50, 203, 114, 267, 138, 10, 163, 74, 227, 42, 195, 106, 259, 147, 26, 179, 90, 243, 58, 211, 122, 275, 6, 159, 70, 223, 38, 191, 102, 255, 134, 22, 175, 86, 239, 54, 207, 118, 271, 143, 14, 167, 78, 231, 46, 199, 110, 263, 151, 30, 183, 94, 247, 62, 215, 126, 279, 140, 1, 154, 65, 218, 33, 186, 97, 250, 129, 17, 170, 81, 234, 49, 202, 113, 266, 137, 9, 162, 73, 226, 41, 194, 105, 258, 146, 25, 178, 89, 242, 57, 210, 121, 274, 5, 158, 69, 222, 37, 190, 101, 254, 133, 21, 174, 85, 238, 53, 206, 117, 270, 142, 13, 166, 77, 230, 45, 198, 109, 262, 150, 29, 182, 93, 246, 61, 214, 125, 278, 3, 156, 67, 220, 35, 188, 99, 252, 131, 19, 172, 83, 236, 51, 204, 115, 268, 139, 11, 164, 75, 228, 43, 196, 107, 260, 148, 27, 180, 91, 244, 59, 212, 123, 276, 7, 160, 71, 224, 39, 192, 103, 256, 135, 23, 176, 87, 240, 55, 208, 119, 272, 144, 15, 168, 79, 232, 47, 200, 111, 264, 152, 31, 184, 95, 248, 63, 216, 127, 280]; + + return (unsafe{*PERM281.get_unchecked((index % 281) as usize)} as u32 * 78961 + + unsafe{*PERM281.get_unchecked(((index / 281) % 281) as usize)} as u32 * 281 + + unsafe{*PERM281.get_unchecked(((index / 78961) % 281) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (22188041u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton283(index: u32) -> f32 { - const PERM283: [u16; 283] = [0, 155, 64, 219, 32, 187, 96, 251, 128, 16, 171, 80, 235, 48, - 203, 112, 267, 136, 8, 163, 72, 227, 40, 195, 104, 259, 147, 24, - 179, 88, 243, 56, 211, 120, 275, 4, 159, 68, 223, 36, 191, 100, - 255, 132, 20, 175, 84, 239, 52, 207, 116, 271, 143, 12, 167, 76, - 231, 44, 199, 108, 263, 151, 28, 183, 92, 247, 60, 215, 124, 279, - 140, 2, 157, 66, 221, 34, 189, 98, 253, 130, 18, 173, 82, 237, - 50, 205, 114, 269, 138, 10, 165, 74, 229, 42, 197, 106, 261, 149, - 26, 181, 90, 245, 58, 213, 122, 277, 6, 161, 70, 225, 38, 193, - 102, 257, 134, 22, 177, 86, 241, 54, 209, 118, 273, 145, 14, 169, - 78, 233, 46, 201, 110, 265, 153, 30, 185, 94, 249, 62, 217, 126, - 281, 141, 1, 156, 65, 220, 33, 188, 97, 252, 129, 17, 172, 81, - 236, 49, 204, 113, 268, 137, 9, 164, 73, 228, 41, 196, 105, 260, - 148, 25, 180, 89, 244, 57, 212, 121, 276, 5, 160, 69, 224, 37, - 192, 101, 256, 133, 21, 176, 85, 240, 53, 208, 117, 272, 144, 13, - 168, 77, 232, 45, 200, 109, 264, 152, 29, 184, 93, 248, 61, 216, - 125, 280, 142, 3, 158, 67, 222, 35, 190, 99, 254, 131, 19, 174, - 83, 238, 51, 206, 115, 270, 139, 11, 166, 75, 230, 43, 198, 107, - 262, 150, 27, 182, 91, 246, 59, 214, 123, 278, 7, 162, 71, 226, - 39, 194, 103, 258, 135, 23, 178, 87, 242, 55, 210, 119, 274, 146, - 15, 170, 79, 234, 47, 202, 111, 266, 154, 31, 186, 95, 250, 63, - 218, 127, 282]; - - return (unsafe { *PERM283.get_unchecked((index % 283) as usize) } as u32 * 80089 + - unsafe { *PERM283.get_unchecked(((index / 283) % 283) as usize) } as u32 * 283 + - unsafe { - *PERM283.get_unchecked(((index / 80089) % 283) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (22665187u32 as f32)); // Results in [0,1). + const PERM283: [u16; 283] = [0, 155, 64, 219, 32, 187, 96, 251, 128, 16, 171, 80, 235, 48, 203, 112, 267, 136, 8, 163, 72, 227, 40, 195, 104, 259, 147, 24, 179, 88, 243, 56, 211, 120, 275, 4, 159, 68, 223, 36, 191, 100, 255, 132, 20, 175, 84, 239, 52, 207, 116, 271, 143, 12, 167, 76, 231, 44, 199, 108, 263, 151, 28, 183, 92, 247, 60, 215, 124, 279, 140, 2, 157, 66, 221, 34, 189, 98, 253, 130, 18, 173, 82, 237, 50, 205, 114, 269, 138, 10, 165, 74, 229, 42, 197, 106, 261, 149, 26, 181, 90, 245, 58, 213, 122, 277, 6, 161, 70, 225, 38, 193, 102, 257, 134, 22, 177, 86, 241, 54, 209, 118, 273, 145, 14, 169, 78, 233, 46, 201, 110, 265, 153, 30, 185, 94, 249, 62, 217, 126, 281, 141, 1, 156, 65, 220, 33, 188, 97, 252, 129, 17, 172, 81, 236, 49, 204, 113, 268, 137, 9, 164, 73, 228, 41, 196, 105, 260, 148, 25, 180, 89, 244, 57, 212, 121, 276, 5, 160, 69, 224, 37, 192, 101, 256, 133, 21, 176, 85, 240, 53, 208, 117, 272, 144, 13, 168, 77, 232, 45, 200, 109, 264, 152, 29, 184, 93, 248, 61, 216, 125, 280, 142, 3, 158, 67, 222, 35, 190, 99, 254, 131, 19, 174, 83, 238, 51, 206, 115, 270, 139, 11, 166, 75, 230, 43, 198, 107, 262, 150, 27, 182, 91, 246, 59, 214, 123, 278, 7, 162, 71, 226, 39, 194, 103, 258, 135, 23, 178, 87, 242, 55, 210, 119, 274, 146, 15, 170, 79, 234, 47, 202, 111, 266, 154, 31, 186, 95, 250, 63, 218, 127, 282]; + + return (unsafe{*PERM283.get_unchecked((index % 283) as usize)} as u32 * 80089 + + unsafe{*PERM283.get_unchecked(((index / 283) % 283) as usize)} as u32 * 283 + + unsafe{*PERM283.get_unchecked(((index / 80089) % 283) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (22665187u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton293(index: u32) -> f32 { - const PERM293: [u16; 293] = [0, 165, 64, 229, 128, 32, 197, 96, 261, 16, 181, 80, 245, 149, - 48, 213, 112, 277, 8, 173, 72, 237, 136, 40, 205, 104, 269, 24, - 189, 88, 253, 157, 56, 221, 120, 285, 144, 4, 169, 68, 233, 132, - 36, 201, 100, 265, 20, 185, 84, 249, 153, 52, 217, 116, 281, 12, - 177, 76, 241, 140, 44, 209, 108, 273, 28, 193, 92, 257, 161, 60, - 225, 124, 289, 2, 167, 66, 231, 130, 34, 199, 98, 263, 18, 183, - 82, 247, 151, 50, 215, 114, 279, 10, 175, 74, 239, 138, 42, 207, - 106, 271, 26, 191, 90, 255, 159, 58, 223, 122, 287, 147, 6, 171, - 70, 235, 134, 38, 203, 102, 267, 22, 187, 86, 251, 155, 54, 219, - 118, 283, 14, 179, 78, 243, 142, 46, 211, 110, 275, 30, 195, 94, - 259, 163, 62, 227, 126, 291, 146, 1, 166, 65, 230, 129, 33, 198, - 97, 262, 17, 182, 81, 246, 150, 49, 214, 113, 278, 9, 174, 73, - 238, 137, 41, 206, 105, 270, 25, 190, 89, 254, 158, 57, 222, 121, - 286, 145, 5, 170, 69, 234, 133, 37, 202, 101, 266, 21, 186, 85, - 250, 154, 53, 218, 117, 282, 13, 178, 77, 242, 141, 45, 210, 109, - 274, 29, 194, 93, 258, 162, 61, 226, 125, 290, 3, 168, 67, 232, - 131, 35, 200, 99, 264, 19, 184, 83, 248, 152, 51, 216, 115, 280, - 11, 176, 75, 240, 139, 43, 208, 107, 272, 27, 192, 91, 256, 160, - 59, 224, 123, 288, 148, 7, 172, 71, 236, 135, 39, 204, 103, 268, - 23, 188, 87, 252, 156, 55, 220, 119, 284, 15, 180, 79, 244, 143, - 47, 212, 111, 276, 31, 196, 95, 260, 164, 63, 228, 127, 292]; - - return (unsafe { *PERM293.get_unchecked((index % 293) as usize) } as u32 * 85849 + - unsafe { *PERM293.get_unchecked(((index / 293) % 293) as usize) } as u32 * 293 + - unsafe { - *PERM293.get_unchecked(((index / 85849) % 293) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (25153757u32 as f32)); // Results in [0,1). + const PERM293: [u16; 293] = [0, 165, 64, 229, 128, 32, 197, 96, 261, 16, 181, 80, 245, 149, 48, 213, 112, 277, 8, 173, 72, 237, 136, 40, 205, 104, 269, 24, 189, 88, 253, 157, 56, 221, 120, 285, 144, 4, 169, 68, 233, 132, 36, 201, 100, 265, 20, 185, 84, 249, 153, 52, 217, 116, 281, 12, 177, 76, 241, 140, 44, 209, 108, 273, 28, 193, 92, 257, 161, 60, 225, 124, 289, 2, 167, 66, 231, 130, 34, 199, 98, 263, 18, 183, 82, 247, 151, 50, 215, 114, 279, 10, 175, 74, 239, 138, 42, 207, 106, 271, 26, 191, 90, 255, 159, 58, 223, 122, 287, 147, 6, 171, 70, 235, 134, 38, 203, 102, 267, 22, 187, 86, 251, 155, 54, 219, 118, 283, 14, 179, 78, 243, 142, 46, 211, 110, 275, 30, 195, 94, 259, 163, 62, 227, 126, 291, 146, 1, 166, 65, 230, 129, 33, 198, 97, 262, 17, 182, 81, 246, 150, 49, 214, 113, 278, 9, 174, 73, 238, 137, 41, 206, 105, 270, 25, 190, 89, 254, 158, 57, 222, 121, 286, 145, 5, 170, 69, 234, 133, 37, 202, 101, 266, 21, 186, 85, 250, 154, 53, 218, 117, 282, 13, 178, 77, 242, 141, 45, 210, 109, 274, 29, 194, 93, 258, 162, 61, 226, 125, 290, 3, 168, 67, 232, 131, 35, 200, 99, 264, 19, 184, 83, 248, 152, 51, 216, 115, 280, 11, 176, 75, 240, 139, 43, 208, 107, 272, 27, 192, 91, 256, 160, 59, 224, 123, 288, 148, 7, 172, 71, 236, 135, 39, 204, 103, 268, 23, 188, 87, 252, 156, 55, 220, 119, 284, 15, 180, 79, 244, 143, 47, 212, 111, 276, 31, 196, 95, 260, 164, 63, 228, 127, 292]; + + return (unsafe{*PERM293.get_unchecked((index % 293) as usize)} as u32 * 85849 + + unsafe{*PERM293.get_unchecked(((index / 293) % 293) as usize)} as u32 * 293 + + unsafe{*PERM293.get_unchecked(((index / 85849) % 293) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (25153757u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton307(index: u32) -> f32 { - const PERM307: [u16; 307] = [0, 179, 64, 243, 128, 32, 211, 96, 275, 144, 16, 195, 80, 259, - 163, 48, 227, 112, 291, 8, 187, 72, 251, 136, 40, 219, 104, 283, - 155, 24, 203, 88, 267, 171, 56, 235, 120, 299, 4, 183, 68, 247, - 132, 36, 215, 100, 279, 148, 20, 199, 84, 263, 167, 52, 231, 116, - 295, 12, 191, 76, 255, 140, 44, 223, 108, 287, 159, 28, 207, 92, - 271, 175, 60, 239, 124, 303, 152, 2, 181, 66, 245, 130, 34, 213, - 98, 277, 146, 18, 197, 82, 261, 165, 50, 229, 114, 293, 10, 189, - 74, 253, 138, 42, 221, 106, 285, 157, 26, 205, 90, 269, 173, 58, - 237, 122, 301, 6, 185, 70, 249, 134, 38, 217, 102, 281, 150, 22, - 201, 86, 265, 169, 54, 233, 118, 297, 14, 193, 78, 257, 142, 46, - 225, 110, 289, 161, 30, 209, 94, 273, 177, 62, 241, 126, 305, - 153, 1, 180, 65, 244, 129, 33, 212, 97, 276, 145, 17, 196, 81, - 260, 164, 49, 228, 113, 292, 9, 188, 73, 252, 137, 41, 220, 105, - 284, 156, 25, 204, 89, 268, 172, 57, 236, 121, 300, 5, 184, 69, - 248, 133, 37, 216, 101, 280, 149, 21, 200, 85, 264, 168, 53, 232, - 117, 296, 13, 192, 77, 256, 141, 45, 224, 109, 288, 160, 29, 208, - 93, 272, 176, 61, 240, 125, 304, 154, 3, 182, 67, 246, 131, 35, - 214, 99, 278, 147, 19, 198, 83, 262, 166, 51, 230, 115, 294, 11, - 190, 75, 254, 139, 43, 222, 107, 286, 158, 27, 206, 91, 270, 174, - 59, 238, 123, 302, 7, 186, 71, 250, 135, 39, 218, 103, 282, 151, - 23, 202, 87, 266, 170, 55, 234, 119, 298, 15, 194, 79, 258, 143, - 47, 226, 111, 290, 162, 31, 210, 95, 274, 178, 63, 242, 127, 306]; - - return (unsafe { *PERM307.get_unchecked((index % 307) as usize) } as u32 * 94249 + - unsafe { *PERM307.get_unchecked(((index / 307) % 307) as usize) } as u32 * 307 + - unsafe { - *PERM307.get_unchecked(((index / 94249) % 307) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (28934443u32 as f32)); // Results in [0,1). + const PERM307: [u16; 307] = [0, 179, 64, 243, 128, 32, 211, 96, 275, 144, 16, 195, 80, 259, 163, 48, 227, 112, 291, 8, 187, 72, 251, 136, 40, 219, 104, 283, 155, 24, 203, 88, 267, 171, 56, 235, 120, 299, 4, 183, 68, 247, 132, 36, 215, 100, 279, 148, 20, 199, 84, 263, 167, 52, 231, 116, 295, 12, 191, 76, 255, 140, 44, 223, 108, 287, 159, 28, 207, 92, 271, 175, 60, 239, 124, 303, 152, 2, 181, 66, 245, 130, 34, 213, 98, 277, 146, 18, 197, 82, 261, 165, 50, 229, 114, 293, 10, 189, 74, 253, 138, 42, 221, 106, 285, 157, 26, 205, 90, 269, 173, 58, 237, 122, 301, 6, 185, 70, 249, 134, 38, 217, 102, 281, 150, 22, 201, 86, 265, 169, 54, 233, 118, 297, 14, 193, 78, 257, 142, 46, 225, 110, 289, 161, 30, 209, 94, 273, 177, 62, 241, 126, 305, 153, 1, 180, 65, 244, 129, 33, 212, 97, 276, 145, 17, 196, 81, 260, 164, 49, 228, 113, 292, 9, 188, 73, 252, 137, 41, 220, 105, 284, 156, 25, 204, 89, 268, 172, 57, 236, 121, 300, 5, 184, 69, 248, 133, 37, 216, 101, 280, 149, 21, 200, 85, 264, 168, 53, 232, 117, 296, 13, 192, 77, 256, 141, 45, 224, 109, 288, 160, 29, 208, 93, 272, 176, 61, 240, 125, 304, 154, 3, 182, 67, 246, 131, 35, 214, 99, 278, 147, 19, 198, 83, 262, 166, 51, 230, 115, 294, 11, 190, 75, 254, 139, 43, 222, 107, 286, 158, 27, 206, 91, 270, 174, 59, 238, 123, 302, 7, 186, 71, 250, 135, 39, 218, 103, 282, 151, 23, 202, 87, 266, 170, 55, 234, 119, 298, 15, 194, 79, 258, 143, 47, 226, 111, 290, 162, 31, 210, 95, 274, 178, 63, 242, 127, 306]; + + return (unsafe{*PERM307.get_unchecked((index % 307) as usize)} as u32 * 94249 + + unsafe{*PERM307.get_unchecked(((index / 307) % 307) as usize)} as u32 * 307 + + unsafe{*PERM307.get_unchecked(((index / 94249) % 307) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (28934443u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton311(index: u32) -> f32 { - const PERM311: [u16; 311] = [0, 183, 64, 247, 128, 32, 215, 96, 279, 144, 16, 199, 80, 263, - 167, 48, 231, 112, 295, 8, 191, 72, 255, 136, 40, 223, 104, 287, - 159, 24, 207, 88, 271, 175, 56, 239, 120, 303, 152, 4, 187, 68, - 251, 132, 36, 219, 100, 283, 148, 20, 203, 84, 267, 171, 52, 235, - 116, 299, 12, 195, 76, 259, 140, 44, 227, 108, 291, 163, 28, 211, - 92, 275, 179, 60, 243, 124, 307, 154, 2, 185, 66, 249, 130, 34, - 217, 98, 281, 146, 18, 201, 82, 265, 169, 50, 233, 114, 297, 10, - 193, 74, 257, 138, 42, 225, 106, 289, 161, 26, 209, 90, 273, 177, - 58, 241, 122, 305, 157, 6, 189, 70, 253, 134, 38, 221, 102, 285, - 150, 22, 205, 86, 269, 173, 54, 237, 118, 301, 14, 197, 78, 261, - 142, 46, 229, 110, 293, 165, 30, 213, 94, 277, 181, 62, 245, 126, - 309, 155, 1, 184, 65, 248, 129, 33, 216, 97, 280, 145, 17, 200, - 81, 264, 168, 49, 232, 113, 296, 9, 192, 73, 256, 137, 41, 224, - 105, 288, 160, 25, 208, 89, 272, 176, 57, 240, 121, 304, 153, 5, - 188, 69, 252, 133, 37, 220, 101, 284, 149, 21, 204, 85, 268, 172, - 53, 236, 117, 300, 13, 196, 77, 260, 141, 45, 228, 109, 292, 164, - 29, 212, 93, 276, 180, 61, 244, 125, 308, 156, 3, 186, 67, 250, - 131, 35, 218, 99, 282, 147, 19, 202, 83, 266, 170, 51, 234, 115, - 298, 11, 194, 75, 258, 139, 43, 226, 107, 290, 162, 27, 210, 91, - 274, 178, 59, 242, 123, 306, 158, 7, 190, 71, 254, 135, 39, 222, - 103, 286, 151, 23, 206, 87, 270, 174, 55, 238, 119, 302, 15, 198, - 79, 262, 143, 47, 230, 111, 294, 166, 31, 214, 95, 278, 182, 63, - 246, 127, 310]; - - return (unsafe { *PERM311.get_unchecked((index % 311) as usize) } as u32 * 96721 + - unsafe { *PERM311.get_unchecked(((index / 311) % 311) as usize) } as u32 * 311 + - unsafe { - *PERM311.get_unchecked(((index / 96721) % 311) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (30080231u32 as f32)); // Results in [0,1). + const PERM311: [u16; 311] = [0, 183, 64, 247, 128, 32, 215, 96, 279, 144, 16, 199, 80, 263, 167, 48, 231, 112, 295, 8, 191, 72, 255, 136, 40, 223, 104, 287, 159, 24, 207, 88, 271, 175, 56, 239, 120, 303, 152, 4, 187, 68, 251, 132, 36, 219, 100, 283, 148, 20, 203, 84, 267, 171, 52, 235, 116, 299, 12, 195, 76, 259, 140, 44, 227, 108, 291, 163, 28, 211, 92, 275, 179, 60, 243, 124, 307, 154, 2, 185, 66, 249, 130, 34, 217, 98, 281, 146, 18, 201, 82, 265, 169, 50, 233, 114, 297, 10, 193, 74, 257, 138, 42, 225, 106, 289, 161, 26, 209, 90, 273, 177, 58, 241, 122, 305, 157, 6, 189, 70, 253, 134, 38, 221, 102, 285, 150, 22, 205, 86, 269, 173, 54, 237, 118, 301, 14, 197, 78, 261, 142, 46, 229, 110, 293, 165, 30, 213, 94, 277, 181, 62, 245, 126, 309, 155, 1, 184, 65, 248, 129, 33, 216, 97, 280, 145, 17, 200, 81, 264, 168, 49, 232, 113, 296, 9, 192, 73, 256, 137, 41, 224, 105, 288, 160, 25, 208, 89, 272, 176, 57, 240, 121, 304, 153, 5, 188, 69, 252, 133, 37, 220, 101, 284, 149, 21, 204, 85, 268, 172, 53, 236, 117, 300, 13, 196, 77, 260, 141, 45, 228, 109, 292, 164, 29, 212, 93, 276, 180, 61, 244, 125, 308, 156, 3, 186, 67, 250, 131, 35, 218, 99, 282, 147, 19, 202, 83, 266, 170, 51, 234, 115, 298, 11, 194, 75, 258, 139, 43, 226, 107, 290, 162, 27, 210, 91, 274, 178, 59, 242, 123, 306, 158, 7, 190, 71, 254, 135, 39, 222, 103, 286, 151, 23, 206, 87, 270, 174, 55, 238, 119, 302, 15, 198, 79, 262, 143, 47, 230, 111, 294, 166, 31, 214, 95, 278, 182, 63, 246, 127, 310]; + + return (unsafe{*PERM311.get_unchecked((index % 311) as usize)} as u32 * 96721 + + unsafe{*PERM311.get_unchecked(((index / 311) % 311) as usize)} as u32 * 311 + + unsafe{*PERM311.get_unchecked(((index / 96721) % 311) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (30080231u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton313(index: u32) -> f32 { - const PERM313: [u16; 313] = [0, 185, 64, 249, 128, 32, 217, 96, 281, 144, 16, 201, 80, 265, - 169, 48, 233, 112, 297, 152, 8, 193, 72, 257, 136, 40, 225, 104, - 289, 161, 24, 209, 88, 273, 177, 56, 241, 120, 305, 4, 189, 68, - 253, 132, 36, 221, 100, 285, 148, 20, 205, 84, 269, 173, 52, 237, - 116, 301, 157, 12, 197, 76, 261, 140, 44, 229, 108, 293, 165, 28, - 213, 92, 277, 181, 60, 245, 124, 309, 2, 187, 66, 251, 130, 34, - 219, 98, 283, 146, 18, 203, 82, 267, 171, 50, 235, 114, 299, 154, - 10, 195, 74, 259, 138, 42, 227, 106, 291, 163, 26, 211, 90, 275, - 179, 58, 243, 122, 307, 6, 191, 70, 255, 134, 38, 223, 102, 287, - 150, 22, 207, 86, 271, 175, 54, 239, 118, 303, 159, 14, 199, 78, - 263, 142, 46, 231, 110, 295, 167, 30, 215, 94, 279, 183, 62, 247, - 126, 311, 156, 1, 186, 65, 250, 129, 33, 218, 97, 282, 145, 17, - 202, 81, 266, 170, 49, 234, 113, 298, 153, 9, 194, 73, 258, 137, - 41, 226, 105, 290, 162, 25, 210, 89, 274, 178, 57, 242, 121, 306, - 5, 190, 69, 254, 133, 37, 222, 101, 286, 149, 21, 206, 85, 270, - 174, 53, 238, 117, 302, 158, 13, 198, 77, 262, 141, 45, 230, 109, - 294, 166, 29, 214, 93, 278, 182, 61, 246, 125, 310, 3, 188, 67, - 252, 131, 35, 220, 99, 284, 147, 19, 204, 83, 268, 172, 51, 236, - 115, 300, 155, 11, 196, 75, 260, 139, 43, 228, 107, 292, 164, 27, - 212, 91, 276, 180, 59, 244, 123, 308, 7, 192, 71, 256, 135, 39, - 224, 103, 288, 151, 23, 208, 87, 272, 176, 55, 240, 119, 304, - 160, 15, 200, 79, 264, 143, 47, 232, 111, 296, 168, 31, 216, 95, - 280, 184, 63, 248, 127, 312]; - - return (unsafe { *PERM313.get_unchecked((index % 313) as usize) } as u32 * 97969 + - unsafe { *PERM313.get_unchecked(((index / 313) % 313) as usize) } as u32 * 313 + - unsafe { - *PERM313.get_unchecked(((index / 97969) % 313) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (30664297u32 as f32)); // Results in [0,1). + const PERM313: [u16; 313] = [0, 185, 64, 249, 128, 32, 217, 96, 281, 144, 16, 201, 80, 265, 169, 48, 233, 112, 297, 152, 8, 193, 72, 257, 136, 40, 225, 104, 289, 161, 24, 209, 88, 273, 177, 56, 241, 120, 305, 4, 189, 68, 253, 132, 36, 221, 100, 285, 148, 20, 205, 84, 269, 173, 52, 237, 116, 301, 157, 12, 197, 76, 261, 140, 44, 229, 108, 293, 165, 28, 213, 92, 277, 181, 60, 245, 124, 309, 2, 187, 66, 251, 130, 34, 219, 98, 283, 146, 18, 203, 82, 267, 171, 50, 235, 114, 299, 154, 10, 195, 74, 259, 138, 42, 227, 106, 291, 163, 26, 211, 90, 275, 179, 58, 243, 122, 307, 6, 191, 70, 255, 134, 38, 223, 102, 287, 150, 22, 207, 86, 271, 175, 54, 239, 118, 303, 159, 14, 199, 78, 263, 142, 46, 231, 110, 295, 167, 30, 215, 94, 279, 183, 62, 247, 126, 311, 156, 1, 186, 65, 250, 129, 33, 218, 97, 282, 145, 17, 202, 81, 266, 170, 49, 234, 113, 298, 153, 9, 194, 73, 258, 137, 41, 226, 105, 290, 162, 25, 210, 89, 274, 178, 57, 242, 121, 306, 5, 190, 69, 254, 133, 37, 222, 101, 286, 149, 21, 206, 85, 270, 174, 53, 238, 117, 302, 158, 13, 198, 77, 262, 141, 45, 230, 109, 294, 166, 29, 214, 93, 278, 182, 61, 246, 125, 310, 3, 188, 67, 252, 131, 35, 220, 99, 284, 147, 19, 204, 83, 268, 172, 51, 236, 115, 300, 155, 11, 196, 75, 260, 139, 43, 228, 107, 292, 164, 27, 212, 91, 276, 180, 59, 244, 123, 308, 7, 192, 71, 256, 135, 39, 224, 103, 288, 151, 23, 208, 87, 272, 176, 55, 240, 119, 304, 160, 15, 200, 79, 264, 143, 47, 232, 111, 296, 168, 31, 216, 95, 280, 184, 63, 248, 127, 312]; + + return (unsafe{*PERM313.get_unchecked((index % 313) as usize)} as u32 * 97969 + + unsafe{*PERM313.get_unchecked(((index / 313) % 313) as usize)} as u32 * 313 + + unsafe{*PERM313.get_unchecked(((index / 97969) % 313) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (30664297u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton317(index: u32) -> f32 { - const PERM317: [u16; 317] = [0, 189, 64, 253, 128, 32, 221, 96, 285, 144, 16, 205, 80, 269, - 173, 48, 237, 112, 301, 152, 8, 197, 72, 261, 136, 40, 229, 104, - 293, 165, 24, 213, 88, 277, 181, 56, 245, 120, 309, 156, 4, 193, - 68, 257, 132, 36, 225, 100, 289, 148, 20, 209, 84, 273, 177, 52, - 241, 116, 305, 161, 12, 201, 76, 265, 140, 44, 233, 108, 297, - 169, 28, 217, 92, 281, 185, 60, 249, 124, 313, 2, 191, 66, 255, - 130, 34, 223, 98, 287, 146, 18, 207, 82, 271, 175, 50, 239, 114, - 303, 154, 10, 199, 74, 263, 138, 42, 231, 106, 295, 167, 26, 215, - 90, 279, 183, 58, 247, 122, 311, 159, 6, 195, 70, 259, 134, 38, - 227, 102, 291, 150, 22, 211, 86, 275, 179, 54, 243, 118, 307, - 163, 14, 203, 78, 267, 142, 46, 235, 110, 299, 171, 30, 219, 94, - 283, 187, 62, 251, 126, 315, 158, 1, 190, 65, 254, 129, 33, 222, - 97, 286, 145, 17, 206, 81, 270, 174, 49, 238, 113, 302, 153, 9, - 198, 73, 262, 137, 41, 230, 105, 294, 166, 25, 214, 89, 278, 182, - 57, 246, 121, 310, 157, 5, 194, 69, 258, 133, 37, 226, 101, 290, - 149, 21, 210, 85, 274, 178, 53, 242, 117, 306, 162, 13, 202, 77, - 266, 141, 45, 234, 109, 298, 170, 29, 218, 93, 282, 186, 61, 250, - 125, 314, 3, 192, 67, 256, 131, 35, 224, 99, 288, 147, 19, 208, - 83, 272, 176, 51, 240, 115, 304, 155, 11, 200, 75, 264, 139, 43, - 232, 107, 296, 168, 27, 216, 91, 280, 184, 59, 248, 123, 312, - 160, 7, 196, 71, 260, 135, 39, 228, 103, 292, 151, 23, 212, 87, - 276, 180, 55, 244, 119, 308, 164, 15, 204, 79, 268, 143, 47, 236, - 111, 300, 172, 31, 220, 95, 284, 188, 63, 252, 127, 316]; - - return (unsafe { *PERM317.get_unchecked((index % 317) as usize) } as u32 * 100489 + - unsafe { *PERM317.get_unchecked(((index / 317) % 317) as usize) } as u32 * 317 + - unsafe { - *PERM317.get_unchecked(((index / 100489) % 317) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (31855013u32 as f32)); // Results in [0,1). + const PERM317: [u16; 317] = [0, 189, 64, 253, 128, 32, 221, 96, 285, 144, 16, 205, 80, 269, 173, 48, 237, 112, 301, 152, 8, 197, 72, 261, 136, 40, 229, 104, 293, 165, 24, 213, 88, 277, 181, 56, 245, 120, 309, 156, 4, 193, 68, 257, 132, 36, 225, 100, 289, 148, 20, 209, 84, 273, 177, 52, 241, 116, 305, 161, 12, 201, 76, 265, 140, 44, 233, 108, 297, 169, 28, 217, 92, 281, 185, 60, 249, 124, 313, 2, 191, 66, 255, 130, 34, 223, 98, 287, 146, 18, 207, 82, 271, 175, 50, 239, 114, 303, 154, 10, 199, 74, 263, 138, 42, 231, 106, 295, 167, 26, 215, 90, 279, 183, 58, 247, 122, 311, 159, 6, 195, 70, 259, 134, 38, 227, 102, 291, 150, 22, 211, 86, 275, 179, 54, 243, 118, 307, 163, 14, 203, 78, 267, 142, 46, 235, 110, 299, 171, 30, 219, 94, 283, 187, 62, 251, 126, 315, 158, 1, 190, 65, 254, 129, 33, 222, 97, 286, 145, 17, 206, 81, 270, 174, 49, 238, 113, 302, 153, 9, 198, 73, 262, 137, 41, 230, 105, 294, 166, 25, 214, 89, 278, 182, 57, 246, 121, 310, 157, 5, 194, 69, 258, 133, 37, 226, 101, 290, 149, 21, 210, 85, 274, 178, 53, 242, 117, 306, 162, 13, 202, 77, 266, 141, 45, 234, 109, 298, 170, 29, 218, 93, 282, 186, 61, 250, 125, 314, 3, 192, 67, 256, 131, 35, 224, 99, 288, 147, 19, 208, 83, 272, 176, 51, 240, 115, 304, 155, 11, 200, 75, 264, 139, 43, 232, 107, 296, 168, 27, 216, 91, 280, 184, 59, 248, 123, 312, 160, 7, 196, 71, 260, 135, 39, 228, 103, 292, 151, 23, 212, 87, 276, 180, 55, 244, 119, 308, 164, 15, 204, 79, 268, 143, 47, 236, 111, 300, 172, 31, 220, 95, 284, 188, 63, 252, 127, 316]; + + return (unsafe{*PERM317.get_unchecked((index % 317) as usize)} as u32 * 100489 + + unsafe{*PERM317.get_unchecked(((index / 317) % 317) as usize)} as u32 * 317 + + unsafe{*PERM317.get_unchecked(((index / 100489) % 317) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (31855013u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton331(index: u32) -> f32 { - const PERM331: [u16; 331] = [0, 203, 128, 64, 267, 32, 235, 171, 96, 299, 16, 219, 144, 80, - 283, 48, 251, 187, 112, 315, 160, 8, 211, 136, 72, 275, 40, 243, - 179, 104, 307, 24, 227, 152, 88, 291, 56, 259, 195, 120, 323, 4, - 207, 132, 68, 271, 36, 239, 175, 100, 303, 20, 223, 148, 84, 287, - 52, 255, 191, 116, 319, 167, 12, 215, 140, 76, 279, 44, 247, 183, - 108, 311, 28, 231, 156, 92, 295, 60, 263, 199, 124, 327, 164, 2, - 205, 130, 66, 269, 34, 237, 173, 98, 301, 18, 221, 146, 82, 285, - 50, 253, 189, 114, 317, 162, 10, 213, 138, 74, 277, 42, 245, 181, - 106, 309, 26, 229, 154, 90, 293, 58, 261, 197, 122, 325, 6, 209, - 134, 70, 273, 38, 241, 177, 102, 305, 22, 225, 150, 86, 289, 54, - 257, 193, 118, 321, 169, 14, 217, 142, 78, 281, 46, 249, 185, - 110, 313, 30, 233, 158, 94, 297, 62, 265, 201, 126, 329, 165, 1, - 204, 129, 65, 268, 33, 236, 172, 97, 300, 17, 220, 145, 81, 284, - 49, 252, 188, 113, 316, 161, 9, 212, 137, 73, 276, 41, 244, 180, - 105, 308, 25, 228, 153, 89, 292, 57, 260, 196, 121, 324, 5, 208, - 133, 69, 272, 37, 240, 176, 101, 304, 21, 224, 149, 85, 288, 53, - 256, 192, 117, 320, 168, 13, 216, 141, 77, 280, 45, 248, 184, - 109, 312, 29, 232, 157, 93, 296, 61, 264, 200, 125, 328, 166, 3, - 206, 131, 67, 270, 35, 238, 174, 99, 302, 19, 222, 147, 83, 286, - 51, 254, 190, 115, 318, 163, 11, 214, 139, 75, 278, 43, 246, 182, - 107, 310, 27, 230, 155, 91, 294, 59, 262, 198, 123, 326, 7, 210, - 135, 71, 274, 39, 242, 178, 103, 306, 23, 226, 151, 87, 290, 55, - 258, 194, 119, 322, 170, 15, 218, 143, 79, 282, 47, 250, 186, - 111, 314, 31, 234, 159, 95, 298, 63, 266, 202, 127, 330]; - - return (unsafe { *PERM331.get_unchecked((index % 331) as usize) } as u32 * 109561 + - unsafe { *PERM331.get_unchecked(((index / 331) % 331) as usize) } as u32 * 331 + - unsafe { - *PERM331.get_unchecked(((index / 109561) % 331) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (36264691u32 as f32)); // Results in [0,1). + const PERM331: [u16; 331] = [0, 203, 128, 64, 267, 32, 235, 171, 96, 299, 16, 219, 144, 80, 283, 48, 251, 187, 112, 315, 160, 8, 211, 136, 72, 275, 40, 243, 179, 104, 307, 24, 227, 152, 88, 291, 56, 259, 195, 120, 323, 4, 207, 132, 68, 271, 36, 239, 175, 100, 303, 20, 223, 148, 84, 287, 52, 255, 191, 116, 319, 167, 12, 215, 140, 76, 279, 44, 247, 183, 108, 311, 28, 231, 156, 92, 295, 60, 263, 199, 124, 327, 164, 2, 205, 130, 66, 269, 34, 237, 173, 98, 301, 18, 221, 146, 82, 285, 50, 253, 189, 114, 317, 162, 10, 213, 138, 74, 277, 42, 245, 181, 106, 309, 26, 229, 154, 90, 293, 58, 261, 197, 122, 325, 6, 209, 134, 70, 273, 38, 241, 177, 102, 305, 22, 225, 150, 86, 289, 54, 257, 193, 118, 321, 169, 14, 217, 142, 78, 281, 46, 249, 185, 110, 313, 30, 233, 158, 94, 297, 62, 265, 201, 126, 329, 165, 1, 204, 129, 65, 268, 33, 236, 172, 97, 300, 17, 220, 145, 81, 284, 49, 252, 188, 113, 316, 161, 9, 212, 137, 73, 276, 41, 244, 180, 105, 308, 25, 228, 153, 89, 292, 57, 260, 196, 121, 324, 5, 208, 133, 69, 272, 37, 240, 176, 101, 304, 21, 224, 149, 85, 288, 53, 256, 192, 117, 320, 168, 13, 216, 141, 77, 280, 45, 248, 184, 109, 312, 29, 232, 157, 93, 296, 61, 264, 200, 125, 328, 166, 3, 206, 131, 67, 270, 35, 238, 174, 99, 302, 19, 222, 147, 83, 286, 51, 254, 190, 115, 318, 163, 11, 214, 139, 75, 278, 43, 246, 182, 107, 310, 27, 230, 155, 91, 294, 59, 262, 198, 123, 326, 7, 210, 135, 71, 274, 39, 242, 178, 103, 306, 23, 226, 151, 87, 290, 55, 258, 194, 119, 322, 170, 15, 218, 143, 79, 282, 47, 250, 186, 111, 314, 31, 234, 159, 95, 298, 63, 266, 202, 127, 330]; + + return (unsafe{*PERM331.get_unchecked((index % 331) as usize)} as u32 * 109561 + + unsafe{*PERM331.get_unchecked(((index / 331) % 331) as usize)} as u32 * 331 + + unsafe{*PERM331.get_unchecked(((index / 109561) % 331) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (36264691u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton337(index: u32) -> f32 { - const PERM337: [u16; 337] = [0, 209, 128, 64, 273, 32, 241, 177, 96, 305, 160, 16, 225, 144, - 80, 289, 48, 257, 193, 112, 321, 8, 217, 136, 72, 281, 40, 249, - 185, 104, 313, 169, 24, 233, 152, 88, 297, 56, 265, 201, 120, - 329, 4, 213, 132, 68, 277, 36, 245, 181, 100, 309, 164, 20, 229, - 148, 84, 293, 52, 261, 197, 116, 325, 12, 221, 140, 76, 285, 44, - 253, 189, 108, 317, 173, 28, 237, 156, 92, 301, 60, 269, 205, - 124, 333, 2, 211, 130, 66, 275, 34, 243, 179, 98, 307, 162, 18, - 227, 146, 82, 291, 50, 259, 195, 114, 323, 10, 219, 138, 74, 283, - 42, 251, 187, 106, 315, 171, 26, 235, 154, 90, 299, 58, 267, 203, - 122, 331, 6, 215, 134, 70, 279, 38, 247, 183, 102, 311, 166, 22, - 231, 150, 86, 295, 54, 263, 199, 118, 327, 14, 223, 142, 78, 287, - 46, 255, 191, 110, 319, 175, 30, 239, 158, 94, 303, 62, 271, 207, - 126, 335, 168, 1, 210, 129, 65, 274, 33, 242, 178, 97, 306, 161, - 17, 226, 145, 81, 290, 49, 258, 194, 113, 322, 9, 218, 137, 73, - 282, 41, 250, 186, 105, 314, 170, 25, 234, 153, 89, 298, 57, 266, - 202, 121, 330, 5, 214, 133, 69, 278, 37, 246, 182, 101, 310, 165, - 21, 230, 149, 85, 294, 53, 262, 198, 117, 326, 13, 222, 141, 77, - 286, 45, 254, 190, 109, 318, 174, 29, 238, 157, 93, 302, 61, 270, - 206, 125, 334, 3, 212, 131, 67, 276, 35, 244, 180, 99, 308, 163, - 19, 228, 147, 83, 292, 51, 260, 196, 115, 324, 11, 220, 139, 75, - 284, 43, 252, 188, 107, 316, 172, 27, 236, 155, 91, 300, 59, 268, - 204, 123, 332, 7, 216, 135, 71, 280, 39, 248, 184, 103, 312, 167, - 23, 232, 151, 87, 296, 55, 264, 200, 119, 328, 15, 224, 143, 79, - 288, 47, 256, 192, 111, 320, 176, 31, 240, 159, 95, 304, 63, 272, - 208, 127, 336]; - - return (unsafe { *PERM337.get_unchecked((index % 337) as usize) } as u32 * 113569 + - unsafe { *PERM337.get_unchecked(((index / 337) % 337) as usize) } as u32 * 337 + - unsafe { - *PERM337.get_unchecked(((index / 113569) % 337) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (38272753u32 as f32)); // Results in [0,1). + const PERM337: [u16; 337] = [0, 209, 128, 64, 273, 32, 241, 177, 96, 305, 160, 16, 225, 144, 80, 289, 48, 257, 193, 112, 321, 8, 217, 136, 72, 281, 40, 249, 185, 104, 313, 169, 24, 233, 152, 88, 297, 56, 265, 201, 120, 329, 4, 213, 132, 68, 277, 36, 245, 181, 100, 309, 164, 20, 229, 148, 84, 293, 52, 261, 197, 116, 325, 12, 221, 140, 76, 285, 44, 253, 189, 108, 317, 173, 28, 237, 156, 92, 301, 60, 269, 205, 124, 333, 2, 211, 130, 66, 275, 34, 243, 179, 98, 307, 162, 18, 227, 146, 82, 291, 50, 259, 195, 114, 323, 10, 219, 138, 74, 283, 42, 251, 187, 106, 315, 171, 26, 235, 154, 90, 299, 58, 267, 203, 122, 331, 6, 215, 134, 70, 279, 38, 247, 183, 102, 311, 166, 22, 231, 150, 86, 295, 54, 263, 199, 118, 327, 14, 223, 142, 78, 287, 46, 255, 191, 110, 319, 175, 30, 239, 158, 94, 303, 62, 271, 207, 126, 335, 168, 1, 210, 129, 65, 274, 33, 242, 178, 97, 306, 161, 17, 226, 145, 81, 290, 49, 258, 194, 113, 322, 9, 218, 137, 73, 282, 41, 250, 186, 105, 314, 170, 25, 234, 153, 89, 298, 57, 266, 202, 121, 330, 5, 214, 133, 69, 278, 37, 246, 182, 101, 310, 165, 21, 230, 149, 85, 294, 53, 262, 198, 117, 326, 13, 222, 141, 77, 286, 45, 254, 190, 109, 318, 174, 29, 238, 157, 93, 302, 61, 270, 206, 125, 334, 3, 212, 131, 67, 276, 35, 244, 180, 99, 308, 163, 19, 228, 147, 83, 292, 51, 260, 196, 115, 324, 11, 220, 139, 75, 284, 43, 252, 188, 107, 316, 172, 27, 236, 155, 91, 300, 59, 268, 204, 123, 332, 7, 216, 135, 71, 280, 39, 248, 184, 103, 312, 167, 23, 232, 151, 87, 296, 55, 264, 200, 119, 328, 15, 224, 143, 79, 288, 47, 256, 192, 111, 320, 176, 31, 240, 159, 95, 304, 63, 272, 208, 127, 336]; + + return (unsafe{*PERM337.get_unchecked((index % 337) as usize)} as u32 * 113569 + + unsafe{*PERM337.get_unchecked(((index / 337) % 337) as usize)} as u32 * 337 + + unsafe{*PERM337.get_unchecked(((index / 113569) % 337) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (38272753u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton347(index: u32) -> f32 { - const PERM347: [u16; 347] = [0, 219, 128, 64, 283, 32, 251, 187, 96, 315, 160, 16, 235, 144, - 80, 299, 48, 267, 203, 112, 331, 168, 8, 227, 136, 72, 291, 40, - 259, 195, 104, 323, 179, 24, 243, 152, 88, 307, 56, 275, 211, - 120, 339, 4, 223, 132, 68, 287, 36, 255, 191, 100, 319, 164, 20, - 239, 148, 84, 303, 52, 271, 207, 116, 335, 175, 12, 231, 140, 76, - 295, 44, 263, 199, 108, 327, 183, 28, 247, 156, 92, 311, 60, 279, - 215, 124, 343, 172, 2, 221, 130, 66, 285, 34, 253, 189, 98, 317, - 162, 18, 237, 146, 82, 301, 50, 269, 205, 114, 333, 170, 10, 229, - 138, 74, 293, 42, 261, 197, 106, 325, 181, 26, 245, 154, 90, 309, - 58, 277, 213, 122, 341, 6, 225, 134, 70, 289, 38, 257, 193, 102, - 321, 166, 22, 241, 150, 86, 305, 54, 273, 209, 118, 337, 177, 14, - 233, 142, 78, 297, 46, 265, 201, 110, 329, 185, 30, 249, 158, 94, - 313, 62, 281, 217, 126, 345, 173, 1, 220, 129, 65, 284, 33, 252, - 188, 97, 316, 161, 17, 236, 145, 81, 300, 49, 268, 204, 113, 332, - 169, 9, 228, 137, 73, 292, 41, 260, 196, 105, 324, 180, 25, 244, - 153, 89, 308, 57, 276, 212, 121, 340, 5, 224, 133, 69, 288, 37, - 256, 192, 101, 320, 165, 21, 240, 149, 85, 304, 53, 272, 208, - 117, 336, 176, 13, 232, 141, 77, 296, 45, 264, 200, 109, 328, - 184, 29, 248, 157, 93, 312, 61, 280, 216, 125, 344, 174, 3, 222, - 131, 67, 286, 35, 254, 190, 99, 318, 163, 19, 238, 147, 83, 302, - 51, 270, 206, 115, 334, 171, 11, 230, 139, 75, 294, 43, 262, 198, - 107, 326, 182, 27, 246, 155, 91, 310, 59, 278, 214, 123, 342, 7, - 226, 135, 71, 290, 39, 258, 194, 103, 322, 167, 23, 242, 151, 87, - 306, 55, 274, 210, 119, 338, 178, 15, 234, 143, 79, 298, 47, 266, - 202, 111, 330, 186, 31, 250, 159, 95, 314, 63, 282, 218, 127, 346]; - - return (unsafe { *PERM347.get_unchecked((index % 347) as usize) } as u32 * 120409 + - unsafe { *PERM347.get_unchecked(((index / 347) % 347) as usize) } as u32 * 347 + - unsafe { - *PERM347.get_unchecked(((index / 120409) % 347) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (41781923u32 as f32)); // Results in [0,1). + const PERM347: [u16; 347] = [0, 219, 128, 64, 283, 32, 251, 187, 96, 315, 160, 16, 235, 144, 80, 299, 48, 267, 203, 112, 331, 168, 8, 227, 136, 72, 291, 40, 259, 195, 104, 323, 179, 24, 243, 152, 88, 307, 56, 275, 211, 120, 339, 4, 223, 132, 68, 287, 36, 255, 191, 100, 319, 164, 20, 239, 148, 84, 303, 52, 271, 207, 116, 335, 175, 12, 231, 140, 76, 295, 44, 263, 199, 108, 327, 183, 28, 247, 156, 92, 311, 60, 279, 215, 124, 343, 172, 2, 221, 130, 66, 285, 34, 253, 189, 98, 317, 162, 18, 237, 146, 82, 301, 50, 269, 205, 114, 333, 170, 10, 229, 138, 74, 293, 42, 261, 197, 106, 325, 181, 26, 245, 154, 90, 309, 58, 277, 213, 122, 341, 6, 225, 134, 70, 289, 38, 257, 193, 102, 321, 166, 22, 241, 150, 86, 305, 54, 273, 209, 118, 337, 177, 14, 233, 142, 78, 297, 46, 265, 201, 110, 329, 185, 30, 249, 158, 94, 313, 62, 281, 217, 126, 345, 173, 1, 220, 129, 65, 284, 33, 252, 188, 97, 316, 161, 17, 236, 145, 81, 300, 49, 268, 204, 113, 332, 169, 9, 228, 137, 73, 292, 41, 260, 196, 105, 324, 180, 25, 244, 153, 89, 308, 57, 276, 212, 121, 340, 5, 224, 133, 69, 288, 37, 256, 192, 101, 320, 165, 21, 240, 149, 85, 304, 53, 272, 208, 117, 336, 176, 13, 232, 141, 77, 296, 45, 264, 200, 109, 328, 184, 29, 248, 157, 93, 312, 61, 280, 216, 125, 344, 174, 3, 222, 131, 67, 286, 35, 254, 190, 99, 318, 163, 19, 238, 147, 83, 302, 51, 270, 206, 115, 334, 171, 11, 230, 139, 75, 294, 43, 262, 198, 107, 326, 182, 27, 246, 155, 91, 310, 59, 278, 214, 123, 342, 7, 226, 135, 71, 290, 39, 258, 194, 103, 322, 167, 23, 242, 151, 87, 306, 55, 274, 210, 119, 338, 178, 15, 234, 143, 79, 298, 47, 266, 202, 111, 330, 186, 31, 250, 159, 95, 314, 63, 282, 218, 127, 346]; + + return (unsafe{*PERM347.get_unchecked((index % 347) as usize)} as u32 * 120409 + + unsafe{*PERM347.get_unchecked(((index / 347) % 347) as usize)} as u32 * 347 + + unsafe{*PERM347.get_unchecked(((index / 120409) % 347) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (41781923u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton349(index: u32) -> f32 { - const PERM349: [u16; 349] = [0, 221, 128, 64, 285, 32, 253, 189, 96, 317, 160, 16, 237, 144, - 80, 301, 48, 269, 205, 112, 333, 168, 8, 229, 136, 72, 293, 40, - 261, 197, 104, 325, 181, 24, 245, 152, 88, 309, 56, 277, 213, - 120, 341, 172, 4, 225, 132, 68, 289, 36, 257, 193, 100, 321, 164, - 20, 241, 148, 84, 305, 52, 273, 209, 116, 337, 177, 12, 233, 140, - 76, 297, 44, 265, 201, 108, 329, 185, 28, 249, 156, 92, 313, 60, - 281, 217, 124, 345, 2, 223, 130, 66, 287, 34, 255, 191, 98, 319, - 162, 18, 239, 146, 82, 303, 50, 271, 207, 114, 335, 170, 10, 231, - 138, 74, 295, 42, 263, 199, 106, 327, 183, 26, 247, 154, 90, 311, - 58, 279, 215, 122, 343, 175, 6, 227, 134, 70, 291, 38, 259, 195, - 102, 323, 166, 22, 243, 150, 86, 307, 54, 275, 211, 118, 339, - 179, 14, 235, 142, 78, 299, 46, 267, 203, 110, 331, 187, 30, 251, - 158, 94, 315, 62, 283, 219, 126, 347, 174, 1, 222, 129, 65, 286, - 33, 254, 190, 97, 318, 161, 17, 238, 145, 81, 302, 49, 270, 206, - 113, 334, 169, 9, 230, 137, 73, 294, 41, 262, 198, 105, 326, 182, - 25, 246, 153, 89, 310, 57, 278, 214, 121, 342, 173, 5, 226, 133, - 69, 290, 37, 258, 194, 101, 322, 165, 21, 242, 149, 85, 306, 53, - 274, 210, 117, 338, 178, 13, 234, 141, 77, 298, 45, 266, 202, - 109, 330, 186, 29, 250, 157, 93, 314, 61, 282, 218, 125, 346, 3, - 224, 131, 67, 288, 35, 256, 192, 99, 320, 163, 19, 240, 147, 83, - 304, 51, 272, 208, 115, 336, 171, 11, 232, 139, 75, 296, 43, 264, - 200, 107, 328, 184, 27, 248, 155, 91, 312, 59, 280, 216, 123, - 344, 176, 7, 228, 135, 71, 292, 39, 260, 196, 103, 324, 167, 23, - 244, 151, 87, 308, 55, 276, 212, 119, 340, 180, 15, 236, 143, 79, - 300, 47, 268, 204, 111, 332, 188, 31, 252, 159, 95, 316, 63, 284, - 220, 127, 348]; - - return (unsafe { *PERM349.get_unchecked((index % 349) as usize) } as u32 * 121801 + - unsafe { *PERM349.get_unchecked(((index / 349) % 349) as usize) } as u32 * 349 + - unsafe { - *PERM349.get_unchecked(((index / 121801) % 349) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (42508549u32 as f32)); // Results in [0,1). + const PERM349: [u16; 349] = [0, 221, 128, 64, 285, 32, 253, 189, 96, 317, 160, 16, 237, 144, 80, 301, 48, 269, 205, 112, 333, 168, 8, 229, 136, 72, 293, 40, 261, 197, 104, 325, 181, 24, 245, 152, 88, 309, 56, 277, 213, 120, 341, 172, 4, 225, 132, 68, 289, 36, 257, 193, 100, 321, 164, 20, 241, 148, 84, 305, 52, 273, 209, 116, 337, 177, 12, 233, 140, 76, 297, 44, 265, 201, 108, 329, 185, 28, 249, 156, 92, 313, 60, 281, 217, 124, 345, 2, 223, 130, 66, 287, 34, 255, 191, 98, 319, 162, 18, 239, 146, 82, 303, 50, 271, 207, 114, 335, 170, 10, 231, 138, 74, 295, 42, 263, 199, 106, 327, 183, 26, 247, 154, 90, 311, 58, 279, 215, 122, 343, 175, 6, 227, 134, 70, 291, 38, 259, 195, 102, 323, 166, 22, 243, 150, 86, 307, 54, 275, 211, 118, 339, 179, 14, 235, 142, 78, 299, 46, 267, 203, 110, 331, 187, 30, 251, 158, 94, 315, 62, 283, 219, 126, 347, 174, 1, 222, 129, 65, 286, 33, 254, 190, 97, 318, 161, 17, 238, 145, 81, 302, 49, 270, 206, 113, 334, 169, 9, 230, 137, 73, 294, 41, 262, 198, 105, 326, 182, 25, 246, 153, 89, 310, 57, 278, 214, 121, 342, 173, 5, 226, 133, 69, 290, 37, 258, 194, 101, 322, 165, 21, 242, 149, 85, 306, 53, 274, 210, 117, 338, 178, 13, 234, 141, 77, 298, 45, 266, 202, 109, 330, 186, 29, 250, 157, 93, 314, 61, 282, 218, 125, 346, 3, 224, 131, 67, 288, 35, 256, 192, 99, 320, 163, 19, 240, 147, 83, 304, 51, 272, 208, 115, 336, 171, 11, 232, 139, 75, 296, 43, 264, 200, 107, 328, 184, 27, 248, 155, 91, 312, 59, 280, 216, 123, 344, 176, 7, 228, 135, 71, 292, 39, 260, 196, 103, 324, 167, 23, 244, 151, 87, 308, 55, 276, 212, 119, 340, 180, 15, 236, 143, 79, 300, 47, 268, 204, 111, 332, 188, 31, 252, 159, 95, 316, 63, 284, 220, 127, 348]; + + return (unsafe{*PERM349.get_unchecked((index % 349) as usize)} as u32 * 121801 + + unsafe{*PERM349.get_unchecked(((index / 349) % 349) as usize)} as u32 * 349 + + unsafe{*PERM349.get_unchecked(((index / 121801) % 349) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (42508549u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton353(index: u32) -> f32 { - const PERM353: [u16; 353] = [0, 225, 128, 64, 289, 160, 32, 257, 193, 96, 321, 16, 241, 144, - 80, 305, 177, 48, 273, 209, 112, 337, 8, 233, 136, 72, 297, 168, - 40, 265, 201, 104, 329, 24, 249, 152, 88, 313, 185, 56, 281, 217, - 120, 345, 4, 229, 132, 68, 293, 164, 36, 261, 197, 100, 325, 20, - 245, 148, 84, 309, 181, 52, 277, 213, 116, 341, 12, 237, 140, 76, - 301, 172, 44, 269, 205, 108, 333, 28, 253, 156, 92, 317, 189, 60, - 285, 221, 124, 349, 2, 227, 130, 66, 291, 162, 34, 259, 195, 98, - 323, 18, 243, 146, 82, 307, 179, 50, 275, 211, 114, 339, 10, 235, - 138, 74, 299, 170, 42, 267, 203, 106, 331, 26, 251, 154, 90, 315, - 187, 58, 283, 219, 122, 347, 6, 231, 134, 70, 295, 166, 38, 263, - 199, 102, 327, 22, 247, 150, 86, 311, 183, 54, 279, 215, 118, - 343, 14, 239, 142, 78, 303, 174, 46, 271, 207, 110, 335, 30, 255, - 158, 94, 319, 191, 62, 287, 223, 126, 351, 176, 1, 226, 129, 65, - 290, 161, 33, 258, 194, 97, 322, 17, 242, 145, 81, 306, 178, 49, - 274, 210, 113, 338, 9, 234, 137, 73, 298, 169, 41, 266, 202, 105, - 330, 25, 250, 153, 89, 314, 186, 57, 282, 218, 121, 346, 5, 230, - 133, 69, 294, 165, 37, 262, 198, 101, 326, 21, 246, 149, 85, 310, - 182, 53, 278, 214, 117, 342, 13, 238, 141, 77, 302, 173, 45, 270, - 206, 109, 334, 29, 254, 157, 93, 318, 190, 61, 286, 222, 125, - 350, 3, 228, 131, 67, 292, 163, 35, 260, 196, 99, 324, 19, 244, - 147, 83, 308, 180, 51, 276, 212, 115, 340, 11, 236, 139, 75, 300, - 171, 43, 268, 204, 107, 332, 27, 252, 155, 91, 316, 188, 59, 284, - 220, 123, 348, 7, 232, 135, 71, 296, 167, 39, 264, 200, 103, 328, - 23, 248, 151, 87, 312, 184, 55, 280, 216, 119, 344, 15, 240, 143, - 79, 304, 175, 47, 272, 208, 111, 336, 31, 256, 159, 95, 320, 192, - 63, 288, 224, 127, 352]; - - return (unsafe { *PERM353.get_unchecked((index % 353) as usize) } as u32 * 124609 + - unsafe { *PERM353.get_unchecked(((index / 353) % 353) as usize) } as u32 * 353 + - unsafe { - *PERM353.get_unchecked(((index / 124609) % 353) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (43986977u32 as f32)); // Results in [0,1). + const PERM353: [u16; 353] = [0, 225, 128, 64, 289, 160, 32, 257, 193, 96, 321, 16, 241, 144, 80, 305, 177, 48, 273, 209, 112, 337, 8, 233, 136, 72, 297, 168, 40, 265, 201, 104, 329, 24, 249, 152, 88, 313, 185, 56, 281, 217, 120, 345, 4, 229, 132, 68, 293, 164, 36, 261, 197, 100, 325, 20, 245, 148, 84, 309, 181, 52, 277, 213, 116, 341, 12, 237, 140, 76, 301, 172, 44, 269, 205, 108, 333, 28, 253, 156, 92, 317, 189, 60, 285, 221, 124, 349, 2, 227, 130, 66, 291, 162, 34, 259, 195, 98, 323, 18, 243, 146, 82, 307, 179, 50, 275, 211, 114, 339, 10, 235, 138, 74, 299, 170, 42, 267, 203, 106, 331, 26, 251, 154, 90, 315, 187, 58, 283, 219, 122, 347, 6, 231, 134, 70, 295, 166, 38, 263, 199, 102, 327, 22, 247, 150, 86, 311, 183, 54, 279, 215, 118, 343, 14, 239, 142, 78, 303, 174, 46, 271, 207, 110, 335, 30, 255, 158, 94, 319, 191, 62, 287, 223, 126, 351, 176, 1, 226, 129, 65, 290, 161, 33, 258, 194, 97, 322, 17, 242, 145, 81, 306, 178, 49, 274, 210, 113, 338, 9, 234, 137, 73, 298, 169, 41, 266, 202, 105, 330, 25, 250, 153, 89, 314, 186, 57, 282, 218, 121, 346, 5, 230, 133, 69, 294, 165, 37, 262, 198, 101, 326, 21, 246, 149, 85, 310, 182, 53, 278, 214, 117, 342, 13, 238, 141, 77, 302, 173, 45, 270, 206, 109, 334, 29, 254, 157, 93, 318, 190, 61, 286, 222, 125, 350, 3, 228, 131, 67, 292, 163, 35, 260, 196, 99, 324, 19, 244, 147, 83, 308, 180, 51, 276, 212, 115, 340, 11, 236, 139, 75, 300, 171, 43, 268, 204, 107, 332, 27, 252, 155, 91, 316, 188, 59, 284, 220, 123, 348, 7, 232, 135, 71, 296, 167, 39, 264, 200, 103, 328, 23, 248, 151, 87, 312, 184, 55, 280, 216, 119, 344, 15, 240, 143, 79, 304, 175, 47, 272, 208, 111, 336, 31, 256, 159, 95, 320, 192, 63, 288, 224, 127, 352]; + + return (unsafe{*PERM353.get_unchecked((index % 353) as usize)} as u32 * 124609 + + unsafe{*PERM353.get_unchecked(((index / 353) % 353) as usize)} as u32 * 353 + + unsafe{*PERM353.get_unchecked(((index / 124609) % 353) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (43986977u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton359(index: u32) -> f32 { - const PERM359: [u16; 359] = [0, 231, 128, 64, 295, 160, 32, 263, 199, 96, 327, 16, 247, 144, - 80, 311, 183, 48, 279, 215, 112, 343, 8, 239, 136, 72, 303, 168, - 40, 271, 207, 104, 335, 24, 255, 152, 88, 319, 191, 56, 287, 223, - 120, 351, 176, 4, 235, 132, 68, 299, 164, 36, 267, 203, 100, 331, - 20, 251, 148, 84, 315, 187, 52, 283, 219, 116, 347, 12, 243, 140, - 76, 307, 172, 44, 275, 211, 108, 339, 28, 259, 156, 92, 323, 195, - 60, 291, 227, 124, 355, 178, 2, 233, 130, 66, 297, 162, 34, 265, - 201, 98, 329, 18, 249, 146, 82, 313, 185, 50, 281, 217, 114, 345, - 10, 241, 138, 74, 305, 170, 42, 273, 209, 106, 337, 26, 257, 154, - 90, 321, 193, 58, 289, 225, 122, 353, 181, 6, 237, 134, 70, 301, - 166, 38, 269, 205, 102, 333, 22, 253, 150, 86, 317, 189, 54, 285, - 221, 118, 349, 14, 245, 142, 78, 309, 174, 46, 277, 213, 110, - 341, 30, 261, 158, 94, 325, 197, 62, 293, 229, 126, 357, 179, 1, - 232, 129, 65, 296, 161, 33, 264, 200, 97, 328, 17, 248, 145, 81, - 312, 184, 49, 280, 216, 113, 344, 9, 240, 137, 73, 304, 169, 41, - 272, 208, 105, 336, 25, 256, 153, 89, 320, 192, 57, 288, 224, - 121, 352, 177, 5, 236, 133, 69, 300, 165, 37, 268, 204, 101, 332, - 21, 252, 149, 85, 316, 188, 53, 284, 220, 117, 348, 13, 244, 141, - 77, 308, 173, 45, 276, 212, 109, 340, 29, 260, 157, 93, 324, 196, - 61, 292, 228, 125, 356, 180, 3, 234, 131, 67, 298, 163, 35, 266, - 202, 99, 330, 19, 250, 147, 83, 314, 186, 51, 282, 218, 115, 346, - 11, 242, 139, 75, 306, 171, 43, 274, 210, 107, 338, 27, 258, 155, - 91, 322, 194, 59, 290, 226, 123, 354, 182, 7, 238, 135, 71, 302, - 167, 39, 270, 206, 103, 334, 23, 254, 151, 87, 318, 190, 55, 286, - 222, 119, 350, 15, 246, 143, 79, 310, 175, 47, 278, 214, 111, - 342, 31, 262, 159, 95, 326, 198, 63, 294, 230, 127, 358]; - - return (unsafe { *PERM359.get_unchecked((index % 359) as usize) } as u32 * 128881 + - unsafe { *PERM359.get_unchecked(((index / 359) % 359) as usize) } as u32 * 359 + - unsafe { - *PERM359.get_unchecked(((index / 128881) % 359) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (46268279u32 as f32)); // Results in [0,1). + const PERM359: [u16; 359] = [0, 231, 128, 64, 295, 160, 32, 263, 199, 96, 327, 16, 247, 144, 80, 311, 183, 48, 279, 215, 112, 343, 8, 239, 136, 72, 303, 168, 40, 271, 207, 104, 335, 24, 255, 152, 88, 319, 191, 56, 287, 223, 120, 351, 176, 4, 235, 132, 68, 299, 164, 36, 267, 203, 100, 331, 20, 251, 148, 84, 315, 187, 52, 283, 219, 116, 347, 12, 243, 140, 76, 307, 172, 44, 275, 211, 108, 339, 28, 259, 156, 92, 323, 195, 60, 291, 227, 124, 355, 178, 2, 233, 130, 66, 297, 162, 34, 265, 201, 98, 329, 18, 249, 146, 82, 313, 185, 50, 281, 217, 114, 345, 10, 241, 138, 74, 305, 170, 42, 273, 209, 106, 337, 26, 257, 154, 90, 321, 193, 58, 289, 225, 122, 353, 181, 6, 237, 134, 70, 301, 166, 38, 269, 205, 102, 333, 22, 253, 150, 86, 317, 189, 54, 285, 221, 118, 349, 14, 245, 142, 78, 309, 174, 46, 277, 213, 110, 341, 30, 261, 158, 94, 325, 197, 62, 293, 229, 126, 357, 179, 1, 232, 129, 65, 296, 161, 33, 264, 200, 97, 328, 17, 248, 145, 81, 312, 184, 49, 280, 216, 113, 344, 9, 240, 137, 73, 304, 169, 41, 272, 208, 105, 336, 25, 256, 153, 89, 320, 192, 57, 288, 224, 121, 352, 177, 5, 236, 133, 69, 300, 165, 37, 268, 204, 101, 332, 21, 252, 149, 85, 316, 188, 53, 284, 220, 117, 348, 13, 244, 141, 77, 308, 173, 45, 276, 212, 109, 340, 29, 260, 157, 93, 324, 196, 61, 292, 228, 125, 356, 180, 3, 234, 131, 67, 298, 163, 35, 266, 202, 99, 330, 19, 250, 147, 83, 314, 186, 51, 282, 218, 115, 346, 11, 242, 139, 75, 306, 171, 43, 274, 210, 107, 338, 27, 258, 155, 91, 322, 194, 59, 290, 226, 123, 354, 182, 7, 238, 135, 71, 302, 167, 39, 270, 206, 103, 334, 23, 254, 151, 87, 318, 190, 55, 286, 222, 119, 350, 15, 246, 143, 79, 310, 175, 47, 278, 214, 111, 342, 31, 262, 159, 95, 326, 198, 63, 294, 230, 127, 358]; + + return (unsafe{*PERM359.get_unchecked((index % 359) as usize)} as u32 * 128881 + + unsafe{*PERM359.get_unchecked(((index / 359) % 359) as usize)} as u32 * 359 + + unsafe{*PERM359.get_unchecked(((index / 128881) % 359) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (46268279u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton367(index: u32) -> f32 { - const PERM367: [u16; 367] = [0, 239, 128, 64, 303, 160, 32, 271, 207, 96, 335, 16, 255, 144, - 80, 319, 191, 48, 287, 223, 112, 351, 176, 8, 247, 136, 72, 311, - 168, 40, 279, 215, 104, 343, 24, 263, 152, 88, 327, 199, 56, 295, - 231, 120, 359, 180, 4, 243, 132, 68, 307, 164, 36, 275, 211, 100, - 339, 20, 259, 148, 84, 323, 195, 52, 291, 227, 116, 355, 187, 12, - 251, 140, 76, 315, 172, 44, 283, 219, 108, 347, 28, 267, 156, 92, - 331, 203, 60, 299, 235, 124, 363, 182, 2, 241, 130, 66, 305, 162, - 34, 273, 209, 98, 337, 18, 257, 146, 82, 321, 193, 50, 289, 225, - 114, 353, 178, 10, 249, 138, 74, 313, 170, 42, 281, 217, 106, - 345, 26, 265, 154, 90, 329, 201, 58, 297, 233, 122, 361, 185, 6, - 245, 134, 70, 309, 166, 38, 277, 213, 102, 341, 22, 261, 150, 86, - 325, 197, 54, 293, 229, 118, 357, 189, 14, 253, 142, 78, 317, - 174, 46, 285, 221, 110, 349, 30, 269, 158, 94, 333, 205, 62, 301, - 237, 126, 365, 183, 1, 240, 129, 65, 304, 161, 33, 272, 208, 97, - 336, 17, 256, 145, 81, 320, 192, 49, 288, 224, 113, 352, 177, 9, - 248, 137, 73, 312, 169, 41, 280, 216, 105, 344, 25, 264, 153, 89, - 328, 200, 57, 296, 232, 121, 360, 181, 5, 244, 133, 69, 308, 165, - 37, 276, 212, 101, 340, 21, 260, 149, 85, 324, 196, 53, 292, 228, - 117, 356, 188, 13, 252, 141, 77, 316, 173, 45, 284, 220, 109, - 348, 29, 268, 157, 93, 332, 204, 61, 300, 236, 125, 364, 184, 3, - 242, 131, 67, 306, 163, 35, 274, 210, 99, 338, 19, 258, 147, 83, - 322, 194, 51, 290, 226, 115, 354, 179, 11, 250, 139, 75, 314, - 171, 43, 282, 218, 107, 346, 27, 266, 155, 91, 330, 202, 59, 298, - 234, 123, 362, 186, 7, 246, 135, 71, 310, 167, 39, 278, 214, 103, - 342, 23, 262, 151, 87, 326, 198, 55, 294, 230, 119, 358, 190, 15, - 254, 143, 79, 318, 175, 47, 286, 222, 111, 350, 31, 270, 159, 95, - 334, 206, 63, 302, 238, 127, 366]; - - return (unsafe { *PERM367.get_unchecked((index % 367) as usize) } as u32 * 134689 + - unsafe { *PERM367.get_unchecked(((index / 367) % 367) as usize) } as u32 * 367 + - unsafe { - *PERM367.get_unchecked(((index / 134689) % 367) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (49430863u32 as f32)); // Results in [0,1). + const PERM367: [u16; 367] = [0, 239, 128, 64, 303, 160, 32, 271, 207, 96, 335, 16, 255, 144, 80, 319, 191, 48, 287, 223, 112, 351, 176, 8, 247, 136, 72, 311, 168, 40, 279, 215, 104, 343, 24, 263, 152, 88, 327, 199, 56, 295, 231, 120, 359, 180, 4, 243, 132, 68, 307, 164, 36, 275, 211, 100, 339, 20, 259, 148, 84, 323, 195, 52, 291, 227, 116, 355, 187, 12, 251, 140, 76, 315, 172, 44, 283, 219, 108, 347, 28, 267, 156, 92, 331, 203, 60, 299, 235, 124, 363, 182, 2, 241, 130, 66, 305, 162, 34, 273, 209, 98, 337, 18, 257, 146, 82, 321, 193, 50, 289, 225, 114, 353, 178, 10, 249, 138, 74, 313, 170, 42, 281, 217, 106, 345, 26, 265, 154, 90, 329, 201, 58, 297, 233, 122, 361, 185, 6, 245, 134, 70, 309, 166, 38, 277, 213, 102, 341, 22, 261, 150, 86, 325, 197, 54, 293, 229, 118, 357, 189, 14, 253, 142, 78, 317, 174, 46, 285, 221, 110, 349, 30, 269, 158, 94, 333, 205, 62, 301, 237, 126, 365, 183, 1, 240, 129, 65, 304, 161, 33, 272, 208, 97, 336, 17, 256, 145, 81, 320, 192, 49, 288, 224, 113, 352, 177, 9, 248, 137, 73, 312, 169, 41, 280, 216, 105, 344, 25, 264, 153, 89, 328, 200, 57, 296, 232, 121, 360, 181, 5, 244, 133, 69, 308, 165, 37, 276, 212, 101, 340, 21, 260, 149, 85, 324, 196, 53, 292, 228, 117, 356, 188, 13, 252, 141, 77, 316, 173, 45, 284, 220, 109, 348, 29, 268, 157, 93, 332, 204, 61, 300, 236, 125, 364, 184, 3, 242, 131, 67, 306, 163, 35, 274, 210, 99, 338, 19, 258, 147, 83, 322, 194, 51, 290, 226, 115, 354, 179, 11, 250, 139, 75, 314, 171, 43, 282, 218, 107, 346, 27, 266, 155, 91, 330, 202, 59, 298, 234, 123, 362, 186, 7, 246, 135, 71, 310, 167, 39, 278, 214, 103, 342, 23, 262, 151, 87, 326, 198, 55, 294, 230, 119, 358, 190, 15, 254, 143, 79, 318, 175, 47, 286, 222, 111, 350, 31, 270, 159, 95, 334, 206, 63, 302, 238, 127, 366]; + + return (unsafe{*PERM367.get_unchecked((index % 367) as usize)} as u32 * 134689 + + unsafe{*PERM367.get_unchecked(((index / 367) % 367) as usize)} as u32 * 367 + + unsafe{*PERM367.get_unchecked(((index / 134689) % 367) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (49430863u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton373(index: u32) -> f32 { - const PERM373: [u16; 373] = [0, 245, 128, 64, 309, 160, 32, 277, 213, 96, 341, 176, 16, 261, - 144, 80, 325, 197, 48, 293, 229, 112, 357, 8, 253, 136, 72, 317, - 168, 40, 285, 221, 104, 349, 189, 24, 269, 152, 88, 333, 205, 56, - 301, 237, 120, 365, 184, 4, 249, 132, 68, 313, 164, 36, 281, 217, - 100, 345, 180, 20, 265, 148, 84, 329, 201, 52, 297, 233, 116, - 361, 12, 257, 140, 76, 321, 172, 44, 289, 225, 108, 353, 193, 28, - 273, 156, 92, 337, 209, 60, 305, 241, 124, 369, 2, 247, 130, 66, - 311, 162, 34, 279, 215, 98, 343, 178, 18, 263, 146, 82, 327, 199, - 50, 295, 231, 114, 359, 10, 255, 138, 74, 319, 170, 42, 287, 223, - 106, 351, 191, 26, 271, 154, 90, 335, 207, 58, 303, 239, 122, - 367, 187, 6, 251, 134, 70, 315, 166, 38, 283, 219, 102, 347, 182, - 22, 267, 150, 86, 331, 203, 54, 299, 235, 118, 363, 14, 259, 142, - 78, 323, 174, 46, 291, 227, 110, 355, 195, 30, 275, 158, 94, 339, - 211, 62, 307, 243, 126, 371, 186, 1, 246, 129, 65, 310, 161, 33, - 278, 214, 97, 342, 177, 17, 262, 145, 81, 326, 198, 49, 294, 230, - 113, 358, 9, 254, 137, 73, 318, 169, 41, 286, 222, 105, 350, 190, - 25, 270, 153, 89, 334, 206, 57, 302, 238, 121, 366, 185, 5, 250, - 133, 69, 314, 165, 37, 282, 218, 101, 346, 181, 21, 266, 149, 85, - 330, 202, 53, 298, 234, 117, 362, 13, 258, 141, 77, 322, 173, 45, - 290, 226, 109, 354, 194, 29, 274, 157, 93, 338, 210, 61, 306, - 242, 125, 370, 3, 248, 131, 67, 312, 163, 35, 280, 216, 99, 344, - 179, 19, 264, 147, 83, 328, 200, 51, 296, 232, 115, 360, 11, 256, - 139, 75, 320, 171, 43, 288, 224, 107, 352, 192, 27, 272, 155, 91, - 336, 208, 59, 304, 240, 123, 368, 188, 7, 252, 135, 71, 316, 167, - 39, 284, 220, 103, 348, 183, 23, 268, 151, 87, 332, 204, 55, 300, - 236, 119, 364, 15, 260, 143, 79, 324, 175, 47, 292, 228, 111, - 356, 196, 31, 276, 159, 95, 340, 212, 63, 308, 244, 127, 372]; - - return (unsafe { *PERM373.get_unchecked((index % 373) as usize) } as u32 * 139129 + - unsafe { *PERM373.get_unchecked(((index / 373) % 373) as usize) } as u32 * 373 + - unsafe { - *PERM373.get_unchecked(((index / 139129) % 373) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (51895117u32 as f32)); // Results in [0,1). + const PERM373: [u16; 373] = [0, 245, 128, 64, 309, 160, 32, 277, 213, 96, 341, 176, 16, 261, 144, 80, 325, 197, 48, 293, 229, 112, 357, 8, 253, 136, 72, 317, 168, 40, 285, 221, 104, 349, 189, 24, 269, 152, 88, 333, 205, 56, 301, 237, 120, 365, 184, 4, 249, 132, 68, 313, 164, 36, 281, 217, 100, 345, 180, 20, 265, 148, 84, 329, 201, 52, 297, 233, 116, 361, 12, 257, 140, 76, 321, 172, 44, 289, 225, 108, 353, 193, 28, 273, 156, 92, 337, 209, 60, 305, 241, 124, 369, 2, 247, 130, 66, 311, 162, 34, 279, 215, 98, 343, 178, 18, 263, 146, 82, 327, 199, 50, 295, 231, 114, 359, 10, 255, 138, 74, 319, 170, 42, 287, 223, 106, 351, 191, 26, 271, 154, 90, 335, 207, 58, 303, 239, 122, 367, 187, 6, 251, 134, 70, 315, 166, 38, 283, 219, 102, 347, 182, 22, 267, 150, 86, 331, 203, 54, 299, 235, 118, 363, 14, 259, 142, 78, 323, 174, 46, 291, 227, 110, 355, 195, 30, 275, 158, 94, 339, 211, 62, 307, 243, 126, 371, 186, 1, 246, 129, 65, 310, 161, 33, 278, 214, 97, 342, 177, 17, 262, 145, 81, 326, 198, 49, 294, 230, 113, 358, 9, 254, 137, 73, 318, 169, 41, 286, 222, 105, 350, 190, 25, 270, 153, 89, 334, 206, 57, 302, 238, 121, 366, 185, 5, 250, 133, 69, 314, 165, 37, 282, 218, 101, 346, 181, 21, 266, 149, 85, 330, 202, 53, 298, 234, 117, 362, 13, 258, 141, 77, 322, 173, 45, 290, 226, 109, 354, 194, 29, 274, 157, 93, 338, 210, 61, 306, 242, 125, 370, 3, 248, 131, 67, 312, 163, 35, 280, 216, 99, 344, 179, 19, 264, 147, 83, 328, 200, 51, 296, 232, 115, 360, 11, 256, 139, 75, 320, 171, 43, 288, 224, 107, 352, 192, 27, 272, 155, 91, 336, 208, 59, 304, 240, 123, 368, 188, 7, 252, 135, 71, 316, 167, 39, 284, 220, 103, 348, 183, 23, 268, 151, 87, 332, 204, 55, 300, 236, 119, 364, 15, 260, 143, 79, 324, 175, 47, 292, 228, 111, 356, 196, 31, 276, 159, 95, 340, 212, 63, 308, 244, 127, 372]; + + return (unsafe{*PERM373.get_unchecked((index % 373) as usize)} as u32 * 139129 + + unsafe{*PERM373.get_unchecked(((index / 373) % 373) as usize)} as u32 * 373 + + unsafe{*PERM373.get_unchecked(((index / 139129) % 373) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (51895117u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton379(index: u32) -> f32 { - const PERM379: [u16; 379] = [0, 251, 128, 64, 315, 160, 32, 283, 219, 96, 347, 176, 16, 267, - 144, 80, 331, 203, 48, 299, 235, 112, 363, 184, 8, 259, 136, 72, - 323, 168, 40, 291, 227, 104, 355, 195, 24, 275, 152, 88, 339, - 211, 56, 307, 243, 120, 371, 4, 255, 132, 68, 319, 164, 36, 287, - 223, 100, 351, 180, 20, 271, 148, 84, 335, 207, 52, 303, 239, - 116, 367, 191, 12, 263, 140, 76, 327, 172, 44, 295, 231, 108, - 359, 199, 28, 279, 156, 92, 343, 215, 60, 311, 247, 124, 375, - 188, 2, 253, 130, 66, 317, 162, 34, 285, 221, 98, 349, 178, 18, - 269, 146, 82, 333, 205, 50, 301, 237, 114, 365, 186, 10, 261, - 138, 74, 325, 170, 42, 293, 229, 106, 357, 197, 26, 277, 154, 90, - 341, 213, 58, 309, 245, 122, 373, 6, 257, 134, 70, 321, 166, 38, - 289, 225, 102, 353, 182, 22, 273, 150, 86, 337, 209, 54, 305, - 241, 118, 369, 193, 14, 265, 142, 78, 329, 174, 46, 297, 233, - 110, 361, 201, 30, 281, 158, 94, 345, 217, 62, 313, 249, 126, - 377, 189, 1, 252, 129, 65, 316, 161, 33, 284, 220, 97, 348, 177, - 17, 268, 145, 81, 332, 204, 49, 300, 236, 113, 364, 185, 9, 260, - 137, 73, 324, 169, 41, 292, 228, 105, 356, 196, 25, 276, 153, 89, - 340, 212, 57, 308, 244, 121, 372, 5, 256, 133, 69, 320, 165, 37, - 288, 224, 101, 352, 181, 21, 272, 149, 85, 336, 208, 53, 304, - 240, 117, 368, 192, 13, 264, 141, 77, 328, 173, 45, 296, 232, - 109, 360, 200, 29, 280, 157, 93, 344, 216, 61, 312, 248, 125, - 376, 190, 3, 254, 131, 67, 318, 163, 35, 286, 222, 99, 350, 179, - 19, 270, 147, 83, 334, 206, 51, 302, 238, 115, 366, 187, 11, 262, - 139, 75, 326, 171, 43, 294, 230, 107, 358, 198, 27, 278, 155, 91, - 342, 214, 59, 310, 246, 123, 374, 7, 258, 135, 71, 322, 167, 39, - 290, 226, 103, 354, 183, 23, 274, 151, 87, 338, 210, 55, 306, - 242, 119, 370, 194, 15, 266, 143, 79, 330, 175, 47, 298, 234, - 111, 362, 202, 31, 282, 159, 95, 346, 218, 63, 314, 250, 127, 378]; - - return (unsafe { *PERM379.get_unchecked((index % 379) as usize) } as u32 * 143641 + - unsafe { *PERM379.get_unchecked(((index / 379) % 379) as usize) } as u32 * 379 + - unsafe { - *PERM379.get_unchecked(((index / 143641) % 379) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (54439939u32 as f32)); // Results in [0,1). + const PERM379: [u16; 379] = [0, 251, 128, 64, 315, 160, 32, 283, 219, 96, 347, 176, 16, 267, 144, 80, 331, 203, 48, 299, 235, 112, 363, 184, 8, 259, 136, 72, 323, 168, 40, 291, 227, 104, 355, 195, 24, 275, 152, 88, 339, 211, 56, 307, 243, 120, 371, 4, 255, 132, 68, 319, 164, 36, 287, 223, 100, 351, 180, 20, 271, 148, 84, 335, 207, 52, 303, 239, 116, 367, 191, 12, 263, 140, 76, 327, 172, 44, 295, 231, 108, 359, 199, 28, 279, 156, 92, 343, 215, 60, 311, 247, 124, 375, 188, 2, 253, 130, 66, 317, 162, 34, 285, 221, 98, 349, 178, 18, 269, 146, 82, 333, 205, 50, 301, 237, 114, 365, 186, 10, 261, 138, 74, 325, 170, 42, 293, 229, 106, 357, 197, 26, 277, 154, 90, 341, 213, 58, 309, 245, 122, 373, 6, 257, 134, 70, 321, 166, 38, 289, 225, 102, 353, 182, 22, 273, 150, 86, 337, 209, 54, 305, 241, 118, 369, 193, 14, 265, 142, 78, 329, 174, 46, 297, 233, 110, 361, 201, 30, 281, 158, 94, 345, 217, 62, 313, 249, 126, 377, 189, 1, 252, 129, 65, 316, 161, 33, 284, 220, 97, 348, 177, 17, 268, 145, 81, 332, 204, 49, 300, 236, 113, 364, 185, 9, 260, 137, 73, 324, 169, 41, 292, 228, 105, 356, 196, 25, 276, 153, 89, 340, 212, 57, 308, 244, 121, 372, 5, 256, 133, 69, 320, 165, 37, 288, 224, 101, 352, 181, 21, 272, 149, 85, 336, 208, 53, 304, 240, 117, 368, 192, 13, 264, 141, 77, 328, 173, 45, 296, 232, 109, 360, 200, 29, 280, 157, 93, 344, 216, 61, 312, 248, 125, 376, 190, 3, 254, 131, 67, 318, 163, 35, 286, 222, 99, 350, 179, 19, 270, 147, 83, 334, 206, 51, 302, 238, 115, 366, 187, 11, 262, 139, 75, 326, 171, 43, 294, 230, 107, 358, 198, 27, 278, 155, 91, 342, 214, 59, 310, 246, 123, 374, 7, 258, 135, 71, 322, 167, 39, 290, 226, 103, 354, 183, 23, 274, 151, 87, 338, 210, 55, 306, 242, 119, 370, 194, 15, 266, 143, 79, 330, 175, 47, 298, 234, 111, 362, 202, 31, 282, 159, 95, 346, 218, 63, 314, 250, 127, 378]; + + return (unsafe{*PERM379.get_unchecked((index % 379) as usize)} as u32 * 143641 + + unsafe{*PERM379.get_unchecked(((index / 379) % 379) as usize)} as u32 * 379 + + unsafe{*PERM379.get_unchecked(((index / 143641) % 379) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (54439939u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton383(index: u32) -> f32 { - const PERM383: [u16; 383] = [0, 255, 128, 64, 319, 160, 32, 287, 223, 96, 351, 176, 16, 271, - 144, 80, 335, 207, 48, 303, 239, 112, 367, 184, 8, 263, 136, 72, - 327, 168, 40, 295, 231, 104, 359, 199, 24, 279, 152, 88, 343, - 215, 56, 311, 247, 120, 375, 188, 4, 259, 132, 68, 323, 164, 36, - 291, 227, 100, 355, 180, 20, 275, 148, 84, 339, 211, 52, 307, - 243, 116, 371, 195, 12, 267, 140, 76, 331, 172, 44, 299, 235, - 108, 363, 203, 28, 283, 156, 92, 347, 219, 60, 315, 251, 124, - 379, 190, 2, 257, 130, 66, 321, 162, 34, 289, 225, 98, 353, 178, - 18, 273, 146, 82, 337, 209, 50, 305, 241, 114, 369, 186, 10, 265, - 138, 74, 329, 170, 42, 297, 233, 106, 361, 201, 26, 281, 154, 90, - 345, 217, 58, 313, 249, 122, 377, 193, 6, 261, 134, 70, 325, 166, - 38, 293, 229, 102, 357, 182, 22, 277, 150, 86, 341, 213, 54, 309, - 245, 118, 373, 197, 14, 269, 142, 78, 333, 174, 46, 301, 237, - 110, 365, 205, 30, 285, 158, 94, 349, 221, 62, 317, 253, 126, - 381, 191, 1, 256, 129, 65, 320, 161, 33, 288, 224, 97, 352, 177, - 17, 272, 145, 81, 336, 208, 49, 304, 240, 113, 368, 185, 9, 264, - 137, 73, 328, 169, 41, 296, 232, 105, 360, 200, 25, 280, 153, 89, - 344, 216, 57, 312, 248, 121, 376, 189, 5, 260, 133, 69, 324, 165, - 37, 292, 228, 101, 356, 181, 21, 276, 149, 85, 340, 212, 53, 308, - 244, 117, 372, 196, 13, 268, 141, 77, 332, 173, 45, 300, 236, - 109, 364, 204, 29, 284, 157, 93, 348, 220, 61, 316, 252, 125, - 380, 192, 3, 258, 131, 67, 322, 163, 35, 290, 226, 99, 354, 179, - 19, 274, 147, 83, 338, 210, 51, 306, 242, 115, 370, 187, 11, 266, - 139, 75, 330, 171, 43, 298, 234, 107, 362, 202, 27, 282, 155, 91, - 346, 218, 59, 314, 250, 123, 378, 194, 7, 262, 135, 71, 326, 167, - 39, 294, 230, 103, 358, 183, 23, 278, 151, 87, 342, 214, 55, 310, - 246, 119, 374, 198, 15, 270, 143, 79, 334, 175, 47, 302, 238, - 111, 366, 206, 31, 286, 159, 95, 350, 222, 63, 318, 254, 127, 382]; - - return (unsafe { *PERM383.get_unchecked((index % 383) as usize) } as u32 * 146689 + - unsafe { *PERM383.get_unchecked(((index / 383) % 383) as usize) } as u32 * 383 + - unsafe { - *PERM383.get_unchecked(((index / 146689) % 383) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (56181887u32 as f32)); // Results in [0,1). + const PERM383: [u16; 383] = [0, 255, 128, 64, 319, 160, 32, 287, 223, 96, 351, 176, 16, 271, 144, 80, 335, 207, 48, 303, 239, 112, 367, 184, 8, 263, 136, 72, 327, 168, 40, 295, 231, 104, 359, 199, 24, 279, 152, 88, 343, 215, 56, 311, 247, 120, 375, 188, 4, 259, 132, 68, 323, 164, 36, 291, 227, 100, 355, 180, 20, 275, 148, 84, 339, 211, 52, 307, 243, 116, 371, 195, 12, 267, 140, 76, 331, 172, 44, 299, 235, 108, 363, 203, 28, 283, 156, 92, 347, 219, 60, 315, 251, 124, 379, 190, 2, 257, 130, 66, 321, 162, 34, 289, 225, 98, 353, 178, 18, 273, 146, 82, 337, 209, 50, 305, 241, 114, 369, 186, 10, 265, 138, 74, 329, 170, 42, 297, 233, 106, 361, 201, 26, 281, 154, 90, 345, 217, 58, 313, 249, 122, 377, 193, 6, 261, 134, 70, 325, 166, 38, 293, 229, 102, 357, 182, 22, 277, 150, 86, 341, 213, 54, 309, 245, 118, 373, 197, 14, 269, 142, 78, 333, 174, 46, 301, 237, 110, 365, 205, 30, 285, 158, 94, 349, 221, 62, 317, 253, 126, 381, 191, 1, 256, 129, 65, 320, 161, 33, 288, 224, 97, 352, 177, 17, 272, 145, 81, 336, 208, 49, 304, 240, 113, 368, 185, 9, 264, 137, 73, 328, 169, 41, 296, 232, 105, 360, 200, 25, 280, 153, 89, 344, 216, 57, 312, 248, 121, 376, 189, 5, 260, 133, 69, 324, 165, 37, 292, 228, 101, 356, 181, 21, 276, 149, 85, 340, 212, 53, 308, 244, 117, 372, 196, 13, 268, 141, 77, 332, 173, 45, 300, 236, 109, 364, 204, 29, 284, 157, 93, 348, 220, 61, 316, 252, 125, 380, 192, 3, 258, 131, 67, 322, 163, 35, 290, 226, 99, 354, 179, 19, 274, 147, 83, 338, 210, 51, 306, 242, 115, 370, 187, 11, 266, 139, 75, 330, 171, 43, 298, 234, 107, 362, 202, 27, 282, 155, 91, 346, 218, 59, 314, 250, 123, 378, 194, 7, 262, 135, 71, 326, 167, 39, 294, 230, 103, 358, 183, 23, 278, 151, 87, 342, 214, 55, 310, 246, 119, 374, 198, 15, 270, 143, 79, 334, 175, 47, 302, 238, 111, 366, 206, 31, 286, 159, 95, 350, 222, 63, 318, 254, 127, 382]; + + return (unsafe{*PERM383.get_unchecked((index % 383) as usize)} as u32 * 146689 + + unsafe{*PERM383.get_unchecked(((index / 383) % 383) as usize)} as u32 * 383 + + unsafe{*PERM383.get_unchecked(((index / 146689) % 383) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (56181887u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton389(index: u32) -> f32 { - const PERM389: [u16; 389] = [0, 128, 261, 64, 197, 325, 32, 160, 293, 96, 229, 357, 16, 144, - 277, 80, 213, 341, 48, 176, 309, 112, 245, 373, 8, 136, 269, 72, - 205, 333, 40, 168, 301, 104, 237, 365, 24, 152, 285, 88, 221, - 349, 56, 184, 317, 120, 253, 381, 192, 4, 132, 265, 68, 201, 329, - 36, 164, 297, 100, 233, 361, 20, 148, 281, 84, 217, 345, 52, 180, - 313, 116, 249, 377, 12, 140, 273, 76, 209, 337, 44, 172, 305, - 108, 241, 369, 28, 156, 289, 92, 225, 353, 60, 188, 321, 124, - 257, 385, 2, 130, 263, 66, 199, 327, 34, 162, 295, 98, 231, 359, - 18, 146, 279, 82, 215, 343, 50, 178, 311, 114, 247, 375, 10, 138, - 271, 74, 207, 335, 42, 170, 303, 106, 239, 367, 26, 154, 287, 90, - 223, 351, 58, 186, 319, 122, 255, 383, 195, 6, 134, 267, 70, 203, - 331, 38, 166, 299, 102, 235, 363, 22, 150, 283, 86, 219, 347, 54, - 182, 315, 118, 251, 379, 14, 142, 275, 78, 211, 339, 46, 174, - 307, 110, 243, 371, 30, 158, 291, 94, 227, 355, 62, 190, 323, - 126, 259, 387, 194, 1, 129, 262, 65, 198, 326, 33, 161, 294, 97, - 230, 358, 17, 145, 278, 81, 214, 342, 49, 177, 310, 113, 246, - 374, 9, 137, 270, 73, 206, 334, 41, 169, 302, 105, 238, 366, 25, - 153, 286, 89, 222, 350, 57, 185, 318, 121, 254, 382, 193, 5, 133, - 266, 69, 202, 330, 37, 165, 298, 101, 234, 362, 21, 149, 282, 85, - 218, 346, 53, 181, 314, 117, 250, 378, 13, 141, 274, 77, 210, - 338, 45, 173, 306, 109, 242, 370, 29, 157, 290, 93, 226, 354, 61, - 189, 322, 125, 258, 386, 3, 131, 264, 67, 200, 328, 35, 163, 296, - 99, 232, 360, 19, 147, 280, 83, 216, 344, 51, 179, 312, 115, 248, - 376, 11, 139, 272, 75, 208, 336, 43, 171, 304, 107, 240, 368, 27, - 155, 288, 91, 224, 352, 59, 187, 320, 123, 256, 384, 196, 7, 135, - 268, 71, 204, 332, 39, 167, 300, 103, 236, 364, 23, 151, 284, 87, - 220, 348, 55, 183, 316, 119, 252, 380, 15, 143, 276, 79, 212, - 340, 47, 175, 308, 111, 244, 372, 31, 159, 292, 95, 228, 356, 63, - 191, 324, 127, 260, 388]; - - return (unsafe { *PERM389.get_unchecked((index % 389) as usize) } as u32 * 151321 + - unsafe { *PERM389.get_unchecked(((index / 389) % 389) as usize) } as u32 * 389 + - unsafe { - *PERM389.get_unchecked(((index / 151321) % 389) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (58863869u32 as f32)); // Results in [0,1). + const PERM389: [u16; 389] = [0, 128, 261, 64, 197, 325, 32, 160, 293, 96, 229, 357, 16, 144, 277, 80, 213, 341, 48, 176, 309, 112, 245, 373, 8, 136, 269, 72, 205, 333, 40, 168, 301, 104, 237, 365, 24, 152, 285, 88, 221, 349, 56, 184, 317, 120, 253, 381, 192, 4, 132, 265, 68, 201, 329, 36, 164, 297, 100, 233, 361, 20, 148, 281, 84, 217, 345, 52, 180, 313, 116, 249, 377, 12, 140, 273, 76, 209, 337, 44, 172, 305, 108, 241, 369, 28, 156, 289, 92, 225, 353, 60, 188, 321, 124, 257, 385, 2, 130, 263, 66, 199, 327, 34, 162, 295, 98, 231, 359, 18, 146, 279, 82, 215, 343, 50, 178, 311, 114, 247, 375, 10, 138, 271, 74, 207, 335, 42, 170, 303, 106, 239, 367, 26, 154, 287, 90, 223, 351, 58, 186, 319, 122, 255, 383, 195, 6, 134, 267, 70, 203, 331, 38, 166, 299, 102, 235, 363, 22, 150, 283, 86, 219, 347, 54, 182, 315, 118, 251, 379, 14, 142, 275, 78, 211, 339, 46, 174, 307, 110, 243, 371, 30, 158, 291, 94, 227, 355, 62, 190, 323, 126, 259, 387, 194, 1, 129, 262, 65, 198, 326, 33, 161, 294, 97, 230, 358, 17, 145, 278, 81, 214, 342, 49, 177, 310, 113, 246, 374, 9, 137, 270, 73, 206, 334, 41, 169, 302, 105, 238, 366, 25, 153, 286, 89, 222, 350, 57, 185, 318, 121, 254, 382, 193, 5, 133, 266, 69, 202, 330, 37, 165, 298, 101, 234, 362, 21, 149, 282, 85, 218, 346, 53, 181, 314, 117, 250, 378, 13, 141, 274, 77, 210, 338, 45, 173, 306, 109, 242, 370, 29, 157, 290, 93, 226, 354, 61, 189, 322, 125, 258, 386, 3, 131, 264, 67, 200, 328, 35, 163, 296, 99, 232, 360, 19, 147, 280, 83, 216, 344, 51, 179, 312, 115, 248, 376, 11, 139, 272, 75, 208, 336, 43, 171, 304, 107, 240, 368, 27, 155, 288, 91, 224, 352, 59, 187, 320, 123, 256, 384, 196, 7, 135, 268, 71, 204, 332, 39, 167, 300, 103, 236, 364, 23, 151, 284, 87, 220, 348, 55, 183, 316, 119, 252, 380, 15, 143, 276, 79, 212, 340, 47, 175, 308, 111, 244, 372, 31, 159, 292, 95, 228, 356, 63, 191, 324, 127, 260, 388]; + + return (unsafe{*PERM389.get_unchecked((index % 389) as usize)} as u32 * 151321 + + unsafe{*PERM389.get_unchecked(((index / 389) % 389) as usize)} as u32 * 389 + + unsafe{*PERM389.get_unchecked(((index / 151321) % 389) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (58863869u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton397(index: u32) -> f32 { - const PERM397: [u16; 397] = [0, 128, 269, 64, 205, 333, 32, 160, 301, 96, 237, 365, 16, 144, - 285, 80, 221, 349, 48, 176, 317, 112, 253, 381, 192, 8, 136, 277, - 72, 213, 341, 40, 168, 309, 104, 245, 373, 24, 152, 293, 88, 229, - 357, 56, 184, 325, 120, 261, 389, 196, 4, 132, 273, 68, 209, 337, - 36, 164, 305, 100, 241, 369, 20, 148, 289, 84, 225, 353, 52, 180, - 321, 116, 257, 385, 201, 12, 140, 281, 76, 217, 345, 44, 172, - 313, 108, 249, 377, 28, 156, 297, 92, 233, 361, 60, 188, 329, - 124, 265, 393, 2, 130, 271, 66, 207, 335, 34, 162, 303, 98, 239, - 367, 18, 146, 287, 82, 223, 351, 50, 178, 319, 114, 255, 383, - 194, 10, 138, 279, 74, 215, 343, 42, 170, 311, 106, 247, 375, 26, - 154, 295, 90, 231, 359, 58, 186, 327, 122, 263, 391, 199, 6, 134, - 275, 70, 211, 339, 38, 166, 307, 102, 243, 371, 22, 150, 291, 86, - 227, 355, 54, 182, 323, 118, 259, 387, 203, 14, 142, 283, 78, - 219, 347, 46, 174, 315, 110, 251, 379, 30, 158, 299, 94, 235, - 363, 62, 190, 331, 126, 267, 395, 198, 1, 129, 270, 65, 206, 334, - 33, 161, 302, 97, 238, 366, 17, 145, 286, 81, 222, 350, 49, 177, - 318, 113, 254, 382, 193, 9, 137, 278, 73, 214, 342, 41, 169, 310, - 105, 246, 374, 25, 153, 294, 89, 230, 358, 57, 185, 326, 121, - 262, 390, 197, 5, 133, 274, 69, 210, 338, 37, 165, 306, 101, 242, - 370, 21, 149, 290, 85, 226, 354, 53, 181, 322, 117, 258, 386, - 202, 13, 141, 282, 77, 218, 346, 45, 173, 314, 109, 250, 378, 29, - 157, 298, 93, 234, 362, 61, 189, 330, 125, 266, 394, 3, 131, 272, - 67, 208, 336, 35, 163, 304, 99, 240, 368, 19, 147, 288, 83, 224, - 352, 51, 179, 320, 115, 256, 384, 195, 11, 139, 280, 75, 216, - 344, 43, 171, 312, 107, 248, 376, 27, 155, 296, 91, 232, 360, 59, - 187, 328, 123, 264, 392, 200, 7, 135, 276, 71, 212, 340, 39, 167, - 308, 103, 244, 372, 23, 151, 292, 87, 228, 356, 55, 183, 324, - 119, 260, 388, 204, 15, 143, 284, 79, 220, 348, 47, 175, 316, - 111, 252, 380, 31, 159, 300, 95, 236, 364, 63, 191, 332, 127, - 268, 396]; - - return (unsafe { *PERM397.get_unchecked((index % 397) as usize) } as u32 * 157609 + - unsafe { *PERM397.get_unchecked(((index / 397) % 397) as usize) } as u32 * 397 + - unsafe { - *PERM397.get_unchecked(((index / 157609) % 397) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (62570773u32 as f32)); // Results in [0,1). + const PERM397: [u16; 397] = [0, 128, 269, 64, 205, 333, 32, 160, 301, 96, 237, 365, 16, 144, 285, 80, 221, 349, 48, 176, 317, 112, 253, 381, 192, 8, 136, 277, 72, 213, 341, 40, 168, 309, 104, 245, 373, 24, 152, 293, 88, 229, 357, 56, 184, 325, 120, 261, 389, 196, 4, 132, 273, 68, 209, 337, 36, 164, 305, 100, 241, 369, 20, 148, 289, 84, 225, 353, 52, 180, 321, 116, 257, 385, 201, 12, 140, 281, 76, 217, 345, 44, 172, 313, 108, 249, 377, 28, 156, 297, 92, 233, 361, 60, 188, 329, 124, 265, 393, 2, 130, 271, 66, 207, 335, 34, 162, 303, 98, 239, 367, 18, 146, 287, 82, 223, 351, 50, 178, 319, 114, 255, 383, 194, 10, 138, 279, 74, 215, 343, 42, 170, 311, 106, 247, 375, 26, 154, 295, 90, 231, 359, 58, 186, 327, 122, 263, 391, 199, 6, 134, 275, 70, 211, 339, 38, 166, 307, 102, 243, 371, 22, 150, 291, 86, 227, 355, 54, 182, 323, 118, 259, 387, 203, 14, 142, 283, 78, 219, 347, 46, 174, 315, 110, 251, 379, 30, 158, 299, 94, 235, 363, 62, 190, 331, 126, 267, 395, 198, 1, 129, 270, 65, 206, 334, 33, 161, 302, 97, 238, 366, 17, 145, 286, 81, 222, 350, 49, 177, 318, 113, 254, 382, 193, 9, 137, 278, 73, 214, 342, 41, 169, 310, 105, 246, 374, 25, 153, 294, 89, 230, 358, 57, 185, 326, 121, 262, 390, 197, 5, 133, 274, 69, 210, 338, 37, 165, 306, 101, 242, 370, 21, 149, 290, 85, 226, 354, 53, 181, 322, 117, 258, 386, 202, 13, 141, 282, 77, 218, 346, 45, 173, 314, 109, 250, 378, 29, 157, 298, 93, 234, 362, 61, 189, 330, 125, 266, 394, 3, 131, 272, 67, 208, 336, 35, 163, 304, 99, 240, 368, 19, 147, 288, 83, 224, 352, 51, 179, 320, 115, 256, 384, 195, 11, 139, 280, 75, 216, 344, 43, 171, 312, 107, 248, 376, 27, 155, 296, 91, 232, 360, 59, 187, 328, 123, 264, 392, 200, 7, 135, 276, 71, 212, 340, 39, 167, 308, 103, 244, 372, 23, 151, 292, 87, 228, 356, 55, 183, 324, 119, 260, 388, 204, 15, 143, 284, 79, 220, 348, 47, 175, 316, 111, 252, 380, 31, 159, 300, 95, 236, 364, 63, 191, 332, 127, 268, 396]; + + return (unsafe{*PERM397.get_unchecked((index % 397) as usize)} as u32 * 157609 + + unsafe{*PERM397.get_unchecked(((index / 397) % 397) as usize)} as u32 * 397 + + unsafe{*PERM397.get_unchecked(((index / 157609) % 397) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (62570773u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton401(index: u32) -> f32 { - const PERM401: [u16; 401] = [0, 128, 273, 64, 209, 337, 32, 160, 305, 96, 241, 369, 192, 16, - 144, 289, 80, 225, 353, 48, 176, 321, 112, 257, 385, 8, 136, 281, - 72, 217, 345, 40, 168, 313, 104, 249, 377, 201, 24, 152, 297, 88, - 233, 361, 56, 184, 329, 120, 265, 393, 4, 132, 277, 68, 213, 341, - 36, 164, 309, 100, 245, 373, 196, 20, 148, 293, 84, 229, 357, 52, - 180, 325, 116, 261, 389, 12, 140, 285, 76, 221, 349, 44, 172, - 317, 108, 253, 381, 205, 28, 156, 301, 92, 237, 365, 60, 188, - 333, 124, 269, 397, 2, 130, 275, 66, 211, 339, 34, 162, 307, 98, - 243, 371, 194, 18, 146, 291, 82, 227, 355, 50, 178, 323, 114, - 259, 387, 10, 138, 283, 74, 219, 347, 42, 170, 315, 106, 251, - 379, 203, 26, 154, 299, 90, 235, 363, 58, 186, 331, 122, 267, - 395, 6, 134, 279, 70, 215, 343, 38, 166, 311, 102, 247, 375, 198, - 22, 150, 295, 86, 231, 359, 54, 182, 327, 118, 263, 391, 14, 142, - 287, 78, 223, 351, 46, 174, 319, 110, 255, 383, 207, 30, 158, - 303, 94, 239, 367, 62, 190, 335, 126, 271, 399, 200, 1, 129, 274, - 65, 210, 338, 33, 161, 306, 97, 242, 370, 193, 17, 145, 290, 81, - 226, 354, 49, 177, 322, 113, 258, 386, 9, 137, 282, 73, 218, 346, - 41, 169, 314, 105, 250, 378, 202, 25, 153, 298, 89, 234, 362, 57, - 185, 330, 121, 266, 394, 5, 133, 278, 69, 214, 342, 37, 165, 310, - 101, 246, 374, 197, 21, 149, 294, 85, 230, 358, 53, 181, 326, - 117, 262, 390, 13, 141, 286, 77, 222, 350, 45, 173, 318, 109, - 254, 382, 206, 29, 157, 302, 93, 238, 366, 61, 189, 334, 125, - 270, 398, 3, 131, 276, 67, 212, 340, 35, 163, 308, 99, 244, 372, - 195, 19, 147, 292, 83, 228, 356, 51, 179, 324, 115, 260, 388, 11, - 139, 284, 75, 220, 348, 43, 171, 316, 107, 252, 380, 204, 27, - 155, 300, 91, 236, 364, 59, 187, 332, 123, 268, 396, 7, 135, 280, - 71, 216, 344, 39, 167, 312, 103, 248, 376, 199, 23, 151, 296, 87, - 232, 360, 55, 183, 328, 119, 264, 392, 15, 143, 288, 79, 224, - 352, 47, 175, 320, 111, 256, 384, 208, 31, 159, 304, 95, 240, - 368, 63, 191, 336, 127, 272, 400]; - - return (unsafe { *PERM401.get_unchecked((index % 401) as usize) } as u32 * 160801 + - unsafe { *PERM401.get_unchecked(((index / 401) % 401) as usize) } as u32 * 401 + - unsafe { - *PERM401.get_unchecked(((index / 160801) % 401) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (64481201u32 as f32)); // Results in [0,1). + const PERM401: [u16; 401] = [0, 128, 273, 64, 209, 337, 32, 160, 305, 96, 241, 369, 192, 16, 144, 289, 80, 225, 353, 48, 176, 321, 112, 257, 385, 8, 136, 281, 72, 217, 345, 40, 168, 313, 104, 249, 377, 201, 24, 152, 297, 88, 233, 361, 56, 184, 329, 120, 265, 393, 4, 132, 277, 68, 213, 341, 36, 164, 309, 100, 245, 373, 196, 20, 148, 293, 84, 229, 357, 52, 180, 325, 116, 261, 389, 12, 140, 285, 76, 221, 349, 44, 172, 317, 108, 253, 381, 205, 28, 156, 301, 92, 237, 365, 60, 188, 333, 124, 269, 397, 2, 130, 275, 66, 211, 339, 34, 162, 307, 98, 243, 371, 194, 18, 146, 291, 82, 227, 355, 50, 178, 323, 114, 259, 387, 10, 138, 283, 74, 219, 347, 42, 170, 315, 106, 251, 379, 203, 26, 154, 299, 90, 235, 363, 58, 186, 331, 122, 267, 395, 6, 134, 279, 70, 215, 343, 38, 166, 311, 102, 247, 375, 198, 22, 150, 295, 86, 231, 359, 54, 182, 327, 118, 263, 391, 14, 142, 287, 78, 223, 351, 46, 174, 319, 110, 255, 383, 207, 30, 158, 303, 94, 239, 367, 62, 190, 335, 126, 271, 399, 200, 1, 129, 274, 65, 210, 338, 33, 161, 306, 97, 242, 370, 193, 17, 145, 290, 81, 226, 354, 49, 177, 322, 113, 258, 386, 9, 137, 282, 73, 218, 346, 41, 169, 314, 105, 250, 378, 202, 25, 153, 298, 89, 234, 362, 57, 185, 330, 121, 266, 394, 5, 133, 278, 69, 214, 342, 37, 165, 310, 101, 246, 374, 197, 21, 149, 294, 85, 230, 358, 53, 181, 326, 117, 262, 390, 13, 141, 286, 77, 222, 350, 45, 173, 318, 109, 254, 382, 206, 29, 157, 302, 93, 238, 366, 61, 189, 334, 125, 270, 398, 3, 131, 276, 67, 212, 340, 35, 163, 308, 99, 244, 372, 195, 19, 147, 292, 83, 228, 356, 51, 179, 324, 115, 260, 388, 11, 139, 284, 75, 220, 348, 43, 171, 316, 107, 252, 380, 204, 27, 155, 300, 91, 236, 364, 59, 187, 332, 123, 268, 396, 7, 135, 280, 71, 216, 344, 39, 167, 312, 103, 248, 376, 199, 23, 151, 296, 87, 232, 360, 55, 183, 328, 119, 264, 392, 15, 143, 288, 79, 224, 352, 47, 175, 320, 111, 256, 384, 208, 31, 159, 304, 95, 240, 368, 63, 191, 336, 127, 272, 400]; + + return (unsafe{*PERM401.get_unchecked((index % 401) as usize)} as u32 * 160801 + + unsafe{*PERM401.get_unchecked(((index / 401) % 401) as usize)} as u32 * 401 + + unsafe{*PERM401.get_unchecked(((index / 160801) % 401) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (64481201u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton409(index: u32) -> f32 { - const PERM409: [u16; 409] = [0, 128, 281, 64, 217, 345, 32, 160, 313, 96, 249, 377, 192, 16, - 144, 297, 80, 233, 361, 48, 176, 329, 112, 265, 393, 200, 8, 136, - 289, 72, 225, 353, 40, 168, 321, 104, 257, 385, 209, 24, 152, - 305, 88, 241, 369, 56, 184, 337, 120, 273, 401, 4, 132, 285, 68, - 221, 349, 36, 164, 317, 100, 253, 381, 196, 20, 148, 301, 84, - 237, 365, 52, 180, 333, 116, 269, 397, 205, 12, 140, 293, 76, - 229, 357, 44, 172, 325, 108, 261, 389, 213, 28, 156, 309, 92, - 245, 373, 60, 188, 341, 124, 277, 405, 2, 130, 283, 66, 219, 347, - 34, 162, 315, 98, 251, 379, 194, 18, 146, 299, 82, 235, 363, 50, - 178, 331, 114, 267, 395, 202, 10, 138, 291, 74, 227, 355, 42, - 170, 323, 106, 259, 387, 211, 26, 154, 307, 90, 243, 371, 58, - 186, 339, 122, 275, 403, 6, 134, 287, 70, 223, 351, 38, 166, 319, - 102, 255, 383, 198, 22, 150, 303, 86, 239, 367, 54, 182, 335, - 118, 271, 399, 207, 14, 142, 295, 78, 231, 359, 46, 174, 327, - 110, 263, 391, 215, 30, 158, 311, 94, 247, 375, 62, 190, 343, - 126, 279, 407, 204, 1, 129, 282, 65, 218, 346, 33, 161, 314, 97, - 250, 378, 193, 17, 145, 298, 81, 234, 362, 49, 177, 330, 113, - 266, 394, 201, 9, 137, 290, 73, 226, 354, 41, 169, 322, 105, 258, - 386, 210, 25, 153, 306, 89, 242, 370, 57, 185, 338, 121, 274, - 402, 5, 133, 286, 69, 222, 350, 37, 165, 318, 101, 254, 382, 197, - 21, 149, 302, 85, 238, 366, 53, 181, 334, 117, 270, 398, 206, 13, - 141, 294, 77, 230, 358, 45, 173, 326, 109, 262, 390, 214, 29, - 157, 310, 93, 246, 374, 61, 189, 342, 125, 278, 406, 3, 131, 284, - 67, 220, 348, 35, 163, 316, 99, 252, 380, 195, 19, 147, 300, 83, - 236, 364, 51, 179, 332, 115, 268, 396, 203, 11, 139, 292, 75, - 228, 356, 43, 171, 324, 107, 260, 388, 212, 27, 155, 308, 91, - 244, 372, 59, 187, 340, 123, 276, 404, 7, 135, 288, 71, 224, 352, - 39, 167, 320, 103, 256, 384, 199, 23, 151, 304, 87, 240, 368, 55, - 183, 336, 119, 272, 400, 208, 15, 143, 296, 79, 232, 360, 47, - 175, 328, 111, 264, 392, 216, 31, 159, 312, 95, 248, 376, 63, - 191, 344, 127, 280, 408]; - - return (unsafe { *PERM409.get_unchecked((index % 409) as usize) } as u32 * 167281 + - unsafe { *PERM409.get_unchecked(((index / 409) % 409) as usize) } as u32 * 409 + - unsafe { - *PERM409.get_unchecked(((index / 167281) % 409) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (68417929u32 as f32)); // Results in [0,1). + const PERM409: [u16; 409] = [0, 128, 281, 64, 217, 345, 32, 160, 313, 96, 249, 377, 192, 16, 144, 297, 80, 233, 361, 48, 176, 329, 112, 265, 393, 200, 8, 136, 289, 72, 225, 353, 40, 168, 321, 104, 257, 385, 209, 24, 152, 305, 88, 241, 369, 56, 184, 337, 120, 273, 401, 4, 132, 285, 68, 221, 349, 36, 164, 317, 100, 253, 381, 196, 20, 148, 301, 84, 237, 365, 52, 180, 333, 116, 269, 397, 205, 12, 140, 293, 76, 229, 357, 44, 172, 325, 108, 261, 389, 213, 28, 156, 309, 92, 245, 373, 60, 188, 341, 124, 277, 405, 2, 130, 283, 66, 219, 347, 34, 162, 315, 98, 251, 379, 194, 18, 146, 299, 82, 235, 363, 50, 178, 331, 114, 267, 395, 202, 10, 138, 291, 74, 227, 355, 42, 170, 323, 106, 259, 387, 211, 26, 154, 307, 90, 243, 371, 58, 186, 339, 122, 275, 403, 6, 134, 287, 70, 223, 351, 38, 166, 319, 102, 255, 383, 198, 22, 150, 303, 86, 239, 367, 54, 182, 335, 118, 271, 399, 207, 14, 142, 295, 78, 231, 359, 46, 174, 327, 110, 263, 391, 215, 30, 158, 311, 94, 247, 375, 62, 190, 343, 126, 279, 407, 204, 1, 129, 282, 65, 218, 346, 33, 161, 314, 97, 250, 378, 193, 17, 145, 298, 81, 234, 362, 49, 177, 330, 113, 266, 394, 201, 9, 137, 290, 73, 226, 354, 41, 169, 322, 105, 258, 386, 210, 25, 153, 306, 89, 242, 370, 57, 185, 338, 121, 274, 402, 5, 133, 286, 69, 222, 350, 37, 165, 318, 101, 254, 382, 197, 21, 149, 302, 85, 238, 366, 53, 181, 334, 117, 270, 398, 206, 13, 141, 294, 77, 230, 358, 45, 173, 326, 109, 262, 390, 214, 29, 157, 310, 93, 246, 374, 61, 189, 342, 125, 278, 406, 3, 131, 284, 67, 220, 348, 35, 163, 316, 99, 252, 380, 195, 19, 147, 300, 83, 236, 364, 51, 179, 332, 115, 268, 396, 203, 11, 139, 292, 75, 228, 356, 43, 171, 324, 107, 260, 388, 212, 27, 155, 308, 91, 244, 372, 59, 187, 340, 123, 276, 404, 7, 135, 288, 71, 224, 352, 39, 167, 320, 103, 256, 384, 199, 23, 151, 304, 87, 240, 368, 55, 183, 336, 119, 272, 400, 208, 15, 143, 296, 79, 232, 360, 47, 175, 328, 111, 264, 392, 216, 31, 159, 312, 95, 248, 376, 63, 191, 344, 127, 280, 408]; + + return (unsafe{*PERM409.get_unchecked((index % 409) as usize)} as u32 * 167281 + + unsafe{*PERM409.get_unchecked(((index / 409) % 409) as usize)} as u32 * 409 + + unsafe{*PERM409.get_unchecked(((index / 167281) % 409) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (68417929u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton419(index: u32) -> f32 { - const PERM419: [u16; 419] = [0, 128, 291, 64, 227, 355, 192, 32, 160, 323, 96, 259, 387, 16, - 144, 307, 80, 243, 371, 211, 48, 176, 339, 112, 275, 403, 8, 136, - 299, 72, 235, 363, 200, 40, 168, 331, 104, 267, 395, 24, 152, - 315, 88, 251, 379, 219, 56, 184, 347, 120, 283, 411, 4, 132, 295, - 68, 231, 359, 196, 36, 164, 327, 100, 263, 391, 20, 148, 311, 84, - 247, 375, 215, 52, 180, 343, 116, 279, 407, 12, 140, 303, 76, - 239, 367, 204, 44, 172, 335, 108, 271, 399, 28, 156, 319, 92, - 255, 383, 223, 60, 188, 351, 124, 287, 415, 208, 2, 130, 293, 66, - 229, 357, 194, 34, 162, 325, 98, 261, 389, 18, 146, 309, 82, 245, - 373, 213, 50, 178, 341, 114, 277, 405, 10, 138, 301, 74, 237, - 365, 202, 42, 170, 333, 106, 269, 397, 26, 154, 317, 90, 253, - 381, 221, 58, 186, 349, 122, 285, 413, 6, 134, 297, 70, 233, 361, - 198, 38, 166, 329, 102, 265, 393, 22, 150, 313, 86, 249, 377, - 217, 54, 182, 345, 118, 281, 409, 14, 142, 305, 78, 241, 369, - 206, 46, 174, 337, 110, 273, 401, 30, 158, 321, 94, 257, 385, - 225, 62, 190, 353, 126, 289, 417, 209, 1, 129, 292, 65, 228, 356, - 193, 33, 161, 324, 97, 260, 388, 17, 145, 308, 81, 244, 372, 212, - 49, 177, 340, 113, 276, 404, 9, 137, 300, 73, 236, 364, 201, 41, - 169, 332, 105, 268, 396, 25, 153, 316, 89, 252, 380, 220, 57, - 185, 348, 121, 284, 412, 5, 133, 296, 69, 232, 360, 197, 37, 165, - 328, 101, 264, 392, 21, 149, 312, 85, 248, 376, 216, 53, 181, - 344, 117, 280, 408, 13, 141, 304, 77, 240, 368, 205, 45, 173, - 336, 109, 272, 400, 29, 157, 320, 93, 256, 384, 224, 61, 189, - 352, 125, 288, 416, 210, 3, 131, 294, 67, 230, 358, 195, 35, 163, - 326, 99, 262, 390, 19, 147, 310, 83, 246, 374, 214, 51, 179, 342, - 115, 278, 406, 11, 139, 302, 75, 238, 366, 203, 43, 171, 334, - 107, 270, 398, 27, 155, 318, 91, 254, 382, 222, 59, 187, 350, - 123, 286, 414, 7, 135, 298, 71, 234, 362, 199, 39, 167, 330, 103, - 266, 394, 23, 151, 314, 87, 250, 378, 218, 55, 183, 346, 119, - 282, 410, 15, 143, 306, 79, 242, 370, 207, 47, 175, 338, 111, - 274, 402, 31, 159, 322, 95, 258, 386, 226, 63, 191, 354, 127, - 290, 418]; - - return (unsafe { *PERM419.get_unchecked((index % 419) as usize) } as u32 * 175561 + - unsafe { *PERM419.get_unchecked(((index / 419) % 419) as usize) } as u32 * 419 + - unsafe { - *PERM419.get_unchecked(((index / 175561) % 419) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (73560059u32 as f32)); // Results in [0,1). + const PERM419: [u16; 419] = [0, 128, 291, 64, 227, 355, 192, 32, 160, 323, 96, 259, 387, 16, 144, 307, 80, 243, 371, 211, 48, 176, 339, 112, 275, 403, 8, 136, 299, 72, 235, 363, 200, 40, 168, 331, 104, 267, 395, 24, 152, 315, 88, 251, 379, 219, 56, 184, 347, 120, 283, 411, 4, 132, 295, 68, 231, 359, 196, 36, 164, 327, 100, 263, 391, 20, 148, 311, 84, 247, 375, 215, 52, 180, 343, 116, 279, 407, 12, 140, 303, 76, 239, 367, 204, 44, 172, 335, 108, 271, 399, 28, 156, 319, 92, 255, 383, 223, 60, 188, 351, 124, 287, 415, 208, 2, 130, 293, 66, 229, 357, 194, 34, 162, 325, 98, 261, 389, 18, 146, 309, 82, 245, 373, 213, 50, 178, 341, 114, 277, 405, 10, 138, 301, 74, 237, 365, 202, 42, 170, 333, 106, 269, 397, 26, 154, 317, 90, 253, 381, 221, 58, 186, 349, 122, 285, 413, 6, 134, 297, 70, 233, 361, 198, 38, 166, 329, 102, 265, 393, 22, 150, 313, 86, 249, 377, 217, 54, 182, 345, 118, 281, 409, 14, 142, 305, 78, 241, 369, 206, 46, 174, 337, 110, 273, 401, 30, 158, 321, 94, 257, 385, 225, 62, 190, 353, 126, 289, 417, 209, 1, 129, 292, 65, 228, 356, 193, 33, 161, 324, 97, 260, 388, 17, 145, 308, 81, 244, 372, 212, 49, 177, 340, 113, 276, 404, 9, 137, 300, 73, 236, 364, 201, 41, 169, 332, 105, 268, 396, 25, 153, 316, 89, 252, 380, 220, 57, 185, 348, 121, 284, 412, 5, 133, 296, 69, 232, 360, 197, 37, 165, 328, 101, 264, 392, 21, 149, 312, 85, 248, 376, 216, 53, 181, 344, 117, 280, 408, 13, 141, 304, 77, 240, 368, 205, 45, 173, 336, 109, 272, 400, 29, 157, 320, 93, 256, 384, 224, 61, 189, 352, 125, 288, 416, 210, 3, 131, 294, 67, 230, 358, 195, 35, 163, 326, 99, 262, 390, 19, 147, 310, 83, 246, 374, 214, 51, 179, 342, 115, 278, 406, 11, 139, 302, 75, 238, 366, 203, 43, 171, 334, 107, 270, 398, 27, 155, 318, 91, 254, 382, 222, 59, 187, 350, 123, 286, 414, 7, 135, 298, 71, 234, 362, 199, 39, 167, 330, 103, 266, 394, 23, 151, 314, 87, 250, 378, 218, 55, 183, 346, 119, 282, 410, 15, 143, 306, 79, 242, 370, 207, 47, 175, 338, 111, 274, 402, 31, 159, 322, 95, 258, 386, 226, 63, 191, 354, 127, 290, 418]; + + return (unsafe{*PERM419.get_unchecked((index % 419) as usize)} as u32 * 175561 + + unsafe{*PERM419.get_unchecked(((index / 419) % 419) as usize)} as u32 * 419 + + unsafe{*PERM419.get_unchecked(((index / 175561) % 419) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (73560059u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton421(index: u32) -> f32 { - const PERM421: [u16; 421] = [0, 128, 293, 64, 229, 357, 192, 32, 160, 325, 96, 261, 389, 16, - 144, 309, 80, 245, 373, 213, 48, 176, 341, 112, 277, 405, 8, 136, - 301, 72, 237, 365, 200, 40, 168, 333, 104, 269, 397, 24, 152, - 317, 88, 253, 381, 221, 56, 184, 349, 120, 285, 413, 208, 4, 132, - 297, 68, 233, 361, 196, 36, 164, 329, 100, 265, 393, 20, 148, - 313, 84, 249, 377, 217, 52, 180, 345, 116, 281, 409, 12, 140, - 305, 76, 241, 369, 204, 44, 172, 337, 108, 273, 401, 28, 156, - 321, 92, 257, 385, 225, 60, 188, 353, 124, 289, 417, 2, 130, 295, - 66, 231, 359, 194, 34, 162, 327, 98, 263, 391, 18, 146, 311, 82, - 247, 375, 215, 50, 178, 343, 114, 279, 407, 10, 138, 303, 74, - 239, 367, 202, 42, 170, 335, 106, 271, 399, 26, 154, 319, 90, - 255, 383, 223, 58, 186, 351, 122, 287, 415, 211, 6, 134, 299, 70, - 235, 363, 198, 38, 166, 331, 102, 267, 395, 22, 150, 315, 86, - 251, 379, 219, 54, 182, 347, 118, 283, 411, 14, 142, 307, 78, - 243, 371, 206, 46, 174, 339, 110, 275, 403, 30, 158, 323, 94, - 259, 387, 227, 62, 190, 355, 126, 291, 419, 210, 1, 129, 294, 65, - 230, 358, 193, 33, 161, 326, 97, 262, 390, 17, 145, 310, 81, 246, - 374, 214, 49, 177, 342, 113, 278, 406, 9, 137, 302, 73, 238, 366, - 201, 41, 169, 334, 105, 270, 398, 25, 153, 318, 89, 254, 382, - 222, 57, 185, 350, 121, 286, 414, 209, 5, 133, 298, 69, 234, 362, - 197, 37, 165, 330, 101, 266, 394, 21, 149, 314, 85, 250, 378, - 218, 53, 181, 346, 117, 282, 410, 13, 141, 306, 77, 242, 370, - 205, 45, 173, 338, 109, 274, 402, 29, 157, 322, 93, 258, 386, - 226, 61, 189, 354, 125, 290, 418, 3, 131, 296, 67, 232, 360, 195, - 35, 163, 328, 99, 264, 392, 19, 147, 312, 83, 248, 376, 216, 51, - 179, 344, 115, 280, 408, 11, 139, 304, 75, 240, 368, 203, 43, - 171, 336, 107, 272, 400, 27, 155, 320, 91, 256, 384, 224, 59, - 187, 352, 123, 288, 416, 212, 7, 135, 300, 71, 236, 364, 199, 39, - 167, 332, 103, 268, 396, 23, 151, 316, 87, 252, 380, 220, 55, - 183, 348, 119, 284, 412, 15, 143, 308, 79, 244, 372, 207, 47, - 175, 340, 111, 276, 404, 31, 159, 324, 95, 260, 388, 228, 63, - 191, 356, 127, 292, 420]; - - return (unsafe { *PERM421.get_unchecked((index % 421) as usize) } as u32 * 177241 + - unsafe { *PERM421.get_unchecked(((index / 421) % 421) as usize) } as u32 * 421 + - unsafe { - *PERM421.get_unchecked(((index / 177241) % 421) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (74618461u32 as f32)); // Results in [0,1). + const PERM421: [u16; 421] = [0, 128, 293, 64, 229, 357, 192, 32, 160, 325, 96, 261, 389, 16, 144, 309, 80, 245, 373, 213, 48, 176, 341, 112, 277, 405, 8, 136, 301, 72, 237, 365, 200, 40, 168, 333, 104, 269, 397, 24, 152, 317, 88, 253, 381, 221, 56, 184, 349, 120, 285, 413, 208, 4, 132, 297, 68, 233, 361, 196, 36, 164, 329, 100, 265, 393, 20, 148, 313, 84, 249, 377, 217, 52, 180, 345, 116, 281, 409, 12, 140, 305, 76, 241, 369, 204, 44, 172, 337, 108, 273, 401, 28, 156, 321, 92, 257, 385, 225, 60, 188, 353, 124, 289, 417, 2, 130, 295, 66, 231, 359, 194, 34, 162, 327, 98, 263, 391, 18, 146, 311, 82, 247, 375, 215, 50, 178, 343, 114, 279, 407, 10, 138, 303, 74, 239, 367, 202, 42, 170, 335, 106, 271, 399, 26, 154, 319, 90, 255, 383, 223, 58, 186, 351, 122, 287, 415, 211, 6, 134, 299, 70, 235, 363, 198, 38, 166, 331, 102, 267, 395, 22, 150, 315, 86, 251, 379, 219, 54, 182, 347, 118, 283, 411, 14, 142, 307, 78, 243, 371, 206, 46, 174, 339, 110, 275, 403, 30, 158, 323, 94, 259, 387, 227, 62, 190, 355, 126, 291, 419, 210, 1, 129, 294, 65, 230, 358, 193, 33, 161, 326, 97, 262, 390, 17, 145, 310, 81, 246, 374, 214, 49, 177, 342, 113, 278, 406, 9, 137, 302, 73, 238, 366, 201, 41, 169, 334, 105, 270, 398, 25, 153, 318, 89, 254, 382, 222, 57, 185, 350, 121, 286, 414, 209, 5, 133, 298, 69, 234, 362, 197, 37, 165, 330, 101, 266, 394, 21, 149, 314, 85, 250, 378, 218, 53, 181, 346, 117, 282, 410, 13, 141, 306, 77, 242, 370, 205, 45, 173, 338, 109, 274, 402, 29, 157, 322, 93, 258, 386, 226, 61, 189, 354, 125, 290, 418, 3, 131, 296, 67, 232, 360, 195, 35, 163, 328, 99, 264, 392, 19, 147, 312, 83, 248, 376, 216, 51, 179, 344, 115, 280, 408, 11, 139, 304, 75, 240, 368, 203, 43, 171, 336, 107, 272, 400, 27, 155, 320, 91, 256, 384, 224, 59, 187, 352, 123, 288, 416, 212, 7, 135, 300, 71, 236, 364, 199, 39, 167, 332, 103, 268, 396, 23, 151, 316, 87, 252, 380, 220, 55, 183, 348, 119, 284, 412, 15, 143, 308, 79, 244, 372, 207, 47, 175, 340, 111, 276, 404, 31, 159, 324, 95, 260, 388, 228, 63, 191, 356, 127, 292, 420]; + + return (unsafe{*PERM421.get_unchecked((index % 421) as usize)} as u32 * 177241 + + unsafe{*PERM421.get_unchecked(((index / 421) % 421) as usize)} as u32 * 421 + + unsafe{*PERM421.get_unchecked(((index / 177241) % 421) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (74618461u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton431(index: u32) -> f32 { - const PERM431: [u16; 431] = [0, 128, 303, 64, 239, 367, 192, 32, 160, 335, 96, 271, 399, 16, - 144, 319, 80, 255, 383, 223, 48, 176, 351, 112, 287, 415, 208, 8, - 136, 311, 72, 247, 375, 200, 40, 168, 343, 104, 279, 407, 24, - 152, 327, 88, 263, 391, 231, 56, 184, 359, 120, 295, 423, 212, 4, - 132, 307, 68, 243, 371, 196, 36, 164, 339, 100, 275, 403, 20, - 148, 323, 84, 259, 387, 227, 52, 180, 355, 116, 291, 419, 219, - 12, 140, 315, 76, 251, 379, 204, 44, 172, 347, 108, 283, 411, 28, - 156, 331, 92, 267, 395, 235, 60, 188, 363, 124, 299, 427, 214, 2, - 130, 305, 66, 241, 369, 194, 34, 162, 337, 98, 273, 401, 18, 146, - 321, 82, 257, 385, 225, 50, 178, 353, 114, 289, 417, 210, 10, - 138, 313, 74, 249, 377, 202, 42, 170, 345, 106, 281, 409, 26, - 154, 329, 90, 265, 393, 233, 58, 186, 361, 122, 297, 425, 217, 6, - 134, 309, 70, 245, 373, 198, 38, 166, 341, 102, 277, 405, 22, - 150, 325, 86, 261, 389, 229, 54, 182, 357, 118, 293, 421, 221, - 14, 142, 317, 78, 253, 381, 206, 46, 174, 349, 110, 285, 413, 30, - 158, 333, 94, 269, 397, 237, 62, 190, 365, 126, 301, 429, 215, 1, - 129, 304, 65, 240, 368, 193, 33, 161, 336, 97, 272, 400, 17, 145, - 320, 81, 256, 384, 224, 49, 177, 352, 113, 288, 416, 209, 9, 137, - 312, 73, 248, 376, 201, 41, 169, 344, 105, 280, 408, 25, 153, - 328, 89, 264, 392, 232, 57, 185, 360, 121, 296, 424, 213, 5, 133, - 308, 69, 244, 372, 197, 37, 165, 340, 101, 276, 404, 21, 149, - 324, 85, 260, 388, 228, 53, 181, 356, 117, 292, 420, 220, 13, - 141, 316, 77, 252, 380, 205, 45, 173, 348, 109, 284, 412, 29, - 157, 332, 93, 268, 396, 236, 61, 189, 364, 125, 300, 428, 216, 3, - 131, 306, 67, 242, 370, 195, 35, 163, 338, 99, 274, 402, 19, 147, - 322, 83, 258, 386, 226, 51, 179, 354, 115, 290, 418, 211, 11, - 139, 314, 75, 250, 378, 203, 43, 171, 346, 107, 282, 410, 27, - 155, 330, 91, 266, 394, 234, 59, 187, 362, 123, 298, 426, 218, 7, - 135, 310, 71, 246, 374, 199, 39, 167, 342, 103, 278, 406, 23, - 151, 326, 87, 262, 390, 230, 55, 183, 358, 119, 294, 422, 222, - 15, 143, 318, 79, 254, 382, 207, 47, 175, 350, 111, 286, 414, 31, - 159, 334, 95, 270, 398, 238, 63, 191, 366, 127, 302, 430]; - - return (unsafe { *PERM431.get_unchecked((index % 431) as usize) } as u32 * 185761 + - unsafe { *PERM431.get_unchecked(((index / 431) % 431) as usize) } as u32 * 431 + - unsafe { - *PERM431.get_unchecked(((index / 185761) % 431) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (80062991u32 as f32)); // Results in [0,1). + const PERM431: [u16; 431] = [0, 128, 303, 64, 239, 367, 192, 32, 160, 335, 96, 271, 399, 16, 144, 319, 80, 255, 383, 223, 48, 176, 351, 112, 287, 415, 208, 8, 136, 311, 72, 247, 375, 200, 40, 168, 343, 104, 279, 407, 24, 152, 327, 88, 263, 391, 231, 56, 184, 359, 120, 295, 423, 212, 4, 132, 307, 68, 243, 371, 196, 36, 164, 339, 100, 275, 403, 20, 148, 323, 84, 259, 387, 227, 52, 180, 355, 116, 291, 419, 219, 12, 140, 315, 76, 251, 379, 204, 44, 172, 347, 108, 283, 411, 28, 156, 331, 92, 267, 395, 235, 60, 188, 363, 124, 299, 427, 214, 2, 130, 305, 66, 241, 369, 194, 34, 162, 337, 98, 273, 401, 18, 146, 321, 82, 257, 385, 225, 50, 178, 353, 114, 289, 417, 210, 10, 138, 313, 74, 249, 377, 202, 42, 170, 345, 106, 281, 409, 26, 154, 329, 90, 265, 393, 233, 58, 186, 361, 122, 297, 425, 217, 6, 134, 309, 70, 245, 373, 198, 38, 166, 341, 102, 277, 405, 22, 150, 325, 86, 261, 389, 229, 54, 182, 357, 118, 293, 421, 221, 14, 142, 317, 78, 253, 381, 206, 46, 174, 349, 110, 285, 413, 30, 158, 333, 94, 269, 397, 237, 62, 190, 365, 126, 301, 429, 215, 1, 129, 304, 65, 240, 368, 193, 33, 161, 336, 97, 272, 400, 17, 145, 320, 81, 256, 384, 224, 49, 177, 352, 113, 288, 416, 209, 9, 137, 312, 73, 248, 376, 201, 41, 169, 344, 105, 280, 408, 25, 153, 328, 89, 264, 392, 232, 57, 185, 360, 121, 296, 424, 213, 5, 133, 308, 69, 244, 372, 197, 37, 165, 340, 101, 276, 404, 21, 149, 324, 85, 260, 388, 228, 53, 181, 356, 117, 292, 420, 220, 13, 141, 316, 77, 252, 380, 205, 45, 173, 348, 109, 284, 412, 29, 157, 332, 93, 268, 396, 236, 61, 189, 364, 125, 300, 428, 216, 3, 131, 306, 67, 242, 370, 195, 35, 163, 338, 99, 274, 402, 19, 147, 322, 83, 258, 386, 226, 51, 179, 354, 115, 290, 418, 211, 11, 139, 314, 75, 250, 378, 203, 43, 171, 346, 107, 282, 410, 27, 155, 330, 91, 266, 394, 234, 59, 187, 362, 123, 298, 426, 218, 7, 135, 310, 71, 246, 374, 199, 39, 167, 342, 103, 278, 406, 23, 151, 326, 87, 262, 390, 230, 55, 183, 358, 119, 294, 422, 222, 15, 143, 318, 79, 254, 382, 207, 47, 175, 350, 111, 286, 414, 31, 159, 334, 95, 270, 398, 238, 63, 191, 366, 127, 302, 430]; + + return (unsafe{*PERM431.get_unchecked((index % 431) as usize)} as u32 * 185761 + + unsafe{*PERM431.get_unchecked(((index / 431) % 431) as usize)} as u32 * 431 + + unsafe{*PERM431.get_unchecked(((index / 185761) % 431) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (80062991u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton433(index: u32) -> f32 { - const PERM433: [u16; 433] = [0, 128, 305, 64, 241, 369, 192, 32, 160, 337, 96, 273, 401, 208, - 16, 144, 321, 80, 257, 385, 225, 48, 176, 353, 112, 289, 417, 8, - 136, 313, 72, 249, 377, 200, 40, 168, 345, 104, 281, 409, 217, - 24, 152, 329, 88, 265, 393, 233, 56, 184, 361, 120, 297, 425, 4, - 132, 309, 68, 245, 373, 196, 36, 164, 341, 100, 277, 405, 212, - 20, 148, 325, 84, 261, 389, 229, 52, 180, 357, 116, 293, 421, 12, - 140, 317, 76, 253, 381, 204, 44, 172, 349, 108, 285, 413, 221, - 28, 156, 333, 92, 269, 397, 237, 60, 188, 365, 124, 301, 429, 2, - 130, 307, 66, 243, 371, 194, 34, 162, 339, 98, 275, 403, 210, 18, - 146, 323, 82, 259, 387, 227, 50, 178, 355, 114, 291, 419, 10, - 138, 315, 74, 251, 379, 202, 42, 170, 347, 106, 283, 411, 219, - 26, 154, 331, 90, 267, 395, 235, 58, 186, 363, 122, 299, 427, 6, - 134, 311, 70, 247, 375, 198, 38, 166, 343, 102, 279, 407, 214, - 22, 150, 327, 86, 263, 391, 231, 54, 182, 359, 118, 295, 423, 14, - 142, 319, 78, 255, 383, 206, 46, 174, 351, 110, 287, 415, 223, - 30, 158, 335, 94, 271, 399, 239, 62, 190, 367, 126, 303, 431, - 216, 1, 129, 306, 65, 242, 370, 193, 33, 161, 338, 97, 274, 402, - 209, 17, 145, 322, 81, 258, 386, 226, 49, 177, 354, 113, 290, - 418, 9, 137, 314, 73, 250, 378, 201, 41, 169, 346, 105, 282, 410, - 218, 25, 153, 330, 89, 266, 394, 234, 57, 185, 362, 121, 298, - 426, 5, 133, 310, 69, 246, 374, 197, 37, 165, 342, 101, 278, 406, - 213, 21, 149, 326, 85, 262, 390, 230, 53, 181, 358, 117, 294, - 422, 13, 141, 318, 77, 254, 382, 205, 45, 173, 350, 109, 286, - 414, 222, 29, 157, 334, 93, 270, 398, 238, 61, 189, 366, 125, - 302, 430, 3, 131, 308, 67, 244, 372, 195, 35, 163, 340, 99, 276, - 404, 211, 19, 147, 324, 83, 260, 388, 228, 51, 179, 356, 115, - 292, 420, 11, 139, 316, 75, 252, 380, 203, 43, 171, 348, 107, - 284, 412, 220, 27, 155, 332, 91, 268, 396, 236, 59, 187, 364, - 123, 300, 428, 7, 135, 312, 71, 248, 376, 199, 39, 167, 344, 103, - 280, 408, 215, 23, 151, 328, 87, 264, 392, 232, 55, 183, 360, - 119, 296, 424, 15, 143, 320, 79, 256, 384, 207, 47, 175, 352, - 111, 288, 416, 224, 31, 159, 336, 95, 272, 400, 240, 63, 191, - 368, 127, 304, 432]; - - return (unsafe { *PERM433.get_unchecked((index % 433) as usize) } as u32 * 187489 + - unsafe { *PERM433.get_unchecked(((index / 433) % 433) as usize) } as u32 * 433 + - unsafe { - *PERM433.get_unchecked(((index / 187489) % 433) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (81182737u32 as f32)); // Results in [0,1). + const PERM433: [u16; 433] = [0, 128, 305, 64, 241, 369, 192, 32, 160, 337, 96, 273, 401, 208, 16, 144, 321, 80, 257, 385, 225, 48, 176, 353, 112, 289, 417, 8, 136, 313, 72, 249, 377, 200, 40, 168, 345, 104, 281, 409, 217, 24, 152, 329, 88, 265, 393, 233, 56, 184, 361, 120, 297, 425, 4, 132, 309, 68, 245, 373, 196, 36, 164, 341, 100, 277, 405, 212, 20, 148, 325, 84, 261, 389, 229, 52, 180, 357, 116, 293, 421, 12, 140, 317, 76, 253, 381, 204, 44, 172, 349, 108, 285, 413, 221, 28, 156, 333, 92, 269, 397, 237, 60, 188, 365, 124, 301, 429, 2, 130, 307, 66, 243, 371, 194, 34, 162, 339, 98, 275, 403, 210, 18, 146, 323, 82, 259, 387, 227, 50, 178, 355, 114, 291, 419, 10, 138, 315, 74, 251, 379, 202, 42, 170, 347, 106, 283, 411, 219, 26, 154, 331, 90, 267, 395, 235, 58, 186, 363, 122, 299, 427, 6, 134, 311, 70, 247, 375, 198, 38, 166, 343, 102, 279, 407, 214, 22, 150, 327, 86, 263, 391, 231, 54, 182, 359, 118, 295, 423, 14, 142, 319, 78, 255, 383, 206, 46, 174, 351, 110, 287, 415, 223, 30, 158, 335, 94, 271, 399, 239, 62, 190, 367, 126, 303, 431, 216, 1, 129, 306, 65, 242, 370, 193, 33, 161, 338, 97, 274, 402, 209, 17, 145, 322, 81, 258, 386, 226, 49, 177, 354, 113, 290, 418, 9, 137, 314, 73, 250, 378, 201, 41, 169, 346, 105, 282, 410, 218, 25, 153, 330, 89, 266, 394, 234, 57, 185, 362, 121, 298, 426, 5, 133, 310, 69, 246, 374, 197, 37, 165, 342, 101, 278, 406, 213, 21, 149, 326, 85, 262, 390, 230, 53, 181, 358, 117, 294, 422, 13, 141, 318, 77, 254, 382, 205, 45, 173, 350, 109, 286, 414, 222, 29, 157, 334, 93, 270, 398, 238, 61, 189, 366, 125, 302, 430, 3, 131, 308, 67, 244, 372, 195, 35, 163, 340, 99, 276, 404, 211, 19, 147, 324, 83, 260, 388, 228, 51, 179, 356, 115, 292, 420, 11, 139, 316, 75, 252, 380, 203, 43, 171, 348, 107, 284, 412, 220, 27, 155, 332, 91, 268, 396, 236, 59, 187, 364, 123, 300, 428, 7, 135, 312, 71, 248, 376, 199, 39, 167, 344, 103, 280, 408, 215, 23, 151, 328, 87, 264, 392, 232, 55, 183, 360, 119, 296, 424, 15, 143, 320, 79, 256, 384, 207, 47, 175, 352, 111, 288, 416, 224, 31, 159, 336, 95, 272, 400, 240, 63, 191, 368, 127, 304, 432]; + + return (unsafe{*PERM433.get_unchecked((index % 433) as usize)} as u32 * 187489 + + unsafe{*PERM433.get_unchecked(((index / 433) % 433) as usize)} as u32 * 433 + + unsafe{*PERM433.get_unchecked(((index / 187489) % 433) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (81182737u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton439(index: u32) -> f32 { - const PERM439: [u16; 439] = [0, 128, 311, 64, 247, 375, 192, 32, 160, 343, 96, 279, 407, 208, - 16, 144, 327, 80, 263, 391, 231, 48, 176, 359, 112, 295, 423, 8, - 136, 319, 72, 255, 383, 200, 40, 168, 351, 104, 287, 415, 223, - 24, 152, 335, 88, 271, 399, 239, 56, 184, 367, 120, 303, 431, - 216, 4, 132, 315, 68, 251, 379, 196, 36, 164, 347, 100, 283, 411, - 212, 20, 148, 331, 84, 267, 395, 235, 52, 180, 363, 116, 299, - 427, 12, 140, 323, 76, 259, 387, 204, 44, 172, 355, 108, 291, - 419, 227, 28, 156, 339, 92, 275, 403, 243, 60, 188, 371, 124, - 307, 435, 218, 2, 130, 313, 66, 249, 377, 194, 34, 162, 345, 98, - 281, 409, 210, 18, 146, 329, 82, 265, 393, 233, 50, 178, 361, - 114, 297, 425, 10, 138, 321, 74, 257, 385, 202, 42, 170, 353, - 106, 289, 417, 225, 26, 154, 337, 90, 273, 401, 241, 58, 186, - 369, 122, 305, 433, 221, 6, 134, 317, 70, 253, 381, 198, 38, 166, - 349, 102, 285, 413, 214, 22, 150, 333, 86, 269, 397, 237, 54, - 182, 365, 118, 301, 429, 14, 142, 325, 78, 261, 389, 206, 46, - 174, 357, 110, 293, 421, 229, 30, 158, 341, 94, 277, 405, 245, - 62, 190, 373, 126, 309, 437, 219, 1, 129, 312, 65, 248, 376, 193, - 33, 161, 344, 97, 280, 408, 209, 17, 145, 328, 81, 264, 392, 232, - 49, 177, 360, 113, 296, 424, 9, 137, 320, 73, 256, 384, 201, 41, - 169, 352, 105, 288, 416, 224, 25, 153, 336, 89, 272, 400, 240, - 57, 185, 368, 121, 304, 432, 217, 5, 133, 316, 69, 252, 380, 197, - 37, 165, 348, 101, 284, 412, 213, 21, 149, 332, 85, 268, 396, - 236, 53, 181, 364, 117, 300, 428, 13, 141, 324, 77, 260, 388, - 205, 45, 173, 356, 109, 292, 420, 228, 29, 157, 340, 93, 276, - 404, 244, 61, 189, 372, 125, 308, 436, 220, 3, 131, 314, 67, 250, - 378, 195, 35, 163, 346, 99, 282, 410, 211, 19, 147, 330, 83, 266, - 394, 234, 51, 179, 362, 115, 298, 426, 11, 139, 322, 75, 258, - 386, 203, 43, 171, 354, 107, 290, 418, 226, 27, 155, 338, 91, - 274, 402, 242, 59, 187, 370, 123, 306, 434, 222, 7, 135, 318, 71, - 254, 382, 199, 39, 167, 350, 103, 286, 414, 215, 23, 151, 334, - 87, 270, 398, 238, 55, 183, 366, 119, 302, 430, 15, 143, 326, 79, - 262, 390, 207, 47, 175, 358, 111, 294, 422, 230, 31, 159, 342, - 95, 278, 406, 246, 63, 191, 374, 127, 310, 438]; - - return (unsafe { *PERM439.get_unchecked((index % 439) as usize) } as u32 * 192721 + - unsafe { *PERM439.get_unchecked(((index / 439) % 439) as usize) } as u32 * 439 + - unsafe { - *PERM439.get_unchecked(((index / 192721) % 439) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (84604519u32 as f32)); // Results in [0,1). + const PERM439: [u16; 439] = [0, 128, 311, 64, 247, 375, 192, 32, 160, 343, 96, 279, 407, 208, 16, 144, 327, 80, 263, 391, 231, 48, 176, 359, 112, 295, 423, 8, 136, 319, 72, 255, 383, 200, 40, 168, 351, 104, 287, 415, 223, 24, 152, 335, 88, 271, 399, 239, 56, 184, 367, 120, 303, 431, 216, 4, 132, 315, 68, 251, 379, 196, 36, 164, 347, 100, 283, 411, 212, 20, 148, 331, 84, 267, 395, 235, 52, 180, 363, 116, 299, 427, 12, 140, 323, 76, 259, 387, 204, 44, 172, 355, 108, 291, 419, 227, 28, 156, 339, 92, 275, 403, 243, 60, 188, 371, 124, 307, 435, 218, 2, 130, 313, 66, 249, 377, 194, 34, 162, 345, 98, 281, 409, 210, 18, 146, 329, 82, 265, 393, 233, 50, 178, 361, 114, 297, 425, 10, 138, 321, 74, 257, 385, 202, 42, 170, 353, 106, 289, 417, 225, 26, 154, 337, 90, 273, 401, 241, 58, 186, 369, 122, 305, 433, 221, 6, 134, 317, 70, 253, 381, 198, 38, 166, 349, 102, 285, 413, 214, 22, 150, 333, 86, 269, 397, 237, 54, 182, 365, 118, 301, 429, 14, 142, 325, 78, 261, 389, 206, 46, 174, 357, 110, 293, 421, 229, 30, 158, 341, 94, 277, 405, 245, 62, 190, 373, 126, 309, 437, 219, 1, 129, 312, 65, 248, 376, 193, 33, 161, 344, 97, 280, 408, 209, 17, 145, 328, 81, 264, 392, 232, 49, 177, 360, 113, 296, 424, 9, 137, 320, 73, 256, 384, 201, 41, 169, 352, 105, 288, 416, 224, 25, 153, 336, 89, 272, 400, 240, 57, 185, 368, 121, 304, 432, 217, 5, 133, 316, 69, 252, 380, 197, 37, 165, 348, 101, 284, 412, 213, 21, 149, 332, 85, 268, 396, 236, 53, 181, 364, 117, 300, 428, 13, 141, 324, 77, 260, 388, 205, 45, 173, 356, 109, 292, 420, 228, 29, 157, 340, 93, 276, 404, 244, 61, 189, 372, 125, 308, 436, 220, 3, 131, 314, 67, 250, 378, 195, 35, 163, 346, 99, 282, 410, 211, 19, 147, 330, 83, 266, 394, 234, 51, 179, 362, 115, 298, 426, 11, 139, 322, 75, 258, 386, 203, 43, 171, 354, 107, 290, 418, 226, 27, 155, 338, 91, 274, 402, 242, 59, 187, 370, 123, 306, 434, 222, 7, 135, 318, 71, 254, 382, 199, 39, 167, 350, 103, 286, 414, 215, 23, 151, 334, 87, 270, 398, 238, 55, 183, 366, 119, 302, 430, 15, 143, 326, 79, 262, 390, 207, 47, 175, 358, 111, 294, 422, 230, 31, 159, 342, 95, 278, 406, 246, 63, 191, 374, 127, 310, 438]; + + return (unsafe{*PERM439.get_unchecked((index % 439) as usize)} as u32 * 192721 + + unsafe{*PERM439.get_unchecked(((index / 439) % 439) as usize)} as u32 * 439 + + unsafe{*PERM439.get_unchecked(((index / 192721) % 439) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (84604519u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton443(index: u32) -> f32 { - const PERM443: [u16; 443] = [0, 128, 315, 64, 251, 379, 192, 32, 160, 347, 96, 283, 411, 208, - 16, 144, 331, 80, 267, 395, 235, 48, 176, 363, 112, 299, 427, - 216, 8, 136, 323, 72, 259, 387, 200, 40, 168, 355, 104, 291, 419, - 227, 24, 152, 339, 88, 275, 403, 243, 56, 184, 371, 120, 307, - 435, 4, 132, 319, 68, 255, 383, 196, 36, 164, 351, 100, 287, 415, - 212, 20, 148, 335, 84, 271, 399, 239, 52, 180, 367, 116, 303, - 431, 223, 12, 140, 327, 76, 263, 391, 204, 44, 172, 359, 108, - 295, 423, 231, 28, 156, 343, 92, 279, 407, 247, 60, 188, 375, - 124, 311, 439, 220, 2, 130, 317, 66, 253, 381, 194, 34, 162, 349, - 98, 285, 413, 210, 18, 146, 333, 82, 269, 397, 237, 50, 178, 365, - 114, 301, 429, 218, 10, 138, 325, 74, 261, 389, 202, 42, 170, - 357, 106, 293, 421, 229, 26, 154, 341, 90, 277, 405, 245, 58, - 186, 373, 122, 309, 437, 6, 134, 321, 70, 257, 385, 198, 38, 166, - 353, 102, 289, 417, 214, 22, 150, 337, 86, 273, 401, 241, 54, - 182, 369, 118, 305, 433, 225, 14, 142, 329, 78, 265, 393, 206, - 46, 174, 361, 110, 297, 425, 233, 30, 158, 345, 94, 281, 409, - 249, 62, 190, 377, 126, 313, 441, 221, 1, 129, 316, 65, 252, 380, - 193, 33, 161, 348, 97, 284, 412, 209, 17, 145, 332, 81, 268, 396, - 236, 49, 177, 364, 113, 300, 428, 217, 9, 137, 324, 73, 260, 388, - 201, 41, 169, 356, 105, 292, 420, 228, 25, 153, 340, 89, 276, - 404, 244, 57, 185, 372, 121, 308, 436, 5, 133, 320, 69, 256, 384, - 197, 37, 165, 352, 101, 288, 416, 213, 21, 149, 336, 85, 272, - 400, 240, 53, 181, 368, 117, 304, 432, 224, 13, 141, 328, 77, - 264, 392, 205, 45, 173, 360, 109, 296, 424, 232, 29, 157, 344, - 93, 280, 408, 248, 61, 189, 376, 125, 312, 440, 222, 3, 131, 318, - 67, 254, 382, 195, 35, 163, 350, 99, 286, 414, 211, 19, 147, 334, - 83, 270, 398, 238, 51, 179, 366, 115, 302, 430, 219, 11, 139, - 326, 75, 262, 390, 203, 43, 171, 358, 107, 294, 422, 230, 27, - 155, 342, 91, 278, 406, 246, 59, 187, 374, 123, 310, 438, 7, 135, - 322, 71, 258, 386, 199, 39, 167, 354, 103, 290, 418, 215, 23, - 151, 338, 87, 274, 402, 242, 55, 183, 370, 119, 306, 434, 226, - 15, 143, 330, 79, 266, 394, 207, 47, 175, 362, 111, 298, 426, - 234, 31, 159, 346, 95, 282, 410, 250, 63, 191, 378, 127, 314, 442]; - - return (unsafe { *PERM443.get_unchecked((index % 443) as usize) } as u32 * 196249 + - unsafe { *PERM443.get_unchecked(((index / 443) % 443) as usize) } as u32 * 443 + - unsafe { - *PERM443.get_unchecked(((index / 196249) % 443) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (86938307u32 as f32)); // Results in [0,1). + const PERM443: [u16; 443] = [0, 128, 315, 64, 251, 379, 192, 32, 160, 347, 96, 283, 411, 208, 16, 144, 331, 80, 267, 395, 235, 48, 176, 363, 112, 299, 427, 216, 8, 136, 323, 72, 259, 387, 200, 40, 168, 355, 104, 291, 419, 227, 24, 152, 339, 88, 275, 403, 243, 56, 184, 371, 120, 307, 435, 4, 132, 319, 68, 255, 383, 196, 36, 164, 351, 100, 287, 415, 212, 20, 148, 335, 84, 271, 399, 239, 52, 180, 367, 116, 303, 431, 223, 12, 140, 327, 76, 263, 391, 204, 44, 172, 359, 108, 295, 423, 231, 28, 156, 343, 92, 279, 407, 247, 60, 188, 375, 124, 311, 439, 220, 2, 130, 317, 66, 253, 381, 194, 34, 162, 349, 98, 285, 413, 210, 18, 146, 333, 82, 269, 397, 237, 50, 178, 365, 114, 301, 429, 218, 10, 138, 325, 74, 261, 389, 202, 42, 170, 357, 106, 293, 421, 229, 26, 154, 341, 90, 277, 405, 245, 58, 186, 373, 122, 309, 437, 6, 134, 321, 70, 257, 385, 198, 38, 166, 353, 102, 289, 417, 214, 22, 150, 337, 86, 273, 401, 241, 54, 182, 369, 118, 305, 433, 225, 14, 142, 329, 78, 265, 393, 206, 46, 174, 361, 110, 297, 425, 233, 30, 158, 345, 94, 281, 409, 249, 62, 190, 377, 126, 313, 441, 221, 1, 129, 316, 65, 252, 380, 193, 33, 161, 348, 97, 284, 412, 209, 17, 145, 332, 81, 268, 396, 236, 49, 177, 364, 113, 300, 428, 217, 9, 137, 324, 73, 260, 388, 201, 41, 169, 356, 105, 292, 420, 228, 25, 153, 340, 89, 276, 404, 244, 57, 185, 372, 121, 308, 436, 5, 133, 320, 69, 256, 384, 197, 37, 165, 352, 101, 288, 416, 213, 21, 149, 336, 85, 272, 400, 240, 53, 181, 368, 117, 304, 432, 224, 13, 141, 328, 77, 264, 392, 205, 45, 173, 360, 109, 296, 424, 232, 29, 157, 344, 93, 280, 408, 248, 61, 189, 376, 125, 312, 440, 222, 3, 131, 318, 67, 254, 382, 195, 35, 163, 350, 99, 286, 414, 211, 19, 147, 334, 83, 270, 398, 238, 51, 179, 366, 115, 302, 430, 219, 11, 139, 326, 75, 262, 390, 203, 43, 171, 358, 107, 294, 422, 230, 27, 155, 342, 91, 278, 406, 246, 59, 187, 374, 123, 310, 438, 7, 135, 322, 71, 258, 386, 199, 39, 167, 354, 103, 290, 418, 215, 23, 151, 338, 87, 274, 402, 242, 55, 183, 370, 119, 306, 434, 226, 15, 143, 330, 79, 266, 394, 207, 47, 175, 362, 111, 298, 426, 234, 31, 159, 346, 95, 282, 410, 250, 63, 191, 378, 127, 314, 442]; + + return (unsafe{*PERM443.get_unchecked((index % 443) as usize)} as u32 * 196249 + + unsafe{*PERM443.get_unchecked(((index / 443) % 443) as usize)} as u32 * 443 + + unsafe{*PERM443.get_unchecked(((index / 196249) % 443) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (86938307u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton449(index: u32) -> f32 { - const PERM449: [u16; 449] = [0, 128, 321, 192, 64, 257, 385, 32, 160, 353, 225, 96, 289, 417, - 16, 144, 337, 208, 80, 273, 401, 48, 176, 369, 241, 112, 305, - 433, 8, 136, 329, 200, 72, 265, 393, 40, 168, 361, 233, 104, 297, - 425, 24, 152, 345, 216, 88, 281, 409, 56, 184, 377, 249, 120, - 313, 441, 4, 132, 325, 196, 68, 261, 389, 36, 164, 357, 229, 100, - 293, 421, 20, 148, 341, 212, 84, 277, 405, 52, 180, 373, 245, - 116, 309, 437, 12, 140, 333, 204, 76, 269, 397, 44, 172, 365, - 237, 108, 301, 429, 28, 156, 349, 220, 92, 285, 413, 60, 188, - 381, 253, 124, 317, 445, 2, 130, 323, 194, 66, 259, 387, 34, 162, - 355, 227, 98, 291, 419, 18, 146, 339, 210, 82, 275, 403, 50, 178, - 371, 243, 114, 307, 435, 10, 138, 331, 202, 74, 267, 395, 42, - 170, 363, 235, 106, 299, 427, 26, 154, 347, 218, 90, 283, 411, - 58, 186, 379, 251, 122, 315, 443, 6, 134, 327, 198, 70, 263, 391, - 38, 166, 359, 231, 102, 295, 423, 22, 150, 343, 214, 86, 279, - 407, 54, 182, 375, 247, 118, 311, 439, 14, 142, 335, 206, 78, - 271, 399, 46, 174, 367, 239, 110, 303, 431, 30, 158, 351, 222, - 94, 287, 415, 62, 190, 383, 255, 126, 319, 447, 224, 1, 129, 322, - 193, 65, 258, 386, 33, 161, 354, 226, 97, 290, 418, 17, 145, 338, - 209, 81, 274, 402, 49, 177, 370, 242, 113, 306, 434, 9, 137, 330, - 201, 73, 266, 394, 41, 169, 362, 234, 105, 298, 426, 25, 153, - 346, 217, 89, 282, 410, 57, 185, 378, 250, 121, 314, 442, 5, 133, - 326, 197, 69, 262, 390, 37, 165, 358, 230, 101, 294, 422, 21, - 149, 342, 213, 85, 278, 406, 53, 181, 374, 246, 117, 310, 438, - 13, 141, 334, 205, 77, 270, 398, 45, 173, 366, 238, 109, 302, - 430, 29, 157, 350, 221, 93, 286, 414, 61, 189, 382, 254, 125, - 318, 446, 3, 131, 324, 195, 67, 260, 388, 35, 163, 356, 228, 99, - 292, 420, 19, 147, 340, 211, 83, 276, 404, 51, 179, 372, 244, - 115, 308, 436, 11, 139, 332, 203, 75, 268, 396, 43, 171, 364, - 236, 107, 300, 428, 27, 155, 348, 219, 91, 284, 412, 59, 187, - 380, 252, 123, 316, 444, 7, 135, 328, 199, 71, 264, 392, 39, 167, - 360, 232, 103, 296, 424, 23, 151, 344, 215, 87, 280, 408, 55, - 183, 376, 248, 119, 312, 440, 15, 143, 336, 207, 79, 272, 400, - 47, 175, 368, 240, 111, 304, 432, 31, 159, 352, 223, 95, 288, - 416, 63, 191, 384, 256, 127, 320, 448]; - - return (unsafe { *PERM449.get_unchecked((index % 449) as usize) } as u32 * 201601 + - unsafe { *PERM449.get_unchecked(((index / 449) % 449) as usize) } as u32 * 449 + - unsafe { - *PERM449.get_unchecked(((index / 201601) % 449) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (90518849u32 as f32)); // Results in [0,1). + const PERM449: [u16; 449] = [0, 128, 321, 192, 64, 257, 385, 32, 160, 353, 225, 96, 289, 417, 16, 144, 337, 208, 80, 273, 401, 48, 176, 369, 241, 112, 305, 433, 8, 136, 329, 200, 72, 265, 393, 40, 168, 361, 233, 104, 297, 425, 24, 152, 345, 216, 88, 281, 409, 56, 184, 377, 249, 120, 313, 441, 4, 132, 325, 196, 68, 261, 389, 36, 164, 357, 229, 100, 293, 421, 20, 148, 341, 212, 84, 277, 405, 52, 180, 373, 245, 116, 309, 437, 12, 140, 333, 204, 76, 269, 397, 44, 172, 365, 237, 108, 301, 429, 28, 156, 349, 220, 92, 285, 413, 60, 188, 381, 253, 124, 317, 445, 2, 130, 323, 194, 66, 259, 387, 34, 162, 355, 227, 98, 291, 419, 18, 146, 339, 210, 82, 275, 403, 50, 178, 371, 243, 114, 307, 435, 10, 138, 331, 202, 74, 267, 395, 42, 170, 363, 235, 106, 299, 427, 26, 154, 347, 218, 90, 283, 411, 58, 186, 379, 251, 122, 315, 443, 6, 134, 327, 198, 70, 263, 391, 38, 166, 359, 231, 102, 295, 423, 22, 150, 343, 214, 86, 279, 407, 54, 182, 375, 247, 118, 311, 439, 14, 142, 335, 206, 78, 271, 399, 46, 174, 367, 239, 110, 303, 431, 30, 158, 351, 222, 94, 287, 415, 62, 190, 383, 255, 126, 319, 447, 224, 1, 129, 322, 193, 65, 258, 386, 33, 161, 354, 226, 97, 290, 418, 17, 145, 338, 209, 81, 274, 402, 49, 177, 370, 242, 113, 306, 434, 9, 137, 330, 201, 73, 266, 394, 41, 169, 362, 234, 105, 298, 426, 25, 153, 346, 217, 89, 282, 410, 57, 185, 378, 250, 121, 314, 442, 5, 133, 326, 197, 69, 262, 390, 37, 165, 358, 230, 101, 294, 422, 21, 149, 342, 213, 85, 278, 406, 53, 181, 374, 246, 117, 310, 438, 13, 141, 334, 205, 77, 270, 398, 45, 173, 366, 238, 109, 302, 430, 29, 157, 350, 221, 93, 286, 414, 61, 189, 382, 254, 125, 318, 446, 3, 131, 324, 195, 67, 260, 388, 35, 163, 356, 228, 99, 292, 420, 19, 147, 340, 211, 83, 276, 404, 51, 179, 372, 244, 115, 308, 436, 11, 139, 332, 203, 75, 268, 396, 43, 171, 364, 236, 107, 300, 428, 27, 155, 348, 219, 91, 284, 412, 59, 187, 380, 252, 123, 316, 444, 7, 135, 328, 199, 71, 264, 392, 39, 167, 360, 232, 103, 296, 424, 23, 151, 344, 215, 87, 280, 408, 55, 183, 376, 248, 119, 312, 440, 15, 143, 336, 207, 79, 272, 400, 47, 175, 368, 240, 111, 304, 432, 31, 159, 352, 223, 95, 288, 416, 63, 191, 384, 256, 127, 320, 448]; + + return (unsafe{*PERM449.get_unchecked((index % 449) as usize)} as u32 * 201601 + + unsafe{*PERM449.get_unchecked(((index / 449) % 449) as usize)} as u32 * 449 + + unsafe{*PERM449.get_unchecked(((index / 201601) % 449) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (90518849u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton457(index: u32) -> f32 { - const PERM457: [u16; 457] = [0, 128, 329, 192, 64, 265, 393, 32, 160, 361, 233, 96, 297, 425, - 16, 144, 345, 208, 80, 281, 409, 48, 176, 377, 249, 112, 313, - 441, 224, 8, 136, 337, 200, 72, 273, 401, 40, 168, 369, 241, 104, - 305, 433, 24, 152, 353, 216, 88, 289, 417, 56, 184, 385, 257, - 120, 321, 449, 4, 132, 333, 196, 68, 269, 397, 36, 164, 365, 237, - 100, 301, 429, 20, 148, 349, 212, 84, 285, 413, 52, 180, 381, - 253, 116, 317, 445, 229, 12, 140, 341, 204, 76, 277, 405, 44, - 172, 373, 245, 108, 309, 437, 28, 156, 357, 220, 92, 293, 421, - 60, 188, 389, 261, 124, 325, 453, 2, 130, 331, 194, 66, 267, 395, - 34, 162, 363, 235, 98, 299, 427, 18, 146, 347, 210, 82, 283, 411, - 50, 178, 379, 251, 114, 315, 443, 226, 10, 138, 339, 202, 74, - 275, 403, 42, 170, 371, 243, 106, 307, 435, 26, 154, 355, 218, - 90, 291, 419, 58, 186, 387, 259, 122, 323, 451, 6, 134, 335, 198, - 70, 271, 399, 38, 166, 367, 239, 102, 303, 431, 22, 150, 351, - 214, 86, 287, 415, 54, 182, 383, 255, 118, 319, 447, 231, 14, - 142, 343, 206, 78, 279, 407, 46, 174, 375, 247, 110, 311, 439, - 30, 158, 359, 222, 94, 295, 423, 62, 190, 391, 263, 126, 327, - 455, 228, 1, 129, 330, 193, 65, 266, 394, 33, 161, 362, 234, 97, - 298, 426, 17, 145, 346, 209, 81, 282, 410, 49, 177, 378, 250, - 113, 314, 442, 225, 9, 137, 338, 201, 73, 274, 402, 41, 169, 370, - 242, 105, 306, 434, 25, 153, 354, 217, 89, 290, 418, 57, 185, - 386, 258, 121, 322, 450, 5, 133, 334, 197, 69, 270, 398, 37, 165, - 366, 238, 101, 302, 430, 21, 149, 350, 213, 85, 286, 414, 53, - 181, 382, 254, 117, 318, 446, 230, 13, 141, 342, 205, 77, 278, - 406, 45, 173, 374, 246, 109, 310, 438, 29, 157, 358, 221, 93, - 294, 422, 61, 189, 390, 262, 125, 326, 454, 3, 131, 332, 195, 67, - 268, 396, 35, 163, 364, 236, 99, 300, 428, 19, 147, 348, 211, 83, - 284, 412, 51, 179, 380, 252, 115, 316, 444, 227, 11, 139, 340, - 203, 75, 276, 404, 43, 171, 372, 244, 107, 308, 436, 27, 155, - 356, 219, 91, 292, 420, 59, 187, 388, 260, 123, 324, 452, 7, 135, - 336, 199, 71, 272, 400, 39, 167, 368, 240, 103, 304, 432, 23, - 151, 352, 215, 87, 288, 416, 55, 183, 384, 256, 119, 320, 448, - 232, 15, 143, 344, 207, 79, 280, 408, 47, 175, 376, 248, 111, - 312, 440, 31, 159, 360, 223, 95, 296, 424, 63, 191, 392, 264, - 127, 328, 456]; - - return (unsafe { *PERM457.get_unchecked((index % 457) as usize) } as u32 * 208849 + - unsafe { *PERM457.get_unchecked(((index / 457) % 457) as usize) } as u32 * 457 + - unsafe { - *PERM457.get_unchecked(((index / 208849) % 457) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (95443993u32 as f32)); // Results in [0,1). + const PERM457: [u16; 457] = [0, 128, 329, 192, 64, 265, 393, 32, 160, 361, 233, 96, 297, 425, 16, 144, 345, 208, 80, 281, 409, 48, 176, 377, 249, 112, 313, 441, 224, 8, 136, 337, 200, 72, 273, 401, 40, 168, 369, 241, 104, 305, 433, 24, 152, 353, 216, 88, 289, 417, 56, 184, 385, 257, 120, 321, 449, 4, 132, 333, 196, 68, 269, 397, 36, 164, 365, 237, 100, 301, 429, 20, 148, 349, 212, 84, 285, 413, 52, 180, 381, 253, 116, 317, 445, 229, 12, 140, 341, 204, 76, 277, 405, 44, 172, 373, 245, 108, 309, 437, 28, 156, 357, 220, 92, 293, 421, 60, 188, 389, 261, 124, 325, 453, 2, 130, 331, 194, 66, 267, 395, 34, 162, 363, 235, 98, 299, 427, 18, 146, 347, 210, 82, 283, 411, 50, 178, 379, 251, 114, 315, 443, 226, 10, 138, 339, 202, 74, 275, 403, 42, 170, 371, 243, 106, 307, 435, 26, 154, 355, 218, 90, 291, 419, 58, 186, 387, 259, 122, 323, 451, 6, 134, 335, 198, 70, 271, 399, 38, 166, 367, 239, 102, 303, 431, 22, 150, 351, 214, 86, 287, 415, 54, 182, 383, 255, 118, 319, 447, 231, 14, 142, 343, 206, 78, 279, 407, 46, 174, 375, 247, 110, 311, 439, 30, 158, 359, 222, 94, 295, 423, 62, 190, 391, 263, 126, 327, 455, 228, 1, 129, 330, 193, 65, 266, 394, 33, 161, 362, 234, 97, 298, 426, 17, 145, 346, 209, 81, 282, 410, 49, 177, 378, 250, 113, 314, 442, 225, 9, 137, 338, 201, 73, 274, 402, 41, 169, 370, 242, 105, 306, 434, 25, 153, 354, 217, 89, 290, 418, 57, 185, 386, 258, 121, 322, 450, 5, 133, 334, 197, 69, 270, 398, 37, 165, 366, 238, 101, 302, 430, 21, 149, 350, 213, 85, 286, 414, 53, 181, 382, 254, 117, 318, 446, 230, 13, 141, 342, 205, 77, 278, 406, 45, 173, 374, 246, 109, 310, 438, 29, 157, 358, 221, 93, 294, 422, 61, 189, 390, 262, 125, 326, 454, 3, 131, 332, 195, 67, 268, 396, 35, 163, 364, 236, 99, 300, 428, 19, 147, 348, 211, 83, 284, 412, 51, 179, 380, 252, 115, 316, 444, 227, 11, 139, 340, 203, 75, 276, 404, 43, 171, 372, 244, 107, 308, 436, 27, 155, 356, 219, 91, 292, 420, 59, 187, 388, 260, 123, 324, 452, 7, 135, 336, 199, 71, 272, 400, 39, 167, 368, 240, 103, 304, 432, 23, 151, 352, 215, 87, 288, 416, 55, 183, 384, 256, 119, 320, 448, 232, 15, 143, 344, 207, 79, 280, 408, 47, 175, 376, 248, 111, 312, 440, 31, 159, 360, 223, 95, 296, 424, 63, 191, 392, 264, 127, 328, 456]; + + return (unsafe{*PERM457.get_unchecked((index % 457) as usize)} as u32 * 208849 + + unsafe{*PERM457.get_unchecked(((index / 457) % 457) as usize)} as u32 * 457 + + unsafe{*PERM457.get_unchecked(((index / 208849) % 457) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (95443993u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton461(index: u32) -> f32 { - const PERM461: [u16; 461] = [0, 128, 333, 192, 64, 269, 397, 32, 160, 365, 237, 96, 301, 429, - 16, 144, 349, 208, 80, 285, 413, 48, 176, 381, 253, 112, 317, - 445, 224, 8, 136, 341, 200, 72, 277, 405, 40, 168, 373, 245, 104, - 309, 437, 24, 152, 357, 216, 88, 293, 421, 56, 184, 389, 261, - 120, 325, 453, 228, 4, 132, 337, 196, 68, 273, 401, 36, 164, 369, - 241, 100, 305, 433, 20, 148, 353, 212, 84, 289, 417, 52, 180, - 385, 257, 116, 321, 449, 233, 12, 140, 345, 204, 76, 281, 409, - 44, 172, 377, 249, 108, 313, 441, 28, 156, 361, 220, 92, 297, - 425, 60, 188, 393, 265, 124, 329, 457, 2, 130, 335, 194, 66, 271, - 399, 34, 162, 367, 239, 98, 303, 431, 18, 146, 351, 210, 82, 287, - 415, 50, 178, 383, 255, 114, 319, 447, 226, 10, 138, 343, 202, - 74, 279, 407, 42, 170, 375, 247, 106, 311, 439, 26, 154, 359, - 218, 90, 295, 423, 58, 186, 391, 263, 122, 327, 455, 231, 6, 134, - 339, 198, 70, 275, 403, 38, 166, 371, 243, 102, 307, 435, 22, - 150, 355, 214, 86, 291, 419, 54, 182, 387, 259, 118, 323, 451, - 235, 14, 142, 347, 206, 78, 283, 411, 46, 174, 379, 251, 110, - 315, 443, 30, 158, 363, 222, 94, 299, 427, 62, 190, 395, 267, - 126, 331, 459, 230, 1, 129, 334, 193, 65, 270, 398, 33, 161, 366, - 238, 97, 302, 430, 17, 145, 350, 209, 81, 286, 414, 49, 177, 382, - 254, 113, 318, 446, 225, 9, 137, 342, 201, 73, 278, 406, 41, 169, - 374, 246, 105, 310, 438, 25, 153, 358, 217, 89, 294, 422, 57, - 185, 390, 262, 121, 326, 454, 229, 5, 133, 338, 197, 69, 274, - 402, 37, 165, 370, 242, 101, 306, 434, 21, 149, 354, 213, 85, - 290, 418, 53, 181, 386, 258, 117, 322, 450, 234, 13, 141, 346, - 205, 77, 282, 410, 45, 173, 378, 250, 109, 314, 442, 29, 157, - 362, 221, 93, 298, 426, 61, 189, 394, 266, 125, 330, 458, 3, 131, - 336, 195, 67, 272, 400, 35, 163, 368, 240, 99, 304, 432, 19, 147, - 352, 211, 83, 288, 416, 51, 179, 384, 256, 115, 320, 448, 227, - 11, 139, 344, 203, 75, 280, 408, 43, 171, 376, 248, 107, 312, - 440, 27, 155, 360, 219, 91, 296, 424, 59, 187, 392, 264, 123, - 328, 456, 232, 7, 135, 340, 199, 71, 276, 404, 39, 167, 372, 244, - 103, 308, 436, 23, 151, 356, 215, 87, 292, 420, 55, 183, 388, - 260, 119, 324, 452, 236, 15, 143, 348, 207, 79, 284, 412, 47, - 175, 380, 252, 111, 316, 444, 31, 159, 364, 223, 95, 300, 428, - 63, 191, 396, 268, 127, 332, 460]; - - return (unsafe { *PERM461.get_unchecked((index % 461) as usize) } as u32 * 212521 + - unsafe { *PERM461.get_unchecked(((index / 461) % 461) as usize) } as u32 * 461 + - unsafe { - *PERM461.get_unchecked(((index / 212521) % 461) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (97972181u32 as f32)); // Results in [0,1). + const PERM461: [u16; 461] = [0, 128, 333, 192, 64, 269, 397, 32, 160, 365, 237, 96, 301, 429, 16, 144, 349, 208, 80, 285, 413, 48, 176, 381, 253, 112, 317, 445, 224, 8, 136, 341, 200, 72, 277, 405, 40, 168, 373, 245, 104, 309, 437, 24, 152, 357, 216, 88, 293, 421, 56, 184, 389, 261, 120, 325, 453, 228, 4, 132, 337, 196, 68, 273, 401, 36, 164, 369, 241, 100, 305, 433, 20, 148, 353, 212, 84, 289, 417, 52, 180, 385, 257, 116, 321, 449, 233, 12, 140, 345, 204, 76, 281, 409, 44, 172, 377, 249, 108, 313, 441, 28, 156, 361, 220, 92, 297, 425, 60, 188, 393, 265, 124, 329, 457, 2, 130, 335, 194, 66, 271, 399, 34, 162, 367, 239, 98, 303, 431, 18, 146, 351, 210, 82, 287, 415, 50, 178, 383, 255, 114, 319, 447, 226, 10, 138, 343, 202, 74, 279, 407, 42, 170, 375, 247, 106, 311, 439, 26, 154, 359, 218, 90, 295, 423, 58, 186, 391, 263, 122, 327, 455, 231, 6, 134, 339, 198, 70, 275, 403, 38, 166, 371, 243, 102, 307, 435, 22, 150, 355, 214, 86, 291, 419, 54, 182, 387, 259, 118, 323, 451, 235, 14, 142, 347, 206, 78, 283, 411, 46, 174, 379, 251, 110, 315, 443, 30, 158, 363, 222, 94, 299, 427, 62, 190, 395, 267, 126, 331, 459, 230, 1, 129, 334, 193, 65, 270, 398, 33, 161, 366, 238, 97, 302, 430, 17, 145, 350, 209, 81, 286, 414, 49, 177, 382, 254, 113, 318, 446, 225, 9, 137, 342, 201, 73, 278, 406, 41, 169, 374, 246, 105, 310, 438, 25, 153, 358, 217, 89, 294, 422, 57, 185, 390, 262, 121, 326, 454, 229, 5, 133, 338, 197, 69, 274, 402, 37, 165, 370, 242, 101, 306, 434, 21, 149, 354, 213, 85, 290, 418, 53, 181, 386, 258, 117, 322, 450, 234, 13, 141, 346, 205, 77, 282, 410, 45, 173, 378, 250, 109, 314, 442, 29, 157, 362, 221, 93, 298, 426, 61, 189, 394, 266, 125, 330, 458, 3, 131, 336, 195, 67, 272, 400, 35, 163, 368, 240, 99, 304, 432, 19, 147, 352, 211, 83, 288, 416, 51, 179, 384, 256, 115, 320, 448, 227, 11, 139, 344, 203, 75, 280, 408, 43, 171, 376, 248, 107, 312, 440, 27, 155, 360, 219, 91, 296, 424, 59, 187, 392, 264, 123, 328, 456, 232, 7, 135, 340, 199, 71, 276, 404, 39, 167, 372, 244, 103, 308, 436, 23, 151, 356, 215, 87, 292, 420, 55, 183, 388, 260, 119, 324, 452, 236, 15, 143, 348, 207, 79, 284, 412, 47, 175, 380, 252, 111, 316, 444, 31, 159, 364, 223, 95, 300, 428, 63, 191, 396, 268, 127, 332, 460]; + + return (unsafe{*PERM461.get_unchecked((index % 461) as usize)} as u32 * 212521 + + unsafe{*PERM461.get_unchecked(((index / 461) % 461) as usize)} as u32 * 461 + + unsafe{*PERM461.get_unchecked(((index / 212521) % 461) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (97972181u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton463(index: u32) -> f32 { - const PERM463: [u16; 463] = [0, 128, 335, 192, 64, 271, 399, 32, 160, 367, 239, 96, 303, 431, - 16, 144, 351, 208, 80, 287, 415, 48, 176, 383, 255, 112, 319, - 447, 224, 8, 136, 343, 200, 72, 279, 407, 40, 168, 375, 247, 104, - 311, 439, 24, 152, 359, 216, 88, 295, 423, 56, 184, 391, 263, - 120, 327, 455, 228, 4, 132, 339, 196, 68, 275, 403, 36, 164, 371, - 243, 100, 307, 435, 20, 148, 355, 212, 84, 291, 419, 52, 180, - 387, 259, 116, 323, 451, 235, 12, 140, 347, 204, 76, 283, 411, - 44, 172, 379, 251, 108, 315, 443, 28, 156, 363, 220, 92, 299, - 427, 60, 188, 395, 267, 124, 331, 459, 230, 2, 130, 337, 194, 66, - 273, 401, 34, 162, 369, 241, 98, 305, 433, 18, 146, 353, 210, 82, - 289, 417, 50, 178, 385, 257, 114, 321, 449, 226, 10, 138, 345, - 202, 74, 281, 409, 42, 170, 377, 249, 106, 313, 441, 26, 154, - 361, 218, 90, 297, 425, 58, 186, 393, 265, 122, 329, 457, 233, 6, - 134, 341, 198, 70, 277, 405, 38, 166, 373, 245, 102, 309, 437, - 22, 150, 357, 214, 86, 293, 421, 54, 182, 389, 261, 118, 325, - 453, 237, 14, 142, 349, 206, 78, 285, 413, 46, 174, 381, 253, - 110, 317, 445, 30, 158, 365, 222, 94, 301, 429, 62, 190, 397, - 269, 126, 333, 461, 231, 1, 129, 336, 193, 65, 272, 400, 33, 161, - 368, 240, 97, 304, 432, 17, 145, 352, 209, 81, 288, 416, 49, 177, - 384, 256, 113, 320, 448, 225, 9, 137, 344, 201, 73, 280, 408, 41, - 169, 376, 248, 105, 312, 440, 25, 153, 360, 217, 89, 296, 424, - 57, 185, 392, 264, 121, 328, 456, 229, 5, 133, 340, 197, 69, 276, - 404, 37, 165, 372, 244, 101, 308, 436, 21, 149, 356, 213, 85, - 292, 420, 53, 181, 388, 260, 117, 324, 452, 236, 13, 141, 348, - 205, 77, 284, 412, 45, 173, 380, 252, 109, 316, 444, 29, 157, - 364, 221, 93, 300, 428, 61, 189, 396, 268, 125, 332, 460, 232, 3, - 131, 338, 195, 67, 274, 402, 35, 163, 370, 242, 99, 306, 434, 19, - 147, 354, 211, 83, 290, 418, 51, 179, 386, 258, 115, 322, 450, - 227, 11, 139, 346, 203, 75, 282, 410, 43, 171, 378, 250, 107, - 314, 442, 27, 155, 362, 219, 91, 298, 426, 59, 187, 394, 266, - 123, 330, 458, 234, 7, 135, 342, 199, 71, 278, 406, 39, 167, 374, - 246, 103, 310, 438, 23, 151, 358, 215, 87, 294, 422, 55, 183, - 390, 262, 119, 326, 454, 238, 15, 143, 350, 207, 79, 286, 414, - 47, 175, 382, 254, 111, 318, 446, 31, 159, 366, 223, 95, 302, - 430, 63, 191, 398, 270, 127, 334, 462]; - - return (unsafe { *PERM463.get_unchecked((index % 463) as usize) } as u32 * 214369 + - unsafe { *PERM463.get_unchecked(((index / 463) % 463) as usize) } as u32 * 463 + - unsafe { - *PERM463.get_unchecked(((index / 214369) % 463) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (99252847u32 as f32)); // Results in [0,1). + const PERM463: [u16; 463] = [0, 128, 335, 192, 64, 271, 399, 32, 160, 367, 239, 96, 303, 431, 16, 144, 351, 208, 80, 287, 415, 48, 176, 383, 255, 112, 319, 447, 224, 8, 136, 343, 200, 72, 279, 407, 40, 168, 375, 247, 104, 311, 439, 24, 152, 359, 216, 88, 295, 423, 56, 184, 391, 263, 120, 327, 455, 228, 4, 132, 339, 196, 68, 275, 403, 36, 164, 371, 243, 100, 307, 435, 20, 148, 355, 212, 84, 291, 419, 52, 180, 387, 259, 116, 323, 451, 235, 12, 140, 347, 204, 76, 283, 411, 44, 172, 379, 251, 108, 315, 443, 28, 156, 363, 220, 92, 299, 427, 60, 188, 395, 267, 124, 331, 459, 230, 2, 130, 337, 194, 66, 273, 401, 34, 162, 369, 241, 98, 305, 433, 18, 146, 353, 210, 82, 289, 417, 50, 178, 385, 257, 114, 321, 449, 226, 10, 138, 345, 202, 74, 281, 409, 42, 170, 377, 249, 106, 313, 441, 26, 154, 361, 218, 90, 297, 425, 58, 186, 393, 265, 122, 329, 457, 233, 6, 134, 341, 198, 70, 277, 405, 38, 166, 373, 245, 102, 309, 437, 22, 150, 357, 214, 86, 293, 421, 54, 182, 389, 261, 118, 325, 453, 237, 14, 142, 349, 206, 78, 285, 413, 46, 174, 381, 253, 110, 317, 445, 30, 158, 365, 222, 94, 301, 429, 62, 190, 397, 269, 126, 333, 461, 231, 1, 129, 336, 193, 65, 272, 400, 33, 161, 368, 240, 97, 304, 432, 17, 145, 352, 209, 81, 288, 416, 49, 177, 384, 256, 113, 320, 448, 225, 9, 137, 344, 201, 73, 280, 408, 41, 169, 376, 248, 105, 312, 440, 25, 153, 360, 217, 89, 296, 424, 57, 185, 392, 264, 121, 328, 456, 229, 5, 133, 340, 197, 69, 276, 404, 37, 165, 372, 244, 101, 308, 436, 21, 149, 356, 213, 85, 292, 420, 53, 181, 388, 260, 117, 324, 452, 236, 13, 141, 348, 205, 77, 284, 412, 45, 173, 380, 252, 109, 316, 444, 29, 157, 364, 221, 93, 300, 428, 61, 189, 396, 268, 125, 332, 460, 232, 3, 131, 338, 195, 67, 274, 402, 35, 163, 370, 242, 99, 306, 434, 19, 147, 354, 211, 83, 290, 418, 51, 179, 386, 258, 115, 322, 450, 227, 11, 139, 346, 203, 75, 282, 410, 43, 171, 378, 250, 107, 314, 442, 27, 155, 362, 219, 91, 298, 426, 59, 187, 394, 266, 123, 330, 458, 234, 7, 135, 342, 199, 71, 278, 406, 39, 167, 374, 246, 103, 310, 438, 23, 151, 358, 215, 87, 294, 422, 55, 183, 390, 262, 119, 326, 454, 238, 15, 143, 350, 207, 79, 286, 414, 47, 175, 382, 254, 111, 318, 446, 31, 159, 366, 223, 95, 302, 430, 63, 191, 398, 270, 127, 334, 462]; + + return (unsafe{*PERM463.get_unchecked((index % 463) as usize)} as u32 * 214369 + + unsafe{*PERM463.get_unchecked(((index / 463) % 463) as usize)} as u32 * 463 + + unsafe{*PERM463.get_unchecked(((index / 214369) % 463) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (99252847u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton467(index: u32) -> f32 { - const PERM467: [u16; 467] = [0, 128, 339, 192, 64, 275, 403, 32, 160, 371, 243, 96, 307, 435, - 224, 16, 144, 355, 208, 80, 291, 419, 48, 176, 387, 259, 112, - 323, 451, 8, 136, 347, 200, 72, 283, 411, 40, 168, 379, 251, 104, - 315, 443, 235, 24, 152, 363, 216, 88, 299, 427, 56, 184, 395, - 267, 120, 331, 459, 4, 132, 343, 196, 68, 279, 407, 36, 164, 375, - 247, 100, 311, 439, 228, 20, 148, 359, 212, 84, 295, 423, 52, - 180, 391, 263, 116, 327, 455, 12, 140, 351, 204, 76, 287, 415, - 44, 172, 383, 255, 108, 319, 447, 239, 28, 156, 367, 220, 92, - 303, 431, 60, 188, 399, 271, 124, 335, 463, 232, 2, 130, 341, - 194, 66, 277, 405, 34, 162, 373, 245, 98, 309, 437, 226, 18, 146, - 357, 210, 82, 293, 421, 50, 178, 389, 261, 114, 325, 453, 10, - 138, 349, 202, 74, 285, 413, 42, 170, 381, 253, 106, 317, 445, - 237, 26, 154, 365, 218, 90, 301, 429, 58, 186, 397, 269, 122, - 333, 461, 6, 134, 345, 198, 70, 281, 409, 38, 166, 377, 249, 102, - 313, 441, 230, 22, 150, 361, 214, 86, 297, 425, 54, 182, 393, - 265, 118, 329, 457, 14, 142, 353, 206, 78, 289, 417, 46, 174, - 385, 257, 110, 321, 449, 241, 30, 158, 369, 222, 94, 305, 433, - 62, 190, 401, 273, 126, 337, 465, 233, 1, 129, 340, 193, 65, 276, - 404, 33, 161, 372, 244, 97, 308, 436, 225, 17, 145, 356, 209, 81, - 292, 420, 49, 177, 388, 260, 113, 324, 452, 9, 137, 348, 201, 73, - 284, 412, 41, 169, 380, 252, 105, 316, 444, 236, 25, 153, 364, - 217, 89, 300, 428, 57, 185, 396, 268, 121, 332, 460, 5, 133, 344, - 197, 69, 280, 408, 37, 165, 376, 248, 101, 312, 440, 229, 21, - 149, 360, 213, 85, 296, 424, 53, 181, 392, 264, 117, 328, 456, - 13, 141, 352, 205, 77, 288, 416, 45, 173, 384, 256, 109, 320, - 448, 240, 29, 157, 368, 221, 93, 304, 432, 61, 189, 400, 272, - 125, 336, 464, 234, 3, 131, 342, 195, 67, 278, 406, 35, 163, 374, - 246, 99, 310, 438, 227, 19, 147, 358, 211, 83, 294, 422, 51, 179, - 390, 262, 115, 326, 454, 11, 139, 350, 203, 75, 286, 414, 43, - 171, 382, 254, 107, 318, 446, 238, 27, 155, 366, 219, 91, 302, - 430, 59, 187, 398, 270, 123, 334, 462, 7, 135, 346, 199, 71, 282, - 410, 39, 167, 378, 250, 103, 314, 442, 231, 23, 151, 362, 215, - 87, 298, 426, 55, 183, 394, 266, 119, 330, 458, 15, 143, 354, - 207, 79, 290, 418, 47, 175, 386, 258, 111, 322, 450, 242, 31, - 159, 370, 223, 95, 306, 434, 63, 191, 402, 274, 127, 338, 466]; - - return (unsafe { *PERM467.get_unchecked((index % 467) as usize) } as u32 * 218089 + - unsafe { *PERM467.get_unchecked(((index / 467) % 467) as usize) } as u32 * 467 + - unsafe { - *PERM467.get_unchecked(((index / 218089) % 467) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (101847563u32 as f32)); // Results in [0,1). + const PERM467: [u16; 467] = [0, 128, 339, 192, 64, 275, 403, 32, 160, 371, 243, 96, 307, 435, 224, 16, 144, 355, 208, 80, 291, 419, 48, 176, 387, 259, 112, 323, 451, 8, 136, 347, 200, 72, 283, 411, 40, 168, 379, 251, 104, 315, 443, 235, 24, 152, 363, 216, 88, 299, 427, 56, 184, 395, 267, 120, 331, 459, 4, 132, 343, 196, 68, 279, 407, 36, 164, 375, 247, 100, 311, 439, 228, 20, 148, 359, 212, 84, 295, 423, 52, 180, 391, 263, 116, 327, 455, 12, 140, 351, 204, 76, 287, 415, 44, 172, 383, 255, 108, 319, 447, 239, 28, 156, 367, 220, 92, 303, 431, 60, 188, 399, 271, 124, 335, 463, 232, 2, 130, 341, 194, 66, 277, 405, 34, 162, 373, 245, 98, 309, 437, 226, 18, 146, 357, 210, 82, 293, 421, 50, 178, 389, 261, 114, 325, 453, 10, 138, 349, 202, 74, 285, 413, 42, 170, 381, 253, 106, 317, 445, 237, 26, 154, 365, 218, 90, 301, 429, 58, 186, 397, 269, 122, 333, 461, 6, 134, 345, 198, 70, 281, 409, 38, 166, 377, 249, 102, 313, 441, 230, 22, 150, 361, 214, 86, 297, 425, 54, 182, 393, 265, 118, 329, 457, 14, 142, 353, 206, 78, 289, 417, 46, 174, 385, 257, 110, 321, 449, 241, 30, 158, 369, 222, 94, 305, 433, 62, 190, 401, 273, 126, 337, 465, 233, 1, 129, 340, 193, 65, 276, 404, 33, 161, 372, 244, 97, 308, 436, 225, 17, 145, 356, 209, 81, 292, 420, 49, 177, 388, 260, 113, 324, 452, 9, 137, 348, 201, 73, 284, 412, 41, 169, 380, 252, 105, 316, 444, 236, 25, 153, 364, 217, 89, 300, 428, 57, 185, 396, 268, 121, 332, 460, 5, 133, 344, 197, 69, 280, 408, 37, 165, 376, 248, 101, 312, 440, 229, 21, 149, 360, 213, 85, 296, 424, 53, 181, 392, 264, 117, 328, 456, 13, 141, 352, 205, 77, 288, 416, 45, 173, 384, 256, 109, 320, 448, 240, 29, 157, 368, 221, 93, 304, 432, 61, 189, 400, 272, 125, 336, 464, 234, 3, 131, 342, 195, 67, 278, 406, 35, 163, 374, 246, 99, 310, 438, 227, 19, 147, 358, 211, 83, 294, 422, 51, 179, 390, 262, 115, 326, 454, 11, 139, 350, 203, 75, 286, 414, 43, 171, 382, 254, 107, 318, 446, 238, 27, 155, 366, 219, 91, 302, 430, 59, 187, 398, 270, 123, 334, 462, 7, 135, 346, 199, 71, 282, 410, 39, 167, 378, 250, 103, 314, 442, 231, 23, 151, 362, 215, 87, 298, 426, 55, 183, 394, 266, 119, 330, 458, 15, 143, 354, 207, 79, 290, 418, 47, 175, 386, 258, 111, 322, 450, 242, 31, 159, 370, 223, 95, 306, 434, 63, 191, 402, 274, 127, 338, 466]; + + return (unsafe{*PERM467.get_unchecked((index % 467) as usize)} as u32 * 218089 + + unsafe{*PERM467.get_unchecked(((index / 467) % 467) as usize)} as u32 * 467 + + unsafe{*PERM467.get_unchecked(((index / 218089) % 467) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (101847563u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton479(index: u32) -> f32 { - const PERM479: [u16; 479] = [0, 128, 351, 192, 64, 287, 415, 32, 160, 383, 255, 96, 319, 447, - 224, 16, 144, 367, 208, 80, 303, 431, 48, 176, 399, 271, 112, - 335, 463, 232, 8, 136, 359, 200, 72, 295, 423, 40, 168, 391, 263, - 104, 327, 455, 247, 24, 152, 375, 216, 88, 311, 439, 56, 184, - 407, 279, 120, 343, 471, 236, 4, 132, 355, 196, 68, 291, 419, 36, - 164, 387, 259, 100, 323, 451, 228, 20, 148, 371, 212, 84, 307, - 435, 52, 180, 403, 275, 116, 339, 467, 243, 12, 140, 363, 204, - 76, 299, 427, 44, 172, 395, 267, 108, 331, 459, 251, 28, 156, - 379, 220, 92, 315, 443, 60, 188, 411, 283, 124, 347, 475, 238, 2, - 130, 353, 194, 66, 289, 417, 34, 162, 385, 257, 98, 321, 449, - 226, 18, 146, 369, 210, 82, 305, 433, 50, 178, 401, 273, 114, - 337, 465, 234, 10, 138, 361, 202, 74, 297, 425, 42, 170, 393, - 265, 106, 329, 457, 249, 26, 154, 377, 218, 90, 313, 441, 58, - 186, 409, 281, 122, 345, 473, 241, 6, 134, 357, 198, 70, 293, - 421, 38, 166, 389, 261, 102, 325, 453, 230, 22, 150, 373, 214, - 86, 309, 437, 54, 182, 405, 277, 118, 341, 469, 245, 14, 142, - 365, 206, 78, 301, 429, 46, 174, 397, 269, 110, 333, 461, 253, - 30, 158, 381, 222, 94, 317, 445, 62, 190, 413, 285, 126, 349, - 477, 239, 1, 129, 352, 193, 65, 288, 416, 33, 161, 384, 256, 97, - 320, 448, 225, 17, 145, 368, 209, 81, 304, 432, 49, 177, 400, - 272, 113, 336, 464, 233, 9, 137, 360, 201, 73, 296, 424, 41, 169, - 392, 264, 105, 328, 456, 248, 25, 153, 376, 217, 89, 312, 440, - 57, 185, 408, 280, 121, 344, 472, 237, 5, 133, 356, 197, 69, 292, - 420, 37, 165, 388, 260, 101, 324, 452, 229, 21, 149, 372, 213, - 85, 308, 436, 53, 181, 404, 276, 117, 340, 468, 244, 13, 141, - 364, 205, 77, 300, 428, 45, 173, 396, 268, 109, 332, 460, 252, - 29, 157, 380, 221, 93, 316, 444, 61, 189, 412, 284, 125, 348, - 476, 240, 3, 131, 354, 195, 67, 290, 418, 35, 163, 386, 258, 99, - 322, 450, 227, 19, 147, 370, 211, 83, 306, 434, 51, 179, 402, - 274, 115, 338, 466, 235, 11, 139, 362, 203, 75, 298, 426, 43, - 171, 394, 266, 107, 330, 458, 250, 27, 155, 378, 219, 91, 314, - 442, 59, 187, 410, 282, 123, 346, 474, 242, 7, 135, 358, 199, 71, - 294, 422, 39, 167, 390, 262, 103, 326, 454, 231, 23, 151, 374, - 215, 87, 310, 438, 55, 183, 406, 278, 119, 342, 470, 246, 15, - 143, 366, 207, 79, 302, 430, 47, 175, 398, 270, 111, 334, 462, - 254, 31, 159, 382, 223, 95, 318, 446, 63, 191, 414, 286, 127, - 350, 478]; - - return (unsafe { *PERM479.get_unchecked((index % 479) as usize) } as u32 * 229441 + - unsafe { *PERM479.get_unchecked(((index / 479) % 479) as usize) } as u32 * 479 + - unsafe { - *PERM479.get_unchecked(((index / 229441) % 479) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (109902239u32 as f32)); // Results in [0,1). + const PERM479: [u16; 479] = [0, 128, 351, 192, 64, 287, 415, 32, 160, 383, 255, 96, 319, 447, 224, 16, 144, 367, 208, 80, 303, 431, 48, 176, 399, 271, 112, 335, 463, 232, 8, 136, 359, 200, 72, 295, 423, 40, 168, 391, 263, 104, 327, 455, 247, 24, 152, 375, 216, 88, 311, 439, 56, 184, 407, 279, 120, 343, 471, 236, 4, 132, 355, 196, 68, 291, 419, 36, 164, 387, 259, 100, 323, 451, 228, 20, 148, 371, 212, 84, 307, 435, 52, 180, 403, 275, 116, 339, 467, 243, 12, 140, 363, 204, 76, 299, 427, 44, 172, 395, 267, 108, 331, 459, 251, 28, 156, 379, 220, 92, 315, 443, 60, 188, 411, 283, 124, 347, 475, 238, 2, 130, 353, 194, 66, 289, 417, 34, 162, 385, 257, 98, 321, 449, 226, 18, 146, 369, 210, 82, 305, 433, 50, 178, 401, 273, 114, 337, 465, 234, 10, 138, 361, 202, 74, 297, 425, 42, 170, 393, 265, 106, 329, 457, 249, 26, 154, 377, 218, 90, 313, 441, 58, 186, 409, 281, 122, 345, 473, 241, 6, 134, 357, 198, 70, 293, 421, 38, 166, 389, 261, 102, 325, 453, 230, 22, 150, 373, 214, 86, 309, 437, 54, 182, 405, 277, 118, 341, 469, 245, 14, 142, 365, 206, 78, 301, 429, 46, 174, 397, 269, 110, 333, 461, 253, 30, 158, 381, 222, 94, 317, 445, 62, 190, 413, 285, 126, 349, 477, 239, 1, 129, 352, 193, 65, 288, 416, 33, 161, 384, 256, 97, 320, 448, 225, 17, 145, 368, 209, 81, 304, 432, 49, 177, 400, 272, 113, 336, 464, 233, 9, 137, 360, 201, 73, 296, 424, 41, 169, 392, 264, 105, 328, 456, 248, 25, 153, 376, 217, 89, 312, 440, 57, 185, 408, 280, 121, 344, 472, 237, 5, 133, 356, 197, 69, 292, 420, 37, 165, 388, 260, 101, 324, 452, 229, 21, 149, 372, 213, 85, 308, 436, 53, 181, 404, 276, 117, 340, 468, 244, 13, 141, 364, 205, 77, 300, 428, 45, 173, 396, 268, 109, 332, 460, 252, 29, 157, 380, 221, 93, 316, 444, 61, 189, 412, 284, 125, 348, 476, 240, 3, 131, 354, 195, 67, 290, 418, 35, 163, 386, 258, 99, 322, 450, 227, 19, 147, 370, 211, 83, 306, 434, 51, 179, 402, 274, 115, 338, 466, 235, 11, 139, 362, 203, 75, 298, 426, 43, 171, 394, 266, 107, 330, 458, 250, 27, 155, 378, 219, 91, 314, 442, 59, 187, 410, 282, 123, 346, 474, 242, 7, 135, 358, 199, 71, 294, 422, 39, 167, 390, 262, 103, 326, 454, 231, 23, 151, 374, 215, 87, 310, 438, 55, 183, 406, 278, 119, 342, 470, 246, 15, 143, 366, 207, 79, 302, 430, 47, 175, 398, 270, 111, 334, 462, 254, 31, 159, 382, 223, 95, 318, 446, 63, 191, 414, 286, 127, 350, 478]; + + return (unsafe{*PERM479.get_unchecked((index % 479) as usize)} as u32 * 229441 + + unsafe{*PERM479.get_unchecked(((index / 479) % 479) as usize)} as u32 * 479 + + unsafe{*PERM479.get_unchecked(((index / 229441) % 479) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (109902239u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton487(index: u32) -> f32 { - const PERM487: [u16; 487] = [0, 128, 359, 192, 64, 295, 423, 224, 32, 160, 391, 263, 96, 327, - 455, 16, 144, 375, 208, 80, 311, 439, 247, 48, 176, 407, 279, - 112, 343, 471, 8, 136, 367, 200, 72, 303, 431, 232, 40, 168, 399, - 271, 104, 335, 463, 24, 152, 383, 216, 88, 319, 447, 255, 56, - 184, 415, 287, 120, 351, 479, 240, 4, 132, 363, 196, 68, 299, - 427, 228, 36, 164, 395, 267, 100, 331, 459, 20, 148, 379, 212, - 84, 315, 443, 251, 52, 180, 411, 283, 116, 347, 475, 12, 140, - 371, 204, 76, 307, 435, 236, 44, 172, 403, 275, 108, 339, 467, - 28, 156, 387, 220, 92, 323, 451, 259, 60, 188, 419, 291, 124, - 355, 483, 242, 2, 130, 361, 194, 66, 297, 425, 226, 34, 162, 393, - 265, 98, 329, 457, 18, 146, 377, 210, 82, 313, 441, 249, 50, 178, - 409, 281, 114, 345, 473, 10, 138, 369, 202, 74, 305, 433, 234, - 42, 170, 401, 273, 106, 337, 465, 26, 154, 385, 218, 90, 321, - 449, 257, 58, 186, 417, 289, 122, 353, 481, 245, 6, 134, 365, - 198, 70, 301, 429, 230, 38, 166, 397, 269, 102, 333, 461, 22, - 150, 381, 214, 86, 317, 445, 253, 54, 182, 413, 285, 118, 349, - 477, 14, 142, 373, 206, 78, 309, 437, 238, 46, 174, 405, 277, - 110, 341, 469, 30, 158, 389, 222, 94, 325, 453, 261, 62, 190, - 421, 293, 126, 357, 485, 243, 1, 129, 360, 193, 65, 296, 424, - 225, 33, 161, 392, 264, 97, 328, 456, 17, 145, 376, 209, 81, 312, - 440, 248, 49, 177, 408, 280, 113, 344, 472, 9, 137, 368, 201, 73, - 304, 432, 233, 41, 169, 400, 272, 105, 336, 464, 25, 153, 384, - 217, 89, 320, 448, 256, 57, 185, 416, 288, 121, 352, 480, 241, 5, - 133, 364, 197, 69, 300, 428, 229, 37, 165, 396, 268, 101, 332, - 460, 21, 149, 380, 213, 85, 316, 444, 252, 53, 181, 412, 284, - 117, 348, 476, 13, 141, 372, 205, 77, 308, 436, 237, 45, 173, - 404, 276, 109, 340, 468, 29, 157, 388, 221, 93, 324, 452, 260, - 61, 189, 420, 292, 125, 356, 484, 244, 3, 131, 362, 195, 67, 298, - 426, 227, 35, 163, 394, 266, 99, 330, 458, 19, 147, 378, 211, 83, - 314, 442, 250, 51, 179, 410, 282, 115, 346, 474, 11, 139, 370, - 203, 75, 306, 434, 235, 43, 171, 402, 274, 107, 338, 466, 27, - 155, 386, 219, 91, 322, 450, 258, 59, 187, 418, 290, 123, 354, - 482, 246, 7, 135, 366, 199, 71, 302, 430, 231, 39, 167, 398, 270, - 103, 334, 462, 23, 151, 382, 215, 87, 318, 446, 254, 55, 183, - 414, 286, 119, 350, 478, 15, 143, 374, 207, 79, 310, 438, 239, - 47, 175, 406, 278, 111, 342, 470, 31, 159, 390, 223, 95, 326, - 454, 262, 63, 191, 422, 294, 127, 358, 486]; - - return (unsafe { *PERM487.get_unchecked((index % 487) as usize) } as u32 * 237169 + - unsafe { *PERM487.get_unchecked(((index / 487) % 487) as usize) } as u32 * 487 + - unsafe { - *PERM487.get_unchecked(((index / 237169) % 487) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (115501303u32 as f32)); // Results in [0,1). + const PERM487: [u16; 487] = [0, 128, 359, 192, 64, 295, 423, 224, 32, 160, 391, 263, 96, 327, 455, 16, 144, 375, 208, 80, 311, 439, 247, 48, 176, 407, 279, 112, 343, 471, 8, 136, 367, 200, 72, 303, 431, 232, 40, 168, 399, 271, 104, 335, 463, 24, 152, 383, 216, 88, 319, 447, 255, 56, 184, 415, 287, 120, 351, 479, 240, 4, 132, 363, 196, 68, 299, 427, 228, 36, 164, 395, 267, 100, 331, 459, 20, 148, 379, 212, 84, 315, 443, 251, 52, 180, 411, 283, 116, 347, 475, 12, 140, 371, 204, 76, 307, 435, 236, 44, 172, 403, 275, 108, 339, 467, 28, 156, 387, 220, 92, 323, 451, 259, 60, 188, 419, 291, 124, 355, 483, 242, 2, 130, 361, 194, 66, 297, 425, 226, 34, 162, 393, 265, 98, 329, 457, 18, 146, 377, 210, 82, 313, 441, 249, 50, 178, 409, 281, 114, 345, 473, 10, 138, 369, 202, 74, 305, 433, 234, 42, 170, 401, 273, 106, 337, 465, 26, 154, 385, 218, 90, 321, 449, 257, 58, 186, 417, 289, 122, 353, 481, 245, 6, 134, 365, 198, 70, 301, 429, 230, 38, 166, 397, 269, 102, 333, 461, 22, 150, 381, 214, 86, 317, 445, 253, 54, 182, 413, 285, 118, 349, 477, 14, 142, 373, 206, 78, 309, 437, 238, 46, 174, 405, 277, 110, 341, 469, 30, 158, 389, 222, 94, 325, 453, 261, 62, 190, 421, 293, 126, 357, 485, 243, 1, 129, 360, 193, 65, 296, 424, 225, 33, 161, 392, 264, 97, 328, 456, 17, 145, 376, 209, 81, 312, 440, 248, 49, 177, 408, 280, 113, 344, 472, 9, 137, 368, 201, 73, 304, 432, 233, 41, 169, 400, 272, 105, 336, 464, 25, 153, 384, 217, 89, 320, 448, 256, 57, 185, 416, 288, 121, 352, 480, 241, 5, 133, 364, 197, 69, 300, 428, 229, 37, 165, 396, 268, 101, 332, 460, 21, 149, 380, 213, 85, 316, 444, 252, 53, 181, 412, 284, 117, 348, 476, 13, 141, 372, 205, 77, 308, 436, 237, 45, 173, 404, 276, 109, 340, 468, 29, 157, 388, 221, 93, 324, 452, 260, 61, 189, 420, 292, 125, 356, 484, 244, 3, 131, 362, 195, 67, 298, 426, 227, 35, 163, 394, 266, 99, 330, 458, 19, 147, 378, 211, 83, 314, 442, 250, 51, 179, 410, 282, 115, 346, 474, 11, 139, 370, 203, 75, 306, 434, 235, 43, 171, 402, 274, 107, 338, 466, 27, 155, 386, 219, 91, 322, 450, 258, 59, 187, 418, 290, 123, 354, 482, 246, 7, 135, 366, 199, 71, 302, 430, 231, 39, 167, 398, 270, 103, 334, 462, 23, 151, 382, 215, 87, 318, 446, 254, 55, 183, 414, 286, 119, 350, 478, 15, 143, 374, 207, 79, 310, 438, 239, 47, 175, 406, 278, 111, 342, 470, 31, 159, 390, 223, 95, 326, 454, 262, 63, 191, 422, 294, 127, 358, 486]; + + return (unsafe{*PERM487.get_unchecked((index % 487) as usize)} as u32 * 237169 + + unsafe{*PERM487.get_unchecked(((index / 487) % 487) as usize)} as u32 * 487 + + unsafe{*PERM487.get_unchecked(((index / 237169) % 487) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (115501303u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton491(index: u32) -> f32 { - const PERM491: [u16; 491] = [0, 128, 363, 192, 64, 299, 427, 224, 32, 160, 395, 267, 96, 331, - 459, 16, 144, 379, 208, 80, 315, 443, 251, 48, 176, 411, 283, - 112, 347, 475, 240, 8, 136, 371, 200, 72, 307, 435, 232, 40, 168, - 403, 275, 104, 339, 467, 24, 152, 387, 216, 88, 323, 451, 259, - 56, 184, 419, 291, 120, 355, 483, 4, 132, 367, 196, 68, 303, 431, - 228, 36, 164, 399, 271, 100, 335, 463, 20, 148, 383, 212, 84, - 319, 447, 255, 52, 180, 415, 287, 116, 351, 479, 247, 12, 140, - 375, 204, 76, 311, 439, 236, 44, 172, 407, 279, 108, 343, 471, - 28, 156, 391, 220, 92, 327, 455, 263, 60, 188, 423, 295, 124, - 359, 487, 244, 2, 130, 365, 194, 66, 301, 429, 226, 34, 162, 397, - 269, 98, 333, 461, 18, 146, 381, 210, 82, 317, 445, 253, 50, 178, - 413, 285, 114, 349, 477, 242, 10, 138, 373, 202, 74, 309, 437, - 234, 42, 170, 405, 277, 106, 341, 469, 26, 154, 389, 218, 90, - 325, 453, 261, 58, 186, 421, 293, 122, 357, 485, 6, 134, 369, - 198, 70, 305, 433, 230, 38, 166, 401, 273, 102, 337, 465, 22, - 150, 385, 214, 86, 321, 449, 257, 54, 182, 417, 289, 118, 353, - 481, 249, 14, 142, 377, 206, 78, 313, 441, 238, 46, 174, 409, - 281, 110, 345, 473, 30, 158, 393, 222, 94, 329, 457, 265, 62, - 190, 425, 297, 126, 361, 489, 245, 1, 129, 364, 193, 65, 300, - 428, 225, 33, 161, 396, 268, 97, 332, 460, 17, 145, 380, 209, 81, - 316, 444, 252, 49, 177, 412, 284, 113, 348, 476, 241, 9, 137, - 372, 201, 73, 308, 436, 233, 41, 169, 404, 276, 105, 340, 468, - 25, 153, 388, 217, 89, 324, 452, 260, 57, 185, 420, 292, 121, - 356, 484, 5, 133, 368, 197, 69, 304, 432, 229, 37, 165, 400, 272, - 101, 336, 464, 21, 149, 384, 213, 85, 320, 448, 256, 53, 181, - 416, 288, 117, 352, 480, 248, 13, 141, 376, 205, 77, 312, 440, - 237, 45, 173, 408, 280, 109, 344, 472, 29, 157, 392, 221, 93, - 328, 456, 264, 61, 189, 424, 296, 125, 360, 488, 246, 3, 131, - 366, 195, 67, 302, 430, 227, 35, 163, 398, 270, 99, 334, 462, 19, - 147, 382, 211, 83, 318, 446, 254, 51, 179, 414, 286, 115, 350, - 478, 243, 11, 139, 374, 203, 75, 310, 438, 235, 43, 171, 406, - 278, 107, 342, 470, 27, 155, 390, 219, 91, 326, 454, 262, 59, - 187, 422, 294, 123, 358, 486, 7, 135, 370, 199, 71, 306, 434, - 231, 39, 167, 402, 274, 103, 338, 466, 23, 151, 386, 215, 87, - 322, 450, 258, 55, 183, 418, 290, 119, 354, 482, 250, 15, 143, - 378, 207, 79, 314, 442, 239, 47, 175, 410, 282, 111, 346, 474, - 31, 159, 394, 223, 95, 330, 458, 266, 63, 191, 426, 298, 127, - 362, 490]; - - return (unsafe { *PERM491.get_unchecked((index % 491) as usize) } as u32 * 241081 + - unsafe { *PERM491.get_unchecked(((index / 491) % 491) as usize) } as u32 * 491 + - unsafe { - *PERM491.get_unchecked(((index / 241081) % 491) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (118370771u32 as f32)); // Results in [0,1). + const PERM491: [u16; 491] = [0, 128, 363, 192, 64, 299, 427, 224, 32, 160, 395, 267, 96, 331, 459, 16, 144, 379, 208, 80, 315, 443, 251, 48, 176, 411, 283, 112, 347, 475, 240, 8, 136, 371, 200, 72, 307, 435, 232, 40, 168, 403, 275, 104, 339, 467, 24, 152, 387, 216, 88, 323, 451, 259, 56, 184, 419, 291, 120, 355, 483, 4, 132, 367, 196, 68, 303, 431, 228, 36, 164, 399, 271, 100, 335, 463, 20, 148, 383, 212, 84, 319, 447, 255, 52, 180, 415, 287, 116, 351, 479, 247, 12, 140, 375, 204, 76, 311, 439, 236, 44, 172, 407, 279, 108, 343, 471, 28, 156, 391, 220, 92, 327, 455, 263, 60, 188, 423, 295, 124, 359, 487, 244, 2, 130, 365, 194, 66, 301, 429, 226, 34, 162, 397, 269, 98, 333, 461, 18, 146, 381, 210, 82, 317, 445, 253, 50, 178, 413, 285, 114, 349, 477, 242, 10, 138, 373, 202, 74, 309, 437, 234, 42, 170, 405, 277, 106, 341, 469, 26, 154, 389, 218, 90, 325, 453, 261, 58, 186, 421, 293, 122, 357, 485, 6, 134, 369, 198, 70, 305, 433, 230, 38, 166, 401, 273, 102, 337, 465, 22, 150, 385, 214, 86, 321, 449, 257, 54, 182, 417, 289, 118, 353, 481, 249, 14, 142, 377, 206, 78, 313, 441, 238, 46, 174, 409, 281, 110, 345, 473, 30, 158, 393, 222, 94, 329, 457, 265, 62, 190, 425, 297, 126, 361, 489, 245, 1, 129, 364, 193, 65, 300, 428, 225, 33, 161, 396, 268, 97, 332, 460, 17, 145, 380, 209, 81, 316, 444, 252, 49, 177, 412, 284, 113, 348, 476, 241, 9, 137, 372, 201, 73, 308, 436, 233, 41, 169, 404, 276, 105, 340, 468, 25, 153, 388, 217, 89, 324, 452, 260, 57, 185, 420, 292, 121, 356, 484, 5, 133, 368, 197, 69, 304, 432, 229, 37, 165, 400, 272, 101, 336, 464, 21, 149, 384, 213, 85, 320, 448, 256, 53, 181, 416, 288, 117, 352, 480, 248, 13, 141, 376, 205, 77, 312, 440, 237, 45, 173, 408, 280, 109, 344, 472, 29, 157, 392, 221, 93, 328, 456, 264, 61, 189, 424, 296, 125, 360, 488, 246, 3, 131, 366, 195, 67, 302, 430, 227, 35, 163, 398, 270, 99, 334, 462, 19, 147, 382, 211, 83, 318, 446, 254, 51, 179, 414, 286, 115, 350, 478, 243, 11, 139, 374, 203, 75, 310, 438, 235, 43, 171, 406, 278, 107, 342, 470, 27, 155, 390, 219, 91, 326, 454, 262, 59, 187, 422, 294, 123, 358, 486, 7, 135, 370, 199, 71, 306, 434, 231, 39, 167, 402, 274, 103, 338, 466, 23, 151, 386, 215, 87, 322, 450, 258, 55, 183, 418, 290, 119, 354, 482, 250, 15, 143, 378, 207, 79, 314, 442, 239, 47, 175, 410, 282, 111, 346, 474, 31, 159, 394, 223, 95, 330, 458, 266, 63, 191, 426, 298, 127, 362, 490]; + + return (unsafe{*PERM491.get_unchecked((index % 491) as usize)} as u32 * 241081 + + unsafe{*PERM491.get_unchecked(((index / 491) % 491) as usize)} as u32 * 491 + + unsafe{*PERM491.get_unchecked(((index / 241081) % 491) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (118370771u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton499(index: u32) -> f32 { - const PERM499: [u16; 499] = [0, 128, 371, 192, 64, 307, 435, 224, 32, 160, 403, 275, 96, 339, - 467, 240, 16, 144, 387, 208, 80, 323, 451, 259, 48, 176, 419, - 291, 112, 355, 483, 8, 136, 379, 200, 72, 315, 443, 232, 40, 168, - 411, 283, 104, 347, 475, 251, 24, 152, 395, 216, 88, 331, 459, - 267, 56, 184, 427, 299, 120, 363, 491, 4, 132, 375, 196, 68, 311, - 439, 228, 36, 164, 407, 279, 100, 343, 471, 244, 20, 148, 391, - 212, 84, 327, 455, 263, 52, 180, 423, 295, 116, 359, 487, 12, - 140, 383, 204, 76, 319, 447, 236, 44, 172, 415, 287, 108, 351, - 479, 255, 28, 156, 399, 220, 92, 335, 463, 271, 60, 188, 431, - 303, 124, 367, 495, 248, 2, 130, 373, 194, 66, 309, 437, 226, 34, - 162, 405, 277, 98, 341, 469, 242, 18, 146, 389, 210, 82, 325, - 453, 261, 50, 178, 421, 293, 114, 357, 485, 10, 138, 381, 202, - 74, 317, 445, 234, 42, 170, 413, 285, 106, 349, 477, 253, 26, - 154, 397, 218, 90, 333, 461, 269, 58, 186, 429, 301, 122, 365, - 493, 6, 134, 377, 198, 70, 313, 441, 230, 38, 166, 409, 281, 102, - 345, 473, 246, 22, 150, 393, 214, 86, 329, 457, 265, 54, 182, - 425, 297, 118, 361, 489, 14, 142, 385, 206, 78, 321, 449, 238, - 46, 174, 417, 289, 110, 353, 481, 257, 30, 158, 401, 222, 94, - 337, 465, 273, 62, 190, 433, 305, 126, 369, 497, 249, 1, 129, - 372, 193, 65, 308, 436, 225, 33, 161, 404, 276, 97, 340, 468, - 241, 17, 145, 388, 209, 81, 324, 452, 260, 49, 177, 420, 292, - 113, 356, 484, 9, 137, 380, 201, 73, 316, 444, 233, 41, 169, 412, - 284, 105, 348, 476, 252, 25, 153, 396, 217, 89, 332, 460, 268, - 57, 185, 428, 300, 121, 364, 492, 5, 133, 376, 197, 69, 312, 440, - 229, 37, 165, 408, 280, 101, 344, 472, 245, 21, 149, 392, 213, - 85, 328, 456, 264, 53, 181, 424, 296, 117, 360, 488, 13, 141, - 384, 205, 77, 320, 448, 237, 45, 173, 416, 288, 109, 352, 480, - 256, 29, 157, 400, 221, 93, 336, 464, 272, 61, 189, 432, 304, - 125, 368, 496, 250, 3, 131, 374, 195, 67, 310, 438, 227, 35, 163, - 406, 278, 99, 342, 470, 243, 19, 147, 390, 211, 83, 326, 454, - 262, 51, 179, 422, 294, 115, 358, 486, 11, 139, 382, 203, 75, - 318, 446, 235, 43, 171, 414, 286, 107, 350, 478, 254, 27, 155, - 398, 219, 91, 334, 462, 270, 59, 187, 430, 302, 123, 366, 494, 7, - 135, 378, 199, 71, 314, 442, 231, 39, 167, 410, 282, 103, 346, - 474, 247, 23, 151, 394, 215, 87, 330, 458, 266, 55, 183, 426, - 298, 119, 362, 490, 15, 143, 386, 207, 79, 322, 450, 239, 47, - 175, 418, 290, 111, 354, 482, 258, 31, 159, 402, 223, 95, 338, - 466, 274, 63, 191, 434, 306, 127, 370, 498]; - - return (unsafe { *PERM499.get_unchecked((index % 499) as usize) } as u32 * 249001 + - unsafe { *PERM499.get_unchecked(((index / 499) % 499) as usize) } as u32 * 499 + - unsafe { - *PERM499.get_unchecked(((index / 249001) % 499) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (124251499u32 as f32)); // Results in [0,1). + const PERM499: [u16; 499] = [0, 128, 371, 192, 64, 307, 435, 224, 32, 160, 403, 275, 96, 339, 467, 240, 16, 144, 387, 208, 80, 323, 451, 259, 48, 176, 419, 291, 112, 355, 483, 8, 136, 379, 200, 72, 315, 443, 232, 40, 168, 411, 283, 104, 347, 475, 251, 24, 152, 395, 216, 88, 331, 459, 267, 56, 184, 427, 299, 120, 363, 491, 4, 132, 375, 196, 68, 311, 439, 228, 36, 164, 407, 279, 100, 343, 471, 244, 20, 148, 391, 212, 84, 327, 455, 263, 52, 180, 423, 295, 116, 359, 487, 12, 140, 383, 204, 76, 319, 447, 236, 44, 172, 415, 287, 108, 351, 479, 255, 28, 156, 399, 220, 92, 335, 463, 271, 60, 188, 431, 303, 124, 367, 495, 248, 2, 130, 373, 194, 66, 309, 437, 226, 34, 162, 405, 277, 98, 341, 469, 242, 18, 146, 389, 210, 82, 325, 453, 261, 50, 178, 421, 293, 114, 357, 485, 10, 138, 381, 202, 74, 317, 445, 234, 42, 170, 413, 285, 106, 349, 477, 253, 26, 154, 397, 218, 90, 333, 461, 269, 58, 186, 429, 301, 122, 365, 493, 6, 134, 377, 198, 70, 313, 441, 230, 38, 166, 409, 281, 102, 345, 473, 246, 22, 150, 393, 214, 86, 329, 457, 265, 54, 182, 425, 297, 118, 361, 489, 14, 142, 385, 206, 78, 321, 449, 238, 46, 174, 417, 289, 110, 353, 481, 257, 30, 158, 401, 222, 94, 337, 465, 273, 62, 190, 433, 305, 126, 369, 497, 249, 1, 129, 372, 193, 65, 308, 436, 225, 33, 161, 404, 276, 97, 340, 468, 241, 17, 145, 388, 209, 81, 324, 452, 260, 49, 177, 420, 292, 113, 356, 484, 9, 137, 380, 201, 73, 316, 444, 233, 41, 169, 412, 284, 105, 348, 476, 252, 25, 153, 396, 217, 89, 332, 460, 268, 57, 185, 428, 300, 121, 364, 492, 5, 133, 376, 197, 69, 312, 440, 229, 37, 165, 408, 280, 101, 344, 472, 245, 21, 149, 392, 213, 85, 328, 456, 264, 53, 181, 424, 296, 117, 360, 488, 13, 141, 384, 205, 77, 320, 448, 237, 45, 173, 416, 288, 109, 352, 480, 256, 29, 157, 400, 221, 93, 336, 464, 272, 61, 189, 432, 304, 125, 368, 496, 250, 3, 131, 374, 195, 67, 310, 438, 227, 35, 163, 406, 278, 99, 342, 470, 243, 19, 147, 390, 211, 83, 326, 454, 262, 51, 179, 422, 294, 115, 358, 486, 11, 139, 382, 203, 75, 318, 446, 235, 43, 171, 414, 286, 107, 350, 478, 254, 27, 155, 398, 219, 91, 334, 462, 270, 59, 187, 430, 302, 123, 366, 494, 7, 135, 378, 199, 71, 314, 442, 231, 39, 167, 410, 282, 103, 346, 474, 247, 23, 151, 394, 215, 87, 330, 458, 266, 55, 183, 426, 298, 119, 362, 490, 15, 143, 386, 207, 79, 322, 450, 239, 47, 175, 418, 290, 111, 354, 482, 258, 31, 159, 402, 223, 95, 338, 466, 274, 63, 191, 434, 306, 127, 370, 498]; + + return (unsafe{*PERM499.get_unchecked((index % 499) as usize)} as u32 * 249001 + + unsafe{*PERM499.get_unchecked(((index / 499) % 499) as usize)} as u32 * 499 + + unsafe{*PERM499.get_unchecked(((index / 249001) % 499) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (124251499u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton503(index: u32) -> f32 { - const PERM503: [u16; 503] = [0, 128, 375, 192, 64, 311, 439, 224, 32, 160, 407, 279, 96, 343, - 471, 240, 16, 144, 391, 208, 80, 327, 455, 263, 48, 176, 423, - 295, 112, 359, 487, 8, 136, 383, 200, 72, 319, 447, 232, 40, 168, - 415, 287, 104, 351, 479, 255, 24, 152, 399, 216, 88, 335, 463, - 271, 56, 184, 431, 303, 120, 367, 495, 248, 4, 132, 379, 196, 68, - 315, 443, 228, 36, 164, 411, 283, 100, 347, 475, 244, 20, 148, - 395, 212, 84, 331, 459, 267, 52, 180, 427, 299, 116, 363, 491, - 12, 140, 387, 204, 76, 323, 451, 236, 44, 172, 419, 291, 108, - 355, 483, 259, 28, 156, 403, 220, 92, 339, 467, 275, 60, 188, - 435, 307, 124, 371, 499, 250, 2, 130, 377, 194, 66, 313, 441, - 226, 34, 162, 409, 281, 98, 345, 473, 242, 18, 146, 393, 210, 82, - 329, 457, 265, 50, 178, 425, 297, 114, 361, 489, 10, 138, 385, - 202, 74, 321, 449, 234, 42, 170, 417, 289, 106, 353, 481, 257, - 26, 154, 401, 218, 90, 337, 465, 273, 58, 186, 433, 305, 122, - 369, 497, 253, 6, 134, 381, 198, 70, 317, 445, 230, 38, 166, 413, - 285, 102, 349, 477, 246, 22, 150, 397, 214, 86, 333, 461, 269, - 54, 182, 429, 301, 118, 365, 493, 14, 142, 389, 206, 78, 325, - 453, 238, 46, 174, 421, 293, 110, 357, 485, 261, 30, 158, 405, - 222, 94, 341, 469, 277, 62, 190, 437, 309, 126, 373, 501, 251, 1, - 129, 376, 193, 65, 312, 440, 225, 33, 161, 408, 280, 97, 344, - 472, 241, 17, 145, 392, 209, 81, 328, 456, 264, 49, 177, 424, - 296, 113, 360, 488, 9, 137, 384, 201, 73, 320, 448, 233, 41, 169, - 416, 288, 105, 352, 480, 256, 25, 153, 400, 217, 89, 336, 464, - 272, 57, 185, 432, 304, 121, 368, 496, 249, 5, 133, 380, 197, 69, - 316, 444, 229, 37, 165, 412, 284, 101, 348, 476, 245, 21, 149, - 396, 213, 85, 332, 460, 268, 53, 181, 428, 300, 117, 364, 492, - 13, 141, 388, 205, 77, 324, 452, 237, 45, 173, 420, 292, 109, - 356, 484, 260, 29, 157, 404, 221, 93, 340, 468, 276, 61, 189, - 436, 308, 125, 372, 500, 252, 3, 131, 378, 195, 67, 314, 442, - 227, 35, 163, 410, 282, 99, 346, 474, 243, 19, 147, 394, 211, 83, - 330, 458, 266, 51, 179, 426, 298, 115, 362, 490, 11, 139, 386, - 203, 75, 322, 450, 235, 43, 171, 418, 290, 107, 354, 482, 258, - 27, 155, 402, 219, 91, 338, 466, 274, 59, 187, 434, 306, 123, - 370, 498, 254, 7, 135, 382, 199, 71, 318, 446, 231, 39, 167, 414, - 286, 103, 350, 478, 247, 23, 151, 398, 215, 87, 334, 462, 270, - 55, 183, 430, 302, 119, 366, 494, 15, 143, 390, 207, 79, 326, - 454, 239, 47, 175, 422, 294, 111, 358, 486, 262, 31, 159, 406, - 223, 95, 342, 470, 278, 63, 191, 438, 310, 127, 374, 502]; - - return (unsafe { *PERM503.get_unchecked((index % 503) as usize) } as u32 * 253009 + - unsafe { *PERM503.get_unchecked(((index / 503) % 503) as usize) } as u32 * 503 + - unsafe { - *PERM503.get_unchecked(((index / 253009) % 503) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (127263527u32 as f32)); // Results in [0,1). + const PERM503: [u16; 503] = [0, 128, 375, 192, 64, 311, 439, 224, 32, 160, 407, 279, 96, 343, 471, 240, 16, 144, 391, 208, 80, 327, 455, 263, 48, 176, 423, 295, 112, 359, 487, 8, 136, 383, 200, 72, 319, 447, 232, 40, 168, 415, 287, 104, 351, 479, 255, 24, 152, 399, 216, 88, 335, 463, 271, 56, 184, 431, 303, 120, 367, 495, 248, 4, 132, 379, 196, 68, 315, 443, 228, 36, 164, 411, 283, 100, 347, 475, 244, 20, 148, 395, 212, 84, 331, 459, 267, 52, 180, 427, 299, 116, 363, 491, 12, 140, 387, 204, 76, 323, 451, 236, 44, 172, 419, 291, 108, 355, 483, 259, 28, 156, 403, 220, 92, 339, 467, 275, 60, 188, 435, 307, 124, 371, 499, 250, 2, 130, 377, 194, 66, 313, 441, 226, 34, 162, 409, 281, 98, 345, 473, 242, 18, 146, 393, 210, 82, 329, 457, 265, 50, 178, 425, 297, 114, 361, 489, 10, 138, 385, 202, 74, 321, 449, 234, 42, 170, 417, 289, 106, 353, 481, 257, 26, 154, 401, 218, 90, 337, 465, 273, 58, 186, 433, 305, 122, 369, 497, 253, 6, 134, 381, 198, 70, 317, 445, 230, 38, 166, 413, 285, 102, 349, 477, 246, 22, 150, 397, 214, 86, 333, 461, 269, 54, 182, 429, 301, 118, 365, 493, 14, 142, 389, 206, 78, 325, 453, 238, 46, 174, 421, 293, 110, 357, 485, 261, 30, 158, 405, 222, 94, 341, 469, 277, 62, 190, 437, 309, 126, 373, 501, 251, 1, 129, 376, 193, 65, 312, 440, 225, 33, 161, 408, 280, 97, 344, 472, 241, 17, 145, 392, 209, 81, 328, 456, 264, 49, 177, 424, 296, 113, 360, 488, 9, 137, 384, 201, 73, 320, 448, 233, 41, 169, 416, 288, 105, 352, 480, 256, 25, 153, 400, 217, 89, 336, 464, 272, 57, 185, 432, 304, 121, 368, 496, 249, 5, 133, 380, 197, 69, 316, 444, 229, 37, 165, 412, 284, 101, 348, 476, 245, 21, 149, 396, 213, 85, 332, 460, 268, 53, 181, 428, 300, 117, 364, 492, 13, 141, 388, 205, 77, 324, 452, 237, 45, 173, 420, 292, 109, 356, 484, 260, 29, 157, 404, 221, 93, 340, 468, 276, 61, 189, 436, 308, 125, 372, 500, 252, 3, 131, 378, 195, 67, 314, 442, 227, 35, 163, 410, 282, 99, 346, 474, 243, 19, 147, 394, 211, 83, 330, 458, 266, 51, 179, 426, 298, 115, 362, 490, 11, 139, 386, 203, 75, 322, 450, 235, 43, 171, 418, 290, 107, 354, 482, 258, 27, 155, 402, 219, 91, 338, 466, 274, 59, 187, 434, 306, 123, 370, 498, 254, 7, 135, 382, 199, 71, 318, 446, 231, 39, 167, 414, 286, 103, 350, 478, 247, 23, 151, 398, 215, 87, 334, 462, 270, 55, 183, 430, 302, 119, 366, 494, 15, 143, 390, 207, 79, 326, 454, 239, 47, 175, 422, 294, 111, 358, 486, 262, 31, 159, 406, 223, 95, 342, 470, 278, 63, 191, 438, 310, 127, 374, 502]; + + return (unsafe{*PERM503.get_unchecked((index % 503) as usize)} as u32 * 253009 + + unsafe{*PERM503.get_unchecked(((index / 503) % 503) as usize)} as u32 * 503 + + unsafe{*PERM503.get_unchecked(((index / 253009) % 503) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (127263527u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton509(index: u32) -> f32 { - const PERM509: [u16; 509] = [0, 128, 381, 192, 64, 317, 445, 224, 32, 160, 413, 285, 96, 349, - 477, 240, 16, 144, 397, 208, 80, 333, 461, 269, 48, 176, 429, - 301, 112, 365, 493, 248, 8, 136, 389, 200, 72, 325, 453, 232, 40, - 168, 421, 293, 104, 357, 485, 261, 24, 152, 405, 216, 88, 341, - 469, 277, 56, 184, 437, 309, 120, 373, 501, 252, 4, 132, 385, - 196, 68, 321, 449, 228, 36, 164, 417, 289, 100, 353, 481, 244, - 20, 148, 401, 212, 84, 337, 465, 273, 52, 180, 433, 305, 116, - 369, 497, 257, 12, 140, 393, 204, 76, 329, 457, 236, 44, 172, - 425, 297, 108, 361, 489, 265, 28, 156, 409, 220, 92, 345, 473, - 281, 60, 188, 441, 313, 124, 377, 505, 2, 130, 383, 194, 66, 319, - 447, 226, 34, 162, 415, 287, 98, 351, 479, 242, 18, 146, 399, - 210, 82, 335, 463, 271, 50, 178, 431, 303, 114, 367, 495, 250, - 10, 138, 391, 202, 74, 327, 455, 234, 42, 170, 423, 295, 106, - 359, 487, 263, 26, 154, 407, 218, 90, 343, 471, 279, 58, 186, - 439, 311, 122, 375, 503, 255, 6, 134, 387, 198, 70, 323, 451, - 230, 38, 166, 419, 291, 102, 355, 483, 246, 22, 150, 403, 214, - 86, 339, 467, 275, 54, 182, 435, 307, 118, 371, 499, 259, 14, - 142, 395, 206, 78, 331, 459, 238, 46, 174, 427, 299, 110, 363, - 491, 267, 30, 158, 411, 222, 94, 347, 475, 283, 62, 190, 443, - 315, 126, 379, 507, 254, 1, 129, 382, 193, 65, 318, 446, 225, 33, - 161, 414, 286, 97, 350, 478, 241, 17, 145, 398, 209, 81, 334, - 462, 270, 49, 177, 430, 302, 113, 366, 494, 249, 9, 137, 390, - 201, 73, 326, 454, 233, 41, 169, 422, 294, 105, 358, 486, 262, - 25, 153, 406, 217, 89, 342, 470, 278, 57, 185, 438, 310, 121, - 374, 502, 253, 5, 133, 386, 197, 69, 322, 450, 229, 37, 165, 418, - 290, 101, 354, 482, 245, 21, 149, 402, 213, 85, 338, 466, 274, - 53, 181, 434, 306, 117, 370, 498, 258, 13, 141, 394, 205, 77, - 330, 458, 237, 45, 173, 426, 298, 109, 362, 490, 266, 29, 157, - 410, 221, 93, 346, 474, 282, 61, 189, 442, 314, 125, 378, 506, 3, - 131, 384, 195, 67, 320, 448, 227, 35, 163, 416, 288, 99, 352, - 480, 243, 19, 147, 400, 211, 83, 336, 464, 272, 51, 179, 432, - 304, 115, 368, 496, 251, 11, 139, 392, 203, 75, 328, 456, 235, - 43, 171, 424, 296, 107, 360, 488, 264, 27, 155, 408, 219, 91, - 344, 472, 280, 59, 187, 440, 312, 123, 376, 504, 256, 7, 135, - 388, 199, 71, 324, 452, 231, 39, 167, 420, 292, 103, 356, 484, - 247, 23, 151, 404, 215, 87, 340, 468, 276, 55, 183, 436, 308, - 119, 372, 500, 260, 15, 143, 396, 207, 79, 332, 460, 239, 47, - 175, 428, 300, 111, 364, 492, 268, 31, 159, 412, 223, 95, 348, - 476, 284, 63, 191, 444, 316, 127, 380, 508]; - - return (unsafe { *PERM509.get_unchecked((index % 509) as usize) } as u32 * 259081 + - unsafe { *PERM509.get_unchecked(((index / 509) % 509) as usize) } as u32 * 509 + - unsafe { - *PERM509.get_unchecked(((index / 259081) % 509) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (131872229u32 as f32)); // Results in [0,1). + const PERM509: [u16; 509] = [0, 128, 381, 192, 64, 317, 445, 224, 32, 160, 413, 285, 96, 349, 477, 240, 16, 144, 397, 208, 80, 333, 461, 269, 48, 176, 429, 301, 112, 365, 493, 248, 8, 136, 389, 200, 72, 325, 453, 232, 40, 168, 421, 293, 104, 357, 485, 261, 24, 152, 405, 216, 88, 341, 469, 277, 56, 184, 437, 309, 120, 373, 501, 252, 4, 132, 385, 196, 68, 321, 449, 228, 36, 164, 417, 289, 100, 353, 481, 244, 20, 148, 401, 212, 84, 337, 465, 273, 52, 180, 433, 305, 116, 369, 497, 257, 12, 140, 393, 204, 76, 329, 457, 236, 44, 172, 425, 297, 108, 361, 489, 265, 28, 156, 409, 220, 92, 345, 473, 281, 60, 188, 441, 313, 124, 377, 505, 2, 130, 383, 194, 66, 319, 447, 226, 34, 162, 415, 287, 98, 351, 479, 242, 18, 146, 399, 210, 82, 335, 463, 271, 50, 178, 431, 303, 114, 367, 495, 250, 10, 138, 391, 202, 74, 327, 455, 234, 42, 170, 423, 295, 106, 359, 487, 263, 26, 154, 407, 218, 90, 343, 471, 279, 58, 186, 439, 311, 122, 375, 503, 255, 6, 134, 387, 198, 70, 323, 451, 230, 38, 166, 419, 291, 102, 355, 483, 246, 22, 150, 403, 214, 86, 339, 467, 275, 54, 182, 435, 307, 118, 371, 499, 259, 14, 142, 395, 206, 78, 331, 459, 238, 46, 174, 427, 299, 110, 363, 491, 267, 30, 158, 411, 222, 94, 347, 475, 283, 62, 190, 443, 315, 126, 379, 507, 254, 1, 129, 382, 193, 65, 318, 446, 225, 33, 161, 414, 286, 97, 350, 478, 241, 17, 145, 398, 209, 81, 334, 462, 270, 49, 177, 430, 302, 113, 366, 494, 249, 9, 137, 390, 201, 73, 326, 454, 233, 41, 169, 422, 294, 105, 358, 486, 262, 25, 153, 406, 217, 89, 342, 470, 278, 57, 185, 438, 310, 121, 374, 502, 253, 5, 133, 386, 197, 69, 322, 450, 229, 37, 165, 418, 290, 101, 354, 482, 245, 21, 149, 402, 213, 85, 338, 466, 274, 53, 181, 434, 306, 117, 370, 498, 258, 13, 141, 394, 205, 77, 330, 458, 237, 45, 173, 426, 298, 109, 362, 490, 266, 29, 157, 410, 221, 93, 346, 474, 282, 61, 189, 442, 314, 125, 378, 506, 3, 131, 384, 195, 67, 320, 448, 227, 35, 163, 416, 288, 99, 352, 480, 243, 19, 147, 400, 211, 83, 336, 464, 272, 51, 179, 432, 304, 115, 368, 496, 251, 11, 139, 392, 203, 75, 328, 456, 235, 43, 171, 424, 296, 107, 360, 488, 264, 27, 155, 408, 219, 91, 344, 472, 280, 59, 187, 440, 312, 123, 376, 504, 256, 7, 135, 388, 199, 71, 324, 452, 231, 39, 167, 420, 292, 103, 356, 484, 247, 23, 151, 404, 215, 87, 340, 468, 276, 55, 183, 436, 308, 119, 372, 500, 260, 15, 143, 396, 207, 79, 332, 460, 239, 47, 175, 428, 300, 111, 364, 492, 268, 31, 159, 412, 223, 95, 348, 476, 284, 63, 191, 444, 316, 127, 380, 508]; + + return (unsafe{*PERM509.get_unchecked((index % 509) as usize)} as u32 * 259081 + + unsafe{*PERM509.get_unchecked(((index / 509) % 509) as usize)} as u32 * 509 + + unsafe{*PERM509.get_unchecked(((index / 259081) % 509) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (131872229u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton521(index: u32) -> f32 { - const PERM521: [u16; 521] = [0, 265, 128, 393, 64, 329, 192, 457, 32, 297, 160, 425, 96, 361, - 224, 489, 16, 281, 144, 409, 80, 345, 208, 473, 48, 313, 176, - 441, 112, 377, 240, 505, 256, 8, 273, 136, 401, 72, 337, 200, - 465, 40, 305, 168, 433, 104, 369, 232, 497, 24, 289, 152, 417, - 88, 353, 216, 481, 56, 321, 184, 449, 120, 385, 248, 513, 4, 269, - 132, 397, 68, 333, 196, 461, 36, 301, 164, 429, 100, 365, 228, - 493, 20, 285, 148, 413, 84, 349, 212, 477, 52, 317, 180, 445, - 116, 381, 244, 509, 261, 12, 277, 140, 405, 76, 341, 204, 469, - 44, 309, 172, 437, 108, 373, 236, 501, 28, 293, 156, 421, 92, - 357, 220, 485, 60, 325, 188, 453, 124, 389, 252, 517, 2, 267, - 130, 395, 66, 331, 194, 459, 34, 299, 162, 427, 98, 363, 226, - 491, 18, 283, 146, 411, 82, 347, 210, 475, 50, 315, 178, 443, - 114, 379, 242, 507, 258, 10, 275, 138, 403, 74, 339, 202, 467, - 42, 307, 170, 435, 106, 371, 234, 499, 26, 291, 154, 419, 90, - 355, 218, 483, 58, 323, 186, 451, 122, 387, 250, 515, 6, 271, - 134, 399, 70, 335, 198, 463, 38, 303, 166, 431, 102, 367, 230, - 495, 22, 287, 150, 415, 86, 351, 214, 479, 54, 319, 182, 447, - 118, 383, 246, 511, 263, 14, 279, 142, 407, 78, 343, 206, 471, - 46, 311, 174, 439, 110, 375, 238, 503, 30, 295, 158, 423, 94, - 359, 222, 487, 62, 327, 190, 455, 126, 391, 254, 519, 260, 1, - 266, 129, 394, 65, 330, 193, 458, 33, 298, 161, 426, 97, 362, - 225, 490, 17, 282, 145, 410, 81, 346, 209, 474, 49, 314, 177, - 442, 113, 378, 241, 506, 257, 9, 274, 137, 402, 73, 338, 201, - 466, 41, 306, 169, 434, 105, 370, 233, 498, 25, 290, 153, 418, - 89, 354, 217, 482, 57, 322, 185, 450, 121, 386, 249, 514, 5, 270, - 133, 398, 69, 334, 197, 462, 37, 302, 165, 430, 101, 366, 229, - 494, 21, 286, 149, 414, 85, 350, 213, 478, 53, 318, 181, 446, - 117, 382, 245, 510, 262, 13, 278, 141, 406, 77, 342, 205, 470, - 45, 310, 173, 438, 109, 374, 237, 502, 29, 294, 157, 422, 93, - 358, 221, 486, 61, 326, 189, 454, 125, 390, 253, 518, 3, 268, - 131, 396, 67, 332, 195, 460, 35, 300, 163, 428, 99, 364, 227, - 492, 19, 284, 147, 412, 83, 348, 211, 476, 51, 316, 179, 444, - 115, 380, 243, 508, 259, 11, 276, 139, 404, 75, 340, 203, 468, - 43, 308, 171, 436, 107, 372, 235, 500, 27, 292, 155, 420, 91, - 356, 219, 484, 59, 324, 187, 452, 123, 388, 251, 516, 7, 272, - 135, 400, 71, 336, 199, 464, 39, 304, 167, 432, 103, 368, 231, - 496, 23, 288, 151, 416, 87, 352, 215, 480, 55, 320, 183, 448, - 119, 384, 247, 512, 264, 15, 280, 143, 408, 79, 344, 207, 472, - 47, 312, 175, 440, 111, 376, 239, 504, 31, 296, 159, 424, 95, - 360, 223, 488, 63, 328, 191, 456, 127, 392, 255, 520]; - - return (unsafe { *PERM521.get_unchecked((index % 521) as usize) } as u32 * 271441 + - unsafe { *PERM521.get_unchecked(((index / 521) % 521) as usize) } as u32 * 521 + - unsafe { - *PERM521.get_unchecked(((index / 271441) % 521) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (141420761u32 as f32)); // Results in [0,1). + const PERM521: [u16; 521] = [0, 265, 128, 393, 64, 329, 192, 457, 32, 297, 160, 425, 96, 361, 224, 489, 16, 281, 144, 409, 80, 345, 208, 473, 48, 313, 176, 441, 112, 377, 240, 505, 256, 8, 273, 136, 401, 72, 337, 200, 465, 40, 305, 168, 433, 104, 369, 232, 497, 24, 289, 152, 417, 88, 353, 216, 481, 56, 321, 184, 449, 120, 385, 248, 513, 4, 269, 132, 397, 68, 333, 196, 461, 36, 301, 164, 429, 100, 365, 228, 493, 20, 285, 148, 413, 84, 349, 212, 477, 52, 317, 180, 445, 116, 381, 244, 509, 261, 12, 277, 140, 405, 76, 341, 204, 469, 44, 309, 172, 437, 108, 373, 236, 501, 28, 293, 156, 421, 92, 357, 220, 485, 60, 325, 188, 453, 124, 389, 252, 517, 2, 267, 130, 395, 66, 331, 194, 459, 34, 299, 162, 427, 98, 363, 226, 491, 18, 283, 146, 411, 82, 347, 210, 475, 50, 315, 178, 443, 114, 379, 242, 507, 258, 10, 275, 138, 403, 74, 339, 202, 467, 42, 307, 170, 435, 106, 371, 234, 499, 26, 291, 154, 419, 90, 355, 218, 483, 58, 323, 186, 451, 122, 387, 250, 515, 6, 271, 134, 399, 70, 335, 198, 463, 38, 303, 166, 431, 102, 367, 230, 495, 22, 287, 150, 415, 86, 351, 214, 479, 54, 319, 182, 447, 118, 383, 246, 511, 263, 14, 279, 142, 407, 78, 343, 206, 471, 46, 311, 174, 439, 110, 375, 238, 503, 30, 295, 158, 423, 94, 359, 222, 487, 62, 327, 190, 455, 126, 391, 254, 519, 260, 1, 266, 129, 394, 65, 330, 193, 458, 33, 298, 161, 426, 97, 362, 225, 490, 17, 282, 145, 410, 81, 346, 209, 474, 49, 314, 177, 442, 113, 378, 241, 506, 257, 9, 274, 137, 402, 73, 338, 201, 466, 41, 306, 169, 434, 105, 370, 233, 498, 25, 290, 153, 418, 89, 354, 217, 482, 57, 322, 185, 450, 121, 386, 249, 514, 5, 270, 133, 398, 69, 334, 197, 462, 37, 302, 165, 430, 101, 366, 229, 494, 21, 286, 149, 414, 85, 350, 213, 478, 53, 318, 181, 446, 117, 382, 245, 510, 262, 13, 278, 141, 406, 77, 342, 205, 470, 45, 310, 173, 438, 109, 374, 237, 502, 29, 294, 157, 422, 93, 358, 221, 486, 61, 326, 189, 454, 125, 390, 253, 518, 3, 268, 131, 396, 67, 332, 195, 460, 35, 300, 163, 428, 99, 364, 227, 492, 19, 284, 147, 412, 83, 348, 211, 476, 51, 316, 179, 444, 115, 380, 243, 508, 259, 11, 276, 139, 404, 75, 340, 203, 468, 43, 308, 171, 436, 107, 372, 235, 500, 27, 292, 155, 420, 91, 356, 219, 484, 59, 324, 187, 452, 123, 388, 251, 516, 7, 272, 135, 400, 71, 336, 199, 464, 39, 304, 167, 432, 103, 368, 231, 496, 23, 288, 151, 416, 87, 352, 215, 480, 55, 320, 183, 448, 119, 384, 247, 512, 264, 15, 280, 143, 408, 79, 344, 207, 472, 47, 312, 175, 440, 111, 376, 239, 504, 31, 296, 159, 424, 95, 360, 223, 488, 63, 328, 191, 456, 127, 392, 255, 520]; + + return (unsafe{*PERM521.get_unchecked((index % 521) as usize)} as u32 * 271441 + + unsafe{*PERM521.get_unchecked(((index / 521) % 521) as usize)} as u32 * 521 + + unsafe{*PERM521.get_unchecked(((index / 271441) % 521) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (141420761u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton523(index: u32) -> f32 { - const PERM523: [u16; 523] = [0, 267, 128, 395, 64, 331, 192, 459, 32, 299, 160, 427, 96, 363, - 224, 491, 16, 283, 144, 411, 80, 347, 208, 475, 48, 315, 176, - 443, 112, 379, 240, 507, 256, 8, 275, 136, 403, 72, 339, 200, - 467, 40, 307, 168, 435, 104, 371, 232, 499, 24, 291, 152, 419, - 88, 355, 216, 483, 56, 323, 184, 451, 120, 387, 248, 515, 4, 271, - 132, 399, 68, 335, 196, 463, 36, 303, 164, 431, 100, 367, 228, - 495, 20, 287, 148, 415, 84, 351, 212, 479, 52, 319, 180, 447, - 116, 383, 244, 511, 263, 12, 279, 140, 407, 76, 343, 204, 471, - 44, 311, 172, 439, 108, 375, 236, 503, 28, 295, 156, 423, 92, - 359, 220, 487, 60, 327, 188, 455, 124, 391, 252, 519, 260, 2, - 269, 130, 397, 66, 333, 194, 461, 34, 301, 162, 429, 98, 365, - 226, 493, 18, 285, 146, 413, 82, 349, 210, 477, 50, 317, 178, - 445, 114, 381, 242, 509, 258, 10, 277, 138, 405, 74, 341, 202, - 469, 42, 309, 170, 437, 106, 373, 234, 501, 26, 293, 154, 421, - 90, 357, 218, 485, 58, 325, 186, 453, 122, 389, 250, 517, 6, 273, - 134, 401, 70, 337, 198, 465, 38, 305, 166, 433, 102, 369, 230, - 497, 22, 289, 150, 417, 86, 353, 214, 481, 54, 321, 182, 449, - 118, 385, 246, 513, 265, 14, 281, 142, 409, 78, 345, 206, 473, - 46, 313, 174, 441, 110, 377, 238, 505, 30, 297, 158, 425, 94, - 361, 222, 489, 62, 329, 190, 457, 126, 393, 254, 521, 261, 1, - 268, 129, 396, 65, 332, 193, 460, 33, 300, 161, 428, 97, 364, - 225, 492, 17, 284, 145, 412, 81, 348, 209, 476, 49, 316, 177, - 444, 113, 380, 241, 508, 257, 9, 276, 137, 404, 73, 340, 201, - 468, 41, 308, 169, 436, 105, 372, 233, 500, 25, 292, 153, 420, - 89, 356, 217, 484, 57, 324, 185, 452, 121, 388, 249, 516, 5, 272, - 133, 400, 69, 336, 197, 464, 37, 304, 165, 432, 101, 368, 229, - 496, 21, 288, 149, 416, 85, 352, 213, 480, 53, 320, 181, 448, - 117, 384, 245, 512, 264, 13, 280, 141, 408, 77, 344, 205, 472, - 45, 312, 173, 440, 109, 376, 237, 504, 29, 296, 157, 424, 93, - 360, 221, 488, 61, 328, 189, 456, 125, 392, 253, 520, 262, 3, - 270, 131, 398, 67, 334, 195, 462, 35, 302, 163, 430, 99, 366, - 227, 494, 19, 286, 147, 414, 83, 350, 211, 478, 51, 318, 179, - 446, 115, 382, 243, 510, 259, 11, 278, 139, 406, 75, 342, 203, - 470, 43, 310, 171, 438, 107, 374, 235, 502, 27, 294, 155, 422, - 91, 358, 219, 486, 59, 326, 187, 454, 123, 390, 251, 518, 7, 274, - 135, 402, 71, 338, 199, 466, 39, 306, 167, 434, 103, 370, 231, - 498, 23, 290, 151, 418, 87, 354, 215, 482, 55, 322, 183, 450, - 119, 386, 247, 514, 266, 15, 282, 143, 410, 79, 346, 207, 474, - 47, 314, 175, 442, 111, 378, 239, 506, 31, 298, 159, 426, 95, - 362, 223, 490, 63, 330, 191, 458, 127, 394, 255, 522]; - - return (unsafe { *PERM523.get_unchecked((index % 523) as usize) } as u32 * 273529 + - unsafe { *PERM523.get_unchecked(((index / 523) % 523) as usize) } as u32 * 523 + - unsafe { - *PERM523.get_unchecked(((index / 273529) % 523) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (143055667u32 as f32)); // Results in [0,1). + const PERM523: [u16; 523] = [0, 267, 128, 395, 64, 331, 192, 459, 32, 299, 160, 427, 96, 363, 224, 491, 16, 283, 144, 411, 80, 347, 208, 475, 48, 315, 176, 443, 112, 379, 240, 507, 256, 8, 275, 136, 403, 72, 339, 200, 467, 40, 307, 168, 435, 104, 371, 232, 499, 24, 291, 152, 419, 88, 355, 216, 483, 56, 323, 184, 451, 120, 387, 248, 515, 4, 271, 132, 399, 68, 335, 196, 463, 36, 303, 164, 431, 100, 367, 228, 495, 20, 287, 148, 415, 84, 351, 212, 479, 52, 319, 180, 447, 116, 383, 244, 511, 263, 12, 279, 140, 407, 76, 343, 204, 471, 44, 311, 172, 439, 108, 375, 236, 503, 28, 295, 156, 423, 92, 359, 220, 487, 60, 327, 188, 455, 124, 391, 252, 519, 260, 2, 269, 130, 397, 66, 333, 194, 461, 34, 301, 162, 429, 98, 365, 226, 493, 18, 285, 146, 413, 82, 349, 210, 477, 50, 317, 178, 445, 114, 381, 242, 509, 258, 10, 277, 138, 405, 74, 341, 202, 469, 42, 309, 170, 437, 106, 373, 234, 501, 26, 293, 154, 421, 90, 357, 218, 485, 58, 325, 186, 453, 122, 389, 250, 517, 6, 273, 134, 401, 70, 337, 198, 465, 38, 305, 166, 433, 102, 369, 230, 497, 22, 289, 150, 417, 86, 353, 214, 481, 54, 321, 182, 449, 118, 385, 246, 513, 265, 14, 281, 142, 409, 78, 345, 206, 473, 46, 313, 174, 441, 110, 377, 238, 505, 30, 297, 158, 425, 94, 361, 222, 489, 62, 329, 190, 457, 126, 393, 254, 521, 261, 1, 268, 129, 396, 65, 332, 193, 460, 33, 300, 161, 428, 97, 364, 225, 492, 17, 284, 145, 412, 81, 348, 209, 476, 49, 316, 177, 444, 113, 380, 241, 508, 257, 9, 276, 137, 404, 73, 340, 201, 468, 41, 308, 169, 436, 105, 372, 233, 500, 25, 292, 153, 420, 89, 356, 217, 484, 57, 324, 185, 452, 121, 388, 249, 516, 5, 272, 133, 400, 69, 336, 197, 464, 37, 304, 165, 432, 101, 368, 229, 496, 21, 288, 149, 416, 85, 352, 213, 480, 53, 320, 181, 448, 117, 384, 245, 512, 264, 13, 280, 141, 408, 77, 344, 205, 472, 45, 312, 173, 440, 109, 376, 237, 504, 29, 296, 157, 424, 93, 360, 221, 488, 61, 328, 189, 456, 125, 392, 253, 520, 262, 3, 270, 131, 398, 67, 334, 195, 462, 35, 302, 163, 430, 99, 366, 227, 494, 19, 286, 147, 414, 83, 350, 211, 478, 51, 318, 179, 446, 115, 382, 243, 510, 259, 11, 278, 139, 406, 75, 342, 203, 470, 43, 310, 171, 438, 107, 374, 235, 502, 27, 294, 155, 422, 91, 358, 219, 486, 59, 326, 187, 454, 123, 390, 251, 518, 7, 274, 135, 402, 71, 338, 199, 466, 39, 306, 167, 434, 103, 370, 231, 498, 23, 290, 151, 418, 87, 354, 215, 482, 55, 322, 183, 450, 119, 386, 247, 514, 266, 15, 282, 143, 410, 79, 346, 207, 474, 47, 314, 175, 442, 111, 378, 239, 506, 31, 298, 159, 426, 95, 362, 223, 490, 63, 330, 191, 458, 127, 394, 255, 522]; + + return (unsafe{*PERM523.get_unchecked((index % 523) as usize)} as u32 * 273529 + + unsafe{*PERM523.get_unchecked(((index / 523) % 523) as usize)} as u32 * 523 + + unsafe{*PERM523.get_unchecked(((index / 273529) % 523) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (143055667u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton541(index: u32) -> f32 { - const PERM541: [u16; 541] = [0, 285, 128, 413, 64, 349, 192, 477, 32, 317, 160, 445, 96, 381, - 224, 509, 256, 16, 301, 144, 429, 80, 365, 208, 493, 48, 333, - 176, 461, 112, 397, 240, 525, 264, 8, 293, 136, 421, 72, 357, - 200, 485, 40, 325, 168, 453, 104, 389, 232, 517, 277, 24, 309, - 152, 437, 88, 373, 216, 501, 56, 341, 184, 469, 120, 405, 248, - 533, 268, 4, 289, 132, 417, 68, 353, 196, 481, 36, 321, 164, 449, - 100, 385, 228, 513, 260, 20, 305, 148, 433, 84, 369, 212, 497, - 52, 337, 180, 465, 116, 401, 244, 529, 273, 12, 297, 140, 425, - 76, 361, 204, 489, 44, 329, 172, 457, 108, 393, 236, 521, 281, - 28, 313, 156, 441, 92, 377, 220, 505, 60, 345, 188, 473, 124, - 409, 252, 537, 2, 287, 130, 415, 66, 351, 194, 479, 34, 319, 162, - 447, 98, 383, 226, 511, 258, 18, 303, 146, 431, 82, 367, 210, - 495, 50, 335, 178, 463, 114, 399, 242, 527, 266, 10, 295, 138, - 423, 74, 359, 202, 487, 42, 327, 170, 455, 106, 391, 234, 519, - 279, 26, 311, 154, 439, 90, 375, 218, 503, 58, 343, 186, 471, - 122, 407, 250, 535, 271, 6, 291, 134, 419, 70, 355, 198, 483, 38, - 323, 166, 451, 102, 387, 230, 515, 262, 22, 307, 150, 435, 86, - 371, 214, 499, 54, 339, 182, 467, 118, 403, 246, 531, 275, 14, - 299, 142, 427, 78, 363, 206, 491, 46, 331, 174, 459, 110, 395, - 238, 523, 283, 30, 315, 158, 443, 94, 379, 222, 507, 62, 347, - 190, 475, 126, 411, 254, 539, 270, 1, 286, 129, 414, 65, 350, - 193, 478, 33, 318, 161, 446, 97, 382, 225, 510, 257, 17, 302, - 145, 430, 81, 366, 209, 494, 49, 334, 177, 462, 113, 398, 241, - 526, 265, 9, 294, 137, 422, 73, 358, 201, 486, 41, 326, 169, 454, - 105, 390, 233, 518, 278, 25, 310, 153, 438, 89, 374, 217, 502, - 57, 342, 185, 470, 121, 406, 249, 534, 269, 5, 290, 133, 418, 69, - 354, 197, 482, 37, 322, 165, 450, 101, 386, 229, 514, 261, 21, - 306, 149, 434, 85, 370, 213, 498, 53, 338, 181, 466, 117, 402, - 245, 530, 274, 13, 298, 141, 426, 77, 362, 205, 490, 45, 330, - 173, 458, 109, 394, 237, 522, 282, 29, 314, 157, 442, 93, 378, - 221, 506, 61, 346, 189, 474, 125, 410, 253, 538, 3, 288, 131, - 416, 67, 352, 195, 480, 35, 320, 163, 448, 99, 384, 227, 512, - 259, 19, 304, 147, 432, 83, 368, 211, 496, 51, 336, 179, 464, - 115, 400, 243, 528, 267, 11, 296, 139, 424, 75, 360, 203, 488, - 43, 328, 171, 456, 107, 392, 235, 520, 280, 27, 312, 155, 440, - 91, 376, 219, 504, 59, 344, 187, 472, 123, 408, 251, 536, 272, 7, - 292, 135, 420, 71, 356, 199, 484, 39, 324, 167, 452, 103, 388, - 231, 516, 263, 23, 308, 151, 436, 87, 372, 215, 500, 55, 340, - 183, 468, 119, 404, 247, 532, 276, 15, 300, 143, 428, 79, 364, - 207, 492, 47, 332, 175, 460, 111, 396, 239, 524, 284, 31, 316, - 159, 444, 95, 380, 223, 508, 63, 348, 191, 476, 127, 412, 255, - 540]; - - return (unsafe { *PERM541.get_unchecked((index % 541) as usize) } as u32 * 292681 + - unsafe { *PERM541.get_unchecked(((index / 541) % 541) as usize) } as u32 * 541 + - unsafe { - *PERM541.get_unchecked(((index / 292681) % 541) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (158340421u32 as f32)); // Results in [0,1). + const PERM541: [u16; 541] = [0, 285, 128, 413, 64, 349, 192, 477, 32, 317, 160, 445, 96, 381, 224, 509, 256, 16, 301, 144, 429, 80, 365, 208, 493, 48, 333, 176, 461, 112, 397, 240, 525, 264, 8, 293, 136, 421, 72, 357, 200, 485, 40, 325, 168, 453, 104, 389, 232, 517, 277, 24, 309, 152, 437, 88, 373, 216, 501, 56, 341, 184, 469, 120, 405, 248, 533, 268, 4, 289, 132, 417, 68, 353, 196, 481, 36, 321, 164, 449, 100, 385, 228, 513, 260, 20, 305, 148, 433, 84, 369, 212, 497, 52, 337, 180, 465, 116, 401, 244, 529, 273, 12, 297, 140, 425, 76, 361, 204, 489, 44, 329, 172, 457, 108, 393, 236, 521, 281, 28, 313, 156, 441, 92, 377, 220, 505, 60, 345, 188, 473, 124, 409, 252, 537, 2, 287, 130, 415, 66, 351, 194, 479, 34, 319, 162, 447, 98, 383, 226, 511, 258, 18, 303, 146, 431, 82, 367, 210, 495, 50, 335, 178, 463, 114, 399, 242, 527, 266, 10, 295, 138, 423, 74, 359, 202, 487, 42, 327, 170, 455, 106, 391, 234, 519, 279, 26, 311, 154, 439, 90, 375, 218, 503, 58, 343, 186, 471, 122, 407, 250, 535, 271, 6, 291, 134, 419, 70, 355, 198, 483, 38, 323, 166, 451, 102, 387, 230, 515, 262, 22, 307, 150, 435, 86, 371, 214, 499, 54, 339, 182, 467, 118, 403, 246, 531, 275, 14, 299, 142, 427, 78, 363, 206, 491, 46, 331, 174, 459, 110, 395, 238, 523, 283, 30, 315, 158, 443, 94, 379, 222, 507, 62, 347, 190, 475, 126, 411, 254, 539, 270, 1, 286, 129, 414, 65, 350, 193, 478, 33, 318, 161, 446, 97, 382, 225, 510, 257, 17, 302, 145, 430, 81, 366, 209, 494, 49, 334, 177, 462, 113, 398, 241, 526, 265, 9, 294, 137, 422, 73, 358, 201, 486, 41, 326, 169, 454, 105, 390, 233, 518, 278, 25, 310, 153, 438, 89, 374, 217, 502, 57, 342, 185, 470, 121, 406, 249, 534, 269, 5, 290, 133, 418, 69, 354, 197, 482, 37, 322, 165, 450, 101, 386, 229, 514, 261, 21, 306, 149, 434, 85, 370, 213, 498, 53, 338, 181, 466, 117, 402, 245, 530, 274, 13, 298, 141, 426, 77, 362, 205, 490, 45, 330, 173, 458, 109, 394, 237, 522, 282, 29, 314, 157, 442, 93, 378, 221, 506, 61, 346, 189, 474, 125, 410, 253, 538, 3, 288, 131, 416, 67, 352, 195, 480, 35, 320, 163, 448, 99, 384, 227, 512, 259, 19, 304, 147, 432, 83, 368, 211, 496, 51, 336, 179, 464, 115, 400, 243, 528, 267, 11, 296, 139, 424, 75, 360, 203, 488, 43, 328, 171, 456, 107, 392, 235, 520, 280, 27, 312, 155, 440, 91, 376, 219, 504, 59, 344, 187, 472, 123, 408, 251, 536, 272, 7, 292, 135, 420, 71, 356, 199, 484, 39, 324, 167, 452, 103, 388, 231, 516, 263, 23, 308, 151, 436, 87, 372, 215, 500, 55, 340, 183, 468, 119, 404, 247, 532, 276, 15, 300, 143, 428, 79, 364, 207, 492, 47, 332, 175, 460, 111, 396, 239, 524, 284, 31, 316, 159, 444, 95, 380, 223, 508, 63, 348, 191, 476, 127, 412, 255, 540]; + + return (unsafe{*PERM541.get_unchecked((index % 541) as usize)} as u32 * 292681 + + unsafe{*PERM541.get_unchecked(((index / 541) % 541) as usize)} as u32 * 541 + + unsafe{*PERM541.get_unchecked(((index / 292681) % 541) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (158340421u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton547(index: u32) -> f32 { - const PERM547: [u16; 547] = [0, 291, 128, 419, 64, 355, 192, 483, 256, 32, 323, 160, 451, 96, - 387, 224, 515, 16, 307, 144, 435, 80, 371, 208, 499, 275, 48, - 339, 176, 467, 112, 403, 240, 531, 8, 299, 136, 427, 72, 363, - 200, 491, 264, 40, 331, 168, 459, 104, 395, 232, 523, 24, 315, - 152, 443, 88, 379, 216, 507, 283, 56, 347, 184, 475, 120, 411, - 248, 539, 4, 295, 132, 423, 68, 359, 196, 487, 260, 36, 327, 164, - 455, 100, 391, 228, 519, 20, 311, 148, 439, 84, 375, 212, 503, - 279, 52, 343, 180, 471, 116, 407, 244, 535, 12, 303, 140, 431, - 76, 367, 204, 495, 268, 44, 335, 172, 463, 108, 399, 236, 527, - 28, 319, 156, 447, 92, 383, 220, 511, 287, 60, 351, 188, 479, - 124, 415, 252, 543, 272, 2, 293, 130, 421, 66, 357, 194, 485, - 258, 34, 325, 162, 453, 98, 389, 226, 517, 18, 309, 146, 437, 82, - 373, 210, 501, 277, 50, 341, 178, 469, 114, 405, 242, 533, 10, - 301, 138, 429, 74, 365, 202, 493, 266, 42, 333, 170, 461, 106, - 397, 234, 525, 26, 317, 154, 445, 90, 381, 218, 509, 285, 58, - 349, 186, 477, 122, 413, 250, 541, 6, 297, 134, 425, 70, 361, - 198, 489, 262, 38, 329, 166, 457, 102, 393, 230, 521, 22, 313, - 150, 441, 86, 377, 214, 505, 281, 54, 345, 182, 473, 118, 409, - 246, 537, 14, 305, 142, 433, 78, 369, 206, 497, 270, 46, 337, - 174, 465, 110, 401, 238, 529, 30, 321, 158, 449, 94, 385, 222, - 513, 289, 62, 353, 190, 481, 126, 417, 254, 545, 273, 1, 292, - 129, 420, 65, 356, 193, 484, 257, 33, 324, 161, 452, 97, 388, - 225, 516, 17, 308, 145, 436, 81, 372, 209, 500, 276, 49, 340, - 177, 468, 113, 404, 241, 532, 9, 300, 137, 428, 73, 364, 201, - 492, 265, 41, 332, 169, 460, 105, 396, 233, 524, 25, 316, 153, - 444, 89, 380, 217, 508, 284, 57, 348, 185, 476, 121, 412, 249, - 540, 5, 296, 133, 424, 69, 360, 197, 488, 261, 37, 328, 165, 456, - 101, 392, 229, 520, 21, 312, 149, 440, 85, 376, 213, 504, 280, - 53, 344, 181, 472, 117, 408, 245, 536, 13, 304, 141, 432, 77, - 368, 205, 496, 269, 45, 336, 173, 464, 109, 400, 237, 528, 29, - 320, 157, 448, 93, 384, 221, 512, 288, 61, 352, 189, 480, 125, - 416, 253, 544, 274, 3, 294, 131, 422, 67, 358, 195, 486, 259, 35, - 326, 163, 454, 99, 390, 227, 518, 19, 310, 147, 438, 83, 374, - 211, 502, 278, 51, 342, 179, 470, 115, 406, 243, 534, 11, 302, - 139, 430, 75, 366, 203, 494, 267, 43, 334, 171, 462, 107, 398, - 235, 526, 27, 318, 155, 446, 91, 382, 219, 510, 286, 59, 350, - 187, 478, 123, 414, 251, 542, 7, 298, 135, 426, 71, 362, 199, - 490, 263, 39, 330, 167, 458, 103, 394, 231, 522, 23, 314, 151, - 442, 87, 378, 215, 506, 282, 55, 346, 183, 474, 119, 410, 247, - 538, 15, 306, 143, 434, 79, 370, 207, 498, 271, 47, 338, 175, - 466, 111, 402, 239, 530, 31, 322, 159, 450, 95, 386, 223, 514, - 290, 63, 354, 191, 482, 127, 418, 255, 546]; - - return (unsafe { *PERM547.get_unchecked((index % 547) as usize) } as u32 * 299209 + - unsafe { *PERM547.get_unchecked(((index / 547) % 547) as usize) } as u32 * 547 + - unsafe { - *PERM547.get_unchecked(((index / 299209) % 547) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (163667323u32 as f32)); // Results in [0,1). + const PERM547: [u16; 547] = [0, 291, 128, 419, 64, 355, 192, 483, 256, 32, 323, 160, 451, 96, 387, 224, 515, 16, 307, 144, 435, 80, 371, 208, 499, 275, 48, 339, 176, 467, 112, 403, 240, 531, 8, 299, 136, 427, 72, 363, 200, 491, 264, 40, 331, 168, 459, 104, 395, 232, 523, 24, 315, 152, 443, 88, 379, 216, 507, 283, 56, 347, 184, 475, 120, 411, 248, 539, 4, 295, 132, 423, 68, 359, 196, 487, 260, 36, 327, 164, 455, 100, 391, 228, 519, 20, 311, 148, 439, 84, 375, 212, 503, 279, 52, 343, 180, 471, 116, 407, 244, 535, 12, 303, 140, 431, 76, 367, 204, 495, 268, 44, 335, 172, 463, 108, 399, 236, 527, 28, 319, 156, 447, 92, 383, 220, 511, 287, 60, 351, 188, 479, 124, 415, 252, 543, 272, 2, 293, 130, 421, 66, 357, 194, 485, 258, 34, 325, 162, 453, 98, 389, 226, 517, 18, 309, 146, 437, 82, 373, 210, 501, 277, 50, 341, 178, 469, 114, 405, 242, 533, 10, 301, 138, 429, 74, 365, 202, 493, 266, 42, 333, 170, 461, 106, 397, 234, 525, 26, 317, 154, 445, 90, 381, 218, 509, 285, 58, 349, 186, 477, 122, 413, 250, 541, 6, 297, 134, 425, 70, 361, 198, 489, 262, 38, 329, 166, 457, 102, 393, 230, 521, 22, 313, 150, 441, 86, 377, 214, 505, 281, 54, 345, 182, 473, 118, 409, 246, 537, 14, 305, 142, 433, 78, 369, 206, 497, 270, 46, 337, 174, 465, 110, 401, 238, 529, 30, 321, 158, 449, 94, 385, 222, 513, 289, 62, 353, 190, 481, 126, 417, 254, 545, 273, 1, 292, 129, 420, 65, 356, 193, 484, 257, 33, 324, 161, 452, 97, 388, 225, 516, 17, 308, 145, 436, 81, 372, 209, 500, 276, 49, 340, 177, 468, 113, 404, 241, 532, 9, 300, 137, 428, 73, 364, 201, 492, 265, 41, 332, 169, 460, 105, 396, 233, 524, 25, 316, 153, 444, 89, 380, 217, 508, 284, 57, 348, 185, 476, 121, 412, 249, 540, 5, 296, 133, 424, 69, 360, 197, 488, 261, 37, 328, 165, 456, 101, 392, 229, 520, 21, 312, 149, 440, 85, 376, 213, 504, 280, 53, 344, 181, 472, 117, 408, 245, 536, 13, 304, 141, 432, 77, 368, 205, 496, 269, 45, 336, 173, 464, 109, 400, 237, 528, 29, 320, 157, 448, 93, 384, 221, 512, 288, 61, 352, 189, 480, 125, 416, 253, 544, 274, 3, 294, 131, 422, 67, 358, 195, 486, 259, 35, 326, 163, 454, 99, 390, 227, 518, 19, 310, 147, 438, 83, 374, 211, 502, 278, 51, 342, 179, 470, 115, 406, 243, 534, 11, 302, 139, 430, 75, 366, 203, 494, 267, 43, 334, 171, 462, 107, 398, 235, 526, 27, 318, 155, 446, 91, 382, 219, 510, 286, 59, 350, 187, 478, 123, 414, 251, 542, 7, 298, 135, 426, 71, 362, 199, 490, 263, 39, 330, 167, 458, 103, 394, 231, 522, 23, 314, 151, 442, 87, 378, 215, 506, 282, 55, 346, 183, 474, 119, 410, 247, 538, 15, 306, 143, 434, 79, 370, 207, 498, 271, 47, 338, 175, 466, 111, 402, 239, 530, 31, 322, 159, 450, 95, 386, 223, 514, 290, 63, 354, 191, 482, 127, 418, 255, 546]; + + return (unsafe{*PERM547.get_unchecked((index % 547) as usize)} as u32 * 299209 + + unsafe{*PERM547.get_unchecked(((index / 547) % 547) as usize)} as u32 * 547 + + unsafe{*PERM547.get_unchecked(((index / 299209) % 547) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (163667323u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton557(index: u32) -> f32 { - const PERM557: [u16; 557] = [0, 301, 128, 429, 64, 365, 192, 493, 256, 32, 333, 160, 461, 96, - 397, 224, 525, 16, 317, 144, 445, 80, 381, 208, 509, 285, 48, - 349, 176, 477, 112, 413, 240, 541, 272, 8, 309, 136, 437, 72, - 373, 200, 501, 264, 40, 341, 168, 469, 104, 405, 232, 533, 24, - 325, 152, 453, 88, 389, 216, 517, 293, 56, 357, 184, 485, 120, - 421, 248, 549, 276, 4, 305, 132, 433, 68, 369, 196, 497, 260, 36, - 337, 164, 465, 100, 401, 228, 529, 20, 321, 148, 449, 84, 385, - 212, 513, 289, 52, 353, 180, 481, 116, 417, 244, 545, 281, 12, - 313, 140, 441, 76, 377, 204, 505, 268, 44, 345, 172, 473, 108, - 409, 236, 537, 28, 329, 156, 457, 92, 393, 220, 521, 297, 60, - 361, 188, 489, 124, 425, 252, 553, 2, 303, 130, 431, 66, 367, - 194, 495, 258, 34, 335, 162, 463, 98, 399, 226, 527, 18, 319, - 146, 447, 82, 383, 210, 511, 287, 50, 351, 178, 479, 114, 415, - 242, 543, 274, 10, 311, 138, 439, 74, 375, 202, 503, 266, 42, - 343, 170, 471, 106, 407, 234, 535, 26, 327, 154, 455, 90, 391, - 218, 519, 295, 58, 359, 186, 487, 122, 423, 250, 551, 279, 6, - 307, 134, 435, 70, 371, 198, 499, 262, 38, 339, 166, 467, 102, - 403, 230, 531, 22, 323, 150, 451, 86, 387, 214, 515, 291, 54, - 355, 182, 483, 118, 419, 246, 547, 283, 14, 315, 142, 443, 78, - 379, 206, 507, 270, 46, 347, 174, 475, 110, 411, 238, 539, 30, - 331, 158, 459, 94, 395, 222, 523, 299, 62, 363, 190, 491, 126, - 427, 254, 555, 278, 1, 302, 129, 430, 65, 366, 193, 494, 257, 33, - 334, 161, 462, 97, 398, 225, 526, 17, 318, 145, 446, 81, 382, - 209, 510, 286, 49, 350, 177, 478, 113, 414, 241, 542, 273, 9, - 310, 137, 438, 73, 374, 201, 502, 265, 41, 342, 169, 470, 105, - 406, 233, 534, 25, 326, 153, 454, 89, 390, 217, 518, 294, 57, - 358, 185, 486, 121, 422, 249, 550, 277, 5, 306, 133, 434, 69, - 370, 197, 498, 261, 37, 338, 165, 466, 101, 402, 229, 530, 21, - 322, 149, 450, 85, 386, 213, 514, 290, 53, 354, 181, 482, 117, - 418, 245, 546, 282, 13, 314, 141, 442, 77, 378, 205, 506, 269, - 45, 346, 173, 474, 109, 410, 237, 538, 29, 330, 157, 458, 93, - 394, 221, 522, 298, 61, 362, 189, 490, 125, 426, 253, 554, 3, - 304, 131, 432, 67, 368, 195, 496, 259, 35, 336, 163, 464, 99, - 400, 227, 528, 19, 320, 147, 448, 83, 384, 211, 512, 288, 51, - 352, 179, 480, 115, 416, 243, 544, 275, 11, 312, 139, 440, 75, - 376, 203, 504, 267, 43, 344, 171, 472, 107, 408, 235, 536, 27, - 328, 155, 456, 91, 392, 219, 520, 296, 59, 360, 187, 488, 123, - 424, 251, 552, 280, 7, 308, 135, 436, 71, 372, 199, 500, 263, 39, - 340, 167, 468, 103, 404, 231, 532, 23, 324, 151, 452, 87, 388, - 215, 516, 292, 55, 356, 183, 484, 119, 420, 247, 548, 284, 15, - 316, 143, 444, 79, 380, 207, 508, 271, 47, 348, 175, 476, 111, - 412, 239, 540, 31, 332, 159, 460, 95, 396, 223, 524, 300, 63, - 364, 191, 492, 127, 428, 255, 556]; - - return (unsafe { *PERM557.get_unchecked((index % 557) as usize) } as u32 * 310249 + - unsafe { *PERM557.get_unchecked(((index / 557) % 557) as usize) } as u32 * 557 + - unsafe { - *PERM557.get_unchecked(((index / 310249) % 557) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (172808693u32 as f32)); // Results in [0,1). + const PERM557: [u16; 557] = [0, 301, 128, 429, 64, 365, 192, 493, 256, 32, 333, 160, 461, 96, 397, 224, 525, 16, 317, 144, 445, 80, 381, 208, 509, 285, 48, 349, 176, 477, 112, 413, 240, 541, 272, 8, 309, 136, 437, 72, 373, 200, 501, 264, 40, 341, 168, 469, 104, 405, 232, 533, 24, 325, 152, 453, 88, 389, 216, 517, 293, 56, 357, 184, 485, 120, 421, 248, 549, 276, 4, 305, 132, 433, 68, 369, 196, 497, 260, 36, 337, 164, 465, 100, 401, 228, 529, 20, 321, 148, 449, 84, 385, 212, 513, 289, 52, 353, 180, 481, 116, 417, 244, 545, 281, 12, 313, 140, 441, 76, 377, 204, 505, 268, 44, 345, 172, 473, 108, 409, 236, 537, 28, 329, 156, 457, 92, 393, 220, 521, 297, 60, 361, 188, 489, 124, 425, 252, 553, 2, 303, 130, 431, 66, 367, 194, 495, 258, 34, 335, 162, 463, 98, 399, 226, 527, 18, 319, 146, 447, 82, 383, 210, 511, 287, 50, 351, 178, 479, 114, 415, 242, 543, 274, 10, 311, 138, 439, 74, 375, 202, 503, 266, 42, 343, 170, 471, 106, 407, 234, 535, 26, 327, 154, 455, 90, 391, 218, 519, 295, 58, 359, 186, 487, 122, 423, 250, 551, 279, 6, 307, 134, 435, 70, 371, 198, 499, 262, 38, 339, 166, 467, 102, 403, 230, 531, 22, 323, 150, 451, 86, 387, 214, 515, 291, 54, 355, 182, 483, 118, 419, 246, 547, 283, 14, 315, 142, 443, 78, 379, 206, 507, 270, 46, 347, 174, 475, 110, 411, 238, 539, 30, 331, 158, 459, 94, 395, 222, 523, 299, 62, 363, 190, 491, 126, 427, 254, 555, 278, 1, 302, 129, 430, 65, 366, 193, 494, 257, 33, 334, 161, 462, 97, 398, 225, 526, 17, 318, 145, 446, 81, 382, 209, 510, 286, 49, 350, 177, 478, 113, 414, 241, 542, 273, 9, 310, 137, 438, 73, 374, 201, 502, 265, 41, 342, 169, 470, 105, 406, 233, 534, 25, 326, 153, 454, 89, 390, 217, 518, 294, 57, 358, 185, 486, 121, 422, 249, 550, 277, 5, 306, 133, 434, 69, 370, 197, 498, 261, 37, 338, 165, 466, 101, 402, 229, 530, 21, 322, 149, 450, 85, 386, 213, 514, 290, 53, 354, 181, 482, 117, 418, 245, 546, 282, 13, 314, 141, 442, 77, 378, 205, 506, 269, 45, 346, 173, 474, 109, 410, 237, 538, 29, 330, 157, 458, 93, 394, 221, 522, 298, 61, 362, 189, 490, 125, 426, 253, 554, 3, 304, 131, 432, 67, 368, 195, 496, 259, 35, 336, 163, 464, 99, 400, 227, 528, 19, 320, 147, 448, 83, 384, 211, 512, 288, 51, 352, 179, 480, 115, 416, 243, 544, 275, 11, 312, 139, 440, 75, 376, 203, 504, 267, 43, 344, 171, 472, 107, 408, 235, 536, 27, 328, 155, 456, 91, 392, 219, 520, 296, 59, 360, 187, 488, 123, 424, 251, 552, 280, 7, 308, 135, 436, 71, 372, 199, 500, 263, 39, 340, 167, 468, 103, 404, 231, 532, 23, 324, 151, 452, 87, 388, 215, 516, 292, 55, 356, 183, 484, 119, 420, 247, 548, 284, 15, 316, 143, 444, 79, 380, 207, 508, 271, 47, 348, 175, 476, 111, 412, 239, 540, 31, 332, 159, 460, 95, 396, 223, 524, 300, 63, 364, 191, 492, 127, 428, 255, 556]; + + return (unsafe{*PERM557.get_unchecked((index % 557) as usize)} as u32 * 310249 + + unsafe{*PERM557.get_unchecked(((index / 557) % 557) as usize)} as u32 * 557 + + unsafe{*PERM557.get_unchecked(((index / 310249) % 557) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (172808693u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton563(index: u32) -> f32 { - const PERM563: [u16; 563] = [0, 307, 128, 435, 64, 371, 192, 499, 256, 32, 339, 160, 467, 96, - 403, 224, 531, 272, 16, 323, 144, 451, 80, 387, 208, 515, 291, - 48, 355, 176, 483, 112, 419, 240, 547, 8, 315, 136, 443, 72, 379, - 200, 507, 264, 40, 347, 168, 475, 104, 411, 232, 539, 283, 24, - 331, 152, 459, 88, 395, 216, 523, 299, 56, 363, 184, 491, 120, - 427, 248, 555, 4, 311, 132, 439, 68, 375, 196, 503, 260, 36, 343, - 164, 471, 100, 407, 228, 535, 276, 20, 327, 148, 455, 84, 391, - 212, 519, 295, 52, 359, 180, 487, 116, 423, 244, 551, 12, 319, - 140, 447, 76, 383, 204, 511, 268, 44, 351, 172, 479, 108, 415, - 236, 543, 287, 28, 335, 156, 463, 92, 399, 220, 527, 303, 60, - 367, 188, 495, 124, 431, 252, 559, 280, 2, 309, 130, 437, 66, - 373, 194, 501, 258, 34, 341, 162, 469, 98, 405, 226, 533, 274, - 18, 325, 146, 453, 82, 389, 210, 517, 293, 50, 357, 178, 485, - 114, 421, 242, 549, 10, 317, 138, 445, 74, 381, 202, 509, 266, - 42, 349, 170, 477, 106, 413, 234, 541, 285, 26, 333, 154, 461, - 90, 397, 218, 525, 301, 58, 365, 186, 493, 122, 429, 250, 557, 6, - 313, 134, 441, 70, 377, 198, 505, 262, 38, 345, 166, 473, 102, - 409, 230, 537, 278, 22, 329, 150, 457, 86, 393, 214, 521, 297, - 54, 361, 182, 489, 118, 425, 246, 553, 14, 321, 142, 449, 78, - 385, 206, 513, 270, 46, 353, 174, 481, 110, 417, 238, 545, 289, - 30, 337, 158, 465, 94, 401, 222, 529, 305, 62, 369, 190, 497, - 126, 433, 254, 561, 281, 1, 308, 129, 436, 65, 372, 193, 500, - 257, 33, 340, 161, 468, 97, 404, 225, 532, 273, 17, 324, 145, - 452, 81, 388, 209, 516, 292, 49, 356, 177, 484, 113, 420, 241, - 548, 9, 316, 137, 444, 73, 380, 201, 508, 265, 41, 348, 169, 476, - 105, 412, 233, 540, 284, 25, 332, 153, 460, 89, 396, 217, 524, - 300, 57, 364, 185, 492, 121, 428, 249, 556, 5, 312, 133, 440, 69, - 376, 197, 504, 261, 37, 344, 165, 472, 101, 408, 229, 536, 277, - 21, 328, 149, 456, 85, 392, 213, 520, 296, 53, 360, 181, 488, - 117, 424, 245, 552, 13, 320, 141, 448, 77, 384, 205, 512, 269, - 45, 352, 173, 480, 109, 416, 237, 544, 288, 29, 336, 157, 464, - 93, 400, 221, 528, 304, 61, 368, 189, 496, 125, 432, 253, 560, - 282, 3, 310, 131, 438, 67, 374, 195, 502, 259, 35, 342, 163, 470, - 99, 406, 227, 534, 275, 19, 326, 147, 454, 83, 390, 211, 518, - 294, 51, 358, 179, 486, 115, 422, 243, 550, 11, 318, 139, 446, - 75, 382, 203, 510, 267, 43, 350, 171, 478, 107, 414, 235, 542, - 286, 27, 334, 155, 462, 91, 398, 219, 526, 302, 59, 366, 187, - 494, 123, 430, 251, 558, 7, 314, 135, 442, 71, 378, 199, 506, - 263, 39, 346, 167, 474, 103, 410, 231, 538, 279, 23, 330, 151, - 458, 87, 394, 215, 522, 298, 55, 362, 183, 490, 119, 426, 247, - 554, 15, 322, 143, 450, 79, 386, 207, 514, 271, 47, 354, 175, - 482, 111, 418, 239, 546, 290, 31, 338, 159, 466, 95, 402, 223, - 530, 306, 63, 370, 191, 498, 127, 434, 255, 562]; - - return (unsafe { *PERM563.get_unchecked((index % 563) as usize) } as u32 * 316969 + - unsafe { *PERM563.get_unchecked(((index / 563) % 563) as usize) } as u32 * 563 + - unsafe { - *PERM563.get_unchecked(((index / 316969) % 563) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (178453547u32 as f32)); // Results in [0,1). + const PERM563: [u16; 563] = [0, 307, 128, 435, 64, 371, 192, 499, 256, 32, 339, 160, 467, 96, 403, 224, 531, 272, 16, 323, 144, 451, 80, 387, 208, 515, 291, 48, 355, 176, 483, 112, 419, 240, 547, 8, 315, 136, 443, 72, 379, 200, 507, 264, 40, 347, 168, 475, 104, 411, 232, 539, 283, 24, 331, 152, 459, 88, 395, 216, 523, 299, 56, 363, 184, 491, 120, 427, 248, 555, 4, 311, 132, 439, 68, 375, 196, 503, 260, 36, 343, 164, 471, 100, 407, 228, 535, 276, 20, 327, 148, 455, 84, 391, 212, 519, 295, 52, 359, 180, 487, 116, 423, 244, 551, 12, 319, 140, 447, 76, 383, 204, 511, 268, 44, 351, 172, 479, 108, 415, 236, 543, 287, 28, 335, 156, 463, 92, 399, 220, 527, 303, 60, 367, 188, 495, 124, 431, 252, 559, 280, 2, 309, 130, 437, 66, 373, 194, 501, 258, 34, 341, 162, 469, 98, 405, 226, 533, 274, 18, 325, 146, 453, 82, 389, 210, 517, 293, 50, 357, 178, 485, 114, 421, 242, 549, 10, 317, 138, 445, 74, 381, 202, 509, 266, 42, 349, 170, 477, 106, 413, 234, 541, 285, 26, 333, 154, 461, 90, 397, 218, 525, 301, 58, 365, 186, 493, 122, 429, 250, 557, 6, 313, 134, 441, 70, 377, 198, 505, 262, 38, 345, 166, 473, 102, 409, 230, 537, 278, 22, 329, 150, 457, 86, 393, 214, 521, 297, 54, 361, 182, 489, 118, 425, 246, 553, 14, 321, 142, 449, 78, 385, 206, 513, 270, 46, 353, 174, 481, 110, 417, 238, 545, 289, 30, 337, 158, 465, 94, 401, 222, 529, 305, 62, 369, 190, 497, 126, 433, 254, 561, 281, 1, 308, 129, 436, 65, 372, 193, 500, 257, 33, 340, 161, 468, 97, 404, 225, 532, 273, 17, 324, 145, 452, 81, 388, 209, 516, 292, 49, 356, 177, 484, 113, 420, 241, 548, 9, 316, 137, 444, 73, 380, 201, 508, 265, 41, 348, 169, 476, 105, 412, 233, 540, 284, 25, 332, 153, 460, 89, 396, 217, 524, 300, 57, 364, 185, 492, 121, 428, 249, 556, 5, 312, 133, 440, 69, 376, 197, 504, 261, 37, 344, 165, 472, 101, 408, 229, 536, 277, 21, 328, 149, 456, 85, 392, 213, 520, 296, 53, 360, 181, 488, 117, 424, 245, 552, 13, 320, 141, 448, 77, 384, 205, 512, 269, 45, 352, 173, 480, 109, 416, 237, 544, 288, 29, 336, 157, 464, 93, 400, 221, 528, 304, 61, 368, 189, 496, 125, 432, 253, 560, 282, 3, 310, 131, 438, 67, 374, 195, 502, 259, 35, 342, 163, 470, 99, 406, 227, 534, 275, 19, 326, 147, 454, 83, 390, 211, 518, 294, 51, 358, 179, 486, 115, 422, 243, 550, 11, 318, 139, 446, 75, 382, 203, 510, 267, 43, 350, 171, 478, 107, 414, 235, 542, 286, 27, 334, 155, 462, 91, 398, 219, 526, 302, 59, 366, 187, 494, 123, 430, 251, 558, 7, 314, 135, 442, 71, 378, 199, 506, 263, 39, 346, 167, 474, 103, 410, 231, 538, 279, 23, 330, 151, 458, 87, 394, 215, 522, 298, 55, 362, 183, 490, 119, 426, 247, 554, 15, 322, 143, 450, 79, 386, 207, 514, 271, 47, 354, 175, 482, 111, 418, 239, 546, 290, 31, 338, 159, 466, 95, 402, 223, 530, 306, 63, 370, 191, 498, 127, 434, 255, 562]; + + return (unsafe{*PERM563.get_unchecked((index % 563) as usize)} as u32 * 316969 + + unsafe{*PERM563.get_unchecked(((index / 563) % 563) as usize)} as u32 * 563 + + unsafe{*PERM563.get_unchecked(((index / 316969) % 563) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (178453547u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton569(index: u32) -> f32 { - const PERM569: [u16; 569] = [0, 313, 128, 441, 64, 377, 192, 505, 256, 32, 345, 160, 473, 96, - 409, 224, 537, 272, 16, 329, 144, 457, 80, 393, 208, 521, 297, - 48, 361, 176, 489, 112, 425, 240, 553, 280, 8, 321, 136, 449, 72, - 385, 200, 513, 264, 40, 353, 168, 481, 104, 417, 232, 545, 289, - 24, 337, 152, 465, 88, 401, 216, 529, 305, 56, 369, 184, 497, - 120, 433, 248, 561, 4, 317, 132, 445, 68, 381, 196, 509, 260, 36, - 349, 164, 477, 100, 413, 228, 541, 276, 20, 333, 148, 461, 84, - 397, 212, 525, 301, 52, 365, 180, 493, 116, 429, 244, 557, 285, - 12, 325, 140, 453, 76, 389, 204, 517, 268, 44, 357, 172, 485, - 108, 421, 236, 549, 293, 28, 341, 156, 469, 92, 405, 220, 533, - 309, 60, 373, 188, 501, 124, 437, 252, 565, 2, 315, 130, 443, 66, - 379, 194, 507, 258, 34, 347, 162, 475, 98, 411, 226, 539, 274, - 18, 331, 146, 459, 82, 395, 210, 523, 299, 50, 363, 178, 491, - 114, 427, 242, 555, 282, 10, 323, 138, 451, 74, 387, 202, 515, - 266, 42, 355, 170, 483, 106, 419, 234, 547, 291, 26, 339, 154, - 467, 90, 403, 218, 531, 307, 58, 371, 186, 499, 122, 435, 250, - 563, 6, 319, 134, 447, 70, 383, 198, 511, 262, 38, 351, 166, 479, - 102, 415, 230, 543, 278, 22, 335, 150, 463, 86, 399, 214, 527, - 303, 54, 367, 182, 495, 118, 431, 246, 559, 287, 14, 327, 142, - 455, 78, 391, 206, 519, 270, 46, 359, 174, 487, 110, 423, 238, - 551, 295, 30, 343, 158, 471, 94, 407, 222, 535, 311, 62, 375, - 190, 503, 126, 439, 254, 567, 284, 1, 314, 129, 442, 65, 378, - 193, 506, 257, 33, 346, 161, 474, 97, 410, 225, 538, 273, 17, - 330, 145, 458, 81, 394, 209, 522, 298, 49, 362, 177, 490, 113, - 426, 241, 554, 281, 9, 322, 137, 450, 73, 386, 201, 514, 265, 41, - 354, 169, 482, 105, 418, 233, 546, 290, 25, 338, 153, 466, 89, - 402, 217, 530, 306, 57, 370, 185, 498, 121, 434, 249, 562, 5, - 318, 133, 446, 69, 382, 197, 510, 261, 37, 350, 165, 478, 101, - 414, 229, 542, 277, 21, 334, 149, 462, 85, 398, 213, 526, 302, - 53, 366, 181, 494, 117, 430, 245, 558, 286, 13, 326, 141, 454, - 77, 390, 205, 518, 269, 45, 358, 173, 486, 109, 422, 237, 550, - 294, 29, 342, 157, 470, 93, 406, 221, 534, 310, 61, 374, 189, - 502, 125, 438, 253, 566, 3, 316, 131, 444, 67, 380, 195, 508, - 259, 35, 348, 163, 476, 99, 412, 227, 540, 275, 19, 332, 147, - 460, 83, 396, 211, 524, 300, 51, 364, 179, 492, 115, 428, 243, - 556, 283, 11, 324, 139, 452, 75, 388, 203, 516, 267, 43, 356, - 171, 484, 107, 420, 235, 548, 292, 27, 340, 155, 468, 91, 404, - 219, 532, 308, 59, 372, 187, 500, 123, 436, 251, 564, 7, 320, - 135, 448, 71, 384, 199, 512, 263, 39, 352, 167, 480, 103, 416, - 231, 544, 279, 23, 336, 151, 464, 87, 400, 215, 528, 304, 55, - 368, 183, 496, 119, 432, 247, 560, 288, 15, 328, 143, 456, 79, - 392, 207, 520, 271, 47, 360, 175, 488, 111, 424, 239, 552, 296, - 31, 344, 159, 472, 95, 408, 223, 536, 312, 63, 376, 191, 504, - 127, 440, 255, 568]; - - return (unsafe { *PERM569.get_unchecked((index % 569) as usize) } as u32 * 323761 + - unsafe { *PERM569.get_unchecked(((index / 569) % 569) as usize) } as u32 * 569 + - unsafe { - *PERM569.get_unchecked(((index / 323761) % 569) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (184220009u32 as f32)); // Results in [0,1). + const PERM569: [u16; 569] = [0, 313, 128, 441, 64, 377, 192, 505, 256, 32, 345, 160, 473, 96, 409, 224, 537, 272, 16, 329, 144, 457, 80, 393, 208, 521, 297, 48, 361, 176, 489, 112, 425, 240, 553, 280, 8, 321, 136, 449, 72, 385, 200, 513, 264, 40, 353, 168, 481, 104, 417, 232, 545, 289, 24, 337, 152, 465, 88, 401, 216, 529, 305, 56, 369, 184, 497, 120, 433, 248, 561, 4, 317, 132, 445, 68, 381, 196, 509, 260, 36, 349, 164, 477, 100, 413, 228, 541, 276, 20, 333, 148, 461, 84, 397, 212, 525, 301, 52, 365, 180, 493, 116, 429, 244, 557, 285, 12, 325, 140, 453, 76, 389, 204, 517, 268, 44, 357, 172, 485, 108, 421, 236, 549, 293, 28, 341, 156, 469, 92, 405, 220, 533, 309, 60, 373, 188, 501, 124, 437, 252, 565, 2, 315, 130, 443, 66, 379, 194, 507, 258, 34, 347, 162, 475, 98, 411, 226, 539, 274, 18, 331, 146, 459, 82, 395, 210, 523, 299, 50, 363, 178, 491, 114, 427, 242, 555, 282, 10, 323, 138, 451, 74, 387, 202, 515, 266, 42, 355, 170, 483, 106, 419, 234, 547, 291, 26, 339, 154, 467, 90, 403, 218, 531, 307, 58, 371, 186, 499, 122, 435, 250, 563, 6, 319, 134, 447, 70, 383, 198, 511, 262, 38, 351, 166, 479, 102, 415, 230, 543, 278, 22, 335, 150, 463, 86, 399, 214, 527, 303, 54, 367, 182, 495, 118, 431, 246, 559, 287, 14, 327, 142, 455, 78, 391, 206, 519, 270, 46, 359, 174, 487, 110, 423, 238, 551, 295, 30, 343, 158, 471, 94, 407, 222, 535, 311, 62, 375, 190, 503, 126, 439, 254, 567, 284, 1, 314, 129, 442, 65, 378, 193, 506, 257, 33, 346, 161, 474, 97, 410, 225, 538, 273, 17, 330, 145, 458, 81, 394, 209, 522, 298, 49, 362, 177, 490, 113, 426, 241, 554, 281, 9, 322, 137, 450, 73, 386, 201, 514, 265, 41, 354, 169, 482, 105, 418, 233, 546, 290, 25, 338, 153, 466, 89, 402, 217, 530, 306, 57, 370, 185, 498, 121, 434, 249, 562, 5, 318, 133, 446, 69, 382, 197, 510, 261, 37, 350, 165, 478, 101, 414, 229, 542, 277, 21, 334, 149, 462, 85, 398, 213, 526, 302, 53, 366, 181, 494, 117, 430, 245, 558, 286, 13, 326, 141, 454, 77, 390, 205, 518, 269, 45, 358, 173, 486, 109, 422, 237, 550, 294, 29, 342, 157, 470, 93, 406, 221, 534, 310, 61, 374, 189, 502, 125, 438, 253, 566, 3, 316, 131, 444, 67, 380, 195, 508, 259, 35, 348, 163, 476, 99, 412, 227, 540, 275, 19, 332, 147, 460, 83, 396, 211, 524, 300, 51, 364, 179, 492, 115, 428, 243, 556, 283, 11, 324, 139, 452, 75, 388, 203, 516, 267, 43, 356, 171, 484, 107, 420, 235, 548, 292, 27, 340, 155, 468, 91, 404, 219, 532, 308, 59, 372, 187, 500, 123, 436, 251, 564, 7, 320, 135, 448, 71, 384, 199, 512, 263, 39, 352, 167, 480, 103, 416, 231, 544, 279, 23, 336, 151, 464, 87, 400, 215, 528, 304, 55, 368, 183, 496, 119, 432, 247, 560, 288, 15, 328, 143, 456, 79, 392, 207, 520, 271, 47, 360, 175, 488, 111, 424, 239, 552, 296, 31, 344, 159, 472, 95, 408, 223, 536, 312, 63, 376, 191, 504, 127, 440, 255, 568]; + + return (unsafe{*PERM569.get_unchecked((index % 569) as usize)} as u32 * 323761 + + unsafe{*PERM569.get_unchecked(((index / 569) % 569) as usize)} as u32 * 569 + + unsafe{*PERM569.get_unchecked(((index / 323761) % 569) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (184220009u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton571(index: u32) -> f32 { - const PERM571: [u16; 571] = [0, 315, 128, 443, 64, 379, 192, 507, 256, 32, 347, 160, 475, 96, - 411, 224, 539, 272, 16, 331, 144, 459, 80, 395, 208, 523, 299, - 48, 363, 176, 491, 112, 427, 240, 555, 280, 8, 323, 136, 451, 72, - 387, 200, 515, 264, 40, 355, 168, 483, 104, 419, 232, 547, 291, - 24, 339, 152, 467, 88, 403, 216, 531, 307, 56, 371, 184, 499, - 120, 435, 248, 563, 4, 319, 132, 447, 68, 383, 196, 511, 260, 36, - 351, 164, 479, 100, 415, 228, 543, 276, 20, 335, 148, 463, 84, - 399, 212, 527, 303, 52, 367, 180, 495, 116, 431, 244, 559, 287, - 12, 327, 140, 455, 76, 391, 204, 519, 268, 44, 359, 172, 487, - 108, 423, 236, 551, 295, 28, 343, 156, 471, 92, 407, 220, 535, - 311, 60, 375, 188, 503, 124, 439, 252, 567, 284, 2, 317, 130, - 445, 66, 381, 194, 509, 258, 34, 349, 162, 477, 98, 413, 226, - 541, 274, 18, 333, 146, 461, 82, 397, 210, 525, 301, 50, 365, - 178, 493, 114, 429, 242, 557, 282, 10, 325, 138, 453, 74, 389, - 202, 517, 266, 42, 357, 170, 485, 106, 421, 234, 549, 293, 26, - 341, 154, 469, 90, 405, 218, 533, 309, 58, 373, 186, 501, 122, - 437, 250, 565, 6, 321, 134, 449, 70, 385, 198, 513, 262, 38, 353, - 166, 481, 102, 417, 230, 545, 278, 22, 337, 150, 465, 86, 401, - 214, 529, 305, 54, 369, 182, 497, 118, 433, 246, 561, 289, 14, - 329, 142, 457, 78, 393, 206, 521, 270, 46, 361, 174, 489, 110, - 425, 238, 553, 297, 30, 345, 158, 473, 94, 409, 222, 537, 313, - 62, 377, 190, 505, 126, 441, 254, 569, 285, 1, 316, 129, 444, 65, - 380, 193, 508, 257, 33, 348, 161, 476, 97, 412, 225, 540, 273, - 17, 332, 145, 460, 81, 396, 209, 524, 300, 49, 364, 177, 492, - 113, 428, 241, 556, 281, 9, 324, 137, 452, 73, 388, 201, 516, - 265, 41, 356, 169, 484, 105, 420, 233, 548, 292, 25, 340, 153, - 468, 89, 404, 217, 532, 308, 57, 372, 185, 500, 121, 436, 249, - 564, 5, 320, 133, 448, 69, 384, 197, 512, 261, 37, 352, 165, 480, - 101, 416, 229, 544, 277, 21, 336, 149, 464, 85, 400, 213, 528, - 304, 53, 368, 181, 496, 117, 432, 245, 560, 288, 13, 328, 141, - 456, 77, 392, 205, 520, 269, 45, 360, 173, 488, 109, 424, 237, - 552, 296, 29, 344, 157, 472, 93, 408, 221, 536, 312, 61, 376, - 189, 504, 125, 440, 253, 568, 286, 3, 318, 131, 446, 67, 382, - 195, 510, 259, 35, 350, 163, 478, 99, 414, 227, 542, 275, 19, - 334, 147, 462, 83, 398, 211, 526, 302, 51, 366, 179, 494, 115, - 430, 243, 558, 283, 11, 326, 139, 454, 75, 390, 203, 518, 267, - 43, 358, 171, 486, 107, 422, 235, 550, 294, 27, 342, 155, 470, - 91, 406, 219, 534, 310, 59, 374, 187, 502, 123, 438, 251, 566, 7, - 322, 135, 450, 71, 386, 199, 514, 263, 39, 354, 167, 482, 103, - 418, 231, 546, 279, 23, 338, 151, 466, 87, 402, 215, 530, 306, - 55, 370, 183, 498, 119, 434, 247, 562, 290, 15, 330, 143, 458, - 79, 394, 207, 522, 271, 47, 362, 175, 490, 111, 426, 239, 554, - 298, 31, 346, 159, 474, 95, 410, 223, 538, 314, 63, 378, 191, - 506, 127, 442, 255, 570]; - - return (unsafe { *PERM571.get_unchecked((index % 571) as usize) } as u32 * 326041 + - unsafe { *PERM571.get_unchecked(((index / 571) % 571) as usize) } as u32 * 571 + - unsafe { - *PERM571.get_unchecked(((index / 326041) % 571) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (186169411u32 as f32)); // Results in [0,1). + const PERM571: [u16; 571] = [0, 315, 128, 443, 64, 379, 192, 507, 256, 32, 347, 160, 475, 96, 411, 224, 539, 272, 16, 331, 144, 459, 80, 395, 208, 523, 299, 48, 363, 176, 491, 112, 427, 240, 555, 280, 8, 323, 136, 451, 72, 387, 200, 515, 264, 40, 355, 168, 483, 104, 419, 232, 547, 291, 24, 339, 152, 467, 88, 403, 216, 531, 307, 56, 371, 184, 499, 120, 435, 248, 563, 4, 319, 132, 447, 68, 383, 196, 511, 260, 36, 351, 164, 479, 100, 415, 228, 543, 276, 20, 335, 148, 463, 84, 399, 212, 527, 303, 52, 367, 180, 495, 116, 431, 244, 559, 287, 12, 327, 140, 455, 76, 391, 204, 519, 268, 44, 359, 172, 487, 108, 423, 236, 551, 295, 28, 343, 156, 471, 92, 407, 220, 535, 311, 60, 375, 188, 503, 124, 439, 252, 567, 284, 2, 317, 130, 445, 66, 381, 194, 509, 258, 34, 349, 162, 477, 98, 413, 226, 541, 274, 18, 333, 146, 461, 82, 397, 210, 525, 301, 50, 365, 178, 493, 114, 429, 242, 557, 282, 10, 325, 138, 453, 74, 389, 202, 517, 266, 42, 357, 170, 485, 106, 421, 234, 549, 293, 26, 341, 154, 469, 90, 405, 218, 533, 309, 58, 373, 186, 501, 122, 437, 250, 565, 6, 321, 134, 449, 70, 385, 198, 513, 262, 38, 353, 166, 481, 102, 417, 230, 545, 278, 22, 337, 150, 465, 86, 401, 214, 529, 305, 54, 369, 182, 497, 118, 433, 246, 561, 289, 14, 329, 142, 457, 78, 393, 206, 521, 270, 46, 361, 174, 489, 110, 425, 238, 553, 297, 30, 345, 158, 473, 94, 409, 222, 537, 313, 62, 377, 190, 505, 126, 441, 254, 569, 285, 1, 316, 129, 444, 65, 380, 193, 508, 257, 33, 348, 161, 476, 97, 412, 225, 540, 273, 17, 332, 145, 460, 81, 396, 209, 524, 300, 49, 364, 177, 492, 113, 428, 241, 556, 281, 9, 324, 137, 452, 73, 388, 201, 516, 265, 41, 356, 169, 484, 105, 420, 233, 548, 292, 25, 340, 153, 468, 89, 404, 217, 532, 308, 57, 372, 185, 500, 121, 436, 249, 564, 5, 320, 133, 448, 69, 384, 197, 512, 261, 37, 352, 165, 480, 101, 416, 229, 544, 277, 21, 336, 149, 464, 85, 400, 213, 528, 304, 53, 368, 181, 496, 117, 432, 245, 560, 288, 13, 328, 141, 456, 77, 392, 205, 520, 269, 45, 360, 173, 488, 109, 424, 237, 552, 296, 29, 344, 157, 472, 93, 408, 221, 536, 312, 61, 376, 189, 504, 125, 440, 253, 568, 286, 3, 318, 131, 446, 67, 382, 195, 510, 259, 35, 350, 163, 478, 99, 414, 227, 542, 275, 19, 334, 147, 462, 83, 398, 211, 526, 302, 51, 366, 179, 494, 115, 430, 243, 558, 283, 11, 326, 139, 454, 75, 390, 203, 518, 267, 43, 358, 171, 486, 107, 422, 235, 550, 294, 27, 342, 155, 470, 91, 406, 219, 534, 310, 59, 374, 187, 502, 123, 438, 251, 566, 7, 322, 135, 450, 71, 386, 199, 514, 263, 39, 354, 167, 482, 103, 418, 231, 546, 279, 23, 338, 151, 466, 87, 402, 215, 530, 306, 55, 370, 183, 498, 119, 434, 247, 562, 290, 15, 330, 143, 458, 79, 394, 207, 522, 271, 47, 362, 175, 490, 111, 426, 239, 554, 298, 31, 346, 159, 474, 95, 410, 223, 538, 314, 63, 378, 191, 506, 127, 442, 255, 570]; + + return (unsafe{*PERM571.get_unchecked((index % 571) as usize)} as u32 * 326041 + + unsafe{*PERM571.get_unchecked(((index / 571) % 571) as usize)} as u32 * 571 + + unsafe{*PERM571.get_unchecked(((index / 326041) % 571) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (186169411u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton577(index: u32) -> f32 { - const PERM577: [u16; 577] = [0, 321, 128, 449, 256, 64, 385, 192, 513, 32, 353, 160, 481, 289, - 96, 417, 224, 545, 16, 337, 144, 465, 272, 80, 401, 208, 529, 48, - 369, 176, 497, 305, 112, 433, 240, 561, 8, 329, 136, 457, 264, - 72, 393, 200, 521, 40, 361, 168, 489, 297, 104, 425, 232, 553, - 24, 345, 152, 473, 280, 88, 409, 216, 537, 56, 377, 184, 505, - 313, 120, 441, 248, 569, 4, 325, 132, 453, 260, 68, 389, 196, - 517, 36, 357, 164, 485, 293, 100, 421, 228, 549, 20, 341, 148, - 469, 276, 84, 405, 212, 533, 52, 373, 180, 501, 309, 116, 437, - 244, 565, 12, 333, 140, 461, 268, 76, 397, 204, 525, 44, 365, - 172, 493, 301, 108, 429, 236, 557, 28, 349, 156, 477, 284, 92, - 413, 220, 541, 60, 381, 188, 509, 317, 124, 445, 252, 573, 2, - 323, 130, 451, 258, 66, 387, 194, 515, 34, 355, 162, 483, 291, - 98, 419, 226, 547, 18, 339, 146, 467, 274, 82, 403, 210, 531, 50, - 371, 178, 499, 307, 114, 435, 242, 563, 10, 331, 138, 459, 266, - 74, 395, 202, 523, 42, 363, 170, 491, 299, 106, 427, 234, 555, - 26, 347, 154, 475, 282, 90, 411, 218, 539, 58, 379, 186, 507, - 315, 122, 443, 250, 571, 6, 327, 134, 455, 262, 70, 391, 198, - 519, 38, 359, 166, 487, 295, 102, 423, 230, 551, 22, 343, 150, - 471, 278, 86, 407, 214, 535, 54, 375, 182, 503, 311, 118, 439, - 246, 567, 14, 335, 142, 463, 270, 78, 399, 206, 527, 46, 367, - 174, 495, 303, 110, 431, 238, 559, 30, 351, 158, 479, 286, 94, - 415, 222, 543, 62, 383, 190, 511, 319, 126, 447, 254, 575, 288, - 1, 322, 129, 450, 257, 65, 386, 193, 514, 33, 354, 161, 482, 290, - 97, 418, 225, 546, 17, 338, 145, 466, 273, 81, 402, 209, 530, 49, - 370, 177, 498, 306, 113, 434, 241, 562, 9, 330, 137, 458, 265, - 73, 394, 201, 522, 41, 362, 169, 490, 298, 105, 426, 233, 554, - 25, 346, 153, 474, 281, 89, 410, 217, 538, 57, 378, 185, 506, - 314, 121, 442, 249, 570, 5, 326, 133, 454, 261, 69, 390, 197, - 518, 37, 358, 165, 486, 294, 101, 422, 229, 550, 21, 342, 149, - 470, 277, 85, 406, 213, 534, 53, 374, 181, 502, 310, 117, 438, - 245, 566, 13, 334, 141, 462, 269, 77, 398, 205, 526, 45, 366, - 173, 494, 302, 109, 430, 237, 558, 29, 350, 157, 478, 285, 93, - 414, 221, 542, 61, 382, 189, 510, 318, 125, 446, 253, 574, 3, - 324, 131, 452, 259, 67, 388, 195, 516, 35, 356, 163, 484, 292, - 99, 420, 227, 548, 19, 340, 147, 468, 275, 83, 404, 211, 532, 51, - 372, 179, 500, 308, 115, 436, 243, 564, 11, 332, 139, 460, 267, - 75, 396, 203, 524, 43, 364, 171, 492, 300, 107, 428, 235, 556, - 27, 348, 155, 476, 283, 91, 412, 219, 540, 59, 380, 187, 508, - 316, 123, 444, 251, 572, 7, 328, 135, 456, 263, 71, 392, 199, - 520, 39, 360, 167, 488, 296, 103, 424, 231, 552, 23, 344, 151, - 472, 279, 87, 408, 215, 536, 55, 376, 183, 504, 312, 119, 440, - 247, 568, 15, 336, 143, 464, 271, 79, 400, 207, 528, 47, 368, - 175, 496, 304, 111, 432, 239, 560, 31, 352, 159, 480, 287, 95, - 416, 223, 544, 63, 384, 191, 512, 320, 127, 448, 255, 576]; - - return (unsafe { *PERM577.get_unchecked((index % 577) as usize) } as u32 * 332929 + - unsafe { *PERM577.get_unchecked(((index / 577) % 577) as usize) } as u32 * 577 + - unsafe { - *PERM577.get_unchecked(((index / 332929) % 577) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (192100033u32 as f32)); // Results in [0,1). + const PERM577: [u16; 577] = [0, 321, 128, 449, 256, 64, 385, 192, 513, 32, 353, 160, 481, 289, 96, 417, 224, 545, 16, 337, 144, 465, 272, 80, 401, 208, 529, 48, 369, 176, 497, 305, 112, 433, 240, 561, 8, 329, 136, 457, 264, 72, 393, 200, 521, 40, 361, 168, 489, 297, 104, 425, 232, 553, 24, 345, 152, 473, 280, 88, 409, 216, 537, 56, 377, 184, 505, 313, 120, 441, 248, 569, 4, 325, 132, 453, 260, 68, 389, 196, 517, 36, 357, 164, 485, 293, 100, 421, 228, 549, 20, 341, 148, 469, 276, 84, 405, 212, 533, 52, 373, 180, 501, 309, 116, 437, 244, 565, 12, 333, 140, 461, 268, 76, 397, 204, 525, 44, 365, 172, 493, 301, 108, 429, 236, 557, 28, 349, 156, 477, 284, 92, 413, 220, 541, 60, 381, 188, 509, 317, 124, 445, 252, 573, 2, 323, 130, 451, 258, 66, 387, 194, 515, 34, 355, 162, 483, 291, 98, 419, 226, 547, 18, 339, 146, 467, 274, 82, 403, 210, 531, 50, 371, 178, 499, 307, 114, 435, 242, 563, 10, 331, 138, 459, 266, 74, 395, 202, 523, 42, 363, 170, 491, 299, 106, 427, 234, 555, 26, 347, 154, 475, 282, 90, 411, 218, 539, 58, 379, 186, 507, 315, 122, 443, 250, 571, 6, 327, 134, 455, 262, 70, 391, 198, 519, 38, 359, 166, 487, 295, 102, 423, 230, 551, 22, 343, 150, 471, 278, 86, 407, 214, 535, 54, 375, 182, 503, 311, 118, 439, 246, 567, 14, 335, 142, 463, 270, 78, 399, 206, 527, 46, 367, 174, 495, 303, 110, 431, 238, 559, 30, 351, 158, 479, 286, 94, 415, 222, 543, 62, 383, 190, 511, 319, 126, 447, 254, 575, 288, 1, 322, 129, 450, 257, 65, 386, 193, 514, 33, 354, 161, 482, 290, 97, 418, 225, 546, 17, 338, 145, 466, 273, 81, 402, 209, 530, 49, 370, 177, 498, 306, 113, 434, 241, 562, 9, 330, 137, 458, 265, 73, 394, 201, 522, 41, 362, 169, 490, 298, 105, 426, 233, 554, 25, 346, 153, 474, 281, 89, 410, 217, 538, 57, 378, 185, 506, 314, 121, 442, 249, 570, 5, 326, 133, 454, 261, 69, 390, 197, 518, 37, 358, 165, 486, 294, 101, 422, 229, 550, 21, 342, 149, 470, 277, 85, 406, 213, 534, 53, 374, 181, 502, 310, 117, 438, 245, 566, 13, 334, 141, 462, 269, 77, 398, 205, 526, 45, 366, 173, 494, 302, 109, 430, 237, 558, 29, 350, 157, 478, 285, 93, 414, 221, 542, 61, 382, 189, 510, 318, 125, 446, 253, 574, 3, 324, 131, 452, 259, 67, 388, 195, 516, 35, 356, 163, 484, 292, 99, 420, 227, 548, 19, 340, 147, 468, 275, 83, 404, 211, 532, 51, 372, 179, 500, 308, 115, 436, 243, 564, 11, 332, 139, 460, 267, 75, 396, 203, 524, 43, 364, 171, 492, 300, 107, 428, 235, 556, 27, 348, 155, 476, 283, 91, 412, 219, 540, 59, 380, 187, 508, 316, 123, 444, 251, 572, 7, 328, 135, 456, 263, 71, 392, 199, 520, 39, 360, 167, 488, 296, 103, 424, 231, 552, 23, 344, 151, 472, 279, 87, 408, 215, 536, 55, 376, 183, 504, 312, 119, 440, 247, 568, 15, 336, 143, 464, 271, 79, 400, 207, 528, 47, 368, 175, 496, 304, 111, 432, 239, 560, 31, 352, 159, 480, 287, 95, 416, 223, 544, 63, 384, 191, 512, 320, 127, 448, 255, 576]; + + return (unsafe{*PERM577.get_unchecked((index % 577) as usize)} as u32 * 332929 + + unsafe{*PERM577.get_unchecked(((index / 577) % 577) as usize)} as u32 * 577 + + unsafe{*PERM577.get_unchecked(((index / 332929) % 577) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (192100033u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton587(index: u32) -> f32 { - const PERM587: [u16; 587] = [0, 331, 128, 459, 256, 64, 395, 192, 523, 32, 363, 160, 491, 299, - 96, 427, 224, 555, 16, 347, 144, 475, 272, 80, 411, 208, 539, 48, - 379, 176, 507, 315, 112, 443, 240, 571, 288, 8, 339, 136, 467, - 264, 72, 403, 200, 531, 40, 371, 168, 499, 307, 104, 435, 232, - 563, 24, 355, 152, 483, 280, 88, 419, 216, 547, 56, 387, 184, - 515, 323, 120, 451, 248, 579, 4, 335, 132, 463, 260, 68, 399, - 196, 527, 36, 367, 164, 495, 303, 100, 431, 228, 559, 20, 351, - 148, 479, 276, 84, 415, 212, 543, 52, 383, 180, 511, 319, 116, - 447, 244, 575, 295, 12, 343, 140, 471, 268, 76, 407, 204, 535, - 44, 375, 172, 503, 311, 108, 439, 236, 567, 28, 359, 156, 487, - 284, 92, 423, 220, 551, 60, 391, 188, 519, 327, 124, 455, 252, - 583, 292, 2, 333, 130, 461, 258, 66, 397, 194, 525, 34, 365, 162, - 493, 301, 98, 429, 226, 557, 18, 349, 146, 477, 274, 82, 413, - 210, 541, 50, 381, 178, 509, 317, 114, 445, 242, 573, 290, 10, - 341, 138, 469, 266, 74, 405, 202, 533, 42, 373, 170, 501, 309, - 106, 437, 234, 565, 26, 357, 154, 485, 282, 90, 421, 218, 549, - 58, 389, 186, 517, 325, 122, 453, 250, 581, 6, 337, 134, 465, - 262, 70, 401, 198, 529, 38, 369, 166, 497, 305, 102, 433, 230, - 561, 22, 353, 150, 481, 278, 86, 417, 214, 545, 54, 385, 182, - 513, 321, 118, 449, 246, 577, 297, 14, 345, 142, 473, 270, 78, - 409, 206, 537, 46, 377, 174, 505, 313, 110, 441, 238, 569, 30, - 361, 158, 489, 286, 94, 425, 222, 553, 62, 393, 190, 521, 329, - 126, 457, 254, 585, 293, 1, 332, 129, 460, 257, 65, 396, 193, - 524, 33, 364, 161, 492, 300, 97, 428, 225, 556, 17, 348, 145, - 476, 273, 81, 412, 209, 540, 49, 380, 177, 508, 316, 113, 444, - 241, 572, 289, 9, 340, 137, 468, 265, 73, 404, 201, 532, 41, 372, - 169, 500, 308, 105, 436, 233, 564, 25, 356, 153, 484, 281, 89, - 420, 217, 548, 57, 388, 185, 516, 324, 121, 452, 249, 580, 5, - 336, 133, 464, 261, 69, 400, 197, 528, 37, 368, 165, 496, 304, - 101, 432, 229, 560, 21, 352, 149, 480, 277, 85, 416, 213, 544, - 53, 384, 181, 512, 320, 117, 448, 245, 576, 296, 13, 344, 141, - 472, 269, 77, 408, 205, 536, 45, 376, 173, 504, 312, 109, 440, - 237, 568, 29, 360, 157, 488, 285, 93, 424, 221, 552, 61, 392, - 189, 520, 328, 125, 456, 253, 584, 294, 3, 334, 131, 462, 259, - 67, 398, 195, 526, 35, 366, 163, 494, 302, 99, 430, 227, 558, 19, - 350, 147, 478, 275, 83, 414, 211, 542, 51, 382, 179, 510, 318, - 115, 446, 243, 574, 291, 11, 342, 139, 470, 267, 75, 406, 203, - 534, 43, 374, 171, 502, 310, 107, 438, 235, 566, 27, 358, 155, - 486, 283, 91, 422, 219, 550, 59, 390, 187, 518, 326, 123, 454, - 251, 582, 7, 338, 135, 466, 263, 71, 402, 199, 530, 39, 370, 167, - 498, 306, 103, 434, 231, 562, 23, 354, 151, 482, 279, 87, 418, - 215, 546, 55, 386, 183, 514, 322, 119, 450, 247, 578, 298, 15, - 346, 143, 474, 271, 79, 410, 207, 538, 47, 378, 175, 506, 314, - 111, 442, 239, 570, 31, 362, 159, 490, 287, 95, 426, 223, 554, - 63, 394, 191, 522, 330, 127, 458, 255, 586]; - - return (unsafe { *PERM587.get_unchecked((index % 587) as usize) } as u32 * 344569 + - unsafe { *PERM587.get_unchecked(((index / 587) % 587) as usize) } as u32 * 587 + - unsafe { - *PERM587.get_unchecked(((index / 344569) % 587) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (202262003u32 as f32)); // Results in [0,1). + const PERM587: [u16; 587] = [0, 331, 128, 459, 256, 64, 395, 192, 523, 32, 363, 160, 491, 299, 96, 427, 224, 555, 16, 347, 144, 475, 272, 80, 411, 208, 539, 48, 379, 176, 507, 315, 112, 443, 240, 571, 288, 8, 339, 136, 467, 264, 72, 403, 200, 531, 40, 371, 168, 499, 307, 104, 435, 232, 563, 24, 355, 152, 483, 280, 88, 419, 216, 547, 56, 387, 184, 515, 323, 120, 451, 248, 579, 4, 335, 132, 463, 260, 68, 399, 196, 527, 36, 367, 164, 495, 303, 100, 431, 228, 559, 20, 351, 148, 479, 276, 84, 415, 212, 543, 52, 383, 180, 511, 319, 116, 447, 244, 575, 295, 12, 343, 140, 471, 268, 76, 407, 204, 535, 44, 375, 172, 503, 311, 108, 439, 236, 567, 28, 359, 156, 487, 284, 92, 423, 220, 551, 60, 391, 188, 519, 327, 124, 455, 252, 583, 292, 2, 333, 130, 461, 258, 66, 397, 194, 525, 34, 365, 162, 493, 301, 98, 429, 226, 557, 18, 349, 146, 477, 274, 82, 413, 210, 541, 50, 381, 178, 509, 317, 114, 445, 242, 573, 290, 10, 341, 138, 469, 266, 74, 405, 202, 533, 42, 373, 170, 501, 309, 106, 437, 234, 565, 26, 357, 154, 485, 282, 90, 421, 218, 549, 58, 389, 186, 517, 325, 122, 453, 250, 581, 6, 337, 134, 465, 262, 70, 401, 198, 529, 38, 369, 166, 497, 305, 102, 433, 230, 561, 22, 353, 150, 481, 278, 86, 417, 214, 545, 54, 385, 182, 513, 321, 118, 449, 246, 577, 297, 14, 345, 142, 473, 270, 78, 409, 206, 537, 46, 377, 174, 505, 313, 110, 441, 238, 569, 30, 361, 158, 489, 286, 94, 425, 222, 553, 62, 393, 190, 521, 329, 126, 457, 254, 585, 293, 1, 332, 129, 460, 257, 65, 396, 193, 524, 33, 364, 161, 492, 300, 97, 428, 225, 556, 17, 348, 145, 476, 273, 81, 412, 209, 540, 49, 380, 177, 508, 316, 113, 444, 241, 572, 289, 9, 340, 137, 468, 265, 73, 404, 201, 532, 41, 372, 169, 500, 308, 105, 436, 233, 564, 25, 356, 153, 484, 281, 89, 420, 217, 548, 57, 388, 185, 516, 324, 121, 452, 249, 580, 5, 336, 133, 464, 261, 69, 400, 197, 528, 37, 368, 165, 496, 304, 101, 432, 229, 560, 21, 352, 149, 480, 277, 85, 416, 213, 544, 53, 384, 181, 512, 320, 117, 448, 245, 576, 296, 13, 344, 141, 472, 269, 77, 408, 205, 536, 45, 376, 173, 504, 312, 109, 440, 237, 568, 29, 360, 157, 488, 285, 93, 424, 221, 552, 61, 392, 189, 520, 328, 125, 456, 253, 584, 294, 3, 334, 131, 462, 259, 67, 398, 195, 526, 35, 366, 163, 494, 302, 99, 430, 227, 558, 19, 350, 147, 478, 275, 83, 414, 211, 542, 51, 382, 179, 510, 318, 115, 446, 243, 574, 291, 11, 342, 139, 470, 267, 75, 406, 203, 534, 43, 374, 171, 502, 310, 107, 438, 235, 566, 27, 358, 155, 486, 283, 91, 422, 219, 550, 59, 390, 187, 518, 326, 123, 454, 251, 582, 7, 338, 135, 466, 263, 71, 402, 199, 530, 39, 370, 167, 498, 306, 103, 434, 231, 562, 23, 354, 151, 482, 279, 87, 418, 215, 546, 55, 386, 183, 514, 322, 119, 450, 247, 578, 298, 15, 346, 143, 474, 271, 79, 410, 207, 538, 47, 378, 175, 506, 314, 111, 442, 239, 570, 31, 362, 159, 490, 287, 95, 426, 223, 554, 63, 394, 191, 522, 330, 127, 458, 255, 586]; + + return (unsafe{*PERM587.get_unchecked((index % 587) as usize)} as u32 * 344569 + + unsafe{*PERM587.get_unchecked(((index / 587) % 587) as usize)} as u32 * 587 + + unsafe{*PERM587.get_unchecked(((index / 344569) % 587) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (202262003u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton593(index: u32) -> f32 { - const PERM593: [u16; 593] = [0, 337, 128, 465, 256, 64, 401, 192, 529, 32, 369, 160, 497, 305, - 96, 433, 224, 561, 288, 16, 353, 144, 481, 272, 80, 417, 208, - 545, 48, 385, 176, 513, 321, 112, 449, 240, 577, 8, 345, 136, - 473, 264, 72, 409, 200, 537, 40, 377, 168, 505, 313, 104, 441, - 232, 569, 297, 24, 361, 152, 489, 280, 88, 425, 216, 553, 56, - 393, 184, 521, 329, 120, 457, 248, 585, 4, 341, 132, 469, 260, - 68, 405, 196, 533, 36, 373, 164, 501, 309, 100, 437, 228, 565, - 292, 20, 357, 148, 485, 276, 84, 421, 212, 549, 52, 389, 180, - 517, 325, 116, 453, 244, 581, 12, 349, 140, 477, 268, 76, 413, - 204, 541, 44, 381, 172, 509, 317, 108, 445, 236, 573, 301, 28, - 365, 156, 493, 284, 92, 429, 220, 557, 60, 397, 188, 525, 333, - 124, 461, 252, 589, 2, 339, 130, 467, 258, 66, 403, 194, 531, 34, - 371, 162, 499, 307, 98, 435, 226, 563, 290, 18, 355, 146, 483, - 274, 82, 419, 210, 547, 50, 387, 178, 515, 323, 114, 451, 242, - 579, 10, 347, 138, 475, 266, 74, 411, 202, 539, 42, 379, 170, - 507, 315, 106, 443, 234, 571, 299, 26, 363, 154, 491, 282, 90, - 427, 218, 555, 58, 395, 186, 523, 331, 122, 459, 250, 587, 6, - 343, 134, 471, 262, 70, 407, 198, 535, 38, 375, 166, 503, 311, - 102, 439, 230, 567, 294, 22, 359, 150, 487, 278, 86, 423, 214, - 551, 54, 391, 182, 519, 327, 118, 455, 246, 583, 14, 351, 142, - 479, 270, 78, 415, 206, 543, 46, 383, 174, 511, 319, 110, 447, - 238, 575, 303, 30, 367, 158, 495, 286, 94, 431, 222, 559, 62, - 399, 190, 527, 335, 126, 463, 254, 591, 296, 1, 338, 129, 466, - 257, 65, 402, 193, 530, 33, 370, 161, 498, 306, 97, 434, 225, - 562, 289, 17, 354, 145, 482, 273, 81, 418, 209, 546, 49, 386, - 177, 514, 322, 113, 450, 241, 578, 9, 346, 137, 474, 265, 73, - 410, 201, 538, 41, 378, 169, 506, 314, 105, 442, 233, 570, 298, - 25, 362, 153, 490, 281, 89, 426, 217, 554, 57, 394, 185, 522, - 330, 121, 458, 249, 586, 5, 342, 133, 470, 261, 69, 406, 197, - 534, 37, 374, 165, 502, 310, 101, 438, 229, 566, 293, 21, 358, - 149, 486, 277, 85, 422, 213, 550, 53, 390, 181, 518, 326, 117, - 454, 245, 582, 13, 350, 141, 478, 269, 77, 414, 205, 542, 45, - 382, 173, 510, 318, 109, 446, 237, 574, 302, 29, 366, 157, 494, - 285, 93, 430, 221, 558, 61, 398, 189, 526, 334, 125, 462, 253, - 590, 3, 340, 131, 468, 259, 67, 404, 195, 532, 35, 372, 163, 500, - 308, 99, 436, 227, 564, 291, 19, 356, 147, 484, 275, 83, 420, - 211, 548, 51, 388, 179, 516, 324, 115, 452, 243, 580, 11, 348, - 139, 476, 267, 75, 412, 203, 540, 43, 380, 171, 508, 316, 107, - 444, 235, 572, 300, 27, 364, 155, 492, 283, 91, 428, 219, 556, - 59, 396, 187, 524, 332, 123, 460, 251, 588, 7, 344, 135, 472, - 263, 71, 408, 199, 536, 39, 376, 167, 504, 312, 103, 440, 231, - 568, 295, 23, 360, 151, 488, 279, 87, 424, 215, 552, 55, 392, - 183, 520, 328, 119, 456, 247, 584, 15, 352, 143, 480, 271, 79, - 416, 207, 544, 47, 384, 175, 512, 320, 111, 448, 239, 576, 304, - 31, 368, 159, 496, 287, 95, 432, 223, 560, 63, 400, 191, 528, - 336, 127, 464, 255, 592]; - - return (unsafe { *PERM593.get_unchecked((index % 593) as usize) } as u32 * 351649 + - unsafe { *PERM593.get_unchecked(((index / 593) % 593) as usize) } as u32 * 593 + - unsafe { - *PERM593.get_unchecked(((index / 351649) % 593) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (208527857u32 as f32)); // Results in [0,1). + const PERM593: [u16; 593] = [0, 337, 128, 465, 256, 64, 401, 192, 529, 32, 369, 160, 497, 305, 96, 433, 224, 561, 288, 16, 353, 144, 481, 272, 80, 417, 208, 545, 48, 385, 176, 513, 321, 112, 449, 240, 577, 8, 345, 136, 473, 264, 72, 409, 200, 537, 40, 377, 168, 505, 313, 104, 441, 232, 569, 297, 24, 361, 152, 489, 280, 88, 425, 216, 553, 56, 393, 184, 521, 329, 120, 457, 248, 585, 4, 341, 132, 469, 260, 68, 405, 196, 533, 36, 373, 164, 501, 309, 100, 437, 228, 565, 292, 20, 357, 148, 485, 276, 84, 421, 212, 549, 52, 389, 180, 517, 325, 116, 453, 244, 581, 12, 349, 140, 477, 268, 76, 413, 204, 541, 44, 381, 172, 509, 317, 108, 445, 236, 573, 301, 28, 365, 156, 493, 284, 92, 429, 220, 557, 60, 397, 188, 525, 333, 124, 461, 252, 589, 2, 339, 130, 467, 258, 66, 403, 194, 531, 34, 371, 162, 499, 307, 98, 435, 226, 563, 290, 18, 355, 146, 483, 274, 82, 419, 210, 547, 50, 387, 178, 515, 323, 114, 451, 242, 579, 10, 347, 138, 475, 266, 74, 411, 202, 539, 42, 379, 170, 507, 315, 106, 443, 234, 571, 299, 26, 363, 154, 491, 282, 90, 427, 218, 555, 58, 395, 186, 523, 331, 122, 459, 250, 587, 6, 343, 134, 471, 262, 70, 407, 198, 535, 38, 375, 166, 503, 311, 102, 439, 230, 567, 294, 22, 359, 150, 487, 278, 86, 423, 214, 551, 54, 391, 182, 519, 327, 118, 455, 246, 583, 14, 351, 142, 479, 270, 78, 415, 206, 543, 46, 383, 174, 511, 319, 110, 447, 238, 575, 303, 30, 367, 158, 495, 286, 94, 431, 222, 559, 62, 399, 190, 527, 335, 126, 463, 254, 591, 296, 1, 338, 129, 466, 257, 65, 402, 193, 530, 33, 370, 161, 498, 306, 97, 434, 225, 562, 289, 17, 354, 145, 482, 273, 81, 418, 209, 546, 49, 386, 177, 514, 322, 113, 450, 241, 578, 9, 346, 137, 474, 265, 73, 410, 201, 538, 41, 378, 169, 506, 314, 105, 442, 233, 570, 298, 25, 362, 153, 490, 281, 89, 426, 217, 554, 57, 394, 185, 522, 330, 121, 458, 249, 586, 5, 342, 133, 470, 261, 69, 406, 197, 534, 37, 374, 165, 502, 310, 101, 438, 229, 566, 293, 21, 358, 149, 486, 277, 85, 422, 213, 550, 53, 390, 181, 518, 326, 117, 454, 245, 582, 13, 350, 141, 478, 269, 77, 414, 205, 542, 45, 382, 173, 510, 318, 109, 446, 237, 574, 302, 29, 366, 157, 494, 285, 93, 430, 221, 558, 61, 398, 189, 526, 334, 125, 462, 253, 590, 3, 340, 131, 468, 259, 67, 404, 195, 532, 35, 372, 163, 500, 308, 99, 436, 227, 564, 291, 19, 356, 147, 484, 275, 83, 420, 211, 548, 51, 388, 179, 516, 324, 115, 452, 243, 580, 11, 348, 139, 476, 267, 75, 412, 203, 540, 43, 380, 171, 508, 316, 107, 444, 235, 572, 300, 27, 364, 155, 492, 283, 91, 428, 219, 556, 59, 396, 187, 524, 332, 123, 460, 251, 588, 7, 344, 135, 472, 263, 71, 408, 199, 536, 39, 376, 167, 504, 312, 103, 440, 231, 568, 295, 23, 360, 151, 488, 279, 87, 424, 215, 552, 55, 392, 183, 520, 328, 119, 456, 247, 584, 15, 352, 143, 480, 271, 79, 416, 207, 544, 47, 384, 175, 512, 320, 111, 448, 239, 576, 304, 31, 368, 159, 496, 287, 95, 432, 223, 560, 63, 400, 191, 528, 336, 127, 464, 255, 592]; + + return (unsafe{*PERM593.get_unchecked((index % 593) as usize)} as u32 * 351649 + + unsafe{*PERM593.get_unchecked(((index / 593) % 593) as usize)} as u32 * 593 + + unsafe{*PERM593.get_unchecked(((index / 351649) % 593) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (208527857u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton599(index: u32) -> f32 { - const PERM599: [u16; 599] = [0, 343, 128, 471, 256, 64, 407, 192, 535, 32, 375, 160, 503, 311, - 96, 439, 224, 567, 288, 16, 359, 144, 487, 272, 80, 423, 208, - 551, 48, 391, 176, 519, 327, 112, 455, 240, 583, 8, 351, 136, - 479, 264, 72, 415, 200, 543, 40, 383, 168, 511, 319, 104, 447, - 232, 575, 303, 24, 367, 152, 495, 280, 88, 431, 216, 559, 56, - 399, 184, 527, 335, 120, 463, 248, 591, 296, 4, 347, 132, 475, - 260, 68, 411, 196, 539, 36, 379, 164, 507, 315, 100, 443, 228, - 571, 292, 20, 363, 148, 491, 276, 84, 427, 212, 555, 52, 395, - 180, 523, 331, 116, 459, 244, 587, 12, 355, 140, 483, 268, 76, - 419, 204, 547, 44, 387, 172, 515, 323, 108, 451, 236, 579, 307, - 28, 371, 156, 499, 284, 92, 435, 220, 563, 60, 403, 188, 531, - 339, 124, 467, 252, 595, 298, 2, 345, 130, 473, 258, 66, 409, - 194, 537, 34, 377, 162, 505, 313, 98, 441, 226, 569, 290, 18, - 361, 146, 489, 274, 82, 425, 210, 553, 50, 393, 178, 521, 329, - 114, 457, 242, 585, 10, 353, 138, 481, 266, 74, 417, 202, 545, - 42, 385, 170, 513, 321, 106, 449, 234, 577, 305, 26, 369, 154, - 497, 282, 90, 433, 218, 561, 58, 401, 186, 529, 337, 122, 465, - 250, 593, 301, 6, 349, 134, 477, 262, 70, 413, 198, 541, 38, 381, - 166, 509, 317, 102, 445, 230, 573, 294, 22, 365, 150, 493, 278, - 86, 429, 214, 557, 54, 397, 182, 525, 333, 118, 461, 246, 589, - 14, 357, 142, 485, 270, 78, 421, 206, 549, 46, 389, 174, 517, - 325, 110, 453, 238, 581, 309, 30, 373, 158, 501, 286, 94, 437, - 222, 565, 62, 405, 190, 533, 341, 126, 469, 254, 597, 299, 1, - 344, 129, 472, 257, 65, 408, 193, 536, 33, 376, 161, 504, 312, - 97, 440, 225, 568, 289, 17, 360, 145, 488, 273, 81, 424, 209, - 552, 49, 392, 177, 520, 328, 113, 456, 241, 584, 9, 352, 137, - 480, 265, 73, 416, 201, 544, 41, 384, 169, 512, 320, 105, 448, - 233, 576, 304, 25, 368, 153, 496, 281, 89, 432, 217, 560, 57, - 400, 185, 528, 336, 121, 464, 249, 592, 297, 5, 348, 133, 476, - 261, 69, 412, 197, 540, 37, 380, 165, 508, 316, 101, 444, 229, - 572, 293, 21, 364, 149, 492, 277, 85, 428, 213, 556, 53, 396, - 181, 524, 332, 117, 460, 245, 588, 13, 356, 141, 484, 269, 77, - 420, 205, 548, 45, 388, 173, 516, 324, 109, 452, 237, 580, 308, - 29, 372, 157, 500, 285, 93, 436, 221, 564, 61, 404, 189, 532, - 340, 125, 468, 253, 596, 300, 3, 346, 131, 474, 259, 67, 410, - 195, 538, 35, 378, 163, 506, 314, 99, 442, 227, 570, 291, 19, - 362, 147, 490, 275, 83, 426, 211, 554, 51, 394, 179, 522, 330, - 115, 458, 243, 586, 11, 354, 139, 482, 267, 75, 418, 203, 546, - 43, 386, 171, 514, 322, 107, 450, 235, 578, 306, 27, 370, 155, - 498, 283, 91, 434, 219, 562, 59, 402, 187, 530, 338, 123, 466, - 251, 594, 302, 7, 350, 135, 478, 263, 71, 414, 199, 542, 39, 382, - 167, 510, 318, 103, 446, 231, 574, 295, 23, 366, 151, 494, 279, - 87, 430, 215, 558, 55, 398, 183, 526, 334, 119, 462, 247, 590, - 15, 358, 143, 486, 271, 79, 422, 207, 550, 47, 390, 175, 518, - 326, 111, 454, 239, 582, 310, 31, 374, 159, 502, 287, 95, 438, - 223, 566, 63, 406, 191, 534, 342, 127, 470, 255, 598]; - - return (unsafe { *PERM599.get_unchecked((index % 599) as usize) } as u32 * 358801 + - unsafe { *PERM599.get_unchecked(((index / 599) % 599) as usize) } as u32 * 599 + - unsafe { - *PERM599.get_unchecked(((index / 358801) % 599) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (214921799u32 as f32)); // Results in [0,1). + const PERM599: [u16; 599] = [0, 343, 128, 471, 256, 64, 407, 192, 535, 32, 375, 160, 503, 311, 96, 439, 224, 567, 288, 16, 359, 144, 487, 272, 80, 423, 208, 551, 48, 391, 176, 519, 327, 112, 455, 240, 583, 8, 351, 136, 479, 264, 72, 415, 200, 543, 40, 383, 168, 511, 319, 104, 447, 232, 575, 303, 24, 367, 152, 495, 280, 88, 431, 216, 559, 56, 399, 184, 527, 335, 120, 463, 248, 591, 296, 4, 347, 132, 475, 260, 68, 411, 196, 539, 36, 379, 164, 507, 315, 100, 443, 228, 571, 292, 20, 363, 148, 491, 276, 84, 427, 212, 555, 52, 395, 180, 523, 331, 116, 459, 244, 587, 12, 355, 140, 483, 268, 76, 419, 204, 547, 44, 387, 172, 515, 323, 108, 451, 236, 579, 307, 28, 371, 156, 499, 284, 92, 435, 220, 563, 60, 403, 188, 531, 339, 124, 467, 252, 595, 298, 2, 345, 130, 473, 258, 66, 409, 194, 537, 34, 377, 162, 505, 313, 98, 441, 226, 569, 290, 18, 361, 146, 489, 274, 82, 425, 210, 553, 50, 393, 178, 521, 329, 114, 457, 242, 585, 10, 353, 138, 481, 266, 74, 417, 202, 545, 42, 385, 170, 513, 321, 106, 449, 234, 577, 305, 26, 369, 154, 497, 282, 90, 433, 218, 561, 58, 401, 186, 529, 337, 122, 465, 250, 593, 301, 6, 349, 134, 477, 262, 70, 413, 198, 541, 38, 381, 166, 509, 317, 102, 445, 230, 573, 294, 22, 365, 150, 493, 278, 86, 429, 214, 557, 54, 397, 182, 525, 333, 118, 461, 246, 589, 14, 357, 142, 485, 270, 78, 421, 206, 549, 46, 389, 174, 517, 325, 110, 453, 238, 581, 309, 30, 373, 158, 501, 286, 94, 437, 222, 565, 62, 405, 190, 533, 341, 126, 469, 254, 597, 299, 1, 344, 129, 472, 257, 65, 408, 193, 536, 33, 376, 161, 504, 312, 97, 440, 225, 568, 289, 17, 360, 145, 488, 273, 81, 424, 209, 552, 49, 392, 177, 520, 328, 113, 456, 241, 584, 9, 352, 137, 480, 265, 73, 416, 201, 544, 41, 384, 169, 512, 320, 105, 448, 233, 576, 304, 25, 368, 153, 496, 281, 89, 432, 217, 560, 57, 400, 185, 528, 336, 121, 464, 249, 592, 297, 5, 348, 133, 476, 261, 69, 412, 197, 540, 37, 380, 165, 508, 316, 101, 444, 229, 572, 293, 21, 364, 149, 492, 277, 85, 428, 213, 556, 53, 396, 181, 524, 332, 117, 460, 245, 588, 13, 356, 141, 484, 269, 77, 420, 205, 548, 45, 388, 173, 516, 324, 109, 452, 237, 580, 308, 29, 372, 157, 500, 285, 93, 436, 221, 564, 61, 404, 189, 532, 340, 125, 468, 253, 596, 300, 3, 346, 131, 474, 259, 67, 410, 195, 538, 35, 378, 163, 506, 314, 99, 442, 227, 570, 291, 19, 362, 147, 490, 275, 83, 426, 211, 554, 51, 394, 179, 522, 330, 115, 458, 243, 586, 11, 354, 139, 482, 267, 75, 418, 203, 546, 43, 386, 171, 514, 322, 107, 450, 235, 578, 306, 27, 370, 155, 498, 283, 91, 434, 219, 562, 59, 402, 187, 530, 338, 123, 466, 251, 594, 302, 7, 350, 135, 478, 263, 71, 414, 199, 542, 39, 382, 167, 510, 318, 103, 446, 231, 574, 295, 23, 366, 151, 494, 279, 87, 430, 215, 558, 55, 398, 183, 526, 334, 119, 462, 247, 590, 15, 358, 143, 486, 271, 79, 422, 207, 550, 47, 390, 175, 518, 326, 111, 454, 239, 582, 310, 31, 374, 159, 502, 287, 95, 438, 223, 566, 63, 406, 191, 534, 342, 127, 470, 255, 598]; + + return (unsafe{*PERM599.get_unchecked((index % 599) as usize)} as u32 * 358801 + + unsafe{*PERM599.get_unchecked(((index / 599) % 599) as usize)} as u32 * 599 + + unsafe{*PERM599.get_unchecked(((index / 358801) % 599) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (214921799u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton601(index: u32) -> f32 { - const PERM601: [u16; 601] = [0, 345, 128, 473, 256, 64, 409, 192, 537, 32, 377, 160, 505, 313, - 96, 441, 224, 569, 288, 16, 361, 144, 489, 272, 80, 425, 208, - 553, 48, 393, 176, 521, 329, 112, 457, 240, 585, 296, 8, 353, - 136, 481, 264, 72, 417, 200, 545, 40, 385, 168, 513, 321, 104, - 449, 232, 577, 305, 24, 369, 152, 497, 280, 88, 433, 216, 561, - 56, 401, 184, 529, 337, 120, 465, 248, 593, 4, 349, 132, 477, - 260, 68, 413, 196, 541, 36, 381, 164, 509, 317, 100, 445, 228, - 573, 292, 20, 365, 148, 493, 276, 84, 429, 212, 557, 52, 397, - 180, 525, 333, 116, 461, 244, 589, 301, 12, 357, 140, 485, 268, - 76, 421, 204, 549, 44, 389, 172, 517, 325, 108, 453, 236, 581, - 309, 28, 373, 156, 501, 284, 92, 437, 220, 565, 60, 405, 188, - 533, 341, 124, 469, 252, 597, 2, 347, 130, 475, 258, 66, 411, - 194, 539, 34, 379, 162, 507, 315, 98, 443, 226, 571, 290, 18, - 363, 146, 491, 274, 82, 427, 210, 555, 50, 395, 178, 523, 331, - 114, 459, 242, 587, 298, 10, 355, 138, 483, 266, 74, 419, 202, - 547, 42, 387, 170, 515, 323, 106, 451, 234, 579, 307, 26, 371, - 154, 499, 282, 90, 435, 218, 563, 58, 403, 186, 531, 339, 122, - 467, 250, 595, 6, 351, 134, 479, 262, 70, 415, 198, 543, 38, 383, - 166, 511, 319, 102, 447, 230, 575, 294, 22, 367, 150, 495, 278, - 86, 431, 214, 559, 54, 399, 182, 527, 335, 118, 463, 246, 591, - 303, 14, 359, 142, 487, 270, 78, 423, 206, 551, 46, 391, 174, - 519, 327, 110, 455, 238, 583, 311, 30, 375, 158, 503, 286, 94, - 439, 222, 567, 62, 407, 190, 535, 343, 126, 471, 254, 599, 300, - 1, 346, 129, 474, 257, 65, 410, 193, 538, 33, 378, 161, 506, 314, - 97, 442, 225, 570, 289, 17, 362, 145, 490, 273, 81, 426, 209, - 554, 49, 394, 177, 522, 330, 113, 458, 241, 586, 297, 9, 354, - 137, 482, 265, 73, 418, 201, 546, 41, 386, 169, 514, 322, 105, - 450, 233, 578, 306, 25, 370, 153, 498, 281, 89, 434, 217, 562, - 57, 402, 185, 530, 338, 121, 466, 249, 594, 5, 350, 133, 478, - 261, 69, 414, 197, 542, 37, 382, 165, 510, 318, 101, 446, 229, - 574, 293, 21, 366, 149, 494, 277, 85, 430, 213, 558, 53, 398, - 181, 526, 334, 117, 462, 245, 590, 302, 13, 358, 141, 486, 269, - 77, 422, 205, 550, 45, 390, 173, 518, 326, 109, 454, 237, 582, - 310, 29, 374, 157, 502, 285, 93, 438, 221, 566, 61, 406, 189, - 534, 342, 125, 470, 253, 598, 3, 348, 131, 476, 259, 67, 412, - 195, 540, 35, 380, 163, 508, 316, 99, 444, 227, 572, 291, 19, - 364, 147, 492, 275, 83, 428, 211, 556, 51, 396, 179, 524, 332, - 115, 460, 243, 588, 299, 11, 356, 139, 484, 267, 75, 420, 203, - 548, 43, 388, 171, 516, 324, 107, 452, 235, 580, 308, 27, 372, - 155, 500, 283, 91, 436, 219, 564, 59, 404, 187, 532, 340, 123, - 468, 251, 596, 7, 352, 135, 480, 263, 71, 416, 199, 544, 39, 384, - 167, 512, 320, 103, 448, 231, 576, 295, 23, 368, 151, 496, 279, - 87, 432, 215, 560, 55, 400, 183, 528, 336, 119, 464, 247, 592, - 304, 15, 360, 143, 488, 271, 79, 424, 207, 552, 47, 392, 175, - 520, 328, 111, 456, 239, 584, 312, 31, 376, 159, 504, 287, 95, - 440, 223, 568, 63, 408, 191, 536, 344, 127, 472, 255, 600]; - - return (unsafe { *PERM601.get_unchecked((index % 601) as usize) } as u32 * 361201 + - unsafe { *PERM601.get_unchecked(((index / 601) % 601) as usize) } as u32 * 601 + - unsafe { - *PERM601.get_unchecked(((index / 361201) % 601) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (217081801u32 as f32)); // Results in [0,1). + const PERM601: [u16; 601] = [0, 345, 128, 473, 256, 64, 409, 192, 537, 32, 377, 160, 505, 313, 96, 441, 224, 569, 288, 16, 361, 144, 489, 272, 80, 425, 208, 553, 48, 393, 176, 521, 329, 112, 457, 240, 585, 296, 8, 353, 136, 481, 264, 72, 417, 200, 545, 40, 385, 168, 513, 321, 104, 449, 232, 577, 305, 24, 369, 152, 497, 280, 88, 433, 216, 561, 56, 401, 184, 529, 337, 120, 465, 248, 593, 4, 349, 132, 477, 260, 68, 413, 196, 541, 36, 381, 164, 509, 317, 100, 445, 228, 573, 292, 20, 365, 148, 493, 276, 84, 429, 212, 557, 52, 397, 180, 525, 333, 116, 461, 244, 589, 301, 12, 357, 140, 485, 268, 76, 421, 204, 549, 44, 389, 172, 517, 325, 108, 453, 236, 581, 309, 28, 373, 156, 501, 284, 92, 437, 220, 565, 60, 405, 188, 533, 341, 124, 469, 252, 597, 2, 347, 130, 475, 258, 66, 411, 194, 539, 34, 379, 162, 507, 315, 98, 443, 226, 571, 290, 18, 363, 146, 491, 274, 82, 427, 210, 555, 50, 395, 178, 523, 331, 114, 459, 242, 587, 298, 10, 355, 138, 483, 266, 74, 419, 202, 547, 42, 387, 170, 515, 323, 106, 451, 234, 579, 307, 26, 371, 154, 499, 282, 90, 435, 218, 563, 58, 403, 186, 531, 339, 122, 467, 250, 595, 6, 351, 134, 479, 262, 70, 415, 198, 543, 38, 383, 166, 511, 319, 102, 447, 230, 575, 294, 22, 367, 150, 495, 278, 86, 431, 214, 559, 54, 399, 182, 527, 335, 118, 463, 246, 591, 303, 14, 359, 142, 487, 270, 78, 423, 206, 551, 46, 391, 174, 519, 327, 110, 455, 238, 583, 311, 30, 375, 158, 503, 286, 94, 439, 222, 567, 62, 407, 190, 535, 343, 126, 471, 254, 599, 300, 1, 346, 129, 474, 257, 65, 410, 193, 538, 33, 378, 161, 506, 314, 97, 442, 225, 570, 289, 17, 362, 145, 490, 273, 81, 426, 209, 554, 49, 394, 177, 522, 330, 113, 458, 241, 586, 297, 9, 354, 137, 482, 265, 73, 418, 201, 546, 41, 386, 169, 514, 322, 105, 450, 233, 578, 306, 25, 370, 153, 498, 281, 89, 434, 217, 562, 57, 402, 185, 530, 338, 121, 466, 249, 594, 5, 350, 133, 478, 261, 69, 414, 197, 542, 37, 382, 165, 510, 318, 101, 446, 229, 574, 293, 21, 366, 149, 494, 277, 85, 430, 213, 558, 53, 398, 181, 526, 334, 117, 462, 245, 590, 302, 13, 358, 141, 486, 269, 77, 422, 205, 550, 45, 390, 173, 518, 326, 109, 454, 237, 582, 310, 29, 374, 157, 502, 285, 93, 438, 221, 566, 61, 406, 189, 534, 342, 125, 470, 253, 598, 3, 348, 131, 476, 259, 67, 412, 195, 540, 35, 380, 163, 508, 316, 99, 444, 227, 572, 291, 19, 364, 147, 492, 275, 83, 428, 211, 556, 51, 396, 179, 524, 332, 115, 460, 243, 588, 299, 11, 356, 139, 484, 267, 75, 420, 203, 548, 43, 388, 171, 516, 324, 107, 452, 235, 580, 308, 27, 372, 155, 500, 283, 91, 436, 219, 564, 59, 404, 187, 532, 340, 123, 468, 251, 596, 7, 352, 135, 480, 263, 71, 416, 199, 544, 39, 384, 167, 512, 320, 103, 448, 231, 576, 295, 23, 368, 151, 496, 279, 87, 432, 215, 560, 55, 400, 183, 528, 336, 119, 464, 247, 592, 304, 15, 360, 143, 488, 271, 79, 424, 207, 552, 47, 392, 175, 520, 328, 111, 456, 239, 584, 312, 31, 376, 159, 504, 287, 95, 440, 223, 568, 63, 408, 191, 536, 344, 127, 472, 255, 600]; + + return (unsafe{*PERM601.get_unchecked((index % 601) as usize)} as u32 * 361201 + + unsafe{*PERM601.get_unchecked(((index / 601) % 601) as usize)} as u32 * 601 + + unsafe{*PERM601.get_unchecked(((index / 361201) % 601) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (217081801u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton607(index: u32) -> f32 { - const PERM607: [u16; 607] = [0, 351, 128, 479, 256, 64, 415, 192, 543, 32, 383, 160, 511, 319, - 96, 447, 224, 575, 288, 16, 367, 144, 495, 272, 80, 431, 208, - 559, 48, 399, 176, 527, 335, 112, 463, 240, 591, 296, 8, 359, - 136, 487, 264, 72, 423, 200, 551, 40, 391, 168, 519, 327, 104, - 455, 232, 583, 311, 24, 375, 152, 503, 280, 88, 439, 216, 567, - 56, 407, 184, 535, 343, 120, 471, 248, 599, 300, 4, 355, 132, - 483, 260, 68, 419, 196, 547, 36, 387, 164, 515, 323, 100, 451, - 228, 579, 292, 20, 371, 148, 499, 276, 84, 435, 212, 563, 52, - 403, 180, 531, 339, 116, 467, 244, 595, 307, 12, 363, 140, 491, - 268, 76, 427, 204, 555, 44, 395, 172, 523, 331, 108, 459, 236, - 587, 315, 28, 379, 156, 507, 284, 92, 443, 220, 571, 60, 411, - 188, 539, 347, 124, 475, 252, 603, 302, 2, 353, 130, 481, 258, - 66, 417, 194, 545, 34, 385, 162, 513, 321, 98, 449, 226, 577, - 290, 18, 369, 146, 497, 274, 82, 433, 210, 561, 50, 401, 178, - 529, 337, 114, 465, 242, 593, 298, 10, 361, 138, 489, 266, 74, - 425, 202, 553, 42, 393, 170, 521, 329, 106, 457, 234, 585, 313, - 26, 377, 154, 505, 282, 90, 441, 218, 569, 58, 409, 186, 537, - 345, 122, 473, 250, 601, 305, 6, 357, 134, 485, 262, 70, 421, - 198, 549, 38, 389, 166, 517, 325, 102, 453, 230, 581, 294, 22, - 373, 150, 501, 278, 86, 437, 214, 565, 54, 405, 182, 533, 341, - 118, 469, 246, 597, 309, 14, 365, 142, 493, 270, 78, 429, 206, - 557, 46, 397, 174, 525, 333, 110, 461, 238, 589, 317, 30, 381, - 158, 509, 286, 94, 445, 222, 573, 62, 413, 190, 541, 349, 126, - 477, 254, 605, 303, 1, 352, 129, 480, 257, 65, 416, 193, 544, 33, - 384, 161, 512, 320, 97, 448, 225, 576, 289, 17, 368, 145, 496, - 273, 81, 432, 209, 560, 49, 400, 177, 528, 336, 113, 464, 241, - 592, 297, 9, 360, 137, 488, 265, 73, 424, 201, 552, 41, 392, 169, - 520, 328, 105, 456, 233, 584, 312, 25, 376, 153, 504, 281, 89, - 440, 217, 568, 57, 408, 185, 536, 344, 121, 472, 249, 600, 301, - 5, 356, 133, 484, 261, 69, 420, 197, 548, 37, 388, 165, 516, 324, - 101, 452, 229, 580, 293, 21, 372, 149, 500, 277, 85, 436, 213, - 564, 53, 404, 181, 532, 340, 117, 468, 245, 596, 308, 13, 364, - 141, 492, 269, 77, 428, 205, 556, 45, 396, 173, 524, 332, 109, - 460, 237, 588, 316, 29, 380, 157, 508, 285, 93, 444, 221, 572, - 61, 412, 189, 540, 348, 125, 476, 253, 604, 304, 3, 354, 131, - 482, 259, 67, 418, 195, 546, 35, 386, 163, 514, 322, 99, 450, - 227, 578, 291, 19, 370, 147, 498, 275, 83, 434, 211, 562, 51, - 402, 179, 530, 338, 115, 466, 243, 594, 299, 11, 362, 139, 490, - 267, 75, 426, 203, 554, 43, 394, 171, 522, 330, 107, 458, 235, - 586, 314, 27, 378, 155, 506, 283, 91, 442, 219, 570, 59, 410, - 187, 538, 346, 123, 474, 251, 602, 306, 7, 358, 135, 486, 263, - 71, 422, 199, 550, 39, 390, 167, 518, 326, 103, 454, 231, 582, - 295, 23, 374, 151, 502, 279, 87, 438, 215, 566, 55, 406, 183, - 534, 342, 119, 470, 247, 598, 310, 15, 366, 143, 494, 271, 79, - 430, 207, 558, 47, 398, 175, 526, 334, 111, 462, 239, 590, 318, - 31, 382, 159, 510, 287, 95, 446, 223, 574, 63, 414, 191, 542, - 350, 127, 478, 255, 606]; - - return (unsafe { *PERM607.get_unchecked((index % 607) as usize) } as u32 * 368449 + - unsafe { *PERM607.get_unchecked(((index / 607) % 607) as usize) } as u32 * 607 + - unsafe { - *PERM607.get_unchecked(((index / 368449) % 607) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (223648543u32 as f32)); // Results in [0,1). + const PERM607: [u16; 607] = [0, 351, 128, 479, 256, 64, 415, 192, 543, 32, 383, 160, 511, 319, 96, 447, 224, 575, 288, 16, 367, 144, 495, 272, 80, 431, 208, 559, 48, 399, 176, 527, 335, 112, 463, 240, 591, 296, 8, 359, 136, 487, 264, 72, 423, 200, 551, 40, 391, 168, 519, 327, 104, 455, 232, 583, 311, 24, 375, 152, 503, 280, 88, 439, 216, 567, 56, 407, 184, 535, 343, 120, 471, 248, 599, 300, 4, 355, 132, 483, 260, 68, 419, 196, 547, 36, 387, 164, 515, 323, 100, 451, 228, 579, 292, 20, 371, 148, 499, 276, 84, 435, 212, 563, 52, 403, 180, 531, 339, 116, 467, 244, 595, 307, 12, 363, 140, 491, 268, 76, 427, 204, 555, 44, 395, 172, 523, 331, 108, 459, 236, 587, 315, 28, 379, 156, 507, 284, 92, 443, 220, 571, 60, 411, 188, 539, 347, 124, 475, 252, 603, 302, 2, 353, 130, 481, 258, 66, 417, 194, 545, 34, 385, 162, 513, 321, 98, 449, 226, 577, 290, 18, 369, 146, 497, 274, 82, 433, 210, 561, 50, 401, 178, 529, 337, 114, 465, 242, 593, 298, 10, 361, 138, 489, 266, 74, 425, 202, 553, 42, 393, 170, 521, 329, 106, 457, 234, 585, 313, 26, 377, 154, 505, 282, 90, 441, 218, 569, 58, 409, 186, 537, 345, 122, 473, 250, 601, 305, 6, 357, 134, 485, 262, 70, 421, 198, 549, 38, 389, 166, 517, 325, 102, 453, 230, 581, 294, 22, 373, 150, 501, 278, 86, 437, 214, 565, 54, 405, 182, 533, 341, 118, 469, 246, 597, 309, 14, 365, 142, 493, 270, 78, 429, 206, 557, 46, 397, 174, 525, 333, 110, 461, 238, 589, 317, 30, 381, 158, 509, 286, 94, 445, 222, 573, 62, 413, 190, 541, 349, 126, 477, 254, 605, 303, 1, 352, 129, 480, 257, 65, 416, 193, 544, 33, 384, 161, 512, 320, 97, 448, 225, 576, 289, 17, 368, 145, 496, 273, 81, 432, 209, 560, 49, 400, 177, 528, 336, 113, 464, 241, 592, 297, 9, 360, 137, 488, 265, 73, 424, 201, 552, 41, 392, 169, 520, 328, 105, 456, 233, 584, 312, 25, 376, 153, 504, 281, 89, 440, 217, 568, 57, 408, 185, 536, 344, 121, 472, 249, 600, 301, 5, 356, 133, 484, 261, 69, 420, 197, 548, 37, 388, 165, 516, 324, 101, 452, 229, 580, 293, 21, 372, 149, 500, 277, 85, 436, 213, 564, 53, 404, 181, 532, 340, 117, 468, 245, 596, 308, 13, 364, 141, 492, 269, 77, 428, 205, 556, 45, 396, 173, 524, 332, 109, 460, 237, 588, 316, 29, 380, 157, 508, 285, 93, 444, 221, 572, 61, 412, 189, 540, 348, 125, 476, 253, 604, 304, 3, 354, 131, 482, 259, 67, 418, 195, 546, 35, 386, 163, 514, 322, 99, 450, 227, 578, 291, 19, 370, 147, 498, 275, 83, 434, 211, 562, 51, 402, 179, 530, 338, 115, 466, 243, 594, 299, 11, 362, 139, 490, 267, 75, 426, 203, 554, 43, 394, 171, 522, 330, 107, 458, 235, 586, 314, 27, 378, 155, 506, 283, 91, 442, 219, 570, 59, 410, 187, 538, 346, 123, 474, 251, 602, 306, 7, 358, 135, 486, 263, 71, 422, 199, 550, 39, 390, 167, 518, 326, 103, 454, 231, 582, 295, 23, 374, 151, 502, 279, 87, 438, 215, 566, 55, 406, 183, 534, 342, 119, 470, 247, 598, 310, 15, 366, 143, 494, 271, 79, 430, 207, 558, 47, 398, 175, 526, 334, 111, 462, 239, 590, 318, 31, 382, 159, 510, 287, 95, 446, 223, 574, 63, 414, 191, 542, 350, 127, 478, 255, 606]; + + return (unsafe{*PERM607.get_unchecked((index % 607) as usize)} as u32 * 368449 + + unsafe{*PERM607.get_unchecked(((index / 607) % 607) as usize)} as u32 * 607 + + unsafe{*PERM607.get_unchecked(((index / 368449) % 607) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (223648543u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton613(index: u32) -> f32 { - const PERM613: [u16; 613] = [0, 357, 128, 485, 256, 64, 421, 192, 549, 288, 32, 389, 160, 517, - 325, 96, 453, 224, 581, 16, 373, 144, 501, 272, 80, 437, 208, - 565, 309, 48, 405, 176, 533, 341, 112, 469, 240, 597, 8, 365, - 136, 493, 264, 72, 429, 200, 557, 296, 40, 397, 168, 525, 333, - 104, 461, 232, 589, 24, 381, 152, 509, 280, 88, 445, 216, 573, - 317, 56, 413, 184, 541, 349, 120, 477, 248, 605, 304, 4, 361, - 132, 489, 260, 68, 425, 196, 553, 292, 36, 393, 164, 521, 329, - 100, 457, 228, 585, 20, 377, 148, 505, 276, 84, 441, 212, 569, - 313, 52, 409, 180, 537, 345, 116, 473, 244, 601, 12, 369, 140, - 497, 268, 76, 433, 204, 561, 300, 44, 401, 172, 529, 337, 108, - 465, 236, 593, 28, 385, 156, 513, 284, 92, 449, 220, 577, 321, - 60, 417, 188, 545, 353, 124, 481, 252, 609, 2, 359, 130, 487, - 258, 66, 423, 194, 551, 290, 34, 391, 162, 519, 327, 98, 455, - 226, 583, 18, 375, 146, 503, 274, 82, 439, 210, 567, 311, 50, - 407, 178, 535, 343, 114, 471, 242, 599, 10, 367, 138, 495, 266, - 74, 431, 202, 559, 298, 42, 399, 170, 527, 335, 106, 463, 234, - 591, 26, 383, 154, 511, 282, 90, 447, 218, 575, 319, 58, 415, - 186, 543, 351, 122, 479, 250, 607, 307, 6, 363, 134, 491, 262, - 70, 427, 198, 555, 294, 38, 395, 166, 523, 331, 102, 459, 230, - 587, 22, 379, 150, 507, 278, 86, 443, 214, 571, 315, 54, 411, - 182, 539, 347, 118, 475, 246, 603, 14, 371, 142, 499, 270, 78, - 435, 206, 563, 302, 46, 403, 174, 531, 339, 110, 467, 238, 595, - 30, 387, 158, 515, 286, 94, 451, 222, 579, 323, 62, 419, 190, - 547, 355, 126, 483, 254, 611, 306, 1, 358, 129, 486, 257, 65, - 422, 193, 550, 289, 33, 390, 161, 518, 326, 97, 454, 225, 582, - 17, 374, 145, 502, 273, 81, 438, 209, 566, 310, 49, 406, 177, - 534, 342, 113, 470, 241, 598, 9, 366, 137, 494, 265, 73, 430, - 201, 558, 297, 41, 398, 169, 526, 334, 105, 462, 233, 590, 25, - 382, 153, 510, 281, 89, 446, 217, 574, 318, 57, 414, 185, 542, - 350, 121, 478, 249, 606, 305, 5, 362, 133, 490, 261, 69, 426, - 197, 554, 293, 37, 394, 165, 522, 330, 101, 458, 229, 586, 21, - 378, 149, 506, 277, 85, 442, 213, 570, 314, 53, 410, 181, 538, - 346, 117, 474, 245, 602, 13, 370, 141, 498, 269, 77, 434, 205, - 562, 301, 45, 402, 173, 530, 338, 109, 466, 237, 594, 29, 386, - 157, 514, 285, 93, 450, 221, 578, 322, 61, 418, 189, 546, 354, - 125, 482, 253, 610, 3, 360, 131, 488, 259, 67, 424, 195, 552, - 291, 35, 392, 163, 520, 328, 99, 456, 227, 584, 19, 376, 147, - 504, 275, 83, 440, 211, 568, 312, 51, 408, 179, 536, 344, 115, - 472, 243, 600, 11, 368, 139, 496, 267, 75, 432, 203, 560, 299, - 43, 400, 171, 528, 336, 107, 464, 235, 592, 27, 384, 155, 512, - 283, 91, 448, 219, 576, 320, 59, 416, 187, 544, 352, 123, 480, - 251, 608, 308, 7, 364, 135, 492, 263, 71, 428, 199, 556, 295, 39, - 396, 167, 524, 332, 103, 460, 231, 588, 23, 380, 151, 508, 279, - 87, 444, 215, 572, 316, 55, 412, 183, 540, 348, 119, 476, 247, - 604, 15, 372, 143, 500, 271, 79, 436, 207, 564, 303, 47, 404, - 175, 532, 340, 111, 468, 239, 596, 31, 388, 159, 516, 287, 95, - 452, 223, 580, 324, 63, 420, 191, 548, 356, 127, 484, 255, 612]; - - return (unsafe { *PERM613.get_unchecked((index % 613) as usize) } as u32 * 375769 + - unsafe { *PERM613.get_unchecked(((index / 613) % 613) as usize) } as u32 * 613 + - unsafe { - *PERM613.get_unchecked(((index / 375769) % 613) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (230346397u32 as f32)); // Results in [0,1). + const PERM613: [u16; 613] = [0, 357, 128, 485, 256, 64, 421, 192, 549, 288, 32, 389, 160, 517, 325, 96, 453, 224, 581, 16, 373, 144, 501, 272, 80, 437, 208, 565, 309, 48, 405, 176, 533, 341, 112, 469, 240, 597, 8, 365, 136, 493, 264, 72, 429, 200, 557, 296, 40, 397, 168, 525, 333, 104, 461, 232, 589, 24, 381, 152, 509, 280, 88, 445, 216, 573, 317, 56, 413, 184, 541, 349, 120, 477, 248, 605, 304, 4, 361, 132, 489, 260, 68, 425, 196, 553, 292, 36, 393, 164, 521, 329, 100, 457, 228, 585, 20, 377, 148, 505, 276, 84, 441, 212, 569, 313, 52, 409, 180, 537, 345, 116, 473, 244, 601, 12, 369, 140, 497, 268, 76, 433, 204, 561, 300, 44, 401, 172, 529, 337, 108, 465, 236, 593, 28, 385, 156, 513, 284, 92, 449, 220, 577, 321, 60, 417, 188, 545, 353, 124, 481, 252, 609, 2, 359, 130, 487, 258, 66, 423, 194, 551, 290, 34, 391, 162, 519, 327, 98, 455, 226, 583, 18, 375, 146, 503, 274, 82, 439, 210, 567, 311, 50, 407, 178, 535, 343, 114, 471, 242, 599, 10, 367, 138, 495, 266, 74, 431, 202, 559, 298, 42, 399, 170, 527, 335, 106, 463, 234, 591, 26, 383, 154, 511, 282, 90, 447, 218, 575, 319, 58, 415, 186, 543, 351, 122, 479, 250, 607, 307, 6, 363, 134, 491, 262, 70, 427, 198, 555, 294, 38, 395, 166, 523, 331, 102, 459, 230, 587, 22, 379, 150, 507, 278, 86, 443, 214, 571, 315, 54, 411, 182, 539, 347, 118, 475, 246, 603, 14, 371, 142, 499, 270, 78, 435, 206, 563, 302, 46, 403, 174, 531, 339, 110, 467, 238, 595, 30, 387, 158, 515, 286, 94, 451, 222, 579, 323, 62, 419, 190, 547, 355, 126, 483, 254, 611, 306, 1, 358, 129, 486, 257, 65, 422, 193, 550, 289, 33, 390, 161, 518, 326, 97, 454, 225, 582, 17, 374, 145, 502, 273, 81, 438, 209, 566, 310, 49, 406, 177, 534, 342, 113, 470, 241, 598, 9, 366, 137, 494, 265, 73, 430, 201, 558, 297, 41, 398, 169, 526, 334, 105, 462, 233, 590, 25, 382, 153, 510, 281, 89, 446, 217, 574, 318, 57, 414, 185, 542, 350, 121, 478, 249, 606, 305, 5, 362, 133, 490, 261, 69, 426, 197, 554, 293, 37, 394, 165, 522, 330, 101, 458, 229, 586, 21, 378, 149, 506, 277, 85, 442, 213, 570, 314, 53, 410, 181, 538, 346, 117, 474, 245, 602, 13, 370, 141, 498, 269, 77, 434, 205, 562, 301, 45, 402, 173, 530, 338, 109, 466, 237, 594, 29, 386, 157, 514, 285, 93, 450, 221, 578, 322, 61, 418, 189, 546, 354, 125, 482, 253, 610, 3, 360, 131, 488, 259, 67, 424, 195, 552, 291, 35, 392, 163, 520, 328, 99, 456, 227, 584, 19, 376, 147, 504, 275, 83, 440, 211, 568, 312, 51, 408, 179, 536, 344, 115, 472, 243, 600, 11, 368, 139, 496, 267, 75, 432, 203, 560, 299, 43, 400, 171, 528, 336, 107, 464, 235, 592, 27, 384, 155, 512, 283, 91, 448, 219, 576, 320, 59, 416, 187, 544, 352, 123, 480, 251, 608, 308, 7, 364, 135, 492, 263, 71, 428, 199, 556, 295, 39, 396, 167, 524, 332, 103, 460, 231, 588, 23, 380, 151, 508, 279, 87, 444, 215, 572, 316, 55, 412, 183, 540, 348, 119, 476, 247, 604, 15, 372, 143, 500, 271, 79, 436, 207, 564, 303, 47, 404, 175, 532, 340, 111, 468, 239, 596, 31, 388, 159, 516, 287, 95, 452, 223, 580, 324, 63, 420, 191, 548, 356, 127, 484, 255, 612]; + + return (unsafe{*PERM613.get_unchecked((index % 613) as usize)} as u32 * 375769 + + unsafe{*PERM613.get_unchecked(((index / 613) % 613) as usize)} as u32 * 613 + + unsafe{*PERM613.get_unchecked(((index / 375769) % 613) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (230346397u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton617(index: u32) -> f32 { - const PERM617: [u16; 617] = [0, 361, 128, 489, 256, 64, 425, 192, 553, 288, 32, 393, 160, 521, - 329, 96, 457, 224, 585, 16, 377, 144, 505, 272, 80, 441, 208, - 569, 313, 48, 409, 176, 537, 345, 112, 473, 240, 601, 304, 8, - 369, 136, 497, 264, 72, 433, 200, 561, 296, 40, 401, 168, 529, - 337, 104, 465, 232, 593, 24, 385, 152, 513, 280, 88, 449, 216, - 577, 321, 56, 417, 184, 545, 353, 120, 481, 248, 609, 4, 365, - 132, 493, 260, 68, 429, 196, 557, 292, 36, 397, 164, 525, 333, - 100, 461, 228, 589, 20, 381, 148, 509, 276, 84, 445, 212, 573, - 317, 52, 413, 180, 541, 349, 116, 477, 244, 605, 309, 12, 373, - 140, 501, 268, 76, 437, 204, 565, 300, 44, 405, 172, 533, 341, - 108, 469, 236, 597, 28, 389, 156, 517, 284, 92, 453, 220, 581, - 325, 60, 421, 188, 549, 357, 124, 485, 252, 613, 2, 363, 130, - 491, 258, 66, 427, 194, 555, 290, 34, 395, 162, 523, 331, 98, - 459, 226, 587, 18, 379, 146, 507, 274, 82, 443, 210, 571, 315, - 50, 411, 178, 539, 347, 114, 475, 242, 603, 306, 10, 371, 138, - 499, 266, 74, 435, 202, 563, 298, 42, 403, 170, 531, 339, 106, - 467, 234, 595, 26, 387, 154, 515, 282, 90, 451, 218, 579, 323, - 58, 419, 186, 547, 355, 122, 483, 250, 611, 6, 367, 134, 495, - 262, 70, 431, 198, 559, 294, 38, 399, 166, 527, 335, 102, 463, - 230, 591, 22, 383, 150, 511, 278, 86, 447, 214, 575, 319, 54, - 415, 182, 543, 351, 118, 479, 246, 607, 311, 14, 375, 142, 503, - 270, 78, 439, 206, 567, 302, 46, 407, 174, 535, 343, 110, 471, - 238, 599, 30, 391, 158, 519, 286, 94, 455, 222, 583, 327, 62, - 423, 190, 551, 359, 126, 487, 254, 615, 308, 1, 362, 129, 490, - 257, 65, 426, 193, 554, 289, 33, 394, 161, 522, 330, 97, 458, - 225, 586, 17, 378, 145, 506, 273, 81, 442, 209, 570, 314, 49, - 410, 177, 538, 346, 113, 474, 241, 602, 305, 9, 370, 137, 498, - 265, 73, 434, 201, 562, 297, 41, 402, 169, 530, 338, 105, 466, - 233, 594, 25, 386, 153, 514, 281, 89, 450, 217, 578, 322, 57, - 418, 185, 546, 354, 121, 482, 249, 610, 5, 366, 133, 494, 261, - 69, 430, 197, 558, 293, 37, 398, 165, 526, 334, 101, 462, 229, - 590, 21, 382, 149, 510, 277, 85, 446, 213, 574, 318, 53, 414, - 181, 542, 350, 117, 478, 245, 606, 310, 13, 374, 141, 502, 269, - 77, 438, 205, 566, 301, 45, 406, 173, 534, 342, 109, 470, 237, - 598, 29, 390, 157, 518, 285, 93, 454, 221, 582, 326, 61, 422, - 189, 550, 358, 125, 486, 253, 614, 3, 364, 131, 492, 259, 67, - 428, 195, 556, 291, 35, 396, 163, 524, 332, 99, 460, 227, 588, - 19, 380, 147, 508, 275, 83, 444, 211, 572, 316, 51, 412, 179, - 540, 348, 115, 476, 243, 604, 307, 11, 372, 139, 500, 267, 75, - 436, 203, 564, 299, 43, 404, 171, 532, 340, 107, 468, 235, 596, - 27, 388, 155, 516, 283, 91, 452, 219, 580, 324, 59, 420, 187, - 548, 356, 123, 484, 251, 612, 7, 368, 135, 496, 263, 71, 432, - 199, 560, 295, 39, 400, 167, 528, 336, 103, 464, 231, 592, 23, - 384, 151, 512, 279, 87, 448, 215, 576, 320, 55, 416, 183, 544, - 352, 119, 480, 247, 608, 312, 15, 376, 143, 504, 271, 79, 440, - 207, 568, 303, 47, 408, 175, 536, 344, 111, 472, 239, 600, 31, - 392, 159, 520, 287, 95, 456, 223, 584, 328, 63, 424, 191, 552, - 360, 127, 488, 255, 616]; - - return (unsafe { *PERM617.get_unchecked((index % 617) as usize) } as u32 * 380689 + - unsafe { *PERM617.get_unchecked(((index / 617) % 617) as usize) } as u32 * 617 + - unsafe { - *PERM617.get_unchecked(((index / 380689) % 617) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (234885113u32 as f32)); // Results in [0,1). + const PERM617: [u16; 617] = [0, 361, 128, 489, 256, 64, 425, 192, 553, 288, 32, 393, 160, 521, 329, 96, 457, 224, 585, 16, 377, 144, 505, 272, 80, 441, 208, 569, 313, 48, 409, 176, 537, 345, 112, 473, 240, 601, 304, 8, 369, 136, 497, 264, 72, 433, 200, 561, 296, 40, 401, 168, 529, 337, 104, 465, 232, 593, 24, 385, 152, 513, 280, 88, 449, 216, 577, 321, 56, 417, 184, 545, 353, 120, 481, 248, 609, 4, 365, 132, 493, 260, 68, 429, 196, 557, 292, 36, 397, 164, 525, 333, 100, 461, 228, 589, 20, 381, 148, 509, 276, 84, 445, 212, 573, 317, 52, 413, 180, 541, 349, 116, 477, 244, 605, 309, 12, 373, 140, 501, 268, 76, 437, 204, 565, 300, 44, 405, 172, 533, 341, 108, 469, 236, 597, 28, 389, 156, 517, 284, 92, 453, 220, 581, 325, 60, 421, 188, 549, 357, 124, 485, 252, 613, 2, 363, 130, 491, 258, 66, 427, 194, 555, 290, 34, 395, 162, 523, 331, 98, 459, 226, 587, 18, 379, 146, 507, 274, 82, 443, 210, 571, 315, 50, 411, 178, 539, 347, 114, 475, 242, 603, 306, 10, 371, 138, 499, 266, 74, 435, 202, 563, 298, 42, 403, 170, 531, 339, 106, 467, 234, 595, 26, 387, 154, 515, 282, 90, 451, 218, 579, 323, 58, 419, 186, 547, 355, 122, 483, 250, 611, 6, 367, 134, 495, 262, 70, 431, 198, 559, 294, 38, 399, 166, 527, 335, 102, 463, 230, 591, 22, 383, 150, 511, 278, 86, 447, 214, 575, 319, 54, 415, 182, 543, 351, 118, 479, 246, 607, 311, 14, 375, 142, 503, 270, 78, 439, 206, 567, 302, 46, 407, 174, 535, 343, 110, 471, 238, 599, 30, 391, 158, 519, 286, 94, 455, 222, 583, 327, 62, 423, 190, 551, 359, 126, 487, 254, 615, 308, 1, 362, 129, 490, 257, 65, 426, 193, 554, 289, 33, 394, 161, 522, 330, 97, 458, 225, 586, 17, 378, 145, 506, 273, 81, 442, 209, 570, 314, 49, 410, 177, 538, 346, 113, 474, 241, 602, 305, 9, 370, 137, 498, 265, 73, 434, 201, 562, 297, 41, 402, 169, 530, 338, 105, 466, 233, 594, 25, 386, 153, 514, 281, 89, 450, 217, 578, 322, 57, 418, 185, 546, 354, 121, 482, 249, 610, 5, 366, 133, 494, 261, 69, 430, 197, 558, 293, 37, 398, 165, 526, 334, 101, 462, 229, 590, 21, 382, 149, 510, 277, 85, 446, 213, 574, 318, 53, 414, 181, 542, 350, 117, 478, 245, 606, 310, 13, 374, 141, 502, 269, 77, 438, 205, 566, 301, 45, 406, 173, 534, 342, 109, 470, 237, 598, 29, 390, 157, 518, 285, 93, 454, 221, 582, 326, 61, 422, 189, 550, 358, 125, 486, 253, 614, 3, 364, 131, 492, 259, 67, 428, 195, 556, 291, 35, 396, 163, 524, 332, 99, 460, 227, 588, 19, 380, 147, 508, 275, 83, 444, 211, 572, 316, 51, 412, 179, 540, 348, 115, 476, 243, 604, 307, 11, 372, 139, 500, 267, 75, 436, 203, 564, 299, 43, 404, 171, 532, 340, 107, 468, 235, 596, 27, 388, 155, 516, 283, 91, 452, 219, 580, 324, 59, 420, 187, 548, 356, 123, 484, 251, 612, 7, 368, 135, 496, 263, 71, 432, 199, 560, 295, 39, 400, 167, 528, 336, 103, 464, 231, 592, 23, 384, 151, 512, 279, 87, 448, 215, 576, 320, 55, 416, 183, 544, 352, 119, 480, 247, 608, 312, 15, 376, 143, 504, 271, 79, 440, 207, 568, 303, 47, 408, 175, 536, 344, 111, 472, 239, 600, 31, 392, 159, 520, 287, 95, 456, 223, 584, 328, 63, 424, 191, 552, 360, 127, 488, 255, 616]; + + return (unsafe{*PERM617.get_unchecked((index % 617) as usize)} as u32 * 380689 + + unsafe{*PERM617.get_unchecked(((index / 617) % 617) as usize)} as u32 * 617 + + unsafe{*PERM617.get_unchecked(((index / 380689) % 617) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (234885113u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton619(index: u32) -> f32 { - const PERM619: [u16; 619] = [0, 363, 128, 491, 256, 64, 427, 192, 555, 288, 32, 395, 160, 523, - 331, 96, 459, 224, 587, 16, 379, 144, 507, 272, 80, 443, 208, - 571, 315, 48, 411, 176, 539, 347, 112, 475, 240, 603, 304, 8, - 371, 136, 499, 264, 72, 435, 200, 563, 296, 40, 403, 168, 531, - 339, 104, 467, 232, 595, 24, 387, 152, 515, 280, 88, 451, 216, - 579, 323, 56, 419, 184, 547, 355, 120, 483, 248, 611, 4, 367, - 132, 495, 260, 68, 431, 196, 559, 292, 36, 399, 164, 527, 335, - 100, 463, 228, 591, 20, 383, 148, 511, 276, 84, 447, 212, 575, - 319, 52, 415, 180, 543, 351, 116, 479, 244, 607, 311, 12, 375, - 140, 503, 268, 76, 439, 204, 567, 300, 44, 407, 172, 535, 343, - 108, 471, 236, 599, 28, 391, 156, 519, 284, 92, 455, 220, 583, - 327, 60, 423, 188, 551, 359, 124, 487, 252, 615, 308, 2, 365, - 130, 493, 258, 66, 429, 194, 557, 290, 34, 397, 162, 525, 333, - 98, 461, 226, 589, 18, 381, 146, 509, 274, 82, 445, 210, 573, - 317, 50, 413, 178, 541, 349, 114, 477, 242, 605, 306, 10, 373, - 138, 501, 266, 74, 437, 202, 565, 298, 42, 405, 170, 533, 341, - 106, 469, 234, 597, 26, 389, 154, 517, 282, 90, 453, 218, 581, - 325, 58, 421, 186, 549, 357, 122, 485, 250, 613, 6, 369, 134, - 497, 262, 70, 433, 198, 561, 294, 38, 401, 166, 529, 337, 102, - 465, 230, 593, 22, 385, 150, 513, 278, 86, 449, 214, 577, 321, - 54, 417, 182, 545, 353, 118, 481, 246, 609, 313, 14, 377, 142, - 505, 270, 78, 441, 206, 569, 302, 46, 409, 174, 537, 345, 110, - 473, 238, 601, 30, 393, 158, 521, 286, 94, 457, 222, 585, 329, - 62, 425, 190, 553, 361, 126, 489, 254, 617, 309, 1, 364, 129, - 492, 257, 65, 428, 193, 556, 289, 33, 396, 161, 524, 332, 97, - 460, 225, 588, 17, 380, 145, 508, 273, 81, 444, 209, 572, 316, - 49, 412, 177, 540, 348, 113, 476, 241, 604, 305, 9, 372, 137, - 500, 265, 73, 436, 201, 564, 297, 41, 404, 169, 532, 340, 105, - 468, 233, 596, 25, 388, 153, 516, 281, 89, 452, 217, 580, 324, - 57, 420, 185, 548, 356, 121, 484, 249, 612, 5, 368, 133, 496, - 261, 69, 432, 197, 560, 293, 37, 400, 165, 528, 336, 101, 464, - 229, 592, 21, 384, 149, 512, 277, 85, 448, 213, 576, 320, 53, - 416, 181, 544, 352, 117, 480, 245, 608, 312, 13, 376, 141, 504, - 269, 77, 440, 205, 568, 301, 45, 408, 173, 536, 344, 109, 472, - 237, 600, 29, 392, 157, 520, 285, 93, 456, 221, 584, 328, 61, - 424, 189, 552, 360, 125, 488, 253, 616, 310, 3, 366, 131, 494, - 259, 67, 430, 195, 558, 291, 35, 398, 163, 526, 334, 99, 462, - 227, 590, 19, 382, 147, 510, 275, 83, 446, 211, 574, 318, 51, - 414, 179, 542, 350, 115, 478, 243, 606, 307, 11, 374, 139, 502, - 267, 75, 438, 203, 566, 299, 43, 406, 171, 534, 342, 107, 470, - 235, 598, 27, 390, 155, 518, 283, 91, 454, 219, 582, 326, 59, - 422, 187, 550, 358, 123, 486, 251, 614, 7, 370, 135, 498, 263, - 71, 434, 199, 562, 295, 39, 402, 167, 530, 338, 103, 466, 231, - 594, 23, 386, 151, 514, 279, 87, 450, 215, 578, 322, 55, 418, - 183, 546, 354, 119, 482, 247, 610, 314, 15, 378, 143, 506, 271, - 79, 442, 207, 570, 303, 47, 410, 175, 538, 346, 111, 474, 239, - 602, 31, 394, 159, 522, 287, 95, 458, 223, 586, 330, 63, 426, - 191, 554, 362, 127, 490, 255, 618]; - - return (unsafe { *PERM619.get_unchecked((index % 619) as usize) } as u32 * 383161 + - unsafe { *PERM619.get_unchecked(((index / 619) % 619) as usize) } as u32 * 619 + - unsafe { - *PERM619.get_unchecked(((index / 383161) % 619) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (237176659u32 as f32)); // Results in [0,1). + const PERM619: [u16; 619] = [0, 363, 128, 491, 256, 64, 427, 192, 555, 288, 32, 395, 160, 523, 331, 96, 459, 224, 587, 16, 379, 144, 507, 272, 80, 443, 208, 571, 315, 48, 411, 176, 539, 347, 112, 475, 240, 603, 304, 8, 371, 136, 499, 264, 72, 435, 200, 563, 296, 40, 403, 168, 531, 339, 104, 467, 232, 595, 24, 387, 152, 515, 280, 88, 451, 216, 579, 323, 56, 419, 184, 547, 355, 120, 483, 248, 611, 4, 367, 132, 495, 260, 68, 431, 196, 559, 292, 36, 399, 164, 527, 335, 100, 463, 228, 591, 20, 383, 148, 511, 276, 84, 447, 212, 575, 319, 52, 415, 180, 543, 351, 116, 479, 244, 607, 311, 12, 375, 140, 503, 268, 76, 439, 204, 567, 300, 44, 407, 172, 535, 343, 108, 471, 236, 599, 28, 391, 156, 519, 284, 92, 455, 220, 583, 327, 60, 423, 188, 551, 359, 124, 487, 252, 615, 308, 2, 365, 130, 493, 258, 66, 429, 194, 557, 290, 34, 397, 162, 525, 333, 98, 461, 226, 589, 18, 381, 146, 509, 274, 82, 445, 210, 573, 317, 50, 413, 178, 541, 349, 114, 477, 242, 605, 306, 10, 373, 138, 501, 266, 74, 437, 202, 565, 298, 42, 405, 170, 533, 341, 106, 469, 234, 597, 26, 389, 154, 517, 282, 90, 453, 218, 581, 325, 58, 421, 186, 549, 357, 122, 485, 250, 613, 6, 369, 134, 497, 262, 70, 433, 198, 561, 294, 38, 401, 166, 529, 337, 102, 465, 230, 593, 22, 385, 150, 513, 278, 86, 449, 214, 577, 321, 54, 417, 182, 545, 353, 118, 481, 246, 609, 313, 14, 377, 142, 505, 270, 78, 441, 206, 569, 302, 46, 409, 174, 537, 345, 110, 473, 238, 601, 30, 393, 158, 521, 286, 94, 457, 222, 585, 329, 62, 425, 190, 553, 361, 126, 489, 254, 617, 309, 1, 364, 129, 492, 257, 65, 428, 193, 556, 289, 33, 396, 161, 524, 332, 97, 460, 225, 588, 17, 380, 145, 508, 273, 81, 444, 209, 572, 316, 49, 412, 177, 540, 348, 113, 476, 241, 604, 305, 9, 372, 137, 500, 265, 73, 436, 201, 564, 297, 41, 404, 169, 532, 340, 105, 468, 233, 596, 25, 388, 153, 516, 281, 89, 452, 217, 580, 324, 57, 420, 185, 548, 356, 121, 484, 249, 612, 5, 368, 133, 496, 261, 69, 432, 197, 560, 293, 37, 400, 165, 528, 336, 101, 464, 229, 592, 21, 384, 149, 512, 277, 85, 448, 213, 576, 320, 53, 416, 181, 544, 352, 117, 480, 245, 608, 312, 13, 376, 141, 504, 269, 77, 440, 205, 568, 301, 45, 408, 173, 536, 344, 109, 472, 237, 600, 29, 392, 157, 520, 285, 93, 456, 221, 584, 328, 61, 424, 189, 552, 360, 125, 488, 253, 616, 310, 3, 366, 131, 494, 259, 67, 430, 195, 558, 291, 35, 398, 163, 526, 334, 99, 462, 227, 590, 19, 382, 147, 510, 275, 83, 446, 211, 574, 318, 51, 414, 179, 542, 350, 115, 478, 243, 606, 307, 11, 374, 139, 502, 267, 75, 438, 203, 566, 299, 43, 406, 171, 534, 342, 107, 470, 235, 598, 27, 390, 155, 518, 283, 91, 454, 219, 582, 326, 59, 422, 187, 550, 358, 123, 486, 251, 614, 7, 370, 135, 498, 263, 71, 434, 199, 562, 295, 39, 402, 167, 530, 338, 103, 466, 231, 594, 23, 386, 151, 514, 279, 87, 450, 215, 578, 322, 55, 418, 183, 546, 354, 119, 482, 247, 610, 314, 15, 378, 143, 506, 271, 79, 442, 207, 570, 303, 47, 410, 175, 538, 346, 111, 474, 239, 602, 31, 394, 159, 522, 287, 95, 458, 223, 586, 330, 63, 426, 191, 554, 362, 127, 490, 255, 618]; + + return (unsafe{*PERM619.get_unchecked((index % 619) as usize)} as u32 * 383161 + + unsafe{*PERM619.get_unchecked(((index / 619) % 619) as usize)} as u32 * 619 + + unsafe{*PERM619.get_unchecked(((index / 383161) % 619) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (237176659u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton631(index: u32) -> f32 { - const PERM631: [u16; 631] = [0, 375, 128, 503, 256, 64, 439, 192, 567, 288, 32, 407, 160, 535, - 343, 96, 471, 224, 599, 304, 16, 391, 144, 519, 272, 80, 455, - 208, 583, 327, 48, 423, 176, 551, 359, 112, 487, 240, 615, 8, - 383, 136, 511, 264, 72, 447, 200, 575, 296, 40, 415, 168, 543, - 351, 104, 479, 232, 607, 319, 24, 399, 152, 527, 280, 88, 463, - 216, 591, 335, 56, 431, 184, 559, 367, 120, 495, 248, 623, 312, - 4, 379, 132, 507, 260, 68, 443, 196, 571, 292, 36, 411, 164, 539, - 347, 100, 475, 228, 603, 308, 20, 395, 148, 523, 276, 84, 459, - 212, 587, 331, 52, 427, 180, 555, 363, 116, 491, 244, 619, 12, - 387, 140, 515, 268, 76, 451, 204, 579, 300, 44, 419, 172, 547, - 355, 108, 483, 236, 611, 323, 28, 403, 156, 531, 284, 92, 467, - 220, 595, 339, 60, 435, 188, 563, 371, 124, 499, 252, 627, 314, - 2, 377, 130, 505, 258, 66, 441, 194, 569, 290, 34, 409, 162, 537, - 345, 98, 473, 226, 601, 306, 18, 393, 146, 521, 274, 82, 457, - 210, 585, 329, 50, 425, 178, 553, 361, 114, 489, 242, 617, 10, - 385, 138, 513, 266, 74, 449, 202, 577, 298, 42, 417, 170, 545, - 353, 106, 481, 234, 609, 321, 26, 401, 154, 529, 282, 90, 465, - 218, 593, 337, 58, 433, 186, 561, 369, 122, 497, 250, 625, 317, - 6, 381, 134, 509, 262, 70, 445, 198, 573, 294, 38, 413, 166, 541, - 349, 102, 477, 230, 605, 310, 22, 397, 150, 525, 278, 86, 461, - 214, 589, 333, 54, 429, 182, 557, 365, 118, 493, 246, 621, 14, - 389, 142, 517, 270, 78, 453, 206, 581, 302, 46, 421, 174, 549, - 357, 110, 485, 238, 613, 325, 30, 405, 158, 533, 286, 94, 469, - 222, 597, 341, 62, 437, 190, 565, 373, 126, 501, 254, 629, 315, - 1, 376, 129, 504, 257, 65, 440, 193, 568, 289, 33, 408, 161, 536, - 344, 97, 472, 225, 600, 305, 17, 392, 145, 520, 273, 81, 456, - 209, 584, 328, 49, 424, 177, 552, 360, 113, 488, 241, 616, 9, - 384, 137, 512, 265, 73, 448, 201, 576, 297, 41, 416, 169, 544, - 352, 105, 480, 233, 608, 320, 25, 400, 153, 528, 281, 89, 464, - 217, 592, 336, 57, 432, 185, 560, 368, 121, 496, 249, 624, 313, - 5, 380, 133, 508, 261, 69, 444, 197, 572, 293, 37, 412, 165, 540, - 348, 101, 476, 229, 604, 309, 21, 396, 149, 524, 277, 85, 460, - 213, 588, 332, 53, 428, 181, 556, 364, 117, 492, 245, 620, 13, - 388, 141, 516, 269, 77, 452, 205, 580, 301, 45, 420, 173, 548, - 356, 109, 484, 237, 612, 324, 29, 404, 157, 532, 285, 93, 468, - 221, 596, 340, 61, 436, 189, 564, 372, 125, 500, 253, 628, 316, - 3, 378, 131, 506, 259, 67, 442, 195, 570, 291, 35, 410, 163, 538, - 346, 99, 474, 227, 602, 307, 19, 394, 147, 522, 275, 83, 458, - 211, 586, 330, 51, 426, 179, 554, 362, 115, 490, 243, 618, 11, - 386, 139, 514, 267, 75, 450, 203, 578, 299, 43, 418, 171, 546, - 354, 107, 482, 235, 610, 322, 27, 402, 155, 530, 283, 91, 466, - 219, 594, 338, 59, 434, 187, 562, 370, 123, 498, 251, 626, 318, - 7, 382, 135, 510, 263, 71, 446, 199, 574, 295, 39, 414, 167, 542, - 350, 103, 478, 231, 606, 311, 23, 398, 151, 526, 279, 87, 462, - 215, 590, 334, 55, 430, 183, 558, 366, 119, 494, 247, 622, 15, - 390, 143, 518, 271, 79, 454, 207, 582, 303, 47, 422, 175, 550, - 358, 111, 486, 239, 614, 326, 31, 406, 159, 534, 287, 95, 470, - 223, 598, 342, 63, 438, 191, 566, 374, 127, 502, 255, 630]; - - return (unsafe { *PERM631.get_unchecked((index % 631) as usize) } as u32 * 398161 + - unsafe { *PERM631.get_unchecked(((index / 631) % 631) as usize) } as u32 * 631 + - unsafe { - *PERM631.get_unchecked(((index / 398161) % 631) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (251239591u32 as f32)); // Results in [0,1). + const PERM631: [u16; 631] = [0, 375, 128, 503, 256, 64, 439, 192, 567, 288, 32, 407, 160, 535, 343, 96, 471, 224, 599, 304, 16, 391, 144, 519, 272, 80, 455, 208, 583, 327, 48, 423, 176, 551, 359, 112, 487, 240, 615, 8, 383, 136, 511, 264, 72, 447, 200, 575, 296, 40, 415, 168, 543, 351, 104, 479, 232, 607, 319, 24, 399, 152, 527, 280, 88, 463, 216, 591, 335, 56, 431, 184, 559, 367, 120, 495, 248, 623, 312, 4, 379, 132, 507, 260, 68, 443, 196, 571, 292, 36, 411, 164, 539, 347, 100, 475, 228, 603, 308, 20, 395, 148, 523, 276, 84, 459, 212, 587, 331, 52, 427, 180, 555, 363, 116, 491, 244, 619, 12, 387, 140, 515, 268, 76, 451, 204, 579, 300, 44, 419, 172, 547, 355, 108, 483, 236, 611, 323, 28, 403, 156, 531, 284, 92, 467, 220, 595, 339, 60, 435, 188, 563, 371, 124, 499, 252, 627, 314, 2, 377, 130, 505, 258, 66, 441, 194, 569, 290, 34, 409, 162, 537, 345, 98, 473, 226, 601, 306, 18, 393, 146, 521, 274, 82, 457, 210, 585, 329, 50, 425, 178, 553, 361, 114, 489, 242, 617, 10, 385, 138, 513, 266, 74, 449, 202, 577, 298, 42, 417, 170, 545, 353, 106, 481, 234, 609, 321, 26, 401, 154, 529, 282, 90, 465, 218, 593, 337, 58, 433, 186, 561, 369, 122, 497, 250, 625, 317, 6, 381, 134, 509, 262, 70, 445, 198, 573, 294, 38, 413, 166, 541, 349, 102, 477, 230, 605, 310, 22, 397, 150, 525, 278, 86, 461, 214, 589, 333, 54, 429, 182, 557, 365, 118, 493, 246, 621, 14, 389, 142, 517, 270, 78, 453, 206, 581, 302, 46, 421, 174, 549, 357, 110, 485, 238, 613, 325, 30, 405, 158, 533, 286, 94, 469, 222, 597, 341, 62, 437, 190, 565, 373, 126, 501, 254, 629, 315, 1, 376, 129, 504, 257, 65, 440, 193, 568, 289, 33, 408, 161, 536, 344, 97, 472, 225, 600, 305, 17, 392, 145, 520, 273, 81, 456, 209, 584, 328, 49, 424, 177, 552, 360, 113, 488, 241, 616, 9, 384, 137, 512, 265, 73, 448, 201, 576, 297, 41, 416, 169, 544, 352, 105, 480, 233, 608, 320, 25, 400, 153, 528, 281, 89, 464, 217, 592, 336, 57, 432, 185, 560, 368, 121, 496, 249, 624, 313, 5, 380, 133, 508, 261, 69, 444, 197, 572, 293, 37, 412, 165, 540, 348, 101, 476, 229, 604, 309, 21, 396, 149, 524, 277, 85, 460, 213, 588, 332, 53, 428, 181, 556, 364, 117, 492, 245, 620, 13, 388, 141, 516, 269, 77, 452, 205, 580, 301, 45, 420, 173, 548, 356, 109, 484, 237, 612, 324, 29, 404, 157, 532, 285, 93, 468, 221, 596, 340, 61, 436, 189, 564, 372, 125, 500, 253, 628, 316, 3, 378, 131, 506, 259, 67, 442, 195, 570, 291, 35, 410, 163, 538, 346, 99, 474, 227, 602, 307, 19, 394, 147, 522, 275, 83, 458, 211, 586, 330, 51, 426, 179, 554, 362, 115, 490, 243, 618, 11, 386, 139, 514, 267, 75, 450, 203, 578, 299, 43, 418, 171, 546, 354, 107, 482, 235, 610, 322, 27, 402, 155, 530, 283, 91, 466, 219, 594, 338, 59, 434, 187, 562, 370, 123, 498, 251, 626, 318, 7, 382, 135, 510, 263, 71, 446, 199, 574, 295, 39, 414, 167, 542, 350, 103, 478, 231, 606, 311, 23, 398, 151, 526, 279, 87, 462, 215, 590, 334, 55, 430, 183, 558, 366, 119, 494, 247, 622, 15, 390, 143, 518, 271, 79, 454, 207, 582, 303, 47, 422, 175, 550, 358, 111, 486, 239, 614, 326, 31, 406, 159, 534, 287, 95, 470, 223, 598, 342, 63, 438, 191, 566, 374, 127, 502, 255, 630]; + + return (unsafe{*PERM631.get_unchecked((index % 631) as usize)} as u32 * 398161 + + unsafe{*PERM631.get_unchecked(((index / 631) % 631) as usize)} as u32 * 631 + + unsafe{*PERM631.get_unchecked(((index / 398161) % 631) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (251239591u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton641(index: u32) -> f32 { - const PERM641: [u16; 641] = [0, 385, 256, 128, 513, 64, 449, 321, 192, 577, 32, 417, 288, 160, - 545, 96, 481, 353, 224, 609, 16, 401, 272, 144, 529, 80, 465, - 337, 208, 593, 48, 433, 304, 176, 561, 112, 497, 369, 240, 625, - 8, 393, 264, 136, 521, 72, 457, 329, 200, 585, 40, 425, 296, 168, - 553, 104, 489, 361, 232, 617, 24, 409, 280, 152, 537, 88, 473, - 345, 216, 601, 56, 441, 312, 184, 569, 120, 505, 377, 248, 633, - 4, 389, 260, 132, 517, 68, 453, 325, 196, 581, 36, 421, 292, 164, - 549, 100, 485, 357, 228, 613, 20, 405, 276, 148, 533, 84, 469, - 341, 212, 597, 52, 437, 308, 180, 565, 116, 501, 373, 244, 629, - 12, 397, 268, 140, 525, 76, 461, 333, 204, 589, 44, 429, 300, - 172, 557, 108, 493, 365, 236, 621, 28, 413, 284, 156, 541, 92, - 477, 349, 220, 605, 60, 445, 316, 188, 573, 124, 509, 381, 252, - 637, 2, 387, 258, 130, 515, 66, 451, 323, 194, 579, 34, 419, 290, - 162, 547, 98, 483, 355, 226, 611, 18, 403, 274, 146, 531, 82, - 467, 339, 210, 595, 50, 435, 306, 178, 563, 114, 499, 371, 242, - 627, 10, 395, 266, 138, 523, 74, 459, 331, 202, 587, 42, 427, - 298, 170, 555, 106, 491, 363, 234, 619, 26, 411, 282, 154, 539, - 90, 475, 347, 218, 603, 58, 443, 314, 186, 571, 122, 507, 379, - 250, 635, 6, 391, 262, 134, 519, 70, 455, 327, 198, 583, 38, 423, - 294, 166, 551, 102, 487, 359, 230, 615, 22, 407, 278, 150, 535, - 86, 471, 343, 214, 599, 54, 439, 310, 182, 567, 118, 503, 375, - 246, 631, 14, 399, 270, 142, 527, 78, 463, 335, 206, 591, 46, - 431, 302, 174, 559, 110, 495, 367, 238, 623, 30, 415, 286, 158, - 543, 94, 479, 351, 222, 607, 62, 447, 318, 190, 575, 126, 511, - 383, 254, 639, 320, 1, 386, 257, 129, 514, 65, 450, 322, 193, - 578, 33, 418, 289, 161, 546, 97, 482, 354, 225, 610, 17, 402, - 273, 145, 530, 81, 466, 338, 209, 594, 49, 434, 305, 177, 562, - 113, 498, 370, 241, 626, 9, 394, 265, 137, 522, 73, 458, 330, - 201, 586, 41, 426, 297, 169, 554, 105, 490, 362, 233, 618, 25, - 410, 281, 153, 538, 89, 474, 346, 217, 602, 57, 442, 313, 185, - 570, 121, 506, 378, 249, 634, 5, 390, 261, 133, 518, 69, 454, - 326, 197, 582, 37, 422, 293, 165, 550, 101, 486, 358, 229, 614, - 21, 406, 277, 149, 534, 85, 470, 342, 213, 598, 53, 438, 309, - 181, 566, 117, 502, 374, 245, 630, 13, 398, 269, 141, 526, 77, - 462, 334, 205, 590, 45, 430, 301, 173, 558, 109, 494, 366, 237, - 622, 29, 414, 285, 157, 542, 93, 478, 350, 221, 606, 61, 446, - 317, 189, 574, 125, 510, 382, 253, 638, 3, 388, 259, 131, 516, - 67, 452, 324, 195, 580, 35, 420, 291, 163, 548, 99, 484, 356, - 227, 612, 19, 404, 275, 147, 532, 83, 468, 340, 211, 596, 51, - 436, 307, 179, 564, 115, 500, 372, 243, 628, 11, 396, 267, 139, - 524, 75, 460, 332, 203, 588, 43, 428, 299, 171, 556, 107, 492, - 364, 235, 620, 27, 412, 283, 155, 540, 91, 476, 348, 219, 604, - 59, 444, 315, 187, 572, 123, 508, 380, 251, 636, 7, 392, 263, - 135, 520, 71, 456, 328, 199, 584, 39, 424, 295, 167, 552, 103, - 488, 360, 231, 616, 23, 408, 279, 151, 536, 87, 472, 344, 215, - 600, 55, 440, 311, 183, 568, 119, 504, 376, 247, 632, 15, 400, - 271, 143, 528, 79, 464, 336, 207, 592, 47, 432, 303, 175, 560, - 111, 496, 368, 239, 624, 31, 416, 287, 159, 544, 95, 480, 352, - 223, 608, 63, 448, 319, 191, 576, 127, 512, 384, 255, 640]; - - return (unsafe { *PERM641.get_unchecked((index % 641) as usize) } as u32 * 410881 + - unsafe { *PERM641.get_unchecked(((index / 641) % 641) as usize) } as u32 * 641 + - unsafe { - *PERM641.get_unchecked(((index / 410881) % 641) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (263374721u32 as f32)); // Results in [0,1). + const PERM641: [u16; 641] = [0, 385, 256, 128, 513, 64, 449, 321, 192, 577, 32, 417, 288, 160, 545, 96, 481, 353, 224, 609, 16, 401, 272, 144, 529, 80, 465, 337, 208, 593, 48, 433, 304, 176, 561, 112, 497, 369, 240, 625, 8, 393, 264, 136, 521, 72, 457, 329, 200, 585, 40, 425, 296, 168, 553, 104, 489, 361, 232, 617, 24, 409, 280, 152, 537, 88, 473, 345, 216, 601, 56, 441, 312, 184, 569, 120, 505, 377, 248, 633, 4, 389, 260, 132, 517, 68, 453, 325, 196, 581, 36, 421, 292, 164, 549, 100, 485, 357, 228, 613, 20, 405, 276, 148, 533, 84, 469, 341, 212, 597, 52, 437, 308, 180, 565, 116, 501, 373, 244, 629, 12, 397, 268, 140, 525, 76, 461, 333, 204, 589, 44, 429, 300, 172, 557, 108, 493, 365, 236, 621, 28, 413, 284, 156, 541, 92, 477, 349, 220, 605, 60, 445, 316, 188, 573, 124, 509, 381, 252, 637, 2, 387, 258, 130, 515, 66, 451, 323, 194, 579, 34, 419, 290, 162, 547, 98, 483, 355, 226, 611, 18, 403, 274, 146, 531, 82, 467, 339, 210, 595, 50, 435, 306, 178, 563, 114, 499, 371, 242, 627, 10, 395, 266, 138, 523, 74, 459, 331, 202, 587, 42, 427, 298, 170, 555, 106, 491, 363, 234, 619, 26, 411, 282, 154, 539, 90, 475, 347, 218, 603, 58, 443, 314, 186, 571, 122, 507, 379, 250, 635, 6, 391, 262, 134, 519, 70, 455, 327, 198, 583, 38, 423, 294, 166, 551, 102, 487, 359, 230, 615, 22, 407, 278, 150, 535, 86, 471, 343, 214, 599, 54, 439, 310, 182, 567, 118, 503, 375, 246, 631, 14, 399, 270, 142, 527, 78, 463, 335, 206, 591, 46, 431, 302, 174, 559, 110, 495, 367, 238, 623, 30, 415, 286, 158, 543, 94, 479, 351, 222, 607, 62, 447, 318, 190, 575, 126, 511, 383, 254, 639, 320, 1, 386, 257, 129, 514, 65, 450, 322, 193, 578, 33, 418, 289, 161, 546, 97, 482, 354, 225, 610, 17, 402, 273, 145, 530, 81, 466, 338, 209, 594, 49, 434, 305, 177, 562, 113, 498, 370, 241, 626, 9, 394, 265, 137, 522, 73, 458, 330, 201, 586, 41, 426, 297, 169, 554, 105, 490, 362, 233, 618, 25, 410, 281, 153, 538, 89, 474, 346, 217, 602, 57, 442, 313, 185, 570, 121, 506, 378, 249, 634, 5, 390, 261, 133, 518, 69, 454, 326, 197, 582, 37, 422, 293, 165, 550, 101, 486, 358, 229, 614, 21, 406, 277, 149, 534, 85, 470, 342, 213, 598, 53, 438, 309, 181, 566, 117, 502, 374, 245, 630, 13, 398, 269, 141, 526, 77, 462, 334, 205, 590, 45, 430, 301, 173, 558, 109, 494, 366, 237, 622, 29, 414, 285, 157, 542, 93, 478, 350, 221, 606, 61, 446, 317, 189, 574, 125, 510, 382, 253, 638, 3, 388, 259, 131, 516, 67, 452, 324, 195, 580, 35, 420, 291, 163, 548, 99, 484, 356, 227, 612, 19, 404, 275, 147, 532, 83, 468, 340, 211, 596, 51, 436, 307, 179, 564, 115, 500, 372, 243, 628, 11, 396, 267, 139, 524, 75, 460, 332, 203, 588, 43, 428, 299, 171, 556, 107, 492, 364, 235, 620, 27, 412, 283, 155, 540, 91, 476, 348, 219, 604, 59, 444, 315, 187, 572, 123, 508, 380, 251, 636, 7, 392, 263, 135, 520, 71, 456, 328, 199, 584, 39, 424, 295, 167, 552, 103, 488, 360, 231, 616, 23, 408, 279, 151, 536, 87, 472, 344, 215, 600, 55, 440, 311, 183, 568, 119, 504, 376, 247, 632, 15, 400, 271, 143, 528, 79, 464, 336, 207, 592, 47, 432, 303, 175, 560, 111, 496, 368, 239, 624, 31, 416, 287, 159, 544, 95, 480, 352, 223, 608, 63, 448, 319, 191, 576, 127, 512, 384, 255, 640]; + + return (unsafe{*PERM641.get_unchecked((index % 641) as usize)} as u32 * 410881 + + unsafe{*PERM641.get_unchecked(((index / 641) % 641) as usize)} as u32 * 641 + + unsafe{*PERM641.get_unchecked(((index / 410881) % 641) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (263374721u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton643(index: u32) -> f32 { - const PERM643: [u16; 643] = [0, 387, 256, 128, 515, 64, 451, 323, 192, 579, 32, 419, 288, 160, - 547, 96, 483, 355, 224, 611, 16, 403, 272, 144, 531, 80, 467, - 339, 208, 595, 48, 435, 304, 176, 563, 112, 499, 371, 240, 627, - 8, 395, 264, 136, 523, 72, 459, 331, 200, 587, 40, 427, 296, 168, - 555, 104, 491, 363, 232, 619, 24, 411, 280, 152, 539, 88, 475, - 347, 216, 603, 56, 443, 312, 184, 571, 120, 507, 379, 248, 635, - 4, 391, 260, 132, 519, 68, 455, 327, 196, 583, 36, 423, 292, 164, - 551, 100, 487, 359, 228, 615, 20, 407, 276, 148, 535, 84, 471, - 343, 212, 599, 52, 439, 308, 180, 567, 116, 503, 375, 244, 631, - 12, 399, 268, 140, 527, 76, 463, 335, 204, 591, 44, 431, 300, - 172, 559, 108, 495, 367, 236, 623, 28, 415, 284, 156, 543, 92, - 479, 351, 220, 607, 60, 447, 316, 188, 575, 124, 511, 383, 252, - 639, 320, 2, 389, 258, 130, 517, 66, 453, 325, 194, 581, 34, 421, - 290, 162, 549, 98, 485, 357, 226, 613, 18, 405, 274, 146, 533, - 82, 469, 341, 210, 597, 50, 437, 306, 178, 565, 114, 501, 373, - 242, 629, 10, 397, 266, 138, 525, 74, 461, 333, 202, 589, 42, - 429, 298, 170, 557, 106, 493, 365, 234, 621, 26, 413, 282, 154, - 541, 90, 477, 349, 218, 605, 58, 445, 314, 186, 573, 122, 509, - 381, 250, 637, 6, 393, 262, 134, 521, 70, 457, 329, 198, 585, 38, - 425, 294, 166, 553, 102, 489, 361, 230, 617, 22, 409, 278, 150, - 537, 86, 473, 345, 214, 601, 54, 441, 310, 182, 569, 118, 505, - 377, 246, 633, 14, 401, 270, 142, 529, 78, 465, 337, 206, 593, - 46, 433, 302, 174, 561, 110, 497, 369, 238, 625, 30, 417, 286, - 158, 545, 94, 481, 353, 222, 609, 62, 449, 318, 190, 577, 126, - 513, 385, 254, 641, 321, 1, 388, 257, 129, 516, 65, 452, 324, - 193, 580, 33, 420, 289, 161, 548, 97, 484, 356, 225, 612, 17, - 404, 273, 145, 532, 81, 468, 340, 209, 596, 49, 436, 305, 177, - 564, 113, 500, 372, 241, 628, 9, 396, 265, 137, 524, 73, 460, - 332, 201, 588, 41, 428, 297, 169, 556, 105, 492, 364, 233, 620, - 25, 412, 281, 153, 540, 89, 476, 348, 217, 604, 57, 444, 313, - 185, 572, 121, 508, 380, 249, 636, 5, 392, 261, 133, 520, 69, - 456, 328, 197, 584, 37, 424, 293, 165, 552, 101, 488, 360, 229, - 616, 21, 408, 277, 149, 536, 85, 472, 344, 213, 600, 53, 440, - 309, 181, 568, 117, 504, 376, 245, 632, 13, 400, 269, 141, 528, - 77, 464, 336, 205, 592, 45, 432, 301, 173, 560, 109, 496, 368, - 237, 624, 29, 416, 285, 157, 544, 93, 480, 352, 221, 608, 61, - 448, 317, 189, 576, 125, 512, 384, 253, 640, 322, 3, 390, 259, - 131, 518, 67, 454, 326, 195, 582, 35, 422, 291, 163, 550, 99, - 486, 358, 227, 614, 19, 406, 275, 147, 534, 83, 470, 342, 211, - 598, 51, 438, 307, 179, 566, 115, 502, 374, 243, 630, 11, 398, - 267, 139, 526, 75, 462, 334, 203, 590, 43, 430, 299, 171, 558, - 107, 494, 366, 235, 622, 27, 414, 283, 155, 542, 91, 478, 350, - 219, 606, 59, 446, 315, 187, 574, 123, 510, 382, 251, 638, 7, - 394, 263, 135, 522, 71, 458, 330, 199, 586, 39, 426, 295, 167, - 554, 103, 490, 362, 231, 618, 23, 410, 279, 151, 538, 87, 474, - 346, 215, 602, 55, 442, 311, 183, 570, 119, 506, 378, 247, 634, - 15, 402, 271, 143, 530, 79, 466, 338, 207, 594, 47, 434, 303, - 175, 562, 111, 498, 370, 239, 626, 31, 418, 287, 159, 546, 95, - 482, 354, 223, 610, 63, 450, 319, 191, 578, 127, 514, 386, 255, - 642]; - - return (unsafe { *PERM643.get_unchecked((index % 643) as usize) } as u32 * 413449 + - unsafe { *PERM643.get_unchecked(((index / 643) % 643) as usize) } as u32 * 643 + - unsafe { - *PERM643.get_unchecked(((index / 413449) % 643) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (265847707u32 as f32)); // Results in [0,1). + const PERM643: [u16; 643] = [0, 387, 256, 128, 515, 64, 451, 323, 192, 579, 32, 419, 288, 160, 547, 96, 483, 355, 224, 611, 16, 403, 272, 144, 531, 80, 467, 339, 208, 595, 48, 435, 304, 176, 563, 112, 499, 371, 240, 627, 8, 395, 264, 136, 523, 72, 459, 331, 200, 587, 40, 427, 296, 168, 555, 104, 491, 363, 232, 619, 24, 411, 280, 152, 539, 88, 475, 347, 216, 603, 56, 443, 312, 184, 571, 120, 507, 379, 248, 635, 4, 391, 260, 132, 519, 68, 455, 327, 196, 583, 36, 423, 292, 164, 551, 100, 487, 359, 228, 615, 20, 407, 276, 148, 535, 84, 471, 343, 212, 599, 52, 439, 308, 180, 567, 116, 503, 375, 244, 631, 12, 399, 268, 140, 527, 76, 463, 335, 204, 591, 44, 431, 300, 172, 559, 108, 495, 367, 236, 623, 28, 415, 284, 156, 543, 92, 479, 351, 220, 607, 60, 447, 316, 188, 575, 124, 511, 383, 252, 639, 320, 2, 389, 258, 130, 517, 66, 453, 325, 194, 581, 34, 421, 290, 162, 549, 98, 485, 357, 226, 613, 18, 405, 274, 146, 533, 82, 469, 341, 210, 597, 50, 437, 306, 178, 565, 114, 501, 373, 242, 629, 10, 397, 266, 138, 525, 74, 461, 333, 202, 589, 42, 429, 298, 170, 557, 106, 493, 365, 234, 621, 26, 413, 282, 154, 541, 90, 477, 349, 218, 605, 58, 445, 314, 186, 573, 122, 509, 381, 250, 637, 6, 393, 262, 134, 521, 70, 457, 329, 198, 585, 38, 425, 294, 166, 553, 102, 489, 361, 230, 617, 22, 409, 278, 150, 537, 86, 473, 345, 214, 601, 54, 441, 310, 182, 569, 118, 505, 377, 246, 633, 14, 401, 270, 142, 529, 78, 465, 337, 206, 593, 46, 433, 302, 174, 561, 110, 497, 369, 238, 625, 30, 417, 286, 158, 545, 94, 481, 353, 222, 609, 62, 449, 318, 190, 577, 126, 513, 385, 254, 641, 321, 1, 388, 257, 129, 516, 65, 452, 324, 193, 580, 33, 420, 289, 161, 548, 97, 484, 356, 225, 612, 17, 404, 273, 145, 532, 81, 468, 340, 209, 596, 49, 436, 305, 177, 564, 113, 500, 372, 241, 628, 9, 396, 265, 137, 524, 73, 460, 332, 201, 588, 41, 428, 297, 169, 556, 105, 492, 364, 233, 620, 25, 412, 281, 153, 540, 89, 476, 348, 217, 604, 57, 444, 313, 185, 572, 121, 508, 380, 249, 636, 5, 392, 261, 133, 520, 69, 456, 328, 197, 584, 37, 424, 293, 165, 552, 101, 488, 360, 229, 616, 21, 408, 277, 149, 536, 85, 472, 344, 213, 600, 53, 440, 309, 181, 568, 117, 504, 376, 245, 632, 13, 400, 269, 141, 528, 77, 464, 336, 205, 592, 45, 432, 301, 173, 560, 109, 496, 368, 237, 624, 29, 416, 285, 157, 544, 93, 480, 352, 221, 608, 61, 448, 317, 189, 576, 125, 512, 384, 253, 640, 322, 3, 390, 259, 131, 518, 67, 454, 326, 195, 582, 35, 422, 291, 163, 550, 99, 486, 358, 227, 614, 19, 406, 275, 147, 534, 83, 470, 342, 211, 598, 51, 438, 307, 179, 566, 115, 502, 374, 243, 630, 11, 398, 267, 139, 526, 75, 462, 334, 203, 590, 43, 430, 299, 171, 558, 107, 494, 366, 235, 622, 27, 414, 283, 155, 542, 91, 478, 350, 219, 606, 59, 446, 315, 187, 574, 123, 510, 382, 251, 638, 7, 394, 263, 135, 522, 71, 458, 330, 199, 586, 39, 426, 295, 167, 554, 103, 490, 362, 231, 618, 23, 410, 279, 151, 538, 87, 474, 346, 215, 602, 55, 442, 311, 183, 570, 119, 506, 378, 247, 634, 15, 402, 271, 143, 530, 79, 466, 338, 207, 594, 47, 434, 303, 175, 562, 111, 498, 370, 239, 626, 31, 418, 287, 159, 546, 95, 482, 354, 223, 610, 63, 450, 319, 191, 578, 127, 514, 386, 255, 642]; + + return (unsafe{*PERM643.get_unchecked((index % 643) as usize)} as u32 * 413449 + + unsafe{*PERM643.get_unchecked(((index / 643) % 643) as usize)} as u32 * 643 + + unsafe{*PERM643.get_unchecked(((index / 413449) % 643) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (265847707u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton647(index: u32) -> f32 { - const PERM647: [u16; 647] = [0, 391, 256, 128, 519, 64, 455, 327, 192, 583, 32, 423, 288, 160, - 551, 96, 487, 359, 224, 615, 16, 407, 272, 144, 535, 80, 471, - 343, 208, 599, 48, 439, 304, 176, 567, 112, 503, 375, 240, 631, - 8, 399, 264, 136, 527, 72, 463, 335, 200, 591, 40, 431, 296, 168, - 559, 104, 495, 367, 232, 623, 24, 415, 280, 152, 543, 88, 479, - 351, 216, 607, 56, 447, 312, 184, 575, 120, 511, 383, 248, 639, - 320, 4, 395, 260, 132, 523, 68, 459, 331, 196, 587, 36, 427, 292, - 164, 555, 100, 491, 363, 228, 619, 20, 411, 276, 148, 539, 84, - 475, 347, 212, 603, 52, 443, 308, 180, 571, 116, 507, 379, 244, - 635, 12, 403, 268, 140, 531, 76, 467, 339, 204, 595, 44, 435, - 300, 172, 563, 108, 499, 371, 236, 627, 28, 419, 284, 156, 547, - 92, 483, 355, 220, 611, 60, 451, 316, 188, 579, 124, 515, 387, - 252, 643, 322, 2, 393, 258, 130, 521, 66, 457, 329, 194, 585, 34, - 425, 290, 162, 553, 98, 489, 361, 226, 617, 18, 409, 274, 146, - 537, 82, 473, 345, 210, 601, 50, 441, 306, 178, 569, 114, 505, - 377, 242, 633, 10, 401, 266, 138, 529, 74, 465, 337, 202, 593, - 42, 433, 298, 170, 561, 106, 497, 369, 234, 625, 26, 417, 282, - 154, 545, 90, 481, 353, 218, 609, 58, 449, 314, 186, 577, 122, - 513, 385, 250, 641, 325, 6, 397, 262, 134, 525, 70, 461, 333, - 198, 589, 38, 429, 294, 166, 557, 102, 493, 365, 230, 621, 22, - 413, 278, 150, 541, 86, 477, 349, 214, 605, 54, 445, 310, 182, - 573, 118, 509, 381, 246, 637, 14, 405, 270, 142, 533, 78, 469, - 341, 206, 597, 46, 437, 302, 174, 565, 110, 501, 373, 238, 629, - 30, 421, 286, 158, 549, 94, 485, 357, 222, 613, 62, 453, 318, - 190, 581, 126, 517, 389, 254, 645, 323, 1, 392, 257, 129, 520, - 65, 456, 328, 193, 584, 33, 424, 289, 161, 552, 97, 488, 360, - 225, 616, 17, 408, 273, 145, 536, 81, 472, 344, 209, 600, 49, - 440, 305, 177, 568, 113, 504, 376, 241, 632, 9, 400, 265, 137, - 528, 73, 464, 336, 201, 592, 41, 432, 297, 169, 560, 105, 496, - 368, 233, 624, 25, 416, 281, 153, 544, 89, 480, 352, 217, 608, - 57, 448, 313, 185, 576, 121, 512, 384, 249, 640, 321, 5, 396, - 261, 133, 524, 69, 460, 332, 197, 588, 37, 428, 293, 165, 556, - 101, 492, 364, 229, 620, 21, 412, 277, 149, 540, 85, 476, 348, - 213, 604, 53, 444, 309, 181, 572, 117, 508, 380, 245, 636, 13, - 404, 269, 141, 532, 77, 468, 340, 205, 596, 45, 436, 301, 173, - 564, 109, 500, 372, 237, 628, 29, 420, 285, 157, 548, 93, 484, - 356, 221, 612, 61, 452, 317, 189, 580, 125, 516, 388, 253, 644, - 324, 3, 394, 259, 131, 522, 67, 458, 330, 195, 586, 35, 426, 291, - 163, 554, 99, 490, 362, 227, 618, 19, 410, 275, 147, 538, 83, - 474, 346, 211, 602, 51, 442, 307, 179, 570, 115, 506, 378, 243, - 634, 11, 402, 267, 139, 530, 75, 466, 338, 203, 594, 43, 434, - 299, 171, 562, 107, 498, 370, 235, 626, 27, 418, 283, 155, 546, - 91, 482, 354, 219, 610, 59, 450, 315, 187, 578, 123, 514, 386, - 251, 642, 326, 7, 398, 263, 135, 526, 71, 462, 334, 199, 590, 39, - 430, 295, 167, 558, 103, 494, 366, 231, 622, 23, 414, 279, 151, - 542, 87, 478, 350, 215, 606, 55, 446, 311, 183, 574, 119, 510, - 382, 247, 638, 15, 406, 271, 143, 534, 79, 470, 342, 207, 598, - 47, 438, 303, 175, 566, 111, 502, 374, 239, 630, 31, 422, 287, - 159, 550, 95, 486, 358, 223, 614, 63, 454, 319, 191, 582, 127, - 518, 390, 255, 646]; - - return (unsafe { *PERM647.get_unchecked((index % 647) as usize) } as u32 * 418609 + - unsafe { *PERM647.get_unchecked(((index / 647) % 647) as usize) } as u32 * 647 + - unsafe { - *PERM647.get_unchecked(((index / 418609) % 647) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (270840023u32 as f32)); // Results in [0,1). + const PERM647: [u16; 647] = [0, 391, 256, 128, 519, 64, 455, 327, 192, 583, 32, 423, 288, 160, 551, 96, 487, 359, 224, 615, 16, 407, 272, 144, 535, 80, 471, 343, 208, 599, 48, 439, 304, 176, 567, 112, 503, 375, 240, 631, 8, 399, 264, 136, 527, 72, 463, 335, 200, 591, 40, 431, 296, 168, 559, 104, 495, 367, 232, 623, 24, 415, 280, 152, 543, 88, 479, 351, 216, 607, 56, 447, 312, 184, 575, 120, 511, 383, 248, 639, 320, 4, 395, 260, 132, 523, 68, 459, 331, 196, 587, 36, 427, 292, 164, 555, 100, 491, 363, 228, 619, 20, 411, 276, 148, 539, 84, 475, 347, 212, 603, 52, 443, 308, 180, 571, 116, 507, 379, 244, 635, 12, 403, 268, 140, 531, 76, 467, 339, 204, 595, 44, 435, 300, 172, 563, 108, 499, 371, 236, 627, 28, 419, 284, 156, 547, 92, 483, 355, 220, 611, 60, 451, 316, 188, 579, 124, 515, 387, 252, 643, 322, 2, 393, 258, 130, 521, 66, 457, 329, 194, 585, 34, 425, 290, 162, 553, 98, 489, 361, 226, 617, 18, 409, 274, 146, 537, 82, 473, 345, 210, 601, 50, 441, 306, 178, 569, 114, 505, 377, 242, 633, 10, 401, 266, 138, 529, 74, 465, 337, 202, 593, 42, 433, 298, 170, 561, 106, 497, 369, 234, 625, 26, 417, 282, 154, 545, 90, 481, 353, 218, 609, 58, 449, 314, 186, 577, 122, 513, 385, 250, 641, 325, 6, 397, 262, 134, 525, 70, 461, 333, 198, 589, 38, 429, 294, 166, 557, 102, 493, 365, 230, 621, 22, 413, 278, 150, 541, 86, 477, 349, 214, 605, 54, 445, 310, 182, 573, 118, 509, 381, 246, 637, 14, 405, 270, 142, 533, 78, 469, 341, 206, 597, 46, 437, 302, 174, 565, 110, 501, 373, 238, 629, 30, 421, 286, 158, 549, 94, 485, 357, 222, 613, 62, 453, 318, 190, 581, 126, 517, 389, 254, 645, 323, 1, 392, 257, 129, 520, 65, 456, 328, 193, 584, 33, 424, 289, 161, 552, 97, 488, 360, 225, 616, 17, 408, 273, 145, 536, 81, 472, 344, 209, 600, 49, 440, 305, 177, 568, 113, 504, 376, 241, 632, 9, 400, 265, 137, 528, 73, 464, 336, 201, 592, 41, 432, 297, 169, 560, 105, 496, 368, 233, 624, 25, 416, 281, 153, 544, 89, 480, 352, 217, 608, 57, 448, 313, 185, 576, 121, 512, 384, 249, 640, 321, 5, 396, 261, 133, 524, 69, 460, 332, 197, 588, 37, 428, 293, 165, 556, 101, 492, 364, 229, 620, 21, 412, 277, 149, 540, 85, 476, 348, 213, 604, 53, 444, 309, 181, 572, 117, 508, 380, 245, 636, 13, 404, 269, 141, 532, 77, 468, 340, 205, 596, 45, 436, 301, 173, 564, 109, 500, 372, 237, 628, 29, 420, 285, 157, 548, 93, 484, 356, 221, 612, 61, 452, 317, 189, 580, 125, 516, 388, 253, 644, 324, 3, 394, 259, 131, 522, 67, 458, 330, 195, 586, 35, 426, 291, 163, 554, 99, 490, 362, 227, 618, 19, 410, 275, 147, 538, 83, 474, 346, 211, 602, 51, 442, 307, 179, 570, 115, 506, 378, 243, 634, 11, 402, 267, 139, 530, 75, 466, 338, 203, 594, 43, 434, 299, 171, 562, 107, 498, 370, 235, 626, 27, 418, 283, 155, 546, 91, 482, 354, 219, 610, 59, 450, 315, 187, 578, 123, 514, 386, 251, 642, 326, 7, 398, 263, 135, 526, 71, 462, 334, 199, 590, 39, 430, 295, 167, 558, 103, 494, 366, 231, 622, 23, 414, 279, 151, 542, 87, 478, 350, 215, 606, 55, 446, 311, 183, 574, 119, 510, 382, 247, 638, 15, 406, 271, 143, 534, 79, 470, 342, 207, 598, 47, 438, 303, 175, 566, 111, 502, 374, 239, 630, 31, 422, 287, 159, 550, 95, 486, 358, 223, 614, 63, 454, 319, 191, 582, 127, 518, 390, 255, 646]; + + return (unsafe{*PERM647.get_unchecked((index % 647) as usize)} as u32 * 418609 + + unsafe{*PERM647.get_unchecked(((index / 647) % 647) as usize)} as u32 * 647 + + unsafe{*PERM647.get_unchecked(((index / 418609) % 647) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (270840023u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton653(index: u32) -> f32 { - const PERM653: [u16; 653] = [0, 397, 256, 128, 525, 64, 461, 333, 192, 589, 32, 429, 288, 160, - 557, 96, 493, 365, 224, 621, 16, 413, 272, 144, 541, 80, 477, - 349, 208, 605, 48, 445, 304, 176, 573, 112, 509, 381, 240, 637, - 320, 8, 405, 264, 136, 533, 72, 469, 341, 200, 597, 40, 437, 296, - 168, 565, 104, 501, 373, 232, 629, 24, 421, 280, 152, 549, 88, - 485, 357, 216, 613, 56, 453, 312, 184, 581, 120, 517, 389, 248, - 645, 324, 4, 401, 260, 132, 529, 68, 465, 337, 196, 593, 36, 433, - 292, 164, 561, 100, 497, 369, 228, 625, 20, 417, 276, 148, 545, - 84, 481, 353, 212, 609, 52, 449, 308, 180, 577, 116, 513, 385, - 244, 641, 329, 12, 409, 268, 140, 537, 76, 473, 345, 204, 601, - 44, 441, 300, 172, 569, 108, 505, 377, 236, 633, 28, 425, 284, - 156, 553, 92, 489, 361, 220, 617, 60, 457, 316, 188, 585, 124, - 521, 393, 252, 649, 2, 399, 258, 130, 527, 66, 463, 335, 194, - 591, 34, 431, 290, 162, 559, 98, 495, 367, 226, 623, 18, 415, - 274, 146, 543, 82, 479, 351, 210, 607, 50, 447, 306, 178, 575, - 114, 511, 383, 242, 639, 322, 10, 407, 266, 138, 535, 74, 471, - 343, 202, 599, 42, 439, 298, 170, 567, 106, 503, 375, 234, 631, - 26, 423, 282, 154, 551, 90, 487, 359, 218, 615, 58, 455, 314, - 186, 583, 122, 519, 391, 250, 647, 327, 6, 403, 262, 134, 531, - 70, 467, 339, 198, 595, 38, 435, 294, 166, 563, 102, 499, 371, - 230, 627, 22, 419, 278, 150, 547, 86, 483, 355, 214, 611, 54, - 451, 310, 182, 579, 118, 515, 387, 246, 643, 331, 14, 411, 270, - 142, 539, 78, 475, 347, 206, 603, 46, 443, 302, 174, 571, 110, - 507, 379, 238, 635, 30, 427, 286, 158, 555, 94, 491, 363, 222, - 619, 62, 459, 318, 190, 587, 126, 523, 395, 254, 651, 326, 1, - 398, 257, 129, 526, 65, 462, 334, 193, 590, 33, 430, 289, 161, - 558, 97, 494, 366, 225, 622, 17, 414, 273, 145, 542, 81, 478, - 350, 209, 606, 49, 446, 305, 177, 574, 113, 510, 382, 241, 638, - 321, 9, 406, 265, 137, 534, 73, 470, 342, 201, 598, 41, 438, 297, - 169, 566, 105, 502, 374, 233, 630, 25, 422, 281, 153, 550, 89, - 486, 358, 217, 614, 57, 454, 313, 185, 582, 121, 518, 390, 249, - 646, 325, 5, 402, 261, 133, 530, 69, 466, 338, 197, 594, 37, 434, - 293, 165, 562, 101, 498, 370, 229, 626, 21, 418, 277, 149, 546, - 85, 482, 354, 213, 610, 53, 450, 309, 181, 578, 117, 514, 386, - 245, 642, 330, 13, 410, 269, 141, 538, 77, 474, 346, 205, 602, - 45, 442, 301, 173, 570, 109, 506, 378, 237, 634, 29, 426, 285, - 157, 554, 93, 490, 362, 221, 618, 61, 458, 317, 189, 586, 125, - 522, 394, 253, 650, 3, 400, 259, 131, 528, 67, 464, 336, 195, - 592, 35, 432, 291, 163, 560, 99, 496, 368, 227, 624, 19, 416, - 275, 147, 544, 83, 480, 352, 211, 608, 51, 448, 307, 179, 576, - 115, 512, 384, 243, 640, 323, 11, 408, 267, 139, 536, 75, 472, - 344, 203, 600, 43, 440, 299, 171, 568, 107, 504, 376, 235, 632, - 27, 424, 283, 155, 552, 91, 488, 360, 219, 616, 59, 456, 315, - 187, 584, 123, 520, 392, 251, 648, 328, 7, 404, 263, 135, 532, - 71, 468, 340, 199, 596, 39, 436, 295, 167, 564, 103, 500, 372, - 231, 628, 23, 420, 279, 151, 548, 87, 484, 356, 215, 612, 55, - 452, 311, 183, 580, 119, 516, 388, 247, 644, 332, 15, 412, 271, - 143, 540, 79, 476, 348, 207, 604, 47, 444, 303, 175, 572, 111, - 508, 380, 239, 636, 31, 428, 287, 159, 556, 95, 492, 364, 223, - 620, 63, 460, 319, 191, 588, 127, 524, 396, 255, 652]; - - return (unsafe { *PERM653.get_unchecked((index % 653) as usize) } as u32 * 426409 + - unsafe { *PERM653.get_unchecked(((index / 653) % 653) as usize) } as u32 * 653 + - unsafe { - *PERM653.get_unchecked(((index / 426409) % 653) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (278445077u32 as f32)); // Results in [0,1). + const PERM653: [u16; 653] = [0, 397, 256, 128, 525, 64, 461, 333, 192, 589, 32, 429, 288, 160, 557, 96, 493, 365, 224, 621, 16, 413, 272, 144, 541, 80, 477, 349, 208, 605, 48, 445, 304, 176, 573, 112, 509, 381, 240, 637, 320, 8, 405, 264, 136, 533, 72, 469, 341, 200, 597, 40, 437, 296, 168, 565, 104, 501, 373, 232, 629, 24, 421, 280, 152, 549, 88, 485, 357, 216, 613, 56, 453, 312, 184, 581, 120, 517, 389, 248, 645, 324, 4, 401, 260, 132, 529, 68, 465, 337, 196, 593, 36, 433, 292, 164, 561, 100, 497, 369, 228, 625, 20, 417, 276, 148, 545, 84, 481, 353, 212, 609, 52, 449, 308, 180, 577, 116, 513, 385, 244, 641, 329, 12, 409, 268, 140, 537, 76, 473, 345, 204, 601, 44, 441, 300, 172, 569, 108, 505, 377, 236, 633, 28, 425, 284, 156, 553, 92, 489, 361, 220, 617, 60, 457, 316, 188, 585, 124, 521, 393, 252, 649, 2, 399, 258, 130, 527, 66, 463, 335, 194, 591, 34, 431, 290, 162, 559, 98, 495, 367, 226, 623, 18, 415, 274, 146, 543, 82, 479, 351, 210, 607, 50, 447, 306, 178, 575, 114, 511, 383, 242, 639, 322, 10, 407, 266, 138, 535, 74, 471, 343, 202, 599, 42, 439, 298, 170, 567, 106, 503, 375, 234, 631, 26, 423, 282, 154, 551, 90, 487, 359, 218, 615, 58, 455, 314, 186, 583, 122, 519, 391, 250, 647, 327, 6, 403, 262, 134, 531, 70, 467, 339, 198, 595, 38, 435, 294, 166, 563, 102, 499, 371, 230, 627, 22, 419, 278, 150, 547, 86, 483, 355, 214, 611, 54, 451, 310, 182, 579, 118, 515, 387, 246, 643, 331, 14, 411, 270, 142, 539, 78, 475, 347, 206, 603, 46, 443, 302, 174, 571, 110, 507, 379, 238, 635, 30, 427, 286, 158, 555, 94, 491, 363, 222, 619, 62, 459, 318, 190, 587, 126, 523, 395, 254, 651, 326, 1, 398, 257, 129, 526, 65, 462, 334, 193, 590, 33, 430, 289, 161, 558, 97, 494, 366, 225, 622, 17, 414, 273, 145, 542, 81, 478, 350, 209, 606, 49, 446, 305, 177, 574, 113, 510, 382, 241, 638, 321, 9, 406, 265, 137, 534, 73, 470, 342, 201, 598, 41, 438, 297, 169, 566, 105, 502, 374, 233, 630, 25, 422, 281, 153, 550, 89, 486, 358, 217, 614, 57, 454, 313, 185, 582, 121, 518, 390, 249, 646, 325, 5, 402, 261, 133, 530, 69, 466, 338, 197, 594, 37, 434, 293, 165, 562, 101, 498, 370, 229, 626, 21, 418, 277, 149, 546, 85, 482, 354, 213, 610, 53, 450, 309, 181, 578, 117, 514, 386, 245, 642, 330, 13, 410, 269, 141, 538, 77, 474, 346, 205, 602, 45, 442, 301, 173, 570, 109, 506, 378, 237, 634, 29, 426, 285, 157, 554, 93, 490, 362, 221, 618, 61, 458, 317, 189, 586, 125, 522, 394, 253, 650, 3, 400, 259, 131, 528, 67, 464, 336, 195, 592, 35, 432, 291, 163, 560, 99, 496, 368, 227, 624, 19, 416, 275, 147, 544, 83, 480, 352, 211, 608, 51, 448, 307, 179, 576, 115, 512, 384, 243, 640, 323, 11, 408, 267, 139, 536, 75, 472, 344, 203, 600, 43, 440, 299, 171, 568, 107, 504, 376, 235, 632, 27, 424, 283, 155, 552, 91, 488, 360, 219, 616, 59, 456, 315, 187, 584, 123, 520, 392, 251, 648, 328, 7, 404, 263, 135, 532, 71, 468, 340, 199, 596, 39, 436, 295, 167, 564, 103, 500, 372, 231, 628, 23, 420, 279, 151, 548, 87, 484, 356, 215, 612, 55, 452, 311, 183, 580, 119, 516, 388, 247, 644, 332, 15, 412, 271, 143, 540, 79, 476, 348, 207, 604, 47, 444, 303, 175, 572, 111, 508, 380, 239, 636, 31, 428, 287, 159, 556, 95, 492, 364, 223, 620, 63, 460, 319, 191, 588, 127, 524, 396, 255, 652]; + + return (unsafe{*PERM653.get_unchecked((index % 653) as usize)} as u32 * 426409 + + unsafe{*PERM653.get_unchecked(((index / 653) % 653) as usize)} as u32 * 653 + + unsafe{*PERM653.get_unchecked(((index / 426409) % 653) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (278445077u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton659(index: u32) -> f32 { - const PERM659: [u16; 659] = [0, 403, 256, 128, 531, 64, 467, 339, 192, 595, 32, 435, 288, 160, - 563, 96, 499, 371, 224, 627, 320, 16, 419, 272, 144, 547, 80, - 483, 355, 208, 611, 48, 451, 304, 176, 579, 112, 515, 387, 240, - 643, 8, 411, 264, 136, 539, 72, 475, 347, 200, 603, 40, 443, 296, - 168, 571, 104, 507, 379, 232, 635, 331, 24, 427, 280, 152, 555, - 88, 491, 363, 216, 619, 56, 459, 312, 184, 587, 120, 523, 395, - 248, 651, 4, 407, 260, 132, 535, 68, 471, 343, 196, 599, 36, 439, - 292, 164, 567, 100, 503, 375, 228, 631, 324, 20, 423, 276, 148, - 551, 84, 487, 359, 212, 615, 52, 455, 308, 180, 583, 116, 519, - 391, 244, 647, 12, 415, 268, 140, 543, 76, 479, 351, 204, 607, - 44, 447, 300, 172, 575, 108, 511, 383, 236, 639, 335, 28, 431, - 284, 156, 559, 92, 495, 367, 220, 623, 60, 463, 316, 188, 591, - 124, 527, 399, 252, 655, 328, 2, 405, 258, 130, 533, 66, 469, - 341, 194, 597, 34, 437, 290, 162, 565, 98, 501, 373, 226, 629, - 322, 18, 421, 274, 146, 549, 82, 485, 357, 210, 613, 50, 453, - 306, 178, 581, 114, 517, 389, 242, 645, 10, 413, 266, 138, 541, - 74, 477, 349, 202, 605, 42, 445, 298, 170, 573, 106, 509, 381, - 234, 637, 333, 26, 429, 282, 154, 557, 90, 493, 365, 218, 621, - 58, 461, 314, 186, 589, 122, 525, 397, 250, 653, 6, 409, 262, - 134, 537, 70, 473, 345, 198, 601, 38, 441, 294, 166, 569, 102, - 505, 377, 230, 633, 326, 22, 425, 278, 150, 553, 86, 489, 361, - 214, 617, 54, 457, 310, 182, 585, 118, 521, 393, 246, 649, 14, - 417, 270, 142, 545, 78, 481, 353, 206, 609, 46, 449, 302, 174, - 577, 110, 513, 385, 238, 641, 337, 30, 433, 286, 158, 561, 94, - 497, 369, 222, 625, 62, 465, 318, 190, 593, 126, 529, 401, 254, - 657, 329, 1, 404, 257, 129, 532, 65, 468, 340, 193, 596, 33, 436, - 289, 161, 564, 97, 500, 372, 225, 628, 321, 17, 420, 273, 145, - 548, 81, 484, 356, 209, 612, 49, 452, 305, 177, 580, 113, 516, - 388, 241, 644, 9, 412, 265, 137, 540, 73, 476, 348, 201, 604, 41, - 444, 297, 169, 572, 105, 508, 380, 233, 636, 332, 25, 428, 281, - 153, 556, 89, 492, 364, 217, 620, 57, 460, 313, 185, 588, 121, - 524, 396, 249, 652, 5, 408, 261, 133, 536, 69, 472, 344, 197, - 600, 37, 440, 293, 165, 568, 101, 504, 376, 229, 632, 325, 21, - 424, 277, 149, 552, 85, 488, 360, 213, 616, 53, 456, 309, 181, - 584, 117, 520, 392, 245, 648, 13, 416, 269, 141, 544, 77, 480, - 352, 205, 608, 45, 448, 301, 173, 576, 109, 512, 384, 237, 640, - 336, 29, 432, 285, 157, 560, 93, 496, 368, 221, 624, 61, 464, - 317, 189, 592, 125, 528, 400, 253, 656, 330, 3, 406, 259, 131, - 534, 67, 470, 342, 195, 598, 35, 438, 291, 163, 566, 99, 502, - 374, 227, 630, 323, 19, 422, 275, 147, 550, 83, 486, 358, 211, - 614, 51, 454, 307, 179, 582, 115, 518, 390, 243, 646, 11, 414, - 267, 139, 542, 75, 478, 350, 203, 606, 43, 446, 299, 171, 574, - 107, 510, 382, 235, 638, 334, 27, 430, 283, 155, 558, 91, 494, - 366, 219, 622, 59, 462, 315, 187, 590, 123, 526, 398, 251, 654, - 7, 410, 263, 135, 538, 71, 474, 346, 199, 602, 39, 442, 295, 167, - 570, 103, 506, 378, 231, 634, 327, 23, 426, 279, 151, 554, 87, - 490, 362, 215, 618, 55, 458, 311, 183, 586, 119, 522, 394, 247, - 650, 15, 418, 271, 143, 546, 79, 482, 354, 207, 610, 47, 450, - 303, 175, 578, 111, 514, 386, 239, 642, 338, 31, 434, 287, 159, - 562, 95, 498, 370, 223, 626, 63, 466, 319, 191, 594, 127, 530, - 402, 255, 658]; - - return (unsafe { *PERM659.get_unchecked((index % 659) as usize) } as u32 * 434281 + - unsafe { *PERM659.get_unchecked(((index / 659) % 659) as usize) } as u32 * 659 + - unsafe { - *PERM659.get_unchecked(((index / 434281) % 659) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (286191179u32 as f32)); // Results in [0,1). + const PERM659: [u16; 659] = [0, 403, 256, 128, 531, 64, 467, 339, 192, 595, 32, 435, 288, 160, 563, 96, 499, 371, 224, 627, 320, 16, 419, 272, 144, 547, 80, 483, 355, 208, 611, 48, 451, 304, 176, 579, 112, 515, 387, 240, 643, 8, 411, 264, 136, 539, 72, 475, 347, 200, 603, 40, 443, 296, 168, 571, 104, 507, 379, 232, 635, 331, 24, 427, 280, 152, 555, 88, 491, 363, 216, 619, 56, 459, 312, 184, 587, 120, 523, 395, 248, 651, 4, 407, 260, 132, 535, 68, 471, 343, 196, 599, 36, 439, 292, 164, 567, 100, 503, 375, 228, 631, 324, 20, 423, 276, 148, 551, 84, 487, 359, 212, 615, 52, 455, 308, 180, 583, 116, 519, 391, 244, 647, 12, 415, 268, 140, 543, 76, 479, 351, 204, 607, 44, 447, 300, 172, 575, 108, 511, 383, 236, 639, 335, 28, 431, 284, 156, 559, 92, 495, 367, 220, 623, 60, 463, 316, 188, 591, 124, 527, 399, 252, 655, 328, 2, 405, 258, 130, 533, 66, 469, 341, 194, 597, 34, 437, 290, 162, 565, 98, 501, 373, 226, 629, 322, 18, 421, 274, 146, 549, 82, 485, 357, 210, 613, 50, 453, 306, 178, 581, 114, 517, 389, 242, 645, 10, 413, 266, 138, 541, 74, 477, 349, 202, 605, 42, 445, 298, 170, 573, 106, 509, 381, 234, 637, 333, 26, 429, 282, 154, 557, 90, 493, 365, 218, 621, 58, 461, 314, 186, 589, 122, 525, 397, 250, 653, 6, 409, 262, 134, 537, 70, 473, 345, 198, 601, 38, 441, 294, 166, 569, 102, 505, 377, 230, 633, 326, 22, 425, 278, 150, 553, 86, 489, 361, 214, 617, 54, 457, 310, 182, 585, 118, 521, 393, 246, 649, 14, 417, 270, 142, 545, 78, 481, 353, 206, 609, 46, 449, 302, 174, 577, 110, 513, 385, 238, 641, 337, 30, 433, 286, 158, 561, 94, 497, 369, 222, 625, 62, 465, 318, 190, 593, 126, 529, 401, 254, 657, 329, 1, 404, 257, 129, 532, 65, 468, 340, 193, 596, 33, 436, 289, 161, 564, 97, 500, 372, 225, 628, 321, 17, 420, 273, 145, 548, 81, 484, 356, 209, 612, 49, 452, 305, 177, 580, 113, 516, 388, 241, 644, 9, 412, 265, 137, 540, 73, 476, 348, 201, 604, 41, 444, 297, 169, 572, 105, 508, 380, 233, 636, 332, 25, 428, 281, 153, 556, 89, 492, 364, 217, 620, 57, 460, 313, 185, 588, 121, 524, 396, 249, 652, 5, 408, 261, 133, 536, 69, 472, 344, 197, 600, 37, 440, 293, 165, 568, 101, 504, 376, 229, 632, 325, 21, 424, 277, 149, 552, 85, 488, 360, 213, 616, 53, 456, 309, 181, 584, 117, 520, 392, 245, 648, 13, 416, 269, 141, 544, 77, 480, 352, 205, 608, 45, 448, 301, 173, 576, 109, 512, 384, 237, 640, 336, 29, 432, 285, 157, 560, 93, 496, 368, 221, 624, 61, 464, 317, 189, 592, 125, 528, 400, 253, 656, 330, 3, 406, 259, 131, 534, 67, 470, 342, 195, 598, 35, 438, 291, 163, 566, 99, 502, 374, 227, 630, 323, 19, 422, 275, 147, 550, 83, 486, 358, 211, 614, 51, 454, 307, 179, 582, 115, 518, 390, 243, 646, 11, 414, 267, 139, 542, 75, 478, 350, 203, 606, 43, 446, 299, 171, 574, 107, 510, 382, 235, 638, 334, 27, 430, 283, 155, 558, 91, 494, 366, 219, 622, 59, 462, 315, 187, 590, 123, 526, 398, 251, 654, 7, 410, 263, 135, 538, 71, 474, 346, 199, 602, 39, 442, 295, 167, 570, 103, 506, 378, 231, 634, 327, 23, 426, 279, 151, 554, 87, 490, 362, 215, 618, 55, 458, 311, 183, 586, 119, 522, 394, 247, 650, 15, 418, 271, 143, 546, 79, 482, 354, 207, 610, 47, 450, 303, 175, 578, 111, 514, 386, 239, 642, 338, 31, 434, 287, 159, 562, 95, 498, 370, 223, 626, 63, 466, 319, 191, 594, 127, 530, 402, 255, 658]; + + return (unsafe{*PERM659.get_unchecked((index % 659) as usize)} as u32 * 434281 + + unsafe{*PERM659.get_unchecked(((index / 659) % 659) as usize)} as u32 * 659 + + unsafe{*PERM659.get_unchecked(((index / 434281) % 659) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (286191179u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton661(index: u32) -> f32 { - const PERM661: [u16; 661] = [0, 405, 256, 128, 533, 64, 469, 341, 192, 597, 32, 437, 288, 160, - 565, 96, 501, 373, 224, 629, 320, 16, 421, 272, 144, 549, 80, - 485, 357, 208, 613, 48, 453, 304, 176, 581, 112, 517, 389, 240, - 645, 8, 413, 264, 136, 541, 72, 477, 349, 200, 605, 40, 445, 296, - 168, 573, 104, 509, 381, 232, 637, 333, 24, 429, 280, 152, 557, - 88, 493, 365, 216, 621, 56, 461, 312, 184, 589, 120, 525, 397, - 248, 653, 328, 4, 409, 260, 132, 537, 68, 473, 345, 196, 601, 36, - 441, 292, 164, 569, 100, 505, 377, 228, 633, 324, 20, 425, 276, - 148, 553, 84, 489, 361, 212, 617, 52, 457, 308, 180, 585, 116, - 521, 393, 244, 649, 12, 417, 268, 140, 545, 76, 481, 353, 204, - 609, 44, 449, 300, 172, 577, 108, 513, 385, 236, 641, 337, 28, - 433, 284, 156, 561, 92, 497, 369, 220, 625, 60, 465, 316, 188, - 593, 124, 529, 401, 252, 657, 2, 407, 258, 130, 535, 66, 471, - 343, 194, 599, 34, 439, 290, 162, 567, 98, 503, 375, 226, 631, - 322, 18, 423, 274, 146, 551, 82, 487, 359, 210, 615, 50, 455, - 306, 178, 583, 114, 519, 391, 242, 647, 10, 415, 266, 138, 543, - 74, 479, 351, 202, 607, 42, 447, 298, 170, 575, 106, 511, 383, - 234, 639, 335, 26, 431, 282, 154, 559, 90, 495, 367, 218, 623, - 58, 463, 314, 186, 591, 122, 527, 399, 250, 655, 331, 6, 411, - 262, 134, 539, 70, 475, 347, 198, 603, 38, 443, 294, 166, 571, - 102, 507, 379, 230, 635, 326, 22, 427, 278, 150, 555, 86, 491, - 363, 214, 619, 54, 459, 310, 182, 587, 118, 523, 395, 246, 651, - 14, 419, 270, 142, 547, 78, 483, 355, 206, 611, 46, 451, 302, - 174, 579, 110, 515, 387, 238, 643, 339, 30, 435, 286, 158, 563, - 94, 499, 371, 222, 627, 62, 467, 318, 190, 595, 126, 531, 403, - 254, 659, 330, 1, 406, 257, 129, 534, 65, 470, 342, 193, 598, 33, - 438, 289, 161, 566, 97, 502, 374, 225, 630, 321, 17, 422, 273, - 145, 550, 81, 486, 358, 209, 614, 49, 454, 305, 177, 582, 113, - 518, 390, 241, 646, 9, 414, 265, 137, 542, 73, 478, 350, 201, - 606, 41, 446, 297, 169, 574, 105, 510, 382, 233, 638, 334, 25, - 430, 281, 153, 558, 89, 494, 366, 217, 622, 57, 462, 313, 185, - 590, 121, 526, 398, 249, 654, 329, 5, 410, 261, 133, 538, 69, - 474, 346, 197, 602, 37, 442, 293, 165, 570, 101, 506, 378, 229, - 634, 325, 21, 426, 277, 149, 554, 85, 490, 362, 213, 618, 53, - 458, 309, 181, 586, 117, 522, 394, 245, 650, 13, 418, 269, 141, - 546, 77, 482, 354, 205, 610, 45, 450, 301, 173, 578, 109, 514, - 386, 237, 642, 338, 29, 434, 285, 157, 562, 93, 498, 370, 221, - 626, 61, 466, 317, 189, 594, 125, 530, 402, 253, 658, 3, 408, - 259, 131, 536, 67, 472, 344, 195, 600, 35, 440, 291, 163, 568, - 99, 504, 376, 227, 632, 323, 19, 424, 275, 147, 552, 83, 488, - 360, 211, 616, 51, 456, 307, 179, 584, 115, 520, 392, 243, 648, - 11, 416, 267, 139, 544, 75, 480, 352, 203, 608, 43, 448, 299, - 171, 576, 107, 512, 384, 235, 640, 336, 27, 432, 283, 155, 560, - 91, 496, 368, 219, 624, 59, 464, 315, 187, 592, 123, 528, 400, - 251, 656, 332, 7, 412, 263, 135, 540, 71, 476, 348, 199, 604, 39, - 444, 295, 167, 572, 103, 508, 380, 231, 636, 327, 23, 428, 279, - 151, 556, 87, 492, 364, 215, 620, 55, 460, 311, 183, 588, 119, - 524, 396, 247, 652, 15, 420, 271, 143, 548, 79, 484, 356, 207, - 612, 47, 452, 303, 175, 580, 111, 516, 388, 239, 644, 340, 31, - 436, 287, 159, 564, 95, 500, 372, 223, 628, 63, 468, 319, 191, - 596, 127, 532, 404, 255, 660]; - - return (unsafe { *PERM661.get_unchecked((index % 661) as usize) } as u32 * 436921 + - unsafe { *PERM661.get_unchecked(((index / 661) % 661) as usize) } as u32 * 661 + - unsafe { - *PERM661.get_unchecked(((index / 436921) % 661) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (288804781u32 as f32)); // Results in [0,1). + const PERM661: [u16; 661] = [0, 405, 256, 128, 533, 64, 469, 341, 192, 597, 32, 437, 288, 160, 565, 96, 501, 373, 224, 629, 320, 16, 421, 272, 144, 549, 80, 485, 357, 208, 613, 48, 453, 304, 176, 581, 112, 517, 389, 240, 645, 8, 413, 264, 136, 541, 72, 477, 349, 200, 605, 40, 445, 296, 168, 573, 104, 509, 381, 232, 637, 333, 24, 429, 280, 152, 557, 88, 493, 365, 216, 621, 56, 461, 312, 184, 589, 120, 525, 397, 248, 653, 328, 4, 409, 260, 132, 537, 68, 473, 345, 196, 601, 36, 441, 292, 164, 569, 100, 505, 377, 228, 633, 324, 20, 425, 276, 148, 553, 84, 489, 361, 212, 617, 52, 457, 308, 180, 585, 116, 521, 393, 244, 649, 12, 417, 268, 140, 545, 76, 481, 353, 204, 609, 44, 449, 300, 172, 577, 108, 513, 385, 236, 641, 337, 28, 433, 284, 156, 561, 92, 497, 369, 220, 625, 60, 465, 316, 188, 593, 124, 529, 401, 252, 657, 2, 407, 258, 130, 535, 66, 471, 343, 194, 599, 34, 439, 290, 162, 567, 98, 503, 375, 226, 631, 322, 18, 423, 274, 146, 551, 82, 487, 359, 210, 615, 50, 455, 306, 178, 583, 114, 519, 391, 242, 647, 10, 415, 266, 138, 543, 74, 479, 351, 202, 607, 42, 447, 298, 170, 575, 106, 511, 383, 234, 639, 335, 26, 431, 282, 154, 559, 90, 495, 367, 218, 623, 58, 463, 314, 186, 591, 122, 527, 399, 250, 655, 331, 6, 411, 262, 134, 539, 70, 475, 347, 198, 603, 38, 443, 294, 166, 571, 102, 507, 379, 230, 635, 326, 22, 427, 278, 150, 555, 86, 491, 363, 214, 619, 54, 459, 310, 182, 587, 118, 523, 395, 246, 651, 14, 419, 270, 142, 547, 78, 483, 355, 206, 611, 46, 451, 302, 174, 579, 110, 515, 387, 238, 643, 339, 30, 435, 286, 158, 563, 94, 499, 371, 222, 627, 62, 467, 318, 190, 595, 126, 531, 403, 254, 659, 330, 1, 406, 257, 129, 534, 65, 470, 342, 193, 598, 33, 438, 289, 161, 566, 97, 502, 374, 225, 630, 321, 17, 422, 273, 145, 550, 81, 486, 358, 209, 614, 49, 454, 305, 177, 582, 113, 518, 390, 241, 646, 9, 414, 265, 137, 542, 73, 478, 350, 201, 606, 41, 446, 297, 169, 574, 105, 510, 382, 233, 638, 334, 25, 430, 281, 153, 558, 89, 494, 366, 217, 622, 57, 462, 313, 185, 590, 121, 526, 398, 249, 654, 329, 5, 410, 261, 133, 538, 69, 474, 346, 197, 602, 37, 442, 293, 165, 570, 101, 506, 378, 229, 634, 325, 21, 426, 277, 149, 554, 85, 490, 362, 213, 618, 53, 458, 309, 181, 586, 117, 522, 394, 245, 650, 13, 418, 269, 141, 546, 77, 482, 354, 205, 610, 45, 450, 301, 173, 578, 109, 514, 386, 237, 642, 338, 29, 434, 285, 157, 562, 93, 498, 370, 221, 626, 61, 466, 317, 189, 594, 125, 530, 402, 253, 658, 3, 408, 259, 131, 536, 67, 472, 344, 195, 600, 35, 440, 291, 163, 568, 99, 504, 376, 227, 632, 323, 19, 424, 275, 147, 552, 83, 488, 360, 211, 616, 51, 456, 307, 179, 584, 115, 520, 392, 243, 648, 11, 416, 267, 139, 544, 75, 480, 352, 203, 608, 43, 448, 299, 171, 576, 107, 512, 384, 235, 640, 336, 27, 432, 283, 155, 560, 91, 496, 368, 219, 624, 59, 464, 315, 187, 592, 123, 528, 400, 251, 656, 332, 7, 412, 263, 135, 540, 71, 476, 348, 199, 604, 39, 444, 295, 167, 572, 103, 508, 380, 231, 636, 327, 23, 428, 279, 151, 556, 87, 492, 364, 215, 620, 55, 460, 311, 183, 588, 119, 524, 396, 247, 652, 15, 420, 271, 143, 548, 79, 484, 356, 207, 612, 47, 452, 303, 175, 580, 111, 516, 388, 239, 644, 340, 31, 436, 287, 159, 564, 95, 500, 372, 223, 628, 63, 468, 319, 191, 596, 127, 532, 404, 255, 660]; + + return (unsafe{*PERM661.get_unchecked((index % 661) as usize)} as u32 * 436921 + + unsafe{*PERM661.get_unchecked(((index / 661) % 661) as usize)} as u32 * 661 + + unsafe{*PERM661.get_unchecked(((index / 436921) % 661) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (288804781u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton673(index: u32) -> f32 { - const PERM673: [u16; 673] = [0, 417, 256, 128, 545, 64, 481, 353, 192, 609, 320, 32, 449, 288, - 160, 577, 96, 513, 385, 224, 641, 16, 433, 272, 144, 561, 80, - 497, 369, 208, 625, 337, 48, 465, 304, 176, 593, 112, 529, 401, - 240, 657, 8, 425, 264, 136, 553, 72, 489, 361, 200, 617, 328, 40, - 457, 296, 168, 585, 104, 521, 393, 232, 649, 24, 441, 280, 152, - 569, 88, 505, 377, 216, 633, 345, 56, 473, 312, 184, 601, 120, - 537, 409, 248, 665, 4, 421, 260, 132, 549, 68, 485, 357, 196, - 613, 324, 36, 453, 292, 164, 581, 100, 517, 389, 228, 645, 20, - 437, 276, 148, 565, 84, 501, 373, 212, 629, 341, 52, 469, 308, - 180, 597, 116, 533, 405, 244, 661, 12, 429, 268, 140, 557, 76, - 493, 365, 204, 621, 332, 44, 461, 300, 172, 589, 108, 525, 397, - 236, 653, 28, 445, 284, 156, 573, 92, 509, 381, 220, 637, 349, - 60, 477, 316, 188, 605, 124, 541, 413, 252, 669, 2, 419, 258, - 130, 547, 66, 483, 355, 194, 611, 322, 34, 451, 290, 162, 579, - 98, 515, 387, 226, 643, 18, 435, 274, 146, 563, 82, 499, 371, - 210, 627, 339, 50, 467, 306, 178, 595, 114, 531, 403, 242, 659, - 10, 427, 266, 138, 555, 74, 491, 363, 202, 619, 330, 42, 459, - 298, 170, 587, 106, 523, 395, 234, 651, 26, 443, 282, 154, 571, - 90, 507, 379, 218, 635, 347, 58, 475, 314, 186, 603, 122, 539, - 411, 250, 667, 6, 423, 262, 134, 551, 70, 487, 359, 198, 615, - 326, 38, 455, 294, 166, 583, 102, 519, 391, 230, 647, 22, 439, - 278, 150, 567, 86, 503, 375, 214, 631, 343, 54, 471, 310, 182, - 599, 118, 535, 407, 246, 663, 14, 431, 270, 142, 559, 78, 495, - 367, 206, 623, 334, 46, 463, 302, 174, 591, 110, 527, 399, 238, - 655, 30, 447, 286, 158, 575, 94, 511, 383, 222, 639, 351, 62, - 479, 318, 190, 607, 126, 543, 415, 254, 671, 336, 1, 418, 257, - 129, 546, 65, 482, 354, 193, 610, 321, 33, 450, 289, 161, 578, - 97, 514, 386, 225, 642, 17, 434, 273, 145, 562, 81, 498, 370, - 209, 626, 338, 49, 466, 305, 177, 594, 113, 530, 402, 241, 658, - 9, 426, 265, 137, 554, 73, 490, 362, 201, 618, 329, 41, 458, 297, - 169, 586, 105, 522, 394, 233, 650, 25, 442, 281, 153, 570, 89, - 506, 378, 217, 634, 346, 57, 474, 313, 185, 602, 121, 538, 410, - 249, 666, 5, 422, 261, 133, 550, 69, 486, 358, 197, 614, 325, 37, - 454, 293, 165, 582, 101, 518, 390, 229, 646, 21, 438, 277, 149, - 566, 85, 502, 374, 213, 630, 342, 53, 470, 309, 181, 598, 117, - 534, 406, 245, 662, 13, 430, 269, 141, 558, 77, 494, 366, 205, - 622, 333, 45, 462, 301, 173, 590, 109, 526, 398, 237, 654, 29, - 446, 285, 157, 574, 93, 510, 382, 221, 638, 350, 61, 478, 317, - 189, 606, 125, 542, 414, 253, 670, 3, 420, 259, 131, 548, 67, - 484, 356, 195, 612, 323, 35, 452, 291, 163, 580, 99, 516, 388, - 227, 644, 19, 436, 275, 147, 564, 83, 500, 372, 211, 628, 340, - 51, 468, 307, 179, 596, 115, 532, 404, 243, 660, 11, 428, 267, - 139, 556, 75, 492, 364, 203, 620, 331, 43, 460, 299, 171, 588, - 107, 524, 396, 235, 652, 27, 444, 283, 155, 572, 91, 508, 380, - 219, 636, 348, 59, 476, 315, 187, 604, 123, 540, 412, 251, 668, - 7, 424, 263, 135, 552, 71, 488, 360, 199, 616, 327, 39, 456, 295, - 167, 584, 103, 520, 392, 231, 648, 23, 440, 279, 151, 568, 87, - 504, 376, 215, 632, 344, 55, 472, 311, 183, 600, 119, 536, 408, - 247, 664, 15, 432, 271, 143, 560, 79, 496, 368, 207, 624, 335, - 47, 464, 303, 175, 592, 111, 528, 400, 239, 656, 31, 448, 287, - 159, 576, 95, 512, 384, 223, 640, 352, 63, 480, 319, 191, 608, - 127, 544, 416, 255, 672]; - - return (unsafe { *PERM673.get_unchecked((index % 673) as usize) } as u32 * 452929 + - unsafe { *PERM673.get_unchecked(((index / 673) % 673) as usize) } as u32 * 673 + - unsafe { - *PERM673.get_unchecked(((index / 452929) % 673) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (304821217u32 as f32)); // Results in [0,1). + const PERM673: [u16; 673] = [0, 417, 256, 128, 545, 64, 481, 353, 192, 609, 320, 32, 449, 288, 160, 577, 96, 513, 385, 224, 641, 16, 433, 272, 144, 561, 80, 497, 369, 208, 625, 337, 48, 465, 304, 176, 593, 112, 529, 401, 240, 657, 8, 425, 264, 136, 553, 72, 489, 361, 200, 617, 328, 40, 457, 296, 168, 585, 104, 521, 393, 232, 649, 24, 441, 280, 152, 569, 88, 505, 377, 216, 633, 345, 56, 473, 312, 184, 601, 120, 537, 409, 248, 665, 4, 421, 260, 132, 549, 68, 485, 357, 196, 613, 324, 36, 453, 292, 164, 581, 100, 517, 389, 228, 645, 20, 437, 276, 148, 565, 84, 501, 373, 212, 629, 341, 52, 469, 308, 180, 597, 116, 533, 405, 244, 661, 12, 429, 268, 140, 557, 76, 493, 365, 204, 621, 332, 44, 461, 300, 172, 589, 108, 525, 397, 236, 653, 28, 445, 284, 156, 573, 92, 509, 381, 220, 637, 349, 60, 477, 316, 188, 605, 124, 541, 413, 252, 669, 2, 419, 258, 130, 547, 66, 483, 355, 194, 611, 322, 34, 451, 290, 162, 579, 98, 515, 387, 226, 643, 18, 435, 274, 146, 563, 82, 499, 371, 210, 627, 339, 50, 467, 306, 178, 595, 114, 531, 403, 242, 659, 10, 427, 266, 138, 555, 74, 491, 363, 202, 619, 330, 42, 459, 298, 170, 587, 106, 523, 395, 234, 651, 26, 443, 282, 154, 571, 90, 507, 379, 218, 635, 347, 58, 475, 314, 186, 603, 122, 539, 411, 250, 667, 6, 423, 262, 134, 551, 70, 487, 359, 198, 615, 326, 38, 455, 294, 166, 583, 102, 519, 391, 230, 647, 22, 439, 278, 150, 567, 86, 503, 375, 214, 631, 343, 54, 471, 310, 182, 599, 118, 535, 407, 246, 663, 14, 431, 270, 142, 559, 78, 495, 367, 206, 623, 334, 46, 463, 302, 174, 591, 110, 527, 399, 238, 655, 30, 447, 286, 158, 575, 94, 511, 383, 222, 639, 351, 62, 479, 318, 190, 607, 126, 543, 415, 254, 671, 336, 1, 418, 257, 129, 546, 65, 482, 354, 193, 610, 321, 33, 450, 289, 161, 578, 97, 514, 386, 225, 642, 17, 434, 273, 145, 562, 81, 498, 370, 209, 626, 338, 49, 466, 305, 177, 594, 113, 530, 402, 241, 658, 9, 426, 265, 137, 554, 73, 490, 362, 201, 618, 329, 41, 458, 297, 169, 586, 105, 522, 394, 233, 650, 25, 442, 281, 153, 570, 89, 506, 378, 217, 634, 346, 57, 474, 313, 185, 602, 121, 538, 410, 249, 666, 5, 422, 261, 133, 550, 69, 486, 358, 197, 614, 325, 37, 454, 293, 165, 582, 101, 518, 390, 229, 646, 21, 438, 277, 149, 566, 85, 502, 374, 213, 630, 342, 53, 470, 309, 181, 598, 117, 534, 406, 245, 662, 13, 430, 269, 141, 558, 77, 494, 366, 205, 622, 333, 45, 462, 301, 173, 590, 109, 526, 398, 237, 654, 29, 446, 285, 157, 574, 93, 510, 382, 221, 638, 350, 61, 478, 317, 189, 606, 125, 542, 414, 253, 670, 3, 420, 259, 131, 548, 67, 484, 356, 195, 612, 323, 35, 452, 291, 163, 580, 99, 516, 388, 227, 644, 19, 436, 275, 147, 564, 83, 500, 372, 211, 628, 340, 51, 468, 307, 179, 596, 115, 532, 404, 243, 660, 11, 428, 267, 139, 556, 75, 492, 364, 203, 620, 331, 43, 460, 299, 171, 588, 107, 524, 396, 235, 652, 27, 444, 283, 155, 572, 91, 508, 380, 219, 636, 348, 59, 476, 315, 187, 604, 123, 540, 412, 251, 668, 7, 424, 263, 135, 552, 71, 488, 360, 199, 616, 327, 39, 456, 295, 167, 584, 103, 520, 392, 231, 648, 23, 440, 279, 151, 568, 87, 504, 376, 215, 632, 344, 55, 472, 311, 183, 600, 119, 536, 408, 247, 664, 15, 432, 271, 143, 560, 79, 496, 368, 207, 624, 335, 47, 464, 303, 175, 592, 111, 528, 400, 239, 656, 31, 448, 287, 159, 576, 95, 512, 384, 223, 640, 352, 63, 480, 319, 191, 608, 127, 544, 416, 255, 672]; + + return (unsafe{*PERM673.get_unchecked((index % 673) as usize)} as u32 * 452929 + + unsafe{*PERM673.get_unchecked(((index / 673) % 673) as usize)} as u32 * 673 + + unsafe{*PERM673.get_unchecked(((index / 452929) % 673) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (304821217u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton677(index: u32) -> f32 { - const PERM677: [u16; 677] = [0, 421, 256, 128, 549, 64, 485, 357, 192, 613, 320, 32, 453, 288, - 160, 581, 96, 517, 389, 224, 645, 16, 437, 272, 144, 565, 80, - 501, 373, 208, 629, 341, 48, 469, 304, 176, 597, 112, 533, 405, - 240, 661, 8, 429, 264, 136, 557, 72, 493, 365, 200, 621, 328, 40, - 461, 296, 168, 589, 104, 525, 397, 232, 653, 24, 445, 280, 152, - 573, 88, 509, 381, 216, 637, 349, 56, 477, 312, 184, 605, 120, - 541, 413, 248, 669, 336, 4, 425, 260, 132, 553, 68, 489, 361, - 196, 617, 324, 36, 457, 292, 164, 585, 100, 521, 393, 228, 649, - 20, 441, 276, 148, 569, 84, 505, 377, 212, 633, 345, 52, 473, - 308, 180, 601, 116, 537, 409, 244, 665, 12, 433, 268, 140, 561, - 76, 497, 369, 204, 625, 332, 44, 465, 300, 172, 593, 108, 529, - 401, 236, 657, 28, 449, 284, 156, 577, 92, 513, 385, 220, 641, - 353, 60, 481, 316, 188, 609, 124, 545, 417, 252, 673, 2, 423, - 258, 130, 551, 66, 487, 359, 194, 615, 322, 34, 455, 290, 162, - 583, 98, 519, 391, 226, 647, 18, 439, 274, 146, 567, 82, 503, - 375, 210, 631, 343, 50, 471, 306, 178, 599, 114, 535, 407, 242, - 663, 10, 431, 266, 138, 559, 74, 495, 367, 202, 623, 330, 42, - 463, 298, 170, 591, 106, 527, 399, 234, 655, 26, 447, 282, 154, - 575, 90, 511, 383, 218, 639, 351, 58, 479, 314, 186, 607, 122, - 543, 415, 250, 671, 339, 6, 427, 262, 134, 555, 70, 491, 363, - 198, 619, 326, 38, 459, 294, 166, 587, 102, 523, 395, 230, 651, - 22, 443, 278, 150, 571, 86, 507, 379, 214, 635, 347, 54, 475, - 310, 182, 603, 118, 539, 411, 246, 667, 14, 435, 270, 142, 563, - 78, 499, 371, 206, 627, 334, 46, 467, 302, 174, 595, 110, 531, - 403, 238, 659, 30, 451, 286, 158, 579, 94, 515, 387, 222, 643, - 355, 62, 483, 318, 190, 611, 126, 547, 419, 254, 675, 338, 1, - 422, 257, 129, 550, 65, 486, 358, 193, 614, 321, 33, 454, 289, - 161, 582, 97, 518, 390, 225, 646, 17, 438, 273, 145, 566, 81, - 502, 374, 209, 630, 342, 49, 470, 305, 177, 598, 113, 534, 406, - 241, 662, 9, 430, 265, 137, 558, 73, 494, 366, 201, 622, 329, 41, - 462, 297, 169, 590, 105, 526, 398, 233, 654, 25, 446, 281, 153, - 574, 89, 510, 382, 217, 638, 350, 57, 478, 313, 185, 606, 121, - 542, 414, 249, 670, 337, 5, 426, 261, 133, 554, 69, 490, 362, - 197, 618, 325, 37, 458, 293, 165, 586, 101, 522, 394, 229, 650, - 21, 442, 277, 149, 570, 85, 506, 378, 213, 634, 346, 53, 474, - 309, 181, 602, 117, 538, 410, 245, 666, 13, 434, 269, 141, 562, - 77, 498, 370, 205, 626, 333, 45, 466, 301, 173, 594, 109, 530, - 402, 237, 658, 29, 450, 285, 157, 578, 93, 514, 386, 221, 642, - 354, 61, 482, 317, 189, 610, 125, 546, 418, 253, 674, 3, 424, - 259, 131, 552, 67, 488, 360, 195, 616, 323, 35, 456, 291, 163, - 584, 99, 520, 392, 227, 648, 19, 440, 275, 147, 568, 83, 504, - 376, 211, 632, 344, 51, 472, 307, 179, 600, 115, 536, 408, 243, - 664, 11, 432, 267, 139, 560, 75, 496, 368, 203, 624, 331, 43, - 464, 299, 171, 592, 107, 528, 400, 235, 656, 27, 448, 283, 155, - 576, 91, 512, 384, 219, 640, 352, 59, 480, 315, 187, 608, 123, - 544, 416, 251, 672, 340, 7, 428, 263, 135, 556, 71, 492, 364, - 199, 620, 327, 39, 460, 295, 167, 588, 103, 524, 396, 231, 652, - 23, 444, 279, 151, 572, 87, 508, 380, 215, 636, 348, 55, 476, - 311, 183, 604, 119, 540, 412, 247, 668, 15, 436, 271, 143, 564, - 79, 500, 372, 207, 628, 335, 47, 468, 303, 175, 596, 111, 532, - 404, 239, 660, 31, 452, 287, 159, 580, 95, 516, 388, 223, 644, - 356, 63, 484, 319, 191, 612, 127, 548, 420, 255, 676]; - - return (unsafe { *PERM677.get_unchecked((index % 677) as usize) } as u32 * 458329 + - unsafe { *PERM677.get_unchecked(((index / 677) % 677) as usize) } as u32 * 677 + - unsafe { - *PERM677.get_unchecked(((index / 458329) % 677) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (310288733u32 as f32)); // Results in [0,1). + const PERM677: [u16; 677] = [0, 421, 256, 128, 549, 64, 485, 357, 192, 613, 320, 32, 453, 288, 160, 581, 96, 517, 389, 224, 645, 16, 437, 272, 144, 565, 80, 501, 373, 208, 629, 341, 48, 469, 304, 176, 597, 112, 533, 405, 240, 661, 8, 429, 264, 136, 557, 72, 493, 365, 200, 621, 328, 40, 461, 296, 168, 589, 104, 525, 397, 232, 653, 24, 445, 280, 152, 573, 88, 509, 381, 216, 637, 349, 56, 477, 312, 184, 605, 120, 541, 413, 248, 669, 336, 4, 425, 260, 132, 553, 68, 489, 361, 196, 617, 324, 36, 457, 292, 164, 585, 100, 521, 393, 228, 649, 20, 441, 276, 148, 569, 84, 505, 377, 212, 633, 345, 52, 473, 308, 180, 601, 116, 537, 409, 244, 665, 12, 433, 268, 140, 561, 76, 497, 369, 204, 625, 332, 44, 465, 300, 172, 593, 108, 529, 401, 236, 657, 28, 449, 284, 156, 577, 92, 513, 385, 220, 641, 353, 60, 481, 316, 188, 609, 124, 545, 417, 252, 673, 2, 423, 258, 130, 551, 66, 487, 359, 194, 615, 322, 34, 455, 290, 162, 583, 98, 519, 391, 226, 647, 18, 439, 274, 146, 567, 82, 503, 375, 210, 631, 343, 50, 471, 306, 178, 599, 114, 535, 407, 242, 663, 10, 431, 266, 138, 559, 74, 495, 367, 202, 623, 330, 42, 463, 298, 170, 591, 106, 527, 399, 234, 655, 26, 447, 282, 154, 575, 90, 511, 383, 218, 639, 351, 58, 479, 314, 186, 607, 122, 543, 415, 250, 671, 339, 6, 427, 262, 134, 555, 70, 491, 363, 198, 619, 326, 38, 459, 294, 166, 587, 102, 523, 395, 230, 651, 22, 443, 278, 150, 571, 86, 507, 379, 214, 635, 347, 54, 475, 310, 182, 603, 118, 539, 411, 246, 667, 14, 435, 270, 142, 563, 78, 499, 371, 206, 627, 334, 46, 467, 302, 174, 595, 110, 531, 403, 238, 659, 30, 451, 286, 158, 579, 94, 515, 387, 222, 643, 355, 62, 483, 318, 190, 611, 126, 547, 419, 254, 675, 338, 1, 422, 257, 129, 550, 65, 486, 358, 193, 614, 321, 33, 454, 289, 161, 582, 97, 518, 390, 225, 646, 17, 438, 273, 145, 566, 81, 502, 374, 209, 630, 342, 49, 470, 305, 177, 598, 113, 534, 406, 241, 662, 9, 430, 265, 137, 558, 73, 494, 366, 201, 622, 329, 41, 462, 297, 169, 590, 105, 526, 398, 233, 654, 25, 446, 281, 153, 574, 89, 510, 382, 217, 638, 350, 57, 478, 313, 185, 606, 121, 542, 414, 249, 670, 337, 5, 426, 261, 133, 554, 69, 490, 362, 197, 618, 325, 37, 458, 293, 165, 586, 101, 522, 394, 229, 650, 21, 442, 277, 149, 570, 85, 506, 378, 213, 634, 346, 53, 474, 309, 181, 602, 117, 538, 410, 245, 666, 13, 434, 269, 141, 562, 77, 498, 370, 205, 626, 333, 45, 466, 301, 173, 594, 109, 530, 402, 237, 658, 29, 450, 285, 157, 578, 93, 514, 386, 221, 642, 354, 61, 482, 317, 189, 610, 125, 546, 418, 253, 674, 3, 424, 259, 131, 552, 67, 488, 360, 195, 616, 323, 35, 456, 291, 163, 584, 99, 520, 392, 227, 648, 19, 440, 275, 147, 568, 83, 504, 376, 211, 632, 344, 51, 472, 307, 179, 600, 115, 536, 408, 243, 664, 11, 432, 267, 139, 560, 75, 496, 368, 203, 624, 331, 43, 464, 299, 171, 592, 107, 528, 400, 235, 656, 27, 448, 283, 155, 576, 91, 512, 384, 219, 640, 352, 59, 480, 315, 187, 608, 123, 544, 416, 251, 672, 340, 7, 428, 263, 135, 556, 71, 492, 364, 199, 620, 327, 39, 460, 295, 167, 588, 103, 524, 396, 231, 652, 23, 444, 279, 151, 572, 87, 508, 380, 215, 636, 348, 55, 476, 311, 183, 604, 119, 540, 412, 247, 668, 15, 436, 271, 143, 564, 79, 500, 372, 207, 628, 335, 47, 468, 303, 175, 596, 111, 532, 404, 239, 660, 31, 452, 287, 159, 580, 95, 516, 388, 223, 644, 356, 63, 484, 319, 191, 612, 127, 548, 420, 255, 676]; + + return (unsafe{*PERM677.get_unchecked((index % 677) as usize)} as u32 * 458329 + + unsafe{*PERM677.get_unchecked(((index / 677) % 677) as usize)} as u32 * 677 + + unsafe{*PERM677.get_unchecked(((index / 458329) % 677) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (310288733u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton683(index: u32) -> f32 { - const PERM683: [u16; 683] = [0, 427, 256, 128, 555, 64, 491, 363, 192, 619, 320, 32, 459, 288, - 160, 587, 96, 523, 395, 224, 651, 16, 443, 272, 144, 571, 80, - 507, 379, 208, 635, 347, 48, 475, 304, 176, 603, 112, 539, 411, - 240, 667, 336, 8, 435, 264, 136, 563, 72, 499, 371, 200, 627, - 328, 40, 467, 296, 168, 595, 104, 531, 403, 232, 659, 24, 451, - 280, 152, 579, 88, 515, 387, 216, 643, 355, 56, 483, 312, 184, - 611, 120, 547, 419, 248, 675, 4, 431, 260, 132, 559, 68, 495, - 367, 196, 623, 324, 36, 463, 292, 164, 591, 100, 527, 399, 228, - 655, 20, 447, 276, 148, 575, 84, 511, 383, 212, 639, 351, 52, - 479, 308, 180, 607, 116, 543, 415, 244, 671, 343, 12, 439, 268, - 140, 567, 76, 503, 375, 204, 631, 332, 44, 471, 300, 172, 599, - 108, 535, 407, 236, 663, 28, 455, 284, 156, 583, 92, 519, 391, - 220, 647, 359, 60, 487, 316, 188, 615, 124, 551, 423, 252, 679, - 340, 2, 429, 258, 130, 557, 66, 493, 365, 194, 621, 322, 34, 461, - 290, 162, 589, 98, 525, 397, 226, 653, 18, 445, 274, 146, 573, - 82, 509, 381, 210, 637, 349, 50, 477, 306, 178, 605, 114, 541, - 413, 242, 669, 338, 10, 437, 266, 138, 565, 74, 501, 373, 202, - 629, 330, 42, 469, 298, 170, 597, 106, 533, 405, 234, 661, 26, - 453, 282, 154, 581, 90, 517, 389, 218, 645, 357, 58, 485, 314, - 186, 613, 122, 549, 421, 250, 677, 6, 433, 262, 134, 561, 70, - 497, 369, 198, 625, 326, 38, 465, 294, 166, 593, 102, 529, 401, - 230, 657, 22, 449, 278, 150, 577, 86, 513, 385, 214, 641, 353, - 54, 481, 310, 182, 609, 118, 545, 417, 246, 673, 345, 14, 441, - 270, 142, 569, 78, 505, 377, 206, 633, 334, 46, 473, 302, 174, - 601, 110, 537, 409, 238, 665, 30, 457, 286, 158, 585, 94, 521, - 393, 222, 649, 361, 62, 489, 318, 190, 617, 126, 553, 425, 254, - 681, 341, 1, 428, 257, 129, 556, 65, 492, 364, 193, 620, 321, 33, - 460, 289, 161, 588, 97, 524, 396, 225, 652, 17, 444, 273, 145, - 572, 81, 508, 380, 209, 636, 348, 49, 476, 305, 177, 604, 113, - 540, 412, 241, 668, 337, 9, 436, 265, 137, 564, 73, 500, 372, - 201, 628, 329, 41, 468, 297, 169, 596, 105, 532, 404, 233, 660, - 25, 452, 281, 153, 580, 89, 516, 388, 217, 644, 356, 57, 484, - 313, 185, 612, 121, 548, 420, 249, 676, 5, 432, 261, 133, 560, - 69, 496, 368, 197, 624, 325, 37, 464, 293, 165, 592, 101, 528, - 400, 229, 656, 21, 448, 277, 149, 576, 85, 512, 384, 213, 640, - 352, 53, 480, 309, 181, 608, 117, 544, 416, 245, 672, 344, 13, - 440, 269, 141, 568, 77, 504, 376, 205, 632, 333, 45, 472, 301, - 173, 600, 109, 536, 408, 237, 664, 29, 456, 285, 157, 584, 93, - 520, 392, 221, 648, 360, 61, 488, 317, 189, 616, 125, 552, 424, - 253, 680, 342, 3, 430, 259, 131, 558, 67, 494, 366, 195, 622, - 323, 35, 462, 291, 163, 590, 99, 526, 398, 227, 654, 19, 446, - 275, 147, 574, 83, 510, 382, 211, 638, 350, 51, 478, 307, 179, - 606, 115, 542, 414, 243, 670, 339, 11, 438, 267, 139, 566, 75, - 502, 374, 203, 630, 331, 43, 470, 299, 171, 598, 107, 534, 406, - 235, 662, 27, 454, 283, 155, 582, 91, 518, 390, 219, 646, 358, - 59, 486, 315, 187, 614, 123, 550, 422, 251, 678, 7, 434, 263, - 135, 562, 71, 498, 370, 199, 626, 327, 39, 466, 295, 167, 594, - 103, 530, 402, 231, 658, 23, 450, 279, 151, 578, 87, 514, 386, - 215, 642, 354, 55, 482, 311, 183, 610, 119, 546, 418, 247, 674, - 346, 15, 442, 271, 143, 570, 79, 506, 378, 207, 634, 335, 47, - 474, 303, 175, 602, 111, 538, 410, 239, 666, 31, 458, 287, 159, - 586, 95, 522, 394, 223, 650, 362, 63, 490, 319, 191, 618, 127, - 554, 426, 255, 682]; - - return (unsafe { *PERM683.get_unchecked((index % 683) as usize) } as u32 * 466489 + - unsafe { *PERM683.get_unchecked(((index / 683) % 683) as usize) } as u32 * 683 + - unsafe { - *PERM683.get_unchecked(((index / 466489) % 683) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (318611987u32 as f32)); // Results in [0,1). + const PERM683: [u16; 683] = [0, 427, 256, 128, 555, 64, 491, 363, 192, 619, 320, 32, 459, 288, 160, 587, 96, 523, 395, 224, 651, 16, 443, 272, 144, 571, 80, 507, 379, 208, 635, 347, 48, 475, 304, 176, 603, 112, 539, 411, 240, 667, 336, 8, 435, 264, 136, 563, 72, 499, 371, 200, 627, 328, 40, 467, 296, 168, 595, 104, 531, 403, 232, 659, 24, 451, 280, 152, 579, 88, 515, 387, 216, 643, 355, 56, 483, 312, 184, 611, 120, 547, 419, 248, 675, 4, 431, 260, 132, 559, 68, 495, 367, 196, 623, 324, 36, 463, 292, 164, 591, 100, 527, 399, 228, 655, 20, 447, 276, 148, 575, 84, 511, 383, 212, 639, 351, 52, 479, 308, 180, 607, 116, 543, 415, 244, 671, 343, 12, 439, 268, 140, 567, 76, 503, 375, 204, 631, 332, 44, 471, 300, 172, 599, 108, 535, 407, 236, 663, 28, 455, 284, 156, 583, 92, 519, 391, 220, 647, 359, 60, 487, 316, 188, 615, 124, 551, 423, 252, 679, 340, 2, 429, 258, 130, 557, 66, 493, 365, 194, 621, 322, 34, 461, 290, 162, 589, 98, 525, 397, 226, 653, 18, 445, 274, 146, 573, 82, 509, 381, 210, 637, 349, 50, 477, 306, 178, 605, 114, 541, 413, 242, 669, 338, 10, 437, 266, 138, 565, 74, 501, 373, 202, 629, 330, 42, 469, 298, 170, 597, 106, 533, 405, 234, 661, 26, 453, 282, 154, 581, 90, 517, 389, 218, 645, 357, 58, 485, 314, 186, 613, 122, 549, 421, 250, 677, 6, 433, 262, 134, 561, 70, 497, 369, 198, 625, 326, 38, 465, 294, 166, 593, 102, 529, 401, 230, 657, 22, 449, 278, 150, 577, 86, 513, 385, 214, 641, 353, 54, 481, 310, 182, 609, 118, 545, 417, 246, 673, 345, 14, 441, 270, 142, 569, 78, 505, 377, 206, 633, 334, 46, 473, 302, 174, 601, 110, 537, 409, 238, 665, 30, 457, 286, 158, 585, 94, 521, 393, 222, 649, 361, 62, 489, 318, 190, 617, 126, 553, 425, 254, 681, 341, 1, 428, 257, 129, 556, 65, 492, 364, 193, 620, 321, 33, 460, 289, 161, 588, 97, 524, 396, 225, 652, 17, 444, 273, 145, 572, 81, 508, 380, 209, 636, 348, 49, 476, 305, 177, 604, 113, 540, 412, 241, 668, 337, 9, 436, 265, 137, 564, 73, 500, 372, 201, 628, 329, 41, 468, 297, 169, 596, 105, 532, 404, 233, 660, 25, 452, 281, 153, 580, 89, 516, 388, 217, 644, 356, 57, 484, 313, 185, 612, 121, 548, 420, 249, 676, 5, 432, 261, 133, 560, 69, 496, 368, 197, 624, 325, 37, 464, 293, 165, 592, 101, 528, 400, 229, 656, 21, 448, 277, 149, 576, 85, 512, 384, 213, 640, 352, 53, 480, 309, 181, 608, 117, 544, 416, 245, 672, 344, 13, 440, 269, 141, 568, 77, 504, 376, 205, 632, 333, 45, 472, 301, 173, 600, 109, 536, 408, 237, 664, 29, 456, 285, 157, 584, 93, 520, 392, 221, 648, 360, 61, 488, 317, 189, 616, 125, 552, 424, 253, 680, 342, 3, 430, 259, 131, 558, 67, 494, 366, 195, 622, 323, 35, 462, 291, 163, 590, 99, 526, 398, 227, 654, 19, 446, 275, 147, 574, 83, 510, 382, 211, 638, 350, 51, 478, 307, 179, 606, 115, 542, 414, 243, 670, 339, 11, 438, 267, 139, 566, 75, 502, 374, 203, 630, 331, 43, 470, 299, 171, 598, 107, 534, 406, 235, 662, 27, 454, 283, 155, 582, 91, 518, 390, 219, 646, 358, 59, 486, 315, 187, 614, 123, 550, 422, 251, 678, 7, 434, 263, 135, 562, 71, 498, 370, 199, 626, 327, 39, 466, 295, 167, 594, 103, 530, 402, 231, 658, 23, 450, 279, 151, 578, 87, 514, 386, 215, 642, 354, 55, 482, 311, 183, 610, 119, 546, 418, 247, 674, 346, 15, 442, 271, 143, 570, 79, 506, 378, 207, 634, 335, 47, 474, 303, 175, 602, 111, 538, 410, 239, 666, 31, 458, 287, 159, 586, 95, 522, 394, 223, 650, 362, 63, 490, 319, 191, 618, 127, 554, 426, 255, 682]; + + return (unsafe{*PERM683.get_unchecked((index % 683) as usize)} as u32 * 466489 + + unsafe{*PERM683.get_unchecked(((index / 683) % 683) as usize)} as u32 * 683 + + unsafe{*PERM683.get_unchecked(((index / 466489) % 683) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (318611987u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton691(index: u32) -> f32 { - const PERM691: [u16; 691] = [0, 435, 256, 128, 563, 64, 499, 371, 192, 627, 320, 32, 467, 288, - 160, 595, 96, 531, 403, 224, 659, 336, 16, 451, 272, 144, 579, - 80, 515, 387, 208, 643, 355, 48, 483, 304, 176, 611, 112, 547, - 419, 240, 675, 8, 443, 264, 136, 571, 72, 507, 379, 200, 635, - 328, 40, 475, 296, 168, 603, 104, 539, 411, 232, 667, 347, 24, - 459, 280, 152, 587, 88, 523, 395, 216, 651, 363, 56, 491, 312, - 184, 619, 120, 555, 427, 248, 683, 4, 439, 260, 132, 567, 68, - 503, 375, 196, 631, 324, 36, 471, 292, 164, 599, 100, 535, 407, - 228, 663, 340, 20, 455, 276, 148, 583, 84, 519, 391, 212, 647, - 359, 52, 487, 308, 180, 615, 116, 551, 423, 244, 679, 12, 447, - 268, 140, 575, 76, 511, 383, 204, 639, 332, 44, 479, 300, 172, - 607, 108, 543, 415, 236, 671, 351, 28, 463, 284, 156, 591, 92, - 527, 399, 220, 655, 367, 60, 495, 316, 188, 623, 124, 559, 431, - 252, 687, 344, 2, 437, 258, 130, 565, 66, 501, 373, 194, 629, - 322, 34, 469, 290, 162, 597, 98, 533, 405, 226, 661, 338, 18, - 453, 274, 146, 581, 82, 517, 389, 210, 645, 357, 50, 485, 306, - 178, 613, 114, 549, 421, 242, 677, 10, 445, 266, 138, 573, 74, - 509, 381, 202, 637, 330, 42, 477, 298, 170, 605, 106, 541, 413, - 234, 669, 349, 26, 461, 282, 154, 589, 90, 525, 397, 218, 653, - 365, 58, 493, 314, 186, 621, 122, 557, 429, 250, 685, 6, 441, - 262, 134, 569, 70, 505, 377, 198, 633, 326, 38, 473, 294, 166, - 601, 102, 537, 409, 230, 665, 342, 22, 457, 278, 150, 585, 86, - 521, 393, 214, 649, 361, 54, 489, 310, 182, 617, 118, 553, 425, - 246, 681, 14, 449, 270, 142, 577, 78, 513, 385, 206, 641, 334, - 46, 481, 302, 174, 609, 110, 545, 417, 238, 673, 353, 30, 465, - 286, 158, 593, 94, 529, 401, 222, 657, 369, 62, 497, 318, 190, - 625, 126, 561, 433, 254, 689, 345, 1, 436, 257, 129, 564, 65, - 500, 372, 193, 628, 321, 33, 468, 289, 161, 596, 97, 532, 404, - 225, 660, 337, 17, 452, 273, 145, 580, 81, 516, 388, 209, 644, - 356, 49, 484, 305, 177, 612, 113, 548, 420, 241, 676, 9, 444, - 265, 137, 572, 73, 508, 380, 201, 636, 329, 41, 476, 297, 169, - 604, 105, 540, 412, 233, 668, 348, 25, 460, 281, 153, 588, 89, - 524, 396, 217, 652, 364, 57, 492, 313, 185, 620, 121, 556, 428, - 249, 684, 5, 440, 261, 133, 568, 69, 504, 376, 197, 632, 325, 37, - 472, 293, 165, 600, 101, 536, 408, 229, 664, 341, 21, 456, 277, - 149, 584, 85, 520, 392, 213, 648, 360, 53, 488, 309, 181, 616, - 117, 552, 424, 245, 680, 13, 448, 269, 141, 576, 77, 512, 384, - 205, 640, 333, 45, 480, 301, 173, 608, 109, 544, 416, 237, 672, - 352, 29, 464, 285, 157, 592, 93, 528, 400, 221, 656, 368, 61, - 496, 317, 189, 624, 125, 560, 432, 253, 688, 346, 3, 438, 259, - 131, 566, 67, 502, 374, 195, 630, 323, 35, 470, 291, 163, 598, - 99, 534, 406, 227, 662, 339, 19, 454, 275, 147, 582, 83, 518, - 390, 211, 646, 358, 51, 486, 307, 179, 614, 115, 550, 422, 243, - 678, 11, 446, 267, 139, 574, 75, 510, 382, 203, 638, 331, 43, - 478, 299, 171, 606, 107, 542, 414, 235, 670, 350, 27, 462, 283, - 155, 590, 91, 526, 398, 219, 654, 366, 59, 494, 315, 187, 622, - 123, 558, 430, 251, 686, 7, 442, 263, 135, 570, 71, 506, 378, - 199, 634, 327, 39, 474, 295, 167, 602, 103, 538, 410, 231, 666, - 343, 23, 458, 279, 151, 586, 87, 522, 394, 215, 650, 362, 55, - 490, 311, 183, 618, 119, 554, 426, 247, 682, 15, 450, 271, 143, - 578, 79, 514, 386, 207, 642, 335, 47, 482, 303, 175, 610, 111, - 546, 418, 239, 674, 354, 31, 466, 287, 159, 594, 95, 530, 402, - 223, 658, 370, 63, 498, 319, 191, 626, 127, 562, 434, 255, 690]; - - return (unsafe { *PERM691.get_unchecked((index % 691) as usize) } as u32 * 477481 + - unsafe { *PERM691.get_unchecked(((index / 691) % 691) as usize) } as u32 * 691 + - unsafe { - *PERM691.get_unchecked(((index / 477481) % 691) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (329939371u32 as f32)); // Results in [0,1). + const PERM691: [u16; 691] = [0, 435, 256, 128, 563, 64, 499, 371, 192, 627, 320, 32, 467, 288, 160, 595, 96, 531, 403, 224, 659, 336, 16, 451, 272, 144, 579, 80, 515, 387, 208, 643, 355, 48, 483, 304, 176, 611, 112, 547, 419, 240, 675, 8, 443, 264, 136, 571, 72, 507, 379, 200, 635, 328, 40, 475, 296, 168, 603, 104, 539, 411, 232, 667, 347, 24, 459, 280, 152, 587, 88, 523, 395, 216, 651, 363, 56, 491, 312, 184, 619, 120, 555, 427, 248, 683, 4, 439, 260, 132, 567, 68, 503, 375, 196, 631, 324, 36, 471, 292, 164, 599, 100, 535, 407, 228, 663, 340, 20, 455, 276, 148, 583, 84, 519, 391, 212, 647, 359, 52, 487, 308, 180, 615, 116, 551, 423, 244, 679, 12, 447, 268, 140, 575, 76, 511, 383, 204, 639, 332, 44, 479, 300, 172, 607, 108, 543, 415, 236, 671, 351, 28, 463, 284, 156, 591, 92, 527, 399, 220, 655, 367, 60, 495, 316, 188, 623, 124, 559, 431, 252, 687, 344, 2, 437, 258, 130, 565, 66, 501, 373, 194, 629, 322, 34, 469, 290, 162, 597, 98, 533, 405, 226, 661, 338, 18, 453, 274, 146, 581, 82, 517, 389, 210, 645, 357, 50, 485, 306, 178, 613, 114, 549, 421, 242, 677, 10, 445, 266, 138, 573, 74, 509, 381, 202, 637, 330, 42, 477, 298, 170, 605, 106, 541, 413, 234, 669, 349, 26, 461, 282, 154, 589, 90, 525, 397, 218, 653, 365, 58, 493, 314, 186, 621, 122, 557, 429, 250, 685, 6, 441, 262, 134, 569, 70, 505, 377, 198, 633, 326, 38, 473, 294, 166, 601, 102, 537, 409, 230, 665, 342, 22, 457, 278, 150, 585, 86, 521, 393, 214, 649, 361, 54, 489, 310, 182, 617, 118, 553, 425, 246, 681, 14, 449, 270, 142, 577, 78, 513, 385, 206, 641, 334, 46, 481, 302, 174, 609, 110, 545, 417, 238, 673, 353, 30, 465, 286, 158, 593, 94, 529, 401, 222, 657, 369, 62, 497, 318, 190, 625, 126, 561, 433, 254, 689, 345, 1, 436, 257, 129, 564, 65, 500, 372, 193, 628, 321, 33, 468, 289, 161, 596, 97, 532, 404, 225, 660, 337, 17, 452, 273, 145, 580, 81, 516, 388, 209, 644, 356, 49, 484, 305, 177, 612, 113, 548, 420, 241, 676, 9, 444, 265, 137, 572, 73, 508, 380, 201, 636, 329, 41, 476, 297, 169, 604, 105, 540, 412, 233, 668, 348, 25, 460, 281, 153, 588, 89, 524, 396, 217, 652, 364, 57, 492, 313, 185, 620, 121, 556, 428, 249, 684, 5, 440, 261, 133, 568, 69, 504, 376, 197, 632, 325, 37, 472, 293, 165, 600, 101, 536, 408, 229, 664, 341, 21, 456, 277, 149, 584, 85, 520, 392, 213, 648, 360, 53, 488, 309, 181, 616, 117, 552, 424, 245, 680, 13, 448, 269, 141, 576, 77, 512, 384, 205, 640, 333, 45, 480, 301, 173, 608, 109, 544, 416, 237, 672, 352, 29, 464, 285, 157, 592, 93, 528, 400, 221, 656, 368, 61, 496, 317, 189, 624, 125, 560, 432, 253, 688, 346, 3, 438, 259, 131, 566, 67, 502, 374, 195, 630, 323, 35, 470, 291, 163, 598, 99, 534, 406, 227, 662, 339, 19, 454, 275, 147, 582, 83, 518, 390, 211, 646, 358, 51, 486, 307, 179, 614, 115, 550, 422, 243, 678, 11, 446, 267, 139, 574, 75, 510, 382, 203, 638, 331, 43, 478, 299, 171, 606, 107, 542, 414, 235, 670, 350, 27, 462, 283, 155, 590, 91, 526, 398, 219, 654, 366, 59, 494, 315, 187, 622, 123, 558, 430, 251, 686, 7, 442, 263, 135, 570, 71, 506, 378, 199, 634, 327, 39, 474, 295, 167, 602, 103, 538, 410, 231, 666, 343, 23, 458, 279, 151, 586, 87, 522, 394, 215, 650, 362, 55, 490, 311, 183, 618, 119, 554, 426, 247, 682, 15, 450, 271, 143, 578, 79, 514, 386, 207, 642, 335, 47, 482, 303, 175, 610, 111, 546, 418, 239, 674, 354, 31, 466, 287, 159, 594, 95, 530, 402, 223, 658, 370, 63, 498, 319, 191, 626, 127, 562, 434, 255, 690]; + + return (unsafe{*PERM691.get_unchecked((index % 691) as usize)} as u32 * 477481 + + unsafe{*PERM691.get_unchecked(((index / 691) % 691) as usize)} as u32 * 691 + + unsafe{*PERM691.get_unchecked(((index / 477481) % 691) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (329939371u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton701(index: u32) -> f32 { - const PERM701: [u16; 701] = [0, 445, 256, 128, 573, 64, 509, 381, 192, 637, 320, 32, 477, 288, - 160, 605, 96, 541, 413, 224, 669, 336, 16, 461, 272, 144, 589, - 80, 525, 397, 208, 653, 365, 48, 493, 304, 176, 621, 112, 557, - 429, 240, 685, 344, 8, 453, 264, 136, 581, 72, 517, 389, 200, - 645, 328, 40, 485, 296, 168, 613, 104, 549, 421, 232, 677, 357, - 24, 469, 280, 152, 597, 88, 533, 405, 216, 661, 373, 56, 501, - 312, 184, 629, 120, 565, 437, 248, 693, 348, 4, 449, 260, 132, - 577, 68, 513, 385, 196, 641, 324, 36, 481, 292, 164, 609, 100, - 545, 417, 228, 673, 340, 20, 465, 276, 148, 593, 84, 529, 401, - 212, 657, 369, 52, 497, 308, 180, 625, 116, 561, 433, 244, 689, - 353, 12, 457, 268, 140, 585, 76, 521, 393, 204, 649, 332, 44, - 489, 300, 172, 617, 108, 553, 425, 236, 681, 361, 28, 473, 284, - 156, 601, 92, 537, 409, 220, 665, 377, 60, 505, 316, 188, 633, - 124, 569, 441, 252, 697, 2, 447, 258, 130, 575, 66, 511, 383, - 194, 639, 322, 34, 479, 290, 162, 607, 98, 543, 415, 226, 671, - 338, 18, 463, 274, 146, 591, 82, 527, 399, 210, 655, 367, 50, - 495, 306, 178, 623, 114, 559, 431, 242, 687, 346, 10, 455, 266, - 138, 583, 74, 519, 391, 202, 647, 330, 42, 487, 298, 170, 615, - 106, 551, 423, 234, 679, 359, 26, 471, 282, 154, 599, 90, 535, - 407, 218, 663, 375, 58, 503, 314, 186, 631, 122, 567, 439, 250, - 695, 351, 6, 451, 262, 134, 579, 70, 515, 387, 198, 643, 326, 38, - 483, 294, 166, 611, 102, 547, 419, 230, 675, 342, 22, 467, 278, - 150, 595, 86, 531, 403, 214, 659, 371, 54, 499, 310, 182, 627, - 118, 563, 435, 246, 691, 355, 14, 459, 270, 142, 587, 78, 523, - 395, 206, 651, 334, 46, 491, 302, 174, 619, 110, 555, 427, 238, - 683, 363, 30, 475, 286, 158, 603, 94, 539, 411, 222, 667, 379, - 62, 507, 318, 190, 635, 126, 571, 443, 254, 699, 350, 1, 446, - 257, 129, 574, 65, 510, 382, 193, 638, 321, 33, 478, 289, 161, - 606, 97, 542, 414, 225, 670, 337, 17, 462, 273, 145, 590, 81, - 526, 398, 209, 654, 366, 49, 494, 305, 177, 622, 113, 558, 430, - 241, 686, 345, 9, 454, 265, 137, 582, 73, 518, 390, 201, 646, - 329, 41, 486, 297, 169, 614, 105, 550, 422, 233, 678, 358, 25, - 470, 281, 153, 598, 89, 534, 406, 217, 662, 374, 57, 502, 313, - 185, 630, 121, 566, 438, 249, 694, 349, 5, 450, 261, 133, 578, - 69, 514, 386, 197, 642, 325, 37, 482, 293, 165, 610, 101, 546, - 418, 229, 674, 341, 21, 466, 277, 149, 594, 85, 530, 402, 213, - 658, 370, 53, 498, 309, 181, 626, 117, 562, 434, 245, 690, 354, - 13, 458, 269, 141, 586, 77, 522, 394, 205, 650, 333, 45, 490, - 301, 173, 618, 109, 554, 426, 237, 682, 362, 29, 474, 285, 157, - 602, 93, 538, 410, 221, 666, 378, 61, 506, 317, 189, 634, 125, - 570, 442, 253, 698, 3, 448, 259, 131, 576, 67, 512, 384, 195, - 640, 323, 35, 480, 291, 163, 608, 99, 544, 416, 227, 672, 339, - 19, 464, 275, 147, 592, 83, 528, 400, 211, 656, 368, 51, 496, - 307, 179, 624, 115, 560, 432, 243, 688, 347, 11, 456, 267, 139, - 584, 75, 520, 392, 203, 648, 331, 43, 488, 299, 171, 616, 107, - 552, 424, 235, 680, 360, 27, 472, 283, 155, 600, 91, 536, 408, - 219, 664, 376, 59, 504, 315, 187, 632, 123, 568, 440, 251, 696, - 352, 7, 452, 263, 135, 580, 71, 516, 388, 199, 644, 327, 39, 484, - 295, 167, 612, 103, 548, 420, 231, 676, 343, 23, 468, 279, 151, - 596, 87, 532, 404, 215, 660, 372, 55, 500, 311, 183, 628, 119, - 564, 436, 247, 692, 356, 15, 460, 271, 143, 588, 79, 524, 396, - 207, 652, 335, 47, 492, 303, 175, 620, 111, 556, 428, 239, 684, - 364, 31, 476, 287, 159, 604, 95, 540, 412, 223, 668, 380, 63, - 508, 319, 191, 636, 127, 572, 444, 255, 700]; - - return (unsafe { *PERM701.get_unchecked((index % 701) as usize) } as u32 * 491401 + - unsafe { *PERM701.get_unchecked(((index / 701) % 701) as usize) } as u32 * 701 + - unsafe { - *PERM701.get_unchecked(((index / 491401) % 701) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (344472101u32 as f32)); // Results in [0,1). + const PERM701: [u16; 701] = [0, 445, 256, 128, 573, 64, 509, 381, 192, 637, 320, 32, 477, 288, 160, 605, 96, 541, 413, 224, 669, 336, 16, 461, 272, 144, 589, 80, 525, 397, 208, 653, 365, 48, 493, 304, 176, 621, 112, 557, 429, 240, 685, 344, 8, 453, 264, 136, 581, 72, 517, 389, 200, 645, 328, 40, 485, 296, 168, 613, 104, 549, 421, 232, 677, 357, 24, 469, 280, 152, 597, 88, 533, 405, 216, 661, 373, 56, 501, 312, 184, 629, 120, 565, 437, 248, 693, 348, 4, 449, 260, 132, 577, 68, 513, 385, 196, 641, 324, 36, 481, 292, 164, 609, 100, 545, 417, 228, 673, 340, 20, 465, 276, 148, 593, 84, 529, 401, 212, 657, 369, 52, 497, 308, 180, 625, 116, 561, 433, 244, 689, 353, 12, 457, 268, 140, 585, 76, 521, 393, 204, 649, 332, 44, 489, 300, 172, 617, 108, 553, 425, 236, 681, 361, 28, 473, 284, 156, 601, 92, 537, 409, 220, 665, 377, 60, 505, 316, 188, 633, 124, 569, 441, 252, 697, 2, 447, 258, 130, 575, 66, 511, 383, 194, 639, 322, 34, 479, 290, 162, 607, 98, 543, 415, 226, 671, 338, 18, 463, 274, 146, 591, 82, 527, 399, 210, 655, 367, 50, 495, 306, 178, 623, 114, 559, 431, 242, 687, 346, 10, 455, 266, 138, 583, 74, 519, 391, 202, 647, 330, 42, 487, 298, 170, 615, 106, 551, 423, 234, 679, 359, 26, 471, 282, 154, 599, 90, 535, 407, 218, 663, 375, 58, 503, 314, 186, 631, 122, 567, 439, 250, 695, 351, 6, 451, 262, 134, 579, 70, 515, 387, 198, 643, 326, 38, 483, 294, 166, 611, 102, 547, 419, 230, 675, 342, 22, 467, 278, 150, 595, 86, 531, 403, 214, 659, 371, 54, 499, 310, 182, 627, 118, 563, 435, 246, 691, 355, 14, 459, 270, 142, 587, 78, 523, 395, 206, 651, 334, 46, 491, 302, 174, 619, 110, 555, 427, 238, 683, 363, 30, 475, 286, 158, 603, 94, 539, 411, 222, 667, 379, 62, 507, 318, 190, 635, 126, 571, 443, 254, 699, 350, 1, 446, 257, 129, 574, 65, 510, 382, 193, 638, 321, 33, 478, 289, 161, 606, 97, 542, 414, 225, 670, 337, 17, 462, 273, 145, 590, 81, 526, 398, 209, 654, 366, 49, 494, 305, 177, 622, 113, 558, 430, 241, 686, 345, 9, 454, 265, 137, 582, 73, 518, 390, 201, 646, 329, 41, 486, 297, 169, 614, 105, 550, 422, 233, 678, 358, 25, 470, 281, 153, 598, 89, 534, 406, 217, 662, 374, 57, 502, 313, 185, 630, 121, 566, 438, 249, 694, 349, 5, 450, 261, 133, 578, 69, 514, 386, 197, 642, 325, 37, 482, 293, 165, 610, 101, 546, 418, 229, 674, 341, 21, 466, 277, 149, 594, 85, 530, 402, 213, 658, 370, 53, 498, 309, 181, 626, 117, 562, 434, 245, 690, 354, 13, 458, 269, 141, 586, 77, 522, 394, 205, 650, 333, 45, 490, 301, 173, 618, 109, 554, 426, 237, 682, 362, 29, 474, 285, 157, 602, 93, 538, 410, 221, 666, 378, 61, 506, 317, 189, 634, 125, 570, 442, 253, 698, 3, 448, 259, 131, 576, 67, 512, 384, 195, 640, 323, 35, 480, 291, 163, 608, 99, 544, 416, 227, 672, 339, 19, 464, 275, 147, 592, 83, 528, 400, 211, 656, 368, 51, 496, 307, 179, 624, 115, 560, 432, 243, 688, 347, 11, 456, 267, 139, 584, 75, 520, 392, 203, 648, 331, 43, 488, 299, 171, 616, 107, 552, 424, 235, 680, 360, 27, 472, 283, 155, 600, 91, 536, 408, 219, 664, 376, 59, 504, 315, 187, 632, 123, 568, 440, 251, 696, 352, 7, 452, 263, 135, 580, 71, 516, 388, 199, 644, 327, 39, 484, 295, 167, 612, 103, 548, 420, 231, 676, 343, 23, 468, 279, 151, 596, 87, 532, 404, 215, 660, 372, 55, 500, 311, 183, 628, 119, 564, 436, 247, 692, 356, 15, 460, 271, 143, 588, 79, 524, 396, 207, 652, 335, 47, 492, 303, 175, 620, 111, 556, 428, 239, 684, 364, 31, 476, 287, 159, 604, 95, 540, 412, 223, 668, 380, 63, 508, 319, 191, 636, 127, 572, 444, 255, 700]; + + return (unsafe{*PERM701.get_unchecked((index % 701) as usize)} as u32 * 491401 + + unsafe{*PERM701.get_unchecked(((index / 701) % 701) as usize)} as u32 * 701 + + unsafe{*PERM701.get_unchecked(((index / 491401) % 701) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (344472101u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton709(index: u32) -> f32 { - const PERM709: [u16; 709] = [0, 453, 256, 128, 581, 320, 64, 517, 389, 192, 645, 32, 485, 288, - 160, 613, 357, 96, 549, 421, 224, 677, 16, 469, 272, 144, 597, - 336, 80, 533, 405, 208, 661, 48, 501, 304, 176, 629, 373, 112, - 565, 437, 240, 693, 8, 461, 264, 136, 589, 328, 72, 525, 397, - 200, 653, 40, 493, 296, 168, 621, 365, 104, 557, 429, 232, 685, - 24, 477, 280, 152, 605, 344, 88, 541, 413, 216, 669, 56, 509, - 312, 184, 637, 381, 120, 573, 445, 248, 701, 352, 4, 457, 260, - 132, 585, 324, 68, 521, 393, 196, 649, 36, 489, 292, 164, 617, - 361, 100, 553, 425, 228, 681, 20, 473, 276, 148, 601, 340, 84, - 537, 409, 212, 665, 52, 505, 308, 180, 633, 377, 116, 569, 441, - 244, 697, 12, 465, 268, 140, 593, 332, 76, 529, 401, 204, 657, - 44, 497, 300, 172, 625, 369, 108, 561, 433, 236, 689, 28, 481, - 284, 156, 609, 348, 92, 545, 417, 220, 673, 60, 513, 316, 188, - 641, 385, 124, 577, 449, 252, 705, 2, 455, 258, 130, 583, 322, - 66, 519, 391, 194, 647, 34, 487, 290, 162, 615, 359, 98, 551, - 423, 226, 679, 18, 471, 274, 146, 599, 338, 82, 535, 407, 210, - 663, 50, 503, 306, 178, 631, 375, 114, 567, 439, 242, 695, 10, - 463, 266, 138, 591, 330, 74, 527, 399, 202, 655, 42, 495, 298, - 170, 623, 367, 106, 559, 431, 234, 687, 26, 479, 282, 154, 607, - 346, 90, 543, 415, 218, 671, 58, 511, 314, 186, 639, 383, 122, - 575, 447, 250, 703, 355, 6, 459, 262, 134, 587, 326, 70, 523, - 395, 198, 651, 38, 491, 294, 166, 619, 363, 102, 555, 427, 230, - 683, 22, 475, 278, 150, 603, 342, 86, 539, 411, 214, 667, 54, - 507, 310, 182, 635, 379, 118, 571, 443, 246, 699, 14, 467, 270, - 142, 595, 334, 78, 531, 403, 206, 659, 46, 499, 302, 174, 627, - 371, 110, 563, 435, 238, 691, 30, 483, 286, 158, 611, 350, 94, - 547, 419, 222, 675, 62, 515, 318, 190, 643, 387, 126, 579, 451, - 254, 707, 354, 1, 454, 257, 129, 582, 321, 65, 518, 390, 193, - 646, 33, 486, 289, 161, 614, 358, 97, 550, 422, 225, 678, 17, - 470, 273, 145, 598, 337, 81, 534, 406, 209, 662, 49, 502, 305, - 177, 630, 374, 113, 566, 438, 241, 694, 9, 462, 265, 137, 590, - 329, 73, 526, 398, 201, 654, 41, 494, 297, 169, 622, 366, 105, - 558, 430, 233, 686, 25, 478, 281, 153, 606, 345, 89, 542, 414, - 217, 670, 57, 510, 313, 185, 638, 382, 121, 574, 446, 249, 702, - 353, 5, 458, 261, 133, 586, 325, 69, 522, 394, 197, 650, 37, 490, - 293, 165, 618, 362, 101, 554, 426, 229, 682, 21, 474, 277, 149, - 602, 341, 85, 538, 410, 213, 666, 53, 506, 309, 181, 634, 378, - 117, 570, 442, 245, 698, 13, 466, 269, 141, 594, 333, 77, 530, - 402, 205, 658, 45, 498, 301, 173, 626, 370, 109, 562, 434, 237, - 690, 29, 482, 285, 157, 610, 349, 93, 546, 418, 221, 674, 61, - 514, 317, 189, 642, 386, 125, 578, 450, 253, 706, 3, 456, 259, - 131, 584, 323, 67, 520, 392, 195, 648, 35, 488, 291, 163, 616, - 360, 99, 552, 424, 227, 680, 19, 472, 275, 147, 600, 339, 83, - 536, 408, 211, 664, 51, 504, 307, 179, 632, 376, 115, 568, 440, - 243, 696, 11, 464, 267, 139, 592, 331, 75, 528, 400, 203, 656, - 43, 496, 299, 171, 624, 368, 107, 560, 432, 235, 688, 27, 480, - 283, 155, 608, 347, 91, 544, 416, 219, 672, 59, 512, 315, 187, - 640, 384, 123, 576, 448, 251, 704, 356, 7, 460, 263, 135, 588, - 327, 71, 524, 396, 199, 652, 39, 492, 295, 167, 620, 364, 103, - 556, 428, 231, 684, 23, 476, 279, 151, 604, 343, 87, 540, 412, - 215, 668, 55, 508, 311, 183, 636, 380, 119, 572, 444, 247, 700, - 15, 468, 271, 143, 596, 335, 79, 532, 404, 207, 660, 47, 500, - 303, 175, 628, 372, 111, 564, 436, 239, 692, 31, 484, 287, 159, - 612, 351, 95, 548, 420, 223, 676, 63, 516, 319, 191, 644, 388, - 127, 580, 452, 255, 708]; - - return (unsafe { *PERM709.get_unchecked((index % 709) as usize) } as u32 * 502681 + - unsafe { *PERM709.get_unchecked(((index / 709) % 709) as usize) } as u32 * 709 + - unsafe { - *PERM709.get_unchecked(((index / 502681) % 709) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (356400829u32 as f32)); // Results in [0,1). + const PERM709: [u16; 709] = [0, 453, 256, 128, 581, 320, 64, 517, 389, 192, 645, 32, 485, 288, 160, 613, 357, 96, 549, 421, 224, 677, 16, 469, 272, 144, 597, 336, 80, 533, 405, 208, 661, 48, 501, 304, 176, 629, 373, 112, 565, 437, 240, 693, 8, 461, 264, 136, 589, 328, 72, 525, 397, 200, 653, 40, 493, 296, 168, 621, 365, 104, 557, 429, 232, 685, 24, 477, 280, 152, 605, 344, 88, 541, 413, 216, 669, 56, 509, 312, 184, 637, 381, 120, 573, 445, 248, 701, 352, 4, 457, 260, 132, 585, 324, 68, 521, 393, 196, 649, 36, 489, 292, 164, 617, 361, 100, 553, 425, 228, 681, 20, 473, 276, 148, 601, 340, 84, 537, 409, 212, 665, 52, 505, 308, 180, 633, 377, 116, 569, 441, 244, 697, 12, 465, 268, 140, 593, 332, 76, 529, 401, 204, 657, 44, 497, 300, 172, 625, 369, 108, 561, 433, 236, 689, 28, 481, 284, 156, 609, 348, 92, 545, 417, 220, 673, 60, 513, 316, 188, 641, 385, 124, 577, 449, 252, 705, 2, 455, 258, 130, 583, 322, 66, 519, 391, 194, 647, 34, 487, 290, 162, 615, 359, 98, 551, 423, 226, 679, 18, 471, 274, 146, 599, 338, 82, 535, 407, 210, 663, 50, 503, 306, 178, 631, 375, 114, 567, 439, 242, 695, 10, 463, 266, 138, 591, 330, 74, 527, 399, 202, 655, 42, 495, 298, 170, 623, 367, 106, 559, 431, 234, 687, 26, 479, 282, 154, 607, 346, 90, 543, 415, 218, 671, 58, 511, 314, 186, 639, 383, 122, 575, 447, 250, 703, 355, 6, 459, 262, 134, 587, 326, 70, 523, 395, 198, 651, 38, 491, 294, 166, 619, 363, 102, 555, 427, 230, 683, 22, 475, 278, 150, 603, 342, 86, 539, 411, 214, 667, 54, 507, 310, 182, 635, 379, 118, 571, 443, 246, 699, 14, 467, 270, 142, 595, 334, 78, 531, 403, 206, 659, 46, 499, 302, 174, 627, 371, 110, 563, 435, 238, 691, 30, 483, 286, 158, 611, 350, 94, 547, 419, 222, 675, 62, 515, 318, 190, 643, 387, 126, 579, 451, 254, 707, 354, 1, 454, 257, 129, 582, 321, 65, 518, 390, 193, 646, 33, 486, 289, 161, 614, 358, 97, 550, 422, 225, 678, 17, 470, 273, 145, 598, 337, 81, 534, 406, 209, 662, 49, 502, 305, 177, 630, 374, 113, 566, 438, 241, 694, 9, 462, 265, 137, 590, 329, 73, 526, 398, 201, 654, 41, 494, 297, 169, 622, 366, 105, 558, 430, 233, 686, 25, 478, 281, 153, 606, 345, 89, 542, 414, 217, 670, 57, 510, 313, 185, 638, 382, 121, 574, 446, 249, 702, 353, 5, 458, 261, 133, 586, 325, 69, 522, 394, 197, 650, 37, 490, 293, 165, 618, 362, 101, 554, 426, 229, 682, 21, 474, 277, 149, 602, 341, 85, 538, 410, 213, 666, 53, 506, 309, 181, 634, 378, 117, 570, 442, 245, 698, 13, 466, 269, 141, 594, 333, 77, 530, 402, 205, 658, 45, 498, 301, 173, 626, 370, 109, 562, 434, 237, 690, 29, 482, 285, 157, 610, 349, 93, 546, 418, 221, 674, 61, 514, 317, 189, 642, 386, 125, 578, 450, 253, 706, 3, 456, 259, 131, 584, 323, 67, 520, 392, 195, 648, 35, 488, 291, 163, 616, 360, 99, 552, 424, 227, 680, 19, 472, 275, 147, 600, 339, 83, 536, 408, 211, 664, 51, 504, 307, 179, 632, 376, 115, 568, 440, 243, 696, 11, 464, 267, 139, 592, 331, 75, 528, 400, 203, 656, 43, 496, 299, 171, 624, 368, 107, 560, 432, 235, 688, 27, 480, 283, 155, 608, 347, 91, 544, 416, 219, 672, 59, 512, 315, 187, 640, 384, 123, 576, 448, 251, 704, 356, 7, 460, 263, 135, 588, 327, 71, 524, 396, 199, 652, 39, 492, 295, 167, 620, 364, 103, 556, 428, 231, 684, 23, 476, 279, 151, 604, 343, 87, 540, 412, 215, 668, 55, 508, 311, 183, 636, 380, 119, 572, 444, 247, 700, 15, 468, 271, 143, 596, 335, 79, 532, 404, 207, 660, 47, 500, 303, 175, 628, 372, 111, 564, 436, 239, 692, 31, 484, 287, 159, 612, 351, 95, 548, 420, 223, 676, 63, 516, 319, 191, 644, 388, 127, 580, 452, 255, 708]; + + return (unsafe{*PERM709.get_unchecked((index % 709) as usize)} as u32 * 502681 + + unsafe{*PERM709.get_unchecked(((index / 709) % 709) as usize)} as u32 * 709 + + unsafe{*PERM709.get_unchecked(((index / 502681) % 709) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (356400829u32 as f32)); // Results in [0,1). } - -#[inline(always)] fn halton719(index: u32) -> f32 { - const PERM719: [u16; 719] = [0, 463, 256, 128, 591, 320, 64, 527, 399, 192, 655, 32, 495, 288, - 160, 623, 367, 96, 559, 431, 224, 687, 16, 479, 272, 144, 607, - 336, 80, 543, 415, 208, 671, 48, 511, 304, 176, 639, 383, 112, - 575, 447, 240, 703, 352, 8, 471, 264, 136, 599, 328, 72, 535, - 407, 200, 663, 40, 503, 296, 168, 631, 375, 104, 567, 439, 232, - 695, 24, 487, 280, 152, 615, 344, 88, 551, 423, 216, 679, 56, - 519, 312, 184, 647, 391, 120, 583, 455, 248, 711, 356, 4, 467, - 260, 132, 595, 324, 68, 531, 403, 196, 659, 36, 499, 292, 164, - 627, 371, 100, 563, 435, 228, 691, 20, 483, 276, 148, 611, 340, - 84, 547, 419, 212, 675, 52, 515, 308, 180, 643, 387, 116, 579, - 451, 244, 707, 363, 12, 475, 268, 140, 603, 332, 76, 539, 411, - 204, 667, 44, 507, 300, 172, 635, 379, 108, 571, 443, 236, 699, - 28, 491, 284, 156, 619, 348, 92, 555, 427, 220, 683, 60, 523, - 316, 188, 651, 395, 124, 587, 459, 252, 715, 358, 2, 465, 258, - 130, 593, 322, 66, 529, 401, 194, 657, 34, 497, 290, 162, 625, - 369, 98, 561, 433, 226, 689, 18, 481, 274, 146, 609, 338, 82, - 545, 417, 210, 673, 50, 513, 306, 178, 641, 385, 114, 577, 449, - 242, 705, 354, 10, 473, 266, 138, 601, 330, 74, 537, 409, 202, - 665, 42, 505, 298, 170, 633, 377, 106, 569, 441, 234, 697, 26, - 489, 282, 154, 617, 346, 90, 553, 425, 218, 681, 58, 521, 314, - 186, 649, 393, 122, 585, 457, 250, 713, 361, 6, 469, 262, 134, - 597, 326, 70, 533, 405, 198, 661, 38, 501, 294, 166, 629, 373, - 102, 565, 437, 230, 693, 22, 485, 278, 150, 613, 342, 86, 549, - 421, 214, 677, 54, 517, 310, 182, 645, 389, 118, 581, 453, 246, - 709, 365, 14, 477, 270, 142, 605, 334, 78, 541, 413, 206, 669, - 46, 509, 302, 174, 637, 381, 110, 573, 445, 238, 701, 30, 493, - 286, 158, 621, 350, 94, 557, 429, 222, 685, 62, 525, 318, 190, - 653, 397, 126, 589, 461, 254, 717, 359, 1, 464, 257, 129, 592, - 321, 65, 528, 400, 193, 656, 33, 496, 289, 161, 624, 368, 97, - 560, 432, 225, 688, 17, 480, 273, 145, 608, 337, 81, 544, 416, - 209, 672, 49, 512, 305, 177, 640, 384, 113, 576, 448, 241, 704, - 353, 9, 472, 265, 137, 600, 329, 73, 536, 408, 201, 664, 41, 504, - 297, 169, 632, 376, 105, 568, 440, 233, 696, 25, 488, 281, 153, - 616, 345, 89, 552, 424, 217, 680, 57, 520, 313, 185, 648, 392, - 121, 584, 456, 249, 712, 357, 5, 468, 261, 133, 596, 325, 69, - 532, 404, 197, 660, 37, 500, 293, 165, 628, 372, 101, 564, 436, - 229, 692, 21, 484, 277, 149, 612, 341, 85, 548, 420, 213, 676, - 53, 516, 309, 181, 644, 388, 117, 580, 452, 245, 708, 364, 13, - 476, 269, 141, 604, 333, 77, 540, 412, 205, 668, 45, 508, 301, - 173, 636, 380, 109, 572, 444, 237, 700, 29, 492, 285, 157, 620, - 349, 93, 556, 428, 221, 684, 61, 524, 317, 189, 652, 396, 125, - 588, 460, 253, 716, 360, 3, 466, 259, 131, 594, 323, 67, 530, - 402, 195, 658, 35, 498, 291, 163, 626, 370, 99, 562, 434, 227, - 690, 19, 482, 275, 147, 610, 339, 83, 546, 418, 211, 674, 51, - 514, 307, 179, 642, 386, 115, 578, 450, 243, 706, 355, 11, 474, - 267, 139, 602, 331, 75, 538, 410, 203, 666, 43, 506, 299, 171, - 634, 378, 107, 570, 442, 235, 698, 27, 490, 283, 155, 618, 347, - 91, 554, 426, 219, 682, 59, 522, 315, 187, 650, 394, 123, 586, - 458, 251, 714, 362, 7, 470, 263, 135, 598, 327, 71, 534, 406, - 199, 662, 39, 502, 295, 167, 630, 374, 103, 566, 438, 231, 694, - 23, 486, 279, 151, 614, 343, 87, 550, 422, 215, 678, 55, 518, - 311, 183, 646, 390, 119, 582, 454, 247, 710, 366, 15, 478, 271, - 143, 606, 335, 79, 542, 414, 207, 670, 47, 510, 303, 175, 638, - 382, 111, 574, 446, 239, 702, 31, 494, 287, 159, 622, 351, 95, - 558, 430, 223, 686, 63, 526, 319, 191, 654, 398, 127, 590, 462, - 255, 718]; - - return (unsafe { *PERM719.get_unchecked((index % 719) as usize) } as u32 * 516961 + - unsafe { *PERM719.get_unchecked(((index / 719) % 719) as usize) } as u32 * 719 + - unsafe { - *PERM719.get_unchecked(((index / 516961) % 719) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (371694959u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton727(index: u32) -> f32 { - const PERM727: [u16; 727] = [0, 471, 256, 128, 599, 320, 64, 535, 407, 192, 663, 32, 503, 288, - 160, 631, 375, 96, 567, 439, 224, 695, 352, 16, 487, 272, 144, - 615, 336, 80, 551, 423, 208, 679, 48, 519, 304, 176, 647, 391, - 112, 583, 455, 240, 711, 8, 479, 264, 136, 607, 328, 72, 543, - 415, 200, 671, 40, 511, 296, 168, 639, 383, 104, 575, 447, 232, - 703, 367, 24, 495, 280, 152, 623, 344, 88, 559, 431, 216, 687, - 56, 527, 312, 184, 655, 399, 120, 591, 463, 248, 719, 360, 4, - 475, 260, 132, 603, 324, 68, 539, 411, 196, 667, 36, 507, 292, - 164, 635, 379, 100, 571, 443, 228, 699, 356, 20, 491, 276, 148, - 619, 340, 84, 555, 427, 212, 683, 52, 523, 308, 180, 651, 395, - 116, 587, 459, 244, 715, 12, 483, 268, 140, 611, 332, 76, 547, - 419, 204, 675, 44, 515, 300, 172, 643, 387, 108, 579, 451, 236, - 707, 371, 28, 499, 284, 156, 627, 348, 92, 563, 435, 220, 691, - 60, 531, 316, 188, 659, 403, 124, 595, 467, 252, 723, 362, 2, - 473, 258, 130, 601, 322, 66, 537, 409, 194, 665, 34, 505, 290, - 162, 633, 377, 98, 569, 441, 226, 697, 354, 18, 489, 274, 146, - 617, 338, 82, 553, 425, 210, 681, 50, 521, 306, 178, 649, 393, - 114, 585, 457, 242, 713, 10, 481, 266, 138, 609, 330, 74, 545, - 417, 202, 673, 42, 513, 298, 170, 641, 385, 106, 577, 449, 234, - 705, 369, 26, 497, 282, 154, 625, 346, 90, 561, 433, 218, 689, - 58, 529, 314, 186, 657, 401, 122, 593, 465, 250, 721, 365, 6, - 477, 262, 134, 605, 326, 70, 541, 413, 198, 669, 38, 509, 294, - 166, 637, 381, 102, 573, 445, 230, 701, 358, 22, 493, 278, 150, - 621, 342, 86, 557, 429, 214, 685, 54, 525, 310, 182, 653, 397, - 118, 589, 461, 246, 717, 14, 485, 270, 142, 613, 334, 78, 549, - 421, 206, 677, 46, 517, 302, 174, 645, 389, 110, 581, 453, 238, - 709, 373, 30, 501, 286, 158, 629, 350, 94, 565, 437, 222, 693, - 62, 533, 318, 190, 661, 405, 126, 597, 469, 254, 725, 363, 1, - 472, 257, 129, 600, 321, 65, 536, 408, 193, 664, 33, 504, 289, - 161, 632, 376, 97, 568, 440, 225, 696, 353, 17, 488, 273, 145, - 616, 337, 81, 552, 424, 209, 680, 49, 520, 305, 177, 648, 392, - 113, 584, 456, 241, 712, 9, 480, 265, 137, 608, 329, 73, 544, - 416, 201, 672, 41, 512, 297, 169, 640, 384, 105, 576, 448, 233, - 704, 368, 25, 496, 281, 153, 624, 345, 89, 560, 432, 217, 688, - 57, 528, 313, 185, 656, 400, 121, 592, 464, 249, 720, 361, 5, - 476, 261, 133, 604, 325, 69, 540, 412, 197, 668, 37, 508, 293, - 165, 636, 380, 101, 572, 444, 229, 700, 357, 21, 492, 277, 149, - 620, 341, 85, 556, 428, 213, 684, 53, 524, 309, 181, 652, 396, - 117, 588, 460, 245, 716, 13, 484, 269, 141, 612, 333, 77, 548, - 420, 205, 676, 45, 516, 301, 173, 644, 388, 109, 580, 452, 237, - 708, 372, 29, 500, 285, 157, 628, 349, 93, 564, 436, 221, 692, - 61, 532, 317, 189, 660, 404, 125, 596, 468, 253, 724, 364, 3, - 474, 259, 131, 602, 323, 67, 538, 410, 195, 666, 35, 506, 291, - 163, 634, 378, 99, 570, 442, 227, 698, 355, 19, 490, 275, 147, - 618, 339, 83, 554, 426, 211, 682, 51, 522, 307, 179, 650, 394, - 115, 586, 458, 243, 714, 11, 482, 267, 139, 610, 331, 75, 546, - 418, 203, 674, 43, 514, 299, 171, 642, 386, 107, 578, 450, 235, - 706, 370, 27, 498, 283, 155, 626, 347, 91, 562, 434, 219, 690, - 59, 530, 315, 187, 658, 402, 123, 594, 466, 251, 722, 366, 7, - 478, 263, 135, 606, 327, 71, 542, 414, 199, 670, 39, 510, 295, - 167, 638, 382, 103, 574, 446, 231, 702, 359, 23, 494, 279, 151, - 622, 343, 87, 558, 430, 215, 686, 55, 526, 311, 183, 654, 398, - 119, 590, 462, 247, 718, 15, 486, 271, 143, 614, 335, 79, 550, - 422, 207, 678, 47, 518, 303, 175, 646, 390, 111, 582, 454, 239, - 710, 374, 31, 502, 287, 159, 630, 351, 95, 566, 438, 223, 694, - 63, 534, 319, 191, 662, 406, 127, 598, 470, 255, 726]; - - return (unsafe { *PERM727.get_unchecked((index % 727) as usize) } as u32 * 528529 + - unsafe { *PERM727.get_unchecked(((index / 727) % 727) as usize) } as u32 * 727 + - unsafe { - *PERM727.get_unchecked(((index / 528529) % 727) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (384240583u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton733(index: u32) -> f32 { - const PERM733: [u16; 733] = [0, 477, 256, 128, 605, 320, 64, 541, 413, 192, 669, 32, 509, 288, - 160, 637, 381, 96, 573, 445, 224, 701, 352, 16, 493, 272, 144, - 621, 336, 80, 557, 429, 208, 685, 48, 525, 304, 176, 653, 397, - 112, 589, 461, 240, 717, 360, 8, 485, 264, 136, 613, 328, 72, - 549, 421, 200, 677, 40, 517, 296, 168, 645, 389, 104, 581, 453, - 232, 709, 373, 24, 501, 280, 152, 629, 344, 88, 565, 437, 216, - 693, 56, 533, 312, 184, 661, 405, 120, 597, 469, 248, 725, 364, - 4, 481, 260, 132, 609, 324, 68, 545, 417, 196, 673, 36, 513, 292, - 164, 641, 385, 100, 577, 449, 228, 705, 356, 20, 497, 276, 148, - 625, 340, 84, 561, 433, 212, 689, 52, 529, 308, 180, 657, 401, - 116, 593, 465, 244, 721, 369, 12, 489, 268, 140, 617, 332, 76, - 553, 425, 204, 681, 44, 521, 300, 172, 649, 393, 108, 585, 457, - 236, 713, 377, 28, 505, 284, 156, 633, 348, 92, 569, 441, 220, - 697, 60, 537, 316, 188, 665, 409, 124, 601, 473, 252, 729, 2, - 479, 258, 130, 607, 322, 66, 543, 415, 194, 671, 34, 511, 290, - 162, 639, 383, 98, 575, 447, 226, 703, 354, 18, 495, 274, 146, - 623, 338, 82, 559, 431, 210, 687, 50, 527, 306, 178, 655, 399, - 114, 591, 463, 242, 719, 362, 10, 487, 266, 138, 615, 330, 74, - 551, 423, 202, 679, 42, 519, 298, 170, 647, 391, 106, 583, 455, - 234, 711, 375, 26, 503, 282, 154, 631, 346, 90, 567, 439, 218, - 695, 58, 535, 314, 186, 663, 407, 122, 599, 471, 250, 727, 367, - 6, 483, 262, 134, 611, 326, 70, 547, 419, 198, 675, 38, 515, 294, - 166, 643, 387, 102, 579, 451, 230, 707, 358, 22, 499, 278, 150, - 627, 342, 86, 563, 435, 214, 691, 54, 531, 310, 182, 659, 403, - 118, 595, 467, 246, 723, 371, 14, 491, 270, 142, 619, 334, 78, - 555, 427, 206, 683, 46, 523, 302, 174, 651, 395, 110, 587, 459, - 238, 715, 379, 30, 507, 286, 158, 635, 350, 94, 571, 443, 222, - 699, 62, 539, 318, 190, 667, 411, 126, 603, 475, 254, 731, 366, - 1, 478, 257, 129, 606, 321, 65, 542, 414, 193, 670, 33, 510, 289, - 161, 638, 382, 97, 574, 446, 225, 702, 353, 17, 494, 273, 145, - 622, 337, 81, 558, 430, 209, 686, 49, 526, 305, 177, 654, 398, - 113, 590, 462, 241, 718, 361, 9, 486, 265, 137, 614, 329, 73, - 550, 422, 201, 678, 41, 518, 297, 169, 646, 390, 105, 582, 454, - 233, 710, 374, 25, 502, 281, 153, 630, 345, 89, 566, 438, 217, - 694, 57, 534, 313, 185, 662, 406, 121, 598, 470, 249, 726, 365, - 5, 482, 261, 133, 610, 325, 69, 546, 418, 197, 674, 37, 514, 293, - 165, 642, 386, 101, 578, 450, 229, 706, 357, 21, 498, 277, 149, - 626, 341, 85, 562, 434, 213, 690, 53, 530, 309, 181, 658, 402, - 117, 594, 466, 245, 722, 370, 13, 490, 269, 141, 618, 333, 77, - 554, 426, 205, 682, 45, 522, 301, 173, 650, 394, 109, 586, 458, - 237, 714, 378, 29, 506, 285, 157, 634, 349, 93, 570, 442, 221, - 698, 61, 538, 317, 189, 666, 410, 125, 602, 474, 253, 730, 3, - 480, 259, 131, 608, 323, 67, 544, 416, 195, 672, 35, 512, 291, - 163, 640, 384, 99, 576, 448, 227, 704, 355, 19, 496, 275, 147, - 624, 339, 83, 560, 432, 211, 688, 51, 528, 307, 179, 656, 400, - 115, 592, 464, 243, 720, 363, 11, 488, 267, 139, 616, 331, 75, - 552, 424, 203, 680, 43, 520, 299, 171, 648, 392, 107, 584, 456, - 235, 712, 376, 27, 504, 283, 155, 632, 347, 91, 568, 440, 219, - 696, 59, 536, 315, 187, 664, 408, 123, 600, 472, 251, 728, 368, - 7, 484, 263, 135, 612, 327, 71, 548, 420, 199, 676, 39, 516, 295, - 167, 644, 388, 103, 580, 452, 231, 708, 359, 23, 500, 279, 151, - 628, 343, 87, 564, 436, 215, 692, 55, 532, 311, 183, 660, 404, - 119, 596, 468, 247, 724, 372, 15, 492, 271, 143, 620, 335, 79, - 556, 428, 207, 684, 47, 524, 303, 175, 652, 396, 111, 588, 460, - 239, 716, 380, 31, 508, 287, 159, 636, 351, 95, 572, 444, 223, - 700, 63, 540, 319, 191, 668, 412, 127, 604, 476, 255, 732]; - - return (unsafe { *PERM733.get_unchecked((index % 733) as usize) } as u32 * 537289 + - unsafe { *PERM733.get_unchecked(((index / 733) % 733) as usize) } as u32 * 733 + - unsafe { - *PERM733.get_unchecked(((index / 537289) % 733) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (393832837u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton739(index: u32) -> f32 { - const PERM739: [u16; 739] = [0, 483, 256, 128, 611, 320, 64, 547, 419, 192, 675, 352, 32, 515, - 288, 160, 643, 387, 96, 579, 451, 224, 707, 16, 499, 272, 144, - 627, 336, 80, 563, 435, 208, 691, 371, 48, 531, 304, 176, 659, - 403, 112, 595, 467, 240, 723, 8, 491, 264, 136, 619, 328, 72, - 555, 427, 200, 683, 360, 40, 523, 296, 168, 651, 395, 104, 587, - 459, 232, 715, 24, 507, 280, 152, 635, 344, 88, 571, 443, 216, - 699, 379, 56, 539, 312, 184, 667, 411, 120, 603, 475, 248, 731, - 4, 487, 260, 132, 615, 324, 68, 551, 423, 196, 679, 356, 36, 519, - 292, 164, 647, 391, 100, 583, 455, 228, 711, 20, 503, 276, 148, - 631, 340, 84, 567, 439, 212, 695, 375, 52, 535, 308, 180, 663, - 407, 116, 599, 471, 244, 727, 12, 495, 268, 140, 623, 332, 76, - 559, 431, 204, 687, 364, 44, 527, 300, 172, 655, 399, 108, 591, - 463, 236, 719, 28, 511, 284, 156, 639, 348, 92, 575, 447, 220, - 703, 383, 60, 543, 316, 188, 671, 415, 124, 607, 479, 252, 735, - 368, 2, 485, 258, 130, 613, 322, 66, 549, 421, 194, 677, 354, 34, - 517, 290, 162, 645, 389, 98, 581, 453, 226, 709, 18, 501, 274, - 146, 629, 338, 82, 565, 437, 210, 693, 373, 50, 533, 306, 178, - 661, 405, 114, 597, 469, 242, 725, 10, 493, 266, 138, 621, 330, - 74, 557, 429, 202, 685, 362, 42, 525, 298, 170, 653, 397, 106, - 589, 461, 234, 717, 26, 509, 282, 154, 637, 346, 90, 573, 445, - 218, 701, 381, 58, 541, 314, 186, 669, 413, 122, 605, 477, 250, - 733, 6, 489, 262, 134, 617, 326, 70, 553, 425, 198, 681, 358, 38, - 521, 294, 166, 649, 393, 102, 585, 457, 230, 713, 22, 505, 278, - 150, 633, 342, 86, 569, 441, 214, 697, 377, 54, 537, 310, 182, - 665, 409, 118, 601, 473, 246, 729, 14, 497, 270, 142, 625, 334, - 78, 561, 433, 206, 689, 366, 46, 529, 302, 174, 657, 401, 110, - 593, 465, 238, 721, 30, 513, 286, 158, 641, 350, 94, 577, 449, - 222, 705, 385, 62, 545, 318, 190, 673, 417, 126, 609, 481, 254, - 737, 369, 1, 484, 257, 129, 612, 321, 65, 548, 420, 193, 676, - 353, 33, 516, 289, 161, 644, 388, 97, 580, 452, 225, 708, 17, - 500, 273, 145, 628, 337, 81, 564, 436, 209, 692, 372, 49, 532, - 305, 177, 660, 404, 113, 596, 468, 241, 724, 9, 492, 265, 137, - 620, 329, 73, 556, 428, 201, 684, 361, 41, 524, 297, 169, 652, - 396, 105, 588, 460, 233, 716, 25, 508, 281, 153, 636, 345, 89, - 572, 444, 217, 700, 380, 57, 540, 313, 185, 668, 412, 121, 604, - 476, 249, 732, 5, 488, 261, 133, 616, 325, 69, 552, 424, 197, - 680, 357, 37, 520, 293, 165, 648, 392, 101, 584, 456, 229, 712, - 21, 504, 277, 149, 632, 341, 85, 568, 440, 213, 696, 376, 53, - 536, 309, 181, 664, 408, 117, 600, 472, 245, 728, 13, 496, 269, - 141, 624, 333, 77, 560, 432, 205, 688, 365, 45, 528, 301, 173, - 656, 400, 109, 592, 464, 237, 720, 29, 512, 285, 157, 640, 349, - 93, 576, 448, 221, 704, 384, 61, 544, 317, 189, 672, 416, 125, - 608, 480, 253, 736, 370, 3, 486, 259, 131, 614, 323, 67, 550, - 422, 195, 678, 355, 35, 518, 291, 163, 646, 390, 99, 582, 454, - 227, 710, 19, 502, 275, 147, 630, 339, 83, 566, 438, 211, 694, - 374, 51, 534, 307, 179, 662, 406, 115, 598, 470, 243, 726, 11, - 494, 267, 139, 622, 331, 75, 558, 430, 203, 686, 363, 43, 526, - 299, 171, 654, 398, 107, 590, 462, 235, 718, 27, 510, 283, 155, - 638, 347, 91, 574, 446, 219, 702, 382, 59, 542, 315, 187, 670, - 414, 123, 606, 478, 251, 734, 7, 490, 263, 135, 618, 327, 71, - 554, 426, 199, 682, 359, 39, 522, 295, 167, 650, 394, 103, 586, - 458, 231, 714, 23, 506, 279, 151, 634, 343, 87, 570, 442, 215, - 698, 378, 55, 538, 311, 183, 666, 410, 119, 602, 474, 247, 730, - 15, 498, 271, 143, 626, 335, 79, 562, 434, 207, 690, 367, 47, - 530, 303, 175, 658, 402, 111, 594, 466, 239, 722, 31, 514, 287, - 159, 642, 351, 95, 578, 450, 223, 706, 386, 63, 546, 319, 191, - 674, 418, 127, 610, 482, 255, 738]; - - return (unsafe { *PERM739.get_unchecked((index % 739) as usize) } as u32 * 546121 + - unsafe { *PERM739.get_unchecked(((index / 739) % 739) as usize) } as u32 * 739 + - unsafe { - *PERM739.get_unchecked(((index / 546121) % 739) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (403583419u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton743(index: u32) -> f32 { - const PERM743: [u16; 743] = [0, 487, 256, 128, 615, 320, 64, 551, 423, 192, 679, 352, 32, 519, - 288, 160, 647, 391, 96, 583, 455, 224, 711, 16, 503, 272, 144, - 631, 336, 80, 567, 439, 208, 695, 375, 48, 535, 304, 176, 663, - 407, 112, 599, 471, 240, 727, 8, 495, 264, 136, 623, 328, 72, - 559, 431, 200, 687, 360, 40, 527, 296, 168, 655, 399, 104, 591, - 463, 232, 719, 24, 511, 280, 152, 639, 344, 88, 575, 447, 216, - 703, 383, 56, 543, 312, 184, 671, 415, 120, 607, 479, 248, 735, - 368, 4, 491, 260, 132, 619, 324, 68, 555, 427, 196, 683, 356, 36, - 523, 292, 164, 651, 395, 100, 587, 459, 228, 715, 20, 507, 276, - 148, 635, 340, 84, 571, 443, 212, 699, 379, 52, 539, 308, 180, - 667, 411, 116, 603, 475, 244, 731, 12, 499, 268, 140, 627, 332, - 76, 563, 435, 204, 691, 364, 44, 531, 300, 172, 659, 403, 108, - 595, 467, 236, 723, 28, 515, 284, 156, 643, 348, 92, 579, 451, - 220, 707, 387, 60, 547, 316, 188, 675, 419, 124, 611, 483, 252, - 739, 370, 2, 489, 258, 130, 617, 322, 66, 553, 425, 194, 681, - 354, 34, 521, 290, 162, 649, 393, 98, 585, 457, 226, 713, 18, - 505, 274, 146, 633, 338, 82, 569, 441, 210, 697, 377, 50, 537, - 306, 178, 665, 409, 114, 601, 473, 242, 729, 10, 497, 266, 138, - 625, 330, 74, 561, 433, 202, 689, 362, 42, 529, 298, 170, 657, - 401, 106, 593, 465, 234, 721, 26, 513, 282, 154, 641, 346, 90, - 577, 449, 218, 705, 385, 58, 545, 314, 186, 673, 417, 122, 609, - 481, 250, 737, 373, 6, 493, 262, 134, 621, 326, 70, 557, 429, - 198, 685, 358, 38, 525, 294, 166, 653, 397, 102, 589, 461, 230, - 717, 22, 509, 278, 150, 637, 342, 86, 573, 445, 214, 701, 381, - 54, 541, 310, 182, 669, 413, 118, 605, 477, 246, 733, 14, 501, - 270, 142, 629, 334, 78, 565, 437, 206, 693, 366, 46, 533, 302, - 174, 661, 405, 110, 597, 469, 238, 725, 30, 517, 286, 158, 645, - 350, 94, 581, 453, 222, 709, 389, 62, 549, 318, 190, 677, 421, - 126, 613, 485, 254, 741, 371, 1, 488, 257, 129, 616, 321, 65, - 552, 424, 193, 680, 353, 33, 520, 289, 161, 648, 392, 97, 584, - 456, 225, 712, 17, 504, 273, 145, 632, 337, 81, 568, 440, 209, - 696, 376, 49, 536, 305, 177, 664, 408, 113, 600, 472, 241, 728, - 9, 496, 265, 137, 624, 329, 73, 560, 432, 201, 688, 361, 41, 528, - 297, 169, 656, 400, 105, 592, 464, 233, 720, 25, 512, 281, 153, - 640, 345, 89, 576, 448, 217, 704, 384, 57, 544, 313, 185, 672, - 416, 121, 608, 480, 249, 736, 369, 5, 492, 261, 133, 620, 325, - 69, 556, 428, 197, 684, 357, 37, 524, 293, 165, 652, 396, 101, - 588, 460, 229, 716, 21, 508, 277, 149, 636, 341, 85, 572, 444, - 213, 700, 380, 53, 540, 309, 181, 668, 412, 117, 604, 476, 245, - 732, 13, 500, 269, 141, 628, 333, 77, 564, 436, 205, 692, 365, - 45, 532, 301, 173, 660, 404, 109, 596, 468, 237, 724, 29, 516, - 285, 157, 644, 349, 93, 580, 452, 221, 708, 388, 61, 548, 317, - 189, 676, 420, 125, 612, 484, 253, 740, 372, 3, 490, 259, 131, - 618, 323, 67, 554, 426, 195, 682, 355, 35, 522, 291, 163, 650, - 394, 99, 586, 458, 227, 714, 19, 506, 275, 147, 634, 339, 83, - 570, 442, 211, 698, 378, 51, 538, 307, 179, 666, 410, 115, 602, - 474, 243, 730, 11, 498, 267, 139, 626, 331, 75, 562, 434, 203, - 690, 363, 43, 530, 299, 171, 658, 402, 107, 594, 466, 235, 722, - 27, 514, 283, 155, 642, 347, 91, 578, 450, 219, 706, 386, 59, - 546, 315, 187, 674, 418, 123, 610, 482, 251, 738, 374, 7, 494, - 263, 135, 622, 327, 71, 558, 430, 199, 686, 359, 39, 526, 295, - 167, 654, 398, 103, 590, 462, 231, 718, 23, 510, 279, 151, 638, - 343, 87, 574, 446, 215, 702, 382, 55, 542, 311, 183, 670, 414, - 119, 606, 478, 247, 734, 15, 502, 271, 143, 630, 335, 79, 566, - 438, 207, 694, 367, 47, 534, 303, 175, 662, 406, 111, 598, 470, - 239, 726, 31, 518, 287, 159, 646, 351, 95, 582, 454, 223, 710, - 390, 63, 550, 319, 191, 678, 422, 127, 614, 486, 255, 742]; - - return (unsafe { *PERM743.get_unchecked((index % 743) as usize) } as u32 * 552049 + - unsafe { *PERM743.get_unchecked(((index / 743) % 743) as usize) } as u32 * 743 + - unsafe { - *PERM743.get_unchecked(((index / 552049) % 743) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (410172407u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton751(index: u32) -> f32 { - const PERM751: [u16; 751] = [0, 495, 256, 128, 623, 320, 64, 559, 431, 192, 687, 352, 32, 527, - 288, 160, 655, 399, 96, 591, 463, 224, 719, 16, 511, 272, 144, - 639, 336, 80, 575, 447, 208, 703, 383, 48, 543, 304, 176, 671, - 415, 112, 607, 479, 240, 735, 368, 8, 503, 264, 136, 631, 328, - 72, 567, 439, 200, 695, 360, 40, 535, 296, 168, 663, 407, 104, - 599, 471, 232, 727, 24, 519, 280, 152, 647, 344, 88, 583, 455, - 216, 711, 391, 56, 551, 312, 184, 679, 423, 120, 615, 487, 248, - 743, 372, 4, 499, 260, 132, 627, 324, 68, 563, 435, 196, 691, - 356, 36, 531, 292, 164, 659, 403, 100, 595, 467, 228, 723, 20, - 515, 276, 148, 643, 340, 84, 579, 451, 212, 707, 387, 52, 547, - 308, 180, 675, 419, 116, 611, 483, 244, 739, 379, 12, 507, 268, - 140, 635, 332, 76, 571, 443, 204, 699, 364, 44, 539, 300, 172, - 667, 411, 108, 603, 475, 236, 731, 28, 523, 284, 156, 651, 348, - 92, 587, 459, 220, 715, 395, 60, 555, 316, 188, 683, 427, 124, - 619, 491, 252, 747, 374, 2, 497, 258, 130, 625, 322, 66, 561, - 433, 194, 689, 354, 34, 529, 290, 162, 657, 401, 98, 593, 465, - 226, 721, 18, 513, 274, 146, 641, 338, 82, 577, 449, 210, 705, - 385, 50, 545, 306, 178, 673, 417, 114, 609, 481, 242, 737, 370, - 10, 505, 266, 138, 633, 330, 74, 569, 441, 202, 697, 362, 42, - 537, 298, 170, 665, 409, 106, 601, 473, 234, 729, 26, 521, 282, - 154, 649, 346, 90, 585, 457, 218, 713, 393, 58, 553, 314, 186, - 681, 425, 122, 617, 489, 250, 745, 377, 6, 501, 262, 134, 629, - 326, 70, 565, 437, 198, 693, 358, 38, 533, 294, 166, 661, 405, - 102, 597, 469, 230, 725, 22, 517, 278, 150, 645, 342, 86, 581, - 453, 214, 709, 389, 54, 549, 310, 182, 677, 421, 118, 613, 485, - 246, 741, 381, 14, 509, 270, 142, 637, 334, 78, 573, 445, 206, - 701, 366, 46, 541, 302, 174, 669, 413, 110, 605, 477, 238, 733, - 30, 525, 286, 158, 653, 350, 94, 589, 461, 222, 717, 397, 62, - 557, 318, 190, 685, 429, 126, 621, 493, 254, 749, 375, 1, 496, - 257, 129, 624, 321, 65, 560, 432, 193, 688, 353, 33, 528, 289, - 161, 656, 400, 97, 592, 464, 225, 720, 17, 512, 273, 145, 640, - 337, 81, 576, 448, 209, 704, 384, 49, 544, 305, 177, 672, 416, - 113, 608, 480, 241, 736, 369, 9, 504, 265, 137, 632, 329, 73, - 568, 440, 201, 696, 361, 41, 536, 297, 169, 664, 408, 105, 600, - 472, 233, 728, 25, 520, 281, 153, 648, 345, 89, 584, 456, 217, - 712, 392, 57, 552, 313, 185, 680, 424, 121, 616, 488, 249, 744, - 373, 5, 500, 261, 133, 628, 325, 69, 564, 436, 197, 692, 357, 37, - 532, 293, 165, 660, 404, 101, 596, 468, 229, 724, 21, 516, 277, - 149, 644, 341, 85, 580, 452, 213, 708, 388, 53, 548, 309, 181, - 676, 420, 117, 612, 484, 245, 740, 380, 13, 508, 269, 141, 636, - 333, 77, 572, 444, 205, 700, 365, 45, 540, 301, 173, 668, 412, - 109, 604, 476, 237, 732, 29, 524, 285, 157, 652, 349, 93, 588, - 460, 221, 716, 396, 61, 556, 317, 189, 684, 428, 125, 620, 492, - 253, 748, 376, 3, 498, 259, 131, 626, 323, 67, 562, 434, 195, - 690, 355, 35, 530, 291, 163, 658, 402, 99, 594, 466, 227, 722, - 19, 514, 275, 147, 642, 339, 83, 578, 450, 211, 706, 386, 51, - 546, 307, 179, 674, 418, 115, 610, 482, 243, 738, 371, 11, 506, - 267, 139, 634, 331, 75, 570, 442, 203, 698, 363, 43, 538, 299, - 171, 666, 410, 107, 602, 474, 235, 730, 27, 522, 283, 155, 650, - 347, 91, 586, 458, 219, 714, 394, 59, 554, 315, 187, 682, 426, - 123, 618, 490, 251, 746, 378, 7, 502, 263, 135, 630, 327, 71, - 566, 438, 199, 694, 359, 39, 534, 295, 167, 662, 406, 103, 598, - 470, 231, 726, 23, 518, 279, 151, 646, 343, 87, 582, 454, 215, - 710, 390, 55, 550, 311, 183, 678, 422, 119, 614, 486, 247, 742, - 382, 15, 510, 271, 143, 638, 335, 79, 574, 446, 207, 702, 367, - 47, 542, 303, 175, 670, 414, 111, 606, 478, 239, 734, 31, 526, - 287, 159, 654, 351, 95, 590, 462, 223, 718, 398, 63, 558, 319, - 191, 686, 430, 127, 622, 494, 255, 750]; - - return (unsafe { *PERM751.get_unchecked((index % 751) as usize) } as u32 * 564001 + - unsafe { *PERM751.get_unchecked(((index / 751) % 751) as usize) } as u32 * 751 + - unsafe { - *PERM751.get_unchecked(((index / 564001) % 751) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (423564751u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton757(index: u32) -> f32 { - const PERM757: [u16; 757] = [0, 501, 256, 128, 629, 320, 64, 565, 437, 192, 693, 352, 32, 533, - 288, 160, 661, 405, 96, 597, 469, 224, 725, 368, 16, 517, 272, - 144, 645, 336, 80, 581, 453, 208, 709, 389, 48, 549, 304, 176, - 677, 421, 112, 613, 485, 240, 741, 8, 509, 264, 136, 637, 328, - 72, 573, 445, 200, 701, 360, 40, 541, 296, 168, 669, 413, 104, - 605, 477, 232, 733, 381, 24, 525, 280, 152, 653, 344, 88, 589, - 461, 216, 717, 397, 56, 557, 312, 184, 685, 429, 120, 621, 493, - 248, 749, 376, 4, 505, 260, 132, 633, 324, 68, 569, 441, 196, - 697, 356, 36, 537, 292, 164, 665, 409, 100, 601, 473, 228, 729, - 372, 20, 521, 276, 148, 649, 340, 84, 585, 457, 212, 713, 393, - 52, 553, 308, 180, 681, 425, 116, 617, 489, 244, 745, 12, 513, - 268, 140, 641, 332, 76, 577, 449, 204, 705, 364, 44, 545, 300, - 172, 673, 417, 108, 609, 481, 236, 737, 385, 28, 529, 284, 156, - 657, 348, 92, 593, 465, 220, 721, 401, 60, 561, 316, 188, 689, - 433, 124, 625, 497, 252, 753, 2, 503, 258, 130, 631, 322, 66, - 567, 439, 194, 695, 354, 34, 535, 290, 162, 663, 407, 98, 599, - 471, 226, 727, 370, 18, 519, 274, 146, 647, 338, 82, 583, 455, - 210, 711, 391, 50, 551, 306, 178, 679, 423, 114, 615, 487, 242, - 743, 10, 511, 266, 138, 639, 330, 74, 575, 447, 202, 703, 362, - 42, 543, 298, 170, 671, 415, 106, 607, 479, 234, 735, 383, 26, - 527, 282, 154, 655, 346, 90, 591, 463, 218, 719, 399, 58, 559, - 314, 186, 687, 431, 122, 623, 495, 250, 751, 379, 6, 507, 262, - 134, 635, 326, 70, 571, 443, 198, 699, 358, 38, 539, 294, 166, - 667, 411, 102, 603, 475, 230, 731, 374, 22, 523, 278, 150, 651, - 342, 86, 587, 459, 214, 715, 395, 54, 555, 310, 182, 683, 427, - 118, 619, 491, 246, 747, 14, 515, 270, 142, 643, 334, 78, 579, - 451, 206, 707, 366, 46, 547, 302, 174, 675, 419, 110, 611, 483, - 238, 739, 387, 30, 531, 286, 158, 659, 350, 94, 595, 467, 222, - 723, 403, 62, 563, 318, 190, 691, 435, 126, 627, 499, 254, 755, - 378, 1, 502, 257, 129, 630, 321, 65, 566, 438, 193, 694, 353, 33, - 534, 289, 161, 662, 406, 97, 598, 470, 225, 726, 369, 17, 518, - 273, 145, 646, 337, 81, 582, 454, 209, 710, 390, 49, 550, 305, - 177, 678, 422, 113, 614, 486, 241, 742, 9, 510, 265, 137, 638, - 329, 73, 574, 446, 201, 702, 361, 41, 542, 297, 169, 670, 414, - 105, 606, 478, 233, 734, 382, 25, 526, 281, 153, 654, 345, 89, - 590, 462, 217, 718, 398, 57, 558, 313, 185, 686, 430, 121, 622, - 494, 249, 750, 377, 5, 506, 261, 133, 634, 325, 69, 570, 442, - 197, 698, 357, 37, 538, 293, 165, 666, 410, 101, 602, 474, 229, - 730, 373, 21, 522, 277, 149, 650, 341, 85, 586, 458, 213, 714, - 394, 53, 554, 309, 181, 682, 426, 117, 618, 490, 245, 746, 13, - 514, 269, 141, 642, 333, 77, 578, 450, 205, 706, 365, 45, 546, - 301, 173, 674, 418, 109, 610, 482, 237, 738, 386, 29, 530, 285, - 157, 658, 349, 93, 594, 466, 221, 722, 402, 61, 562, 317, 189, - 690, 434, 125, 626, 498, 253, 754, 3, 504, 259, 131, 632, 323, - 67, 568, 440, 195, 696, 355, 35, 536, 291, 163, 664, 408, 99, - 600, 472, 227, 728, 371, 19, 520, 275, 147, 648, 339, 83, 584, - 456, 211, 712, 392, 51, 552, 307, 179, 680, 424, 115, 616, 488, - 243, 744, 11, 512, 267, 139, 640, 331, 75, 576, 448, 203, 704, - 363, 43, 544, 299, 171, 672, 416, 107, 608, 480, 235, 736, 384, - 27, 528, 283, 155, 656, 347, 91, 592, 464, 219, 720, 400, 59, - 560, 315, 187, 688, 432, 123, 624, 496, 251, 752, 380, 7, 508, - 263, 135, 636, 327, 71, 572, 444, 199, 700, 359, 39, 540, 295, - 167, 668, 412, 103, 604, 476, 231, 732, 375, 23, 524, 279, 151, - 652, 343, 87, 588, 460, 215, 716, 396, 55, 556, 311, 183, 684, - 428, 119, 620, 492, 247, 748, 15, 516, 271, 143, 644, 335, 79, - 580, 452, 207, 708, 367, 47, 548, 303, 175, 676, 420, 111, 612, - 484, 239, 740, 388, 31, 532, 287, 159, 660, 351, 95, 596, 468, - 223, 724, 404, 63, 564, 319, 191, 692, 436, 127, 628, 500, 255, - 756]; - - return (unsafe { *PERM757.get_unchecked((index % 757) as usize) } as u32 * 573049 + - unsafe { *PERM757.get_unchecked(((index / 757) % 757) as usize) } as u32 * 757 + - unsafe { - *PERM757.get_unchecked(((index / 573049) % 757) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (433798093u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton761(index: u32) -> f32 { - const PERM761: [u16; 761] = [0, 505, 256, 128, 633, 320, 64, 569, 441, 192, 697, 352, 32, 537, - 288, 160, 665, 409, 96, 601, 473, 224, 729, 368, 16, 521, 272, - 144, 649, 336, 80, 585, 457, 208, 713, 393, 48, 553, 304, 176, - 681, 425, 112, 617, 489, 240, 745, 376, 8, 513, 264, 136, 641, - 328, 72, 577, 449, 200, 705, 360, 40, 545, 296, 168, 673, 417, - 104, 609, 481, 232, 737, 385, 24, 529, 280, 152, 657, 344, 88, - 593, 465, 216, 721, 401, 56, 561, 312, 184, 689, 433, 120, 625, - 497, 248, 753, 4, 509, 260, 132, 637, 324, 68, 573, 445, 196, - 701, 356, 36, 541, 292, 164, 669, 413, 100, 605, 477, 228, 733, - 372, 20, 525, 276, 148, 653, 340, 84, 589, 461, 212, 717, 397, - 52, 557, 308, 180, 685, 429, 116, 621, 493, 244, 749, 381, 12, - 517, 268, 140, 645, 332, 76, 581, 453, 204, 709, 364, 44, 549, - 300, 172, 677, 421, 108, 613, 485, 236, 741, 389, 28, 533, 284, - 156, 661, 348, 92, 597, 469, 220, 725, 405, 60, 565, 316, 188, - 693, 437, 124, 629, 501, 252, 757, 2, 507, 258, 130, 635, 322, - 66, 571, 443, 194, 699, 354, 34, 539, 290, 162, 667, 411, 98, - 603, 475, 226, 731, 370, 18, 523, 274, 146, 651, 338, 82, 587, - 459, 210, 715, 395, 50, 555, 306, 178, 683, 427, 114, 619, 491, - 242, 747, 378, 10, 515, 266, 138, 643, 330, 74, 579, 451, 202, - 707, 362, 42, 547, 298, 170, 675, 419, 106, 611, 483, 234, 739, - 387, 26, 531, 282, 154, 659, 346, 90, 595, 467, 218, 723, 403, - 58, 563, 314, 186, 691, 435, 122, 627, 499, 250, 755, 6, 511, - 262, 134, 639, 326, 70, 575, 447, 198, 703, 358, 38, 543, 294, - 166, 671, 415, 102, 607, 479, 230, 735, 374, 22, 527, 278, 150, - 655, 342, 86, 591, 463, 214, 719, 399, 54, 559, 310, 182, 687, - 431, 118, 623, 495, 246, 751, 383, 14, 519, 270, 142, 647, 334, - 78, 583, 455, 206, 711, 366, 46, 551, 302, 174, 679, 423, 110, - 615, 487, 238, 743, 391, 30, 535, 286, 158, 663, 350, 94, 599, - 471, 222, 727, 407, 62, 567, 318, 190, 695, 439, 126, 631, 503, - 254, 759, 380, 1, 506, 257, 129, 634, 321, 65, 570, 442, 193, - 698, 353, 33, 538, 289, 161, 666, 410, 97, 602, 474, 225, 730, - 369, 17, 522, 273, 145, 650, 337, 81, 586, 458, 209, 714, 394, - 49, 554, 305, 177, 682, 426, 113, 618, 490, 241, 746, 377, 9, - 514, 265, 137, 642, 329, 73, 578, 450, 201, 706, 361, 41, 546, - 297, 169, 674, 418, 105, 610, 482, 233, 738, 386, 25, 530, 281, - 153, 658, 345, 89, 594, 466, 217, 722, 402, 57, 562, 313, 185, - 690, 434, 121, 626, 498, 249, 754, 5, 510, 261, 133, 638, 325, - 69, 574, 446, 197, 702, 357, 37, 542, 293, 165, 670, 414, 101, - 606, 478, 229, 734, 373, 21, 526, 277, 149, 654, 341, 85, 590, - 462, 213, 718, 398, 53, 558, 309, 181, 686, 430, 117, 622, 494, - 245, 750, 382, 13, 518, 269, 141, 646, 333, 77, 582, 454, 205, - 710, 365, 45, 550, 301, 173, 678, 422, 109, 614, 486, 237, 742, - 390, 29, 534, 285, 157, 662, 349, 93, 598, 470, 221, 726, 406, - 61, 566, 317, 189, 694, 438, 125, 630, 502, 253, 758, 3, 508, - 259, 131, 636, 323, 67, 572, 444, 195, 700, 355, 35, 540, 291, - 163, 668, 412, 99, 604, 476, 227, 732, 371, 19, 524, 275, 147, - 652, 339, 83, 588, 460, 211, 716, 396, 51, 556, 307, 179, 684, - 428, 115, 620, 492, 243, 748, 379, 11, 516, 267, 139, 644, 331, - 75, 580, 452, 203, 708, 363, 43, 548, 299, 171, 676, 420, 107, - 612, 484, 235, 740, 388, 27, 532, 283, 155, 660, 347, 91, 596, - 468, 219, 724, 404, 59, 564, 315, 187, 692, 436, 123, 628, 500, - 251, 756, 7, 512, 263, 135, 640, 327, 71, 576, 448, 199, 704, - 359, 39, 544, 295, 167, 672, 416, 103, 608, 480, 231, 736, 375, - 23, 528, 279, 151, 656, 343, 87, 592, 464, 215, 720, 400, 55, - 560, 311, 183, 688, 432, 119, 624, 496, 247, 752, 384, 15, 520, - 271, 143, 648, 335, 79, 584, 456, 207, 712, 367, 47, 552, 303, - 175, 680, 424, 111, 616, 488, 239, 744, 392, 31, 536, 287, 159, - 664, 351, 95, 600, 472, 223, 728, 408, 63, 568, 319, 191, 696, - 440, 127, 632, 504, 255, 760]; - - return (unsafe { *PERM761.get_unchecked((index % 761) as usize) } as u32 * 579121 + - unsafe { *PERM761.get_unchecked(((index / 761) % 761) as usize) } as u32 * 761 + - unsafe { - *PERM761.get_unchecked(((index / 579121) % 761) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (440711081u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton769(index: u32) -> f32 { - const PERM769: [u16; 769] = [0, 256, 513, 128, 385, 641, 64, 320, 577, 192, 449, 705, 32, 288, - 545, 160, 417, 673, 96, 352, 609, 224, 481, 737, 16, 272, 529, - 144, 401, 657, 80, 336, 593, 208, 465, 721, 48, 304, 561, 176, - 433, 689, 112, 368, 625, 240, 497, 753, 8, 264, 521, 136, 393, - 649, 72, 328, 585, 200, 457, 713, 40, 296, 553, 168, 425, 681, - 104, 360, 617, 232, 489, 745, 24, 280, 537, 152, 409, 665, 88, - 344, 601, 216, 473, 729, 56, 312, 569, 184, 441, 697, 120, 376, - 633, 248, 505, 761, 4, 260, 517, 132, 389, 645, 68, 324, 581, - 196, 453, 709, 36, 292, 549, 164, 421, 677, 100, 356, 613, 228, - 485, 741, 20, 276, 533, 148, 405, 661, 84, 340, 597, 212, 469, - 725, 52, 308, 565, 180, 437, 693, 116, 372, 629, 244, 501, 757, - 12, 268, 525, 140, 397, 653, 76, 332, 589, 204, 461, 717, 44, - 300, 557, 172, 429, 685, 108, 364, 621, 236, 493, 749, 28, 284, - 541, 156, 413, 669, 92, 348, 605, 220, 477, 733, 60, 316, 573, - 188, 445, 701, 124, 380, 637, 252, 509, 765, 2, 258, 515, 130, - 387, 643, 66, 322, 579, 194, 451, 707, 34, 290, 547, 162, 419, - 675, 98, 354, 611, 226, 483, 739, 18, 274, 531, 146, 403, 659, - 82, 338, 595, 210, 467, 723, 50, 306, 563, 178, 435, 691, 114, - 370, 627, 242, 499, 755, 10, 266, 523, 138, 395, 651, 74, 330, - 587, 202, 459, 715, 42, 298, 555, 170, 427, 683, 106, 362, 619, - 234, 491, 747, 26, 282, 539, 154, 411, 667, 90, 346, 603, 218, - 475, 731, 58, 314, 571, 186, 443, 699, 122, 378, 635, 250, 507, - 763, 6, 262, 519, 134, 391, 647, 70, 326, 583, 198, 455, 711, 38, - 294, 551, 166, 423, 679, 102, 358, 615, 230, 487, 743, 22, 278, - 535, 150, 407, 663, 86, 342, 599, 214, 471, 727, 54, 310, 567, - 182, 439, 695, 118, 374, 631, 246, 503, 759, 14, 270, 527, 142, - 399, 655, 78, 334, 591, 206, 463, 719, 46, 302, 559, 174, 431, - 687, 110, 366, 623, 238, 495, 751, 30, 286, 543, 158, 415, 671, - 94, 350, 607, 222, 479, 735, 62, 318, 575, 190, 447, 703, 126, - 382, 639, 254, 511, 767, 384, 1, 257, 514, 129, 386, 642, 65, - 321, 578, 193, 450, 706, 33, 289, 546, 161, 418, 674, 97, 353, - 610, 225, 482, 738, 17, 273, 530, 145, 402, 658, 81, 337, 594, - 209, 466, 722, 49, 305, 562, 177, 434, 690, 113, 369, 626, 241, - 498, 754, 9, 265, 522, 137, 394, 650, 73, 329, 586, 201, 458, - 714, 41, 297, 554, 169, 426, 682, 105, 361, 618, 233, 490, 746, - 25, 281, 538, 153, 410, 666, 89, 345, 602, 217, 474, 730, 57, - 313, 570, 185, 442, 698, 121, 377, 634, 249, 506, 762, 5, 261, - 518, 133, 390, 646, 69, 325, 582, 197, 454, 710, 37, 293, 550, - 165, 422, 678, 101, 357, 614, 229, 486, 742, 21, 277, 534, 149, - 406, 662, 85, 341, 598, 213, 470, 726, 53, 309, 566, 181, 438, - 694, 117, 373, 630, 245, 502, 758, 13, 269, 526, 141, 398, 654, - 77, 333, 590, 205, 462, 718, 45, 301, 558, 173, 430, 686, 109, - 365, 622, 237, 494, 750, 29, 285, 542, 157, 414, 670, 93, 349, - 606, 221, 478, 734, 61, 317, 574, 189, 446, 702, 125, 381, 638, - 253, 510, 766, 3, 259, 516, 131, 388, 644, 67, 323, 580, 195, - 452, 708, 35, 291, 548, 163, 420, 676, 99, 355, 612, 227, 484, - 740, 19, 275, 532, 147, 404, 660, 83, 339, 596, 211, 468, 724, - 51, 307, 564, 179, 436, 692, 115, 371, 628, 243, 500, 756, 11, - 267, 524, 139, 396, 652, 75, 331, 588, 203, 460, 716, 43, 299, - 556, 171, 428, 684, 107, 363, 620, 235, 492, 748, 27, 283, 540, - 155, 412, 668, 91, 347, 604, 219, 476, 732, 59, 315, 572, 187, - 444, 700, 123, 379, 636, 251, 508, 764, 7, 263, 520, 135, 392, - 648, 71, 327, 584, 199, 456, 712, 39, 295, 552, 167, 424, 680, - 103, 359, 616, 231, 488, 744, 23, 279, 536, 151, 408, 664, 87, - 343, 600, 215, 472, 728, 55, 311, 568, 183, 440, 696, 119, 375, - 632, 247, 504, 760, 15, 271, 528, 143, 400, 656, 79, 335, 592, - 207, 464, 720, 47, 303, 560, 175, 432, 688, 111, 367, 624, 239, - 496, 752, 31, 287, 544, 159, 416, 672, 95, 351, 608, 223, 480, - 736, 63, 319, 576, 191, 448, 704, 127, 383, 640, 255, 512, 768]; - - return (unsafe { *PERM769.get_unchecked((index % 769) as usize) } as u32 * 591361 + - unsafe { *PERM769.get_unchecked(((index / 769) % 769) as usize) } as u32 * 769 + - unsafe { - *PERM769.get_unchecked(((index / 591361) % 769) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (454756609u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton773(index: u32) -> f32 { - const PERM773: [u16; 773] = [0, 256, 517, 128, 389, 645, 64, 320, 581, 192, 453, 709, 32, 288, - 549, 160, 421, 677, 96, 352, 613, 224, 485, 741, 16, 272, 533, - 144, 405, 661, 80, 336, 597, 208, 469, 725, 48, 304, 565, 176, - 437, 693, 112, 368, 629, 240, 501, 757, 8, 264, 525, 136, 397, - 653, 72, 328, 589, 200, 461, 717, 40, 296, 557, 168, 429, 685, - 104, 360, 621, 232, 493, 749, 24, 280, 541, 152, 413, 669, 88, - 344, 605, 216, 477, 733, 56, 312, 573, 184, 445, 701, 120, 376, - 637, 248, 509, 765, 384, 4, 260, 521, 132, 393, 649, 68, 324, - 585, 196, 457, 713, 36, 292, 553, 164, 425, 681, 100, 356, 617, - 228, 489, 745, 20, 276, 537, 148, 409, 665, 84, 340, 601, 212, - 473, 729, 52, 308, 569, 180, 441, 697, 116, 372, 633, 244, 505, - 761, 12, 268, 529, 140, 401, 657, 76, 332, 593, 204, 465, 721, - 44, 300, 561, 172, 433, 689, 108, 364, 625, 236, 497, 753, 28, - 284, 545, 156, 417, 673, 92, 348, 609, 220, 481, 737, 60, 316, - 577, 188, 449, 705, 124, 380, 641, 252, 513, 769, 2, 258, 519, - 130, 391, 647, 66, 322, 583, 194, 455, 711, 34, 290, 551, 162, - 423, 679, 98, 354, 615, 226, 487, 743, 18, 274, 535, 146, 407, - 663, 82, 338, 599, 210, 471, 727, 50, 306, 567, 178, 439, 695, - 114, 370, 631, 242, 503, 759, 10, 266, 527, 138, 399, 655, 74, - 330, 591, 202, 463, 719, 42, 298, 559, 170, 431, 687, 106, 362, - 623, 234, 495, 751, 26, 282, 543, 154, 415, 671, 90, 346, 607, - 218, 479, 735, 58, 314, 575, 186, 447, 703, 122, 378, 639, 250, - 511, 767, 387, 6, 262, 523, 134, 395, 651, 70, 326, 587, 198, - 459, 715, 38, 294, 555, 166, 427, 683, 102, 358, 619, 230, 491, - 747, 22, 278, 539, 150, 411, 667, 86, 342, 603, 214, 475, 731, - 54, 310, 571, 182, 443, 699, 118, 374, 635, 246, 507, 763, 14, - 270, 531, 142, 403, 659, 78, 334, 595, 206, 467, 723, 46, 302, - 563, 174, 435, 691, 110, 366, 627, 238, 499, 755, 30, 286, 547, - 158, 419, 675, 94, 350, 611, 222, 483, 739, 62, 318, 579, 190, - 451, 707, 126, 382, 643, 254, 515, 771, 386, 1, 257, 518, 129, - 390, 646, 65, 321, 582, 193, 454, 710, 33, 289, 550, 161, 422, - 678, 97, 353, 614, 225, 486, 742, 17, 273, 534, 145, 406, 662, - 81, 337, 598, 209, 470, 726, 49, 305, 566, 177, 438, 694, 113, - 369, 630, 241, 502, 758, 9, 265, 526, 137, 398, 654, 73, 329, - 590, 201, 462, 718, 41, 297, 558, 169, 430, 686, 105, 361, 622, - 233, 494, 750, 25, 281, 542, 153, 414, 670, 89, 345, 606, 217, - 478, 734, 57, 313, 574, 185, 446, 702, 121, 377, 638, 249, 510, - 766, 385, 5, 261, 522, 133, 394, 650, 69, 325, 586, 197, 458, - 714, 37, 293, 554, 165, 426, 682, 101, 357, 618, 229, 490, 746, - 21, 277, 538, 149, 410, 666, 85, 341, 602, 213, 474, 730, 53, - 309, 570, 181, 442, 698, 117, 373, 634, 245, 506, 762, 13, 269, - 530, 141, 402, 658, 77, 333, 594, 205, 466, 722, 45, 301, 562, - 173, 434, 690, 109, 365, 626, 237, 498, 754, 29, 285, 546, 157, - 418, 674, 93, 349, 610, 221, 482, 738, 61, 317, 578, 189, 450, - 706, 125, 381, 642, 253, 514, 770, 3, 259, 520, 131, 392, 648, - 67, 323, 584, 195, 456, 712, 35, 291, 552, 163, 424, 680, 99, - 355, 616, 227, 488, 744, 19, 275, 536, 147, 408, 664, 83, 339, - 600, 211, 472, 728, 51, 307, 568, 179, 440, 696, 115, 371, 632, - 243, 504, 760, 11, 267, 528, 139, 400, 656, 75, 331, 592, 203, - 464, 720, 43, 299, 560, 171, 432, 688, 107, 363, 624, 235, 496, - 752, 27, 283, 544, 155, 416, 672, 91, 347, 608, 219, 480, 736, - 59, 315, 576, 187, 448, 704, 123, 379, 640, 251, 512, 768, 388, - 7, 263, 524, 135, 396, 652, 71, 327, 588, 199, 460, 716, 39, 295, - 556, 167, 428, 684, 103, 359, 620, 231, 492, 748, 23, 279, 540, - 151, 412, 668, 87, 343, 604, 215, 476, 732, 55, 311, 572, 183, - 444, 700, 119, 375, 636, 247, 508, 764, 15, 271, 532, 143, 404, - 660, 79, 335, 596, 207, 468, 724, 47, 303, 564, 175, 436, 692, - 111, 367, 628, 239, 500, 756, 31, 287, 548, 159, 420, 676, 95, - 351, 612, 223, 484, 740, 63, 319, 580, 191, 452, 708, 127, 383, - 644, 255, 516, 772]; - - return (unsafe { *PERM773.get_unchecked((index % 773) as usize) } as u32 * 597529 + - unsafe { *PERM773.get_unchecked(((index / 773) % 773) as usize) } as u32 * 773 + - unsafe { - *PERM773.get_unchecked(((index / 597529) % 773) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (461889917u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton787(index: u32) -> f32 { - const PERM787: [u16; 787] = [0, 256, 531, 128, 403, 659, 64, 320, 595, 192, 467, 723, 32, 288, - 563, 160, 435, 691, 96, 352, 627, 224, 499, 755, 384, 16, 272, - 547, 144, 419, 675, 80, 336, 611, 208, 483, 739, 48, 304, 579, - 176, 451, 707, 112, 368, 643, 240, 515, 771, 8, 264, 539, 136, - 411, 667, 72, 328, 603, 200, 475, 731, 40, 296, 571, 168, 443, - 699, 104, 360, 635, 232, 507, 763, 395, 24, 280, 555, 152, 427, - 683, 88, 344, 619, 216, 491, 747, 56, 312, 587, 184, 459, 715, - 120, 376, 651, 248, 523, 779, 4, 260, 535, 132, 407, 663, 68, - 324, 599, 196, 471, 727, 36, 292, 567, 164, 439, 695, 100, 356, - 631, 228, 503, 759, 388, 20, 276, 551, 148, 423, 679, 84, 340, - 615, 212, 487, 743, 52, 308, 583, 180, 455, 711, 116, 372, 647, - 244, 519, 775, 12, 268, 543, 140, 415, 671, 76, 332, 607, 204, - 479, 735, 44, 300, 575, 172, 447, 703, 108, 364, 639, 236, 511, - 767, 399, 28, 284, 559, 156, 431, 687, 92, 348, 623, 220, 495, - 751, 60, 316, 591, 188, 463, 719, 124, 380, 655, 252, 527, 783, - 392, 2, 258, 533, 130, 405, 661, 66, 322, 597, 194, 469, 725, 34, - 290, 565, 162, 437, 693, 98, 354, 629, 226, 501, 757, 386, 18, - 274, 549, 146, 421, 677, 82, 338, 613, 210, 485, 741, 50, 306, - 581, 178, 453, 709, 114, 370, 645, 242, 517, 773, 10, 266, 541, - 138, 413, 669, 74, 330, 605, 202, 477, 733, 42, 298, 573, 170, - 445, 701, 106, 362, 637, 234, 509, 765, 397, 26, 282, 557, 154, - 429, 685, 90, 346, 621, 218, 493, 749, 58, 314, 589, 186, 461, - 717, 122, 378, 653, 250, 525, 781, 6, 262, 537, 134, 409, 665, - 70, 326, 601, 198, 473, 729, 38, 294, 569, 166, 441, 697, 102, - 358, 633, 230, 505, 761, 390, 22, 278, 553, 150, 425, 681, 86, - 342, 617, 214, 489, 745, 54, 310, 585, 182, 457, 713, 118, 374, - 649, 246, 521, 777, 14, 270, 545, 142, 417, 673, 78, 334, 609, - 206, 481, 737, 46, 302, 577, 174, 449, 705, 110, 366, 641, 238, - 513, 769, 401, 30, 286, 561, 158, 433, 689, 94, 350, 625, 222, - 497, 753, 62, 318, 593, 190, 465, 721, 126, 382, 657, 254, 529, - 785, 393, 1, 257, 532, 129, 404, 660, 65, 321, 596, 193, 468, - 724, 33, 289, 564, 161, 436, 692, 97, 353, 628, 225, 500, 756, - 385, 17, 273, 548, 145, 420, 676, 81, 337, 612, 209, 484, 740, - 49, 305, 580, 177, 452, 708, 113, 369, 644, 241, 516, 772, 9, - 265, 540, 137, 412, 668, 73, 329, 604, 201, 476, 732, 41, 297, - 572, 169, 444, 700, 105, 361, 636, 233, 508, 764, 396, 25, 281, - 556, 153, 428, 684, 89, 345, 620, 217, 492, 748, 57, 313, 588, - 185, 460, 716, 121, 377, 652, 249, 524, 780, 5, 261, 536, 133, - 408, 664, 69, 325, 600, 197, 472, 728, 37, 293, 568, 165, 440, - 696, 101, 357, 632, 229, 504, 760, 389, 21, 277, 552, 149, 424, - 680, 85, 341, 616, 213, 488, 744, 53, 309, 584, 181, 456, 712, - 117, 373, 648, 245, 520, 776, 13, 269, 544, 141, 416, 672, 77, - 333, 608, 205, 480, 736, 45, 301, 576, 173, 448, 704, 109, 365, - 640, 237, 512, 768, 400, 29, 285, 560, 157, 432, 688, 93, 349, - 624, 221, 496, 752, 61, 317, 592, 189, 464, 720, 125, 381, 656, - 253, 528, 784, 394, 3, 259, 534, 131, 406, 662, 67, 323, 598, - 195, 470, 726, 35, 291, 566, 163, 438, 694, 99, 355, 630, 227, - 502, 758, 387, 19, 275, 550, 147, 422, 678, 83, 339, 614, 211, - 486, 742, 51, 307, 582, 179, 454, 710, 115, 371, 646, 243, 518, - 774, 11, 267, 542, 139, 414, 670, 75, 331, 606, 203, 478, 734, - 43, 299, 574, 171, 446, 702, 107, 363, 638, 235, 510, 766, 398, - 27, 283, 558, 155, 430, 686, 91, 347, 622, 219, 494, 750, 59, - 315, 590, 187, 462, 718, 123, 379, 654, 251, 526, 782, 7, 263, - 538, 135, 410, 666, 71, 327, 602, 199, 474, 730, 39, 295, 570, - 167, 442, 698, 103, 359, 634, 231, 506, 762, 391, 23, 279, 554, - 151, 426, 682, 87, 343, 618, 215, 490, 746, 55, 311, 586, 183, - 458, 714, 119, 375, 650, 247, 522, 778, 15, 271, 546, 143, 418, - 674, 79, 335, 610, 207, 482, 738, 47, 303, 578, 175, 450, 706, - 111, 367, 642, 239, 514, 770, 402, 31, 287, 562, 159, 434, 690, - 95, 351, 626, 223, 498, 754, 63, 319, 594, 191, 466, 722, 127, - 383, 658, 255, 530, 786]; - - return (unsafe { *PERM787.get_unchecked((index % 787) as usize) } as u32 * 619369 + - unsafe { *PERM787.get_unchecked(((index / 787) % 787) as usize) } as u32 * 787 + - unsafe { - *PERM787.get_unchecked(((index / 619369) % 787) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (487443403u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton797(index: u32) -> f32 { - const PERM797: [u16; 797] = [0, 256, 541, 128, 413, 669, 64, 320, 605, 192, 477, 733, 32, 288, - 573, 160, 445, 701, 96, 352, 637, 224, 509, 765, 384, 16, 272, - 557, 144, 429, 685, 80, 336, 621, 208, 493, 749, 48, 304, 589, - 176, 461, 717, 112, 368, 653, 240, 525, 781, 392, 8, 264, 549, - 136, 421, 677, 72, 328, 613, 200, 485, 741, 40, 296, 581, 168, - 453, 709, 104, 360, 645, 232, 517, 773, 405, 24, 280, 565, 152, - 437, 693, 88, 344, 629, 216, 501, 757, 56, 312, 597, 184, 469, - 725, 120, 376, 661, 248, 533, 789, 396, 4, 260, 545, 132, 417, - 673, 68, 324, 609, 196, 481, 737, 36, 292, 577, 164, 449, 705, - 100, 356, 641, 228, 513, 769, 388, 20, 276, 561, 148, 433, 689, - 84, 340, 625, 212, 497, 753, 52, 308, 593, 180, 465, 721, 116, - 372, 657, 244, 529, 785, 401, 12, 268, 553, 140, 425, 681, 76, - 332, 617, 204, 489, 745, 44, 300, 585, 172, 457, 713, 108, 364, - 649, 236, 521, 777, 409, 28, 284, 569, 156, 441, 697, 92, 348, - 633, 220, 505, 761, 60, 316, 601, 188, 473, 729, 124, 380, 665, - 252, 537, 793, 2, 258, 543, 130, 415, 671, 66, 322, 607, 194, - 479, 735, 34, 290, 575, 162, 447, 703, 98, 354, 639, 226, 511, - 767, 386, 18, 274, 559, 146, 431, 687, 82, 338, 623, 210, 495, - 751, 50, 306, 591, 178, 463, 719, 114, 370, 655, 242, 527, 783, - 394, 10, 266, 551, 138, 423, 679, 74, 330, 615, 202, 487, 743, - 42, 298, 583, 170, 455, 711, 106, 362, 647, 234, 519, 775, 407, - 26, 282, 567, 154, 439, 695, 90, 346, 631, 218, 503, 759, 58, - 314, 599, 186, 471, 727, 122, 378, 663, 250, 535, 791, 399, 6, - 262, 547, 134, 419, 675, 70, 326, 611, 198, 483, 739, 38, 294, - 579, 166, 451, 707, 102, 358, 643, 230, 515, 771, 390, 22, 278, - 563, 150, 435, 691, 86, 342, 627, 214, 499, 755, 54, 310, 595, - 182, 467, 723, 118, 374, 659, 246, 531, 787, 403, 14, 270, 555, - 142, 427, 683, 78, 334, 619, 206, 491, 747, 46, 302, 587, 174, - 459, 715, 110, 366, 651, 238, 523, 779, 411, 30, 286, 571, 158, - 443, 699, 94, 350, 635, 222, 507, 763, 62, 318, 603, 190, 475, - 731, 126, 382, 667, 254, 539, 795, 398, 1, 257, 542, 129, 414, - 670, 65, 321, 606, 193, 478, 734, 33, 289, 574, 161, 446, 702, - 97, 353, 638, 225, 510, 766, 385, 17, 273, 558, 145, 430, 686, - 81, 337, 622, 209, 494, 750, 49, 305, 590, 177, 462, 718, 113, - 369, 654, 241, 526, 782, 393, 9, 265, 550, 137, 422, 678, 73, - 329, 614, 201, 486, 742, 41, 297, 582, 169, 454, 710, 105, 361, - 646, 233, 518, 774, 406, 25, 281, 566, 153, 438, 694, 89, 345, - 630, 217, 502, 758, 57, 313, 598, 185, 470, 726, 121, 377, 662, - 249, 534, 790, 397, 5, 261, 546, 133, 418, 674, 69, 325, 610, - 197, 482, 738, 37, 293, 578, 165, 450, 706, 101, 357, 642, 229, - 514, 770, 389, 21, 277, 562, 149, 434, 690, 85, 341, 626, 213, - 498, 754, 53, 309, 594, 181, 466, 722, 117, 373, 658, 245, 530, - 786, 402, 13, 269, 554, 141, 426, 682, 77, 333, 618, 205, 490, - 746, 45, 301, 586, 173, 458, 714, 109, 365, 650, 237, 522, 778, - 410, 29, 285, 570, 157, 442, 698, 93, 349, 634, 221, 506, 762, - 61, 317, 602, 189, 474, 730, 125, 381, 666, 253, 538, 794, 3, - 259, 544, 131, 416, 672, 67, 323, 608, 195, 480, 736, 35, 291, - 576, 163, 448, 704, 99, 355, 640, 227, 512, 768, 387, 19, 275, - 560, 147, 432, 688, 83, 339, 624, 211, 496, 752, 51, 307, 592, - 179, 464, 720, 115, 371, 656, 243, 528, 784, 395, 11, 267, 552, - 139, 424, 680, 75, 331, 616, 203, 488, 744, 43, 299, 584, 171, - 456, 712, 107, 363, 648, 235, 520, 776, 408, 27, 283, 568, 155, - 440, 696, 91, 347, 632, 219, 504, 760, 59, 315, 600, 187, 472, - 728, 123, 379, 664, 251, 536, 792, 400, 7, 263, 548, 135, 420, - 676, 71, 327, 612, 199, 484, 740, 39, 295, 580, 167, 452, 708, - 103, 359, 644, 231, 516, 772, 391, 23, 279, 564, 151, 436, 692, - 87, 343, 628, 215, 500, 756, 55, 311, 596, 183, 468, 724, 119, - 375, 660, 247, 532, 788, 404, 15, 271, 556, 143, 428, 684, 79, - 335, 620, 207, 492, 748, 47, 303, 588, 175, 460, 716, 111, 367, - 652, 239, 524, 780, 412, 31, 287, 572, 159, 444, 700, 95, 351, - 636, 223, 508, 764, 63, 319, 604, 191, 476, 732, 127, 383, 668, - 255, 540, 796]; - - return (unsafe { *PERM797.get_unchecked((index % 797) as usize) } as u32 * 635209 + - unsafe { *PERM797.get_unchecked(((index / 797) % 797) as usize) } as u32 * 797 + - unsafe { - *PERM797.get_unchecked(((index / 635209) % 797) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (506261573u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton809(index: u32) -> f32 { - const PERM809: [u16; 809] = [0, 256, 553, 128, 425, 681, 64, 320, 617, 192, 489, 745, 384, 32, - 288, 585, 160, 457, 713, 96, 352, 649, 224, 521, 777, 16, 272, - 569, 144, 441, 697, 80, 336, 633, 208, 505, 761, 409, 48, 304, - 601, 176, 473, 729, 112, 368, 665, 240, 537, 793, 400, 8, 264, - 561, 136, 433, 689, 72, 328, 625, 200, 497, 753, 392, 40, 296, - 593, 168, 465, 721, 104, 360, 657, 232, 529, 785, 24, 280, 577, - 152, 449, 705, 88, 344, 641, 216, 513, 769, 417, 56, 312, 609, - 184, 481, 737, 120, 376, 673, 248, 545, 801, 4, 260, 557, 132, - 429, 685, 68, 324, 621, 196, 493, 749, 388, 36, 292, 589, 164, - 461, 717, 100, 356, 653, 228, 525, 781, 20, 276, 573, 148, 445, - 701, 84, 340, 637, 212, 509, 765, 413, 52, 308, 605, 180, 477, - 733, 116, 372, 669, 244, 541, 797, 405, 12, 268, 565, 140, 437, - 693, 76, 332, 629, 204, 501, 757, 396, 44, 300, 597, 172, 469, - 725, 108, 364, 661, 236, 533, 789, 28, 284, 581, 156, 453, 709, - 92, 348, 645, 220, 517, 773, 421, 60, 316, 613, 188, 485, 741, - 124, 380, 677, 252, 549, 805, 2, 258, 555, 130, 427, 683, 66, - 322, 619, 194, 491, 747, 386, 34, 290, 587, 162, 459, 715, 98, - 354, 651, 226, 523, 779, 18, 274, 571, 146, 443, 699, 82, 338, - 635, 210, 507, 763, 411, 50, 306, 603, 178, 475, 731, 114, 370, - 667, 242, 539, 795, 402, 10, 266, 563, 138, 435, 691, 74, 330, - 627, 202, 499, 755, 394, 42, 298, 595, 170, 467, 723, 106, 362, - 659, 234, 531, 787, 26, 282, 579, 154, 451, 707, 90, 346, 643, - 218, 515, 771, 419, 58, 314, 611, 186, 483, 739, 122, 378, 675, - 250, 547, 803, 6, 262, 559, 134, 431, 687, 70, 326, 623, 198, - 495, 751, 390, 38, 294, 591, 166, 463, 719, 102, 358, 655, 230, - 527, 783, 22, 278, 575, 150, 447, 703, 86, 342, 639, 214, 511, - 767, 415, 54, 310, 607, 182, 479, 735, 118, 374, 671, 246, 543, - 799, 407, 14, 270, 567, 142, 439, 695, 78, 334, 631, 206, 503, - 759, 398, 46, 302, 599, 174, 471, 727, 110, 366, 663, 238, 535, - 791, 30, 286, 583, 158, 455, 711, 94, 350, 647, 222, 519, 775, - 423, 62, 318, 615, 190, 487, 743, 126, 382, 679, 254, 551, 807, - 404, 1, 257, 554, 129, 426, 682, 65, 321, 618, 193, 490, 746, - 385, 33, 289, 586, 161, 458, 714, 97, 353, 650, 225, 522, 778, - 17, 273, 570, 145, 442, 698, 81, 337, 634, 209, 506, 762, 410, - 49, 305, 602, 177, 474, 730, 113, 369, 666, 241, 538, 794, 401, - 9, 265, 562, 137, 434, 690, 73, 329, 626, 201, 498, 754, 393, 41, - 297, 594, 169, 466, 722, 105, 361, 658, 233, 530, 786, 25, 281, - 578, 153, 450, 706, 89, 345, 642, 217, 514, 770, 418, 57, 313, - 610, 185, 482, 738, 121, 377, 674, 249, 546, 802, 5, 261, 558, - 133, 430, 686, 69, 325, 622, 197, 494, 750, 389, 37, 293, 590, - 165, 462, 718, 101, 357, 654, 229, 526, 782, 21, 277, 574, 149, - 446, 702, 85, 341, 638, 213, 510, 766, 414, 53, 309, 606, 181, - 478, 734, 117, 373, 670, 245, 542, 798, 406, 13, 269, 566, 141, - 438, 694, 77, 333, 630, 205, 502, 758, 397, 45, 301, 598, 173, - 470, 726, 109, 365, 662, 237, 534, 790, 29, 285, 582, 157, 454, - 710, 93, 349, 646, 221, 518, 774, 422, 61, 317, 614, 189, 486, - 742, 125, 381, 678, 253, 550, 806, 3, 259, 556, 131, 428, 684, - 67, 323, 620, 195, 492, 748, 387, 35, 291, 588, 163, 460, 716, - 99, 355, 652, 227, 524, 780, 19, 275, 572, 147, 444, 700, 83, - 339, 636, 211, 508, 764, 412, 51, 307, 604, 179, 476, 732, 115, - 371, 668, 243, 540, 796, 403, 11, 267, 564, 139, 436, 692, 75, - 331, 628, 203, 500, 756, 395, 43, 299, 596, 171, 468, 724, 107, - 363, 660, 235, 532, 788, 27, 283, 580, 155, 452, 708, 91, 347, - 644, 219, 516, 772, 420, 59, 315, 612, 187, 484, 740, 123, 379, - 676, 251, 548, 804, 7, 263, 560, 135, 432, 688, 71, 327, 624, - 199, 496, 752, 391, 39, 295, 592, 167, 464, 720, 103, 359, 656, - 231, 528, 784, 23, 279, 576, 151, 448, 704, 87, 343, 640, 215, - 512, 768, 416, 55, 311, 608, 183, 480, 736, 119, 375, 672, 247, - 544, 800, 408, 15, 271, 568, 143, 440, 696, 79, 335, 632, 207, - 504, 760, 399, 47, 303, 600, 175, 472, 728, 111, 367, 664, 239, - 536, 792, 31, 287, 584, 159, 456, 712, 95, 351, 648, 223, 520, - 776, 424, 63, 319, 616, 191, 488, 744, 127, 383, 680, 255, 552, - 808]; - - return (unsafe { *PERM809.get_unchecked((index % 809) as usize) } as u32 * 654481 + - unsafe { *PERM809.get_unchecked(((index / 809) % 809) as usize) } as u32 * 809 + - unsafe { - *PERM809.get_unchecked(((index / 654481) % 809) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (529475129u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton811(index: u32) -> f32 { - const PERM811: [u16; 811] = [0, 256, 555, 128, 427, 683, 64, 320, 619, 192, 491, 747, 384, 32, - 288, 587, 160, 459, 715, 96, 352, 651, 224, 523, 779, 16, 272, - 571, 144, 443, 699, 80, 336, 635, 208, 507, 763, 411, 48, 304, - 603, 176, 475, 731, 112, 368, 667, 240, 539, 795, 400, 8, 264, - 563, 136, 435, 691, 72, 328, 627, 200, 499, 755, 392, 40, 296, - 595, 168, 467, 723, 104, 360, 659, 232, 531, 787, 24, 280, 579, - 152, 451, 707, 88, 344, 643, 216, 515, 771, 419, 56, 312, 611, - 184, 483, 739, 120, 376, 675, 248, 547, 803, 4, 260, 559, 132, - 431, 687, 68, 324, 623, 196, 495, 751, 388, 36, 292, 591, 164, - 463, 719, 100, 356, 655, 228, 527, 783, 20, 276, 575, 148, 447, - 703, 84, 340, 639, 212, 511, 767, 415, 52, 308, 607, 180, 479, - 735, 116, 372, 671, 244, 543, 799, 407, 12, 268, 567, 140, 439, - 695, 76, 332, 631, 204, 503, 759, 396, 44, 300, 599, 172, 471, - 727, 108, 364, 663, 236, 535, 791, 28, 284, 583, 156, 455, 711, - 92, 348, 647, 220, 519, 775, 423, 60, 316, 615, 188, 487, 743, - 124, 380, 679, 252, 551, 807, 404, 2, 258, 557, 130, 429, 685, - 66, 322, 621, 194, 493, 749, 386, 34, 290, 589, 162, 461, 717, - 98, 354, 653, 226, 525, 781, 18, 274, 573, 146, 445, 701, 82, - 338, 637, 210, 509, 765, 413, 50, 306, 605, 178, 477, 733, 114, - 370, 669, 242, 541, 797, 402, 10, 266, 565, 138, 437, 693, 74, - 330, 629, 202, 501, 757, 394, 42, 298, 597, 170, 469, 725, 106, - 362, 661, 234, 533, 789, 26, 282, 581, 154, 453, 709, 90, 346, - 645, 218, 517, 773, 421, 58, 314, 613, 186, 485, 741, 122, 378, - 677, 250, 549, 805, 6, 262, 561, 134, 433, 689, 70, 326, 625, - 198, 497, 753, 390, 38, 294, 593, 166, 465, 721, 102, 358, 657, - 230, 529, 785, 22, 278, 577, 150, 449, 705, 86, 342, 641, 214, - 513, 769, 417, 54, 310, 609, 182, 481, 737, 118, 374, 673, 246, - 545, 801, 409, 14, 270, 569, 142, 441, 697, 78, 334, 633, 206, - 505, 761, 398, 46, 302, 601, 174, 473, 729, 110, 366, 665, 238, - 537, 793, 30, 286, 585, 158, 457, 713, 94, 350, 649, 222, 521, - 777, 425, 62, 318, 617, 190, 489, 745, 126, 382, 681, 254, 553, - 809, 405, 1, 257, 556, 129, 428, 684, 65, 321, 620, 193, 492, - 748, 385, 33, 289, 588, 161, 460, 716, 97, 353, 652, 225, 524, - 780, 17, 273, 572, 145, 444, 700, 81, 337, 636, 209, 508, 764, - 412, 49, 305, 604, 177, 476, 732, 113, 369, 668, 241, 540, 796, - 401, 9, 265, 564, 137, 436, 692, 73, 329, 628, 201, 500, 756, - 393, 41, 297, 596, 169, 468, 724, 105, 361, 660, 233, 532, 788, - 25, 281, 580, 153, 452, 708, 89, 345, 644, 217, 516, 772, 420, - 57, 313, 612, 185, 484, 740, 121, 377, 676, 249, 548, 804, 5, - 261, 560, 133, 432, 688, 69, 325, 624, 197, 496, 752, 389, 37, - 293, 592, 165, 464, 720, 101, 357, 656, 229, 528, 784, 21, 277, - 576, 149, 448, 704, 85, 341, 640, 213, 512, 768, 416, 53, 309, - 608, 181, 480, 736, 117, 373, 672, 245, 544, 800, 408, 13, 269, - 568, 141, 440, 696, 77, 333, 632, 205, 504, 760, 397, 45, 301, - 600, 173, 472, 728, 109, 365, 664, 237, 536, 792, 29, 285, 584, - 157, 456, 712, 93, 349, 648, 221, 520, 776, 424, 61, 317, 616, - 189, 488, 744, 125, 381, 680, 253, 552, 808, 406, 3, 259, 558, - 131, 430, 686, 67, 323, 622, 195, 494, 750, 387, 35, 291, 590, - 163, 462, 718, 99, 355, 654, 227, 526, 782, 19, 275, 574, 147, - 446, 702, 83, 339, 638, 211, 510, 766, 414, 51, 307, 606, 179, - 478, 734, 115, 371, 670, 243, 542, 798, 403, 11, 267, 566, 139, - 438, 694, 75, 331, 630, 203, 502, 758, 395, 43, 299, 598, 171, - 470, 726, 107, 363, 662, 235, 534, 790, 27, 283, 582, 155, 454, - 710, 91, 347, 646, 219, 518, 774, 422, 59, 315, 614, 187, 486, - 742, 123, 379, 678, 251, 550, 806, 7, 263, 562, 135, 434, 690, - 71, 327, 626, 199, 498, 754, 391, 39, 295, 594, 167, 466, 722, - 103, 359, 658, 231, 530, 786, 23, 279, 578, 151, 450, 706, 87, - 343, 642, 215, 514, 770, 418, 55, 311, 610, 183, 482, 738, 119, - 375, 674, 247, 546, 802, 410, 15, 271, 570, 143, 442, 698, 79, - 335, 634, 207, 506, 762, 399, 47, 303, 602, 175, 474, 730, 111, - 367, 666, 239, 538, 794, 31, 287, 586, 159, 458, 714, 95, 351, - 650, 223, 522, 778, 426, 63, 319, 618, 191, 490, 746, 127, 383, - 682, 255, 554, 810]; - - return (unsafe { *PERM811.get_unchecked((index % 811) as usize) } as u32 * 657721 + - unsafe { *PERM811.get_unchecked(((index / 811) % 811) as usize) } as u32 * 811 + - unsafe { - *PERM811.get_unchecked(((index / 657721) % 811) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (533411731u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton821(index: u32) -> f32 { - const PERM821: [u16; 821] = [0, 256, 565, 128, 437, 693, 64, 320, 629, 192, 501, 757, 384, 32, - 288, 597, 160, 469, 725, 96, 352, 661, 224, 533, 789, 400, 16, - 272, 581, 144, 453, 709, 80, 336, 645, 208, 517, 773, 421, 48, - 304, 613, 176, 485, 741, 112, 368, 677, 240, 549, 805, 8, 264, - 573, 136, 445, 701, 72, 328, 637, 200, 509, 765, 392, 40, 296, - 605, 168, 477, 733, 104, 360, 669, 232, 541, 797, 413, 24, 280, - 589, 152, 461, 717, 88, 344, 653, 216, 525, 781, 429, 56, 312, - 621, 184, 493, 749, 120, 376, 685, 248, 557, 813, 408, 4, 260, - 569, 132, 441, 697, 68, 324, 633, 196, 505, 761, 388, 36, 292, - 601, 164, 473, 729, 100, 356, 665, 228, 537, 793, 404, 20, 276, - 585, 148, 457, 713, 84, 340, 649, 212, 521, 777, 425, 52, 308, - 617, 180, 489, 745, 116, 372, 681, 244, 553, 809, 12, 268, 577, - 140, 449, 705, 76, 332, 641, 204, 513, 769, 396, 44, 300, 609, - 172, 481, 737, 108, 364, 673, 236, 545, 801, 417, 28, 284, 593, - 156, 465, 721, 92, 348, 657, 220, 529, 785, 433, 60, 316, 625, - 188, 497, 753, 124, 380, 689, 252, 561, 817, 2, 258, 567, 130, - 439, 695, 66, 322, 631, 194, 503, 759, 386, 34, 290, 599, 162, - 471, 727, 98, 354, 663, 226, 535, 791, 402, 18, 274, 583, 146, - 455, 711, 82, 338, 647, 210, 519, 775, 423, 50, 306, 615, 178, - 487, 743, 114, 370, 679, 242, 551, 807, 10, 266, 575, 138, 447, - 703, 74, 330, 639, 202, 511, 767, 394, 42, 298, 607, 170, 479, - 735, 106, 362, 671, 234, 543, 799, 415, 26, 282, 591, 154, 463, - 719, 90, 346, 655, 218, 527, 783, 431, 58, 314, 623, 186, 495, - 751, 122, 378, 687, 250, 559, 815, 411, 6, 262, 571, 134, 443, - 699, 70, 326, 635, 198, 507, 763, 390, 38, 294, 603, 166, 475, - 731, 102, 358, 667, 230, 539, 795, 406, 22, 278, 587, 150, 459, - 715, 86, 342, 651, 214, 523, 779, 427, 54, 310, 619, 182, 491, - 747, 118, 374, 683, 246, 555, 811, 14, 270, 579, 142, 451, 707, - 78, 334, 643, 206, 515, 771, 398, 46, 302, 611, 174, 483, 739, - 110, 366, 675, 238, 547, 803, 419, 30, 286, 595, 158, 467, 723, - 94, 350, 659, 222, 531, 787, 435, 62, 318, 627, 190, 499, 755, - 126, 382, 691, 254, 563, 819, 410, 1, 257, 566, 129, 438, 694, - 65, 321, 630, 193, 502, 758, 385, 33, 289, 598, 161, 470, 726, - 97, 353, 662, 225, 534, 790, 401, 17, 273, 582, 145, 454, 710, - 81, 337, 646, 209, 518, 774, 422, 49, 305, 614, 177, 486, 742, - 113, 369, 678, 241, 550, 806, 9, 265, 574, 137, 446, 702, 73, - 329, 638, 201, 510, 766, 393, 41, 297, 606, 169, 478, 734, 105, - 361, 670, 233, 542, 798, 414, 25, 281, 590, 153, 462, 718, 89, - 345, 654, 217, 526, 782, 430, 57, 313, 622, 185, 494, 750, 121, - 377, 686, 249, 558, 814, 409, 5, 261, 570, 133, 442, 698, 69, - 325, 634, 197, 506, 762, 389, 37, 293, 602, 165, 474, 730, 101, - 357, 666, 229, 538, 794, 405, 21, 277, 586, 149, 458, 714, 85, - 341, 650, 213, 522, 778, 426, 53, 309, 618, 181, 490, 746, 117, - 373, 682, 245, 554, 810, 13, 269, 578, 141, 450, 706, 77, 333, - 642, 205, 514, 770, 397, 45, 301, 610, 173, 482, 738, 109, 365, - 674, 237, 546, 802, 418, 29, 285, 594, 157, 466, 722, 93, 349, - 658, 221, 530, 786, 434, 61, 317, 626, 189, 498, 754, 125, 381, - 690, 253, 562, 818, 3, 259, 568, 131, 440, 696, 67, 323, 632, - 195, 504, 760, 387, 35, 291, 600, 163, 472, 728, 99, 355, 664, - 227, 536, 792, 403, 19, 275, 584, 147, 456, 712, 83, 339, 648, - 211, 520, 776, 424, 51, 307, 616, 179, 488, 744, 115, 371, 680, - 243, 552, 808, 11, 267, 576, 139, 448, 704, 75, 331, 640, 203, - 512, 768, 395, 43, 299, 608, 171, 480, 736, 107, 363, 672, 235, - 544, 800, 416, 27, 283, 592, 155, 464, 720, 91, 347, 656, 219, - 528, 784, 432, 59, 315, 624, 187, 496, 752, 123, 379, 688, 251, - 560, 816, 412, 7, 263, 572, 135, 444, 700, 71, 327, 636, 199, - 508, 764, 391, 39, 295, 604, 167, 476, 732, 103, 359, 668, 231, - 540, 796, 407, 23, 279, 588, 151, 460, 716, 87, 343, 652, 215, - 524, 780, 428, 55, 311, 620, 183, 492, 748, 119, 375, 684, 247, - 556, 812, 15, 271, 580, 143, 452, 708, 79, 335, 644, 207, 516, - 772, 399, 47, 303, 612, 175, 484, 740, 111, 367, 676, 239, 548, - 804, 420, 31, 287, 596, 159, 468, 724, 95, 351, 660, 223, 532, - 788, 436, 63, 319, 628, 191, 500, 756, 127, 383, 692, 255, 564, - 820]; - - return (unsafe { *PERM821.get_unchecked((index % 821) as usize) } as u32 * 674041 + - unsafe { *PERM821.get_unchecked(((index / 821) % 821) as usize) } as u32 * 821 + - unsafe { - *PERM821.get_unchecked(((index / 674041) % 821) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (553387661u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton823(index: u32) -> f32 { - const PERM823: [u16; 823] = [0, 256, 567, 128, 439, 695, 64, 320, 631, 192, 503, 759, 384, 32, - 288, 599, 160, 471, 727, 96, 352, 663, 224, 535, 791, 400, 16, - 272, 583, 144, 455, 711, 80, 336, 647, 208, 519, 775, 423, 48, - 304, 615, 176, 487, 743, 112, 368, 679, 240, 551, 807, 8, 264, - 575, 136, 447, 703, 72, 328, 639, 200, 511, 767, 392, 40, 296, - 607, 168, 479, 735, 104, 360, 671, 232, 543, 799, 415, 24, 280, - 591, 152, 463, 719, 88, 344, 655, 216, 527, 783, 431, 56, 312, - 623, 184, 495, 751, 120, 376, 687, 248, 559, 815, 408, 4, 260, - 571, 132, 443, 699, 68, 324, 635, 196, 507, 763, 388, 36, 292, - 603, 164, 475, 731, 100, 356, 667, 228, 539, 795, 404, 20, 276, - 587, 148, 459, 715, 84, 340, 651, 212, 523, 779, 427, 52, 308, - 619, 180, 491, 747, 116, 372, 683, 244, 555, 811, 12, 268, 579, - 140, 451, 707, 76, 332, 643, 204, 515, 771, 396, 44, 300, 611, - 172, 483, 739, 108, 364, 675, 236, 547, 803, 419, 28, 284, 595, - 156, 467, 723, 92, 348, 659, 220, 531, 787, 435, 60, 316, 627, - 188, 499, 755, 124, 380, 691, 252, 563, 819, 410, 2, 258, 569, - 130, 441, 697, 66, 322, 633, 194, 505, 761, 386, 34, 290, 601, - 162, 473, 729, 98, 354, 665, 226, 537, 793, 402, 18, 274, 585, - 146, 457, 713, 82, 338, 649, 210, 521, 777, 425, 50, 306, 617, - 178, 489, 745, 114, 370, 681, 242, 553, 809, 10, 266, 577, 138, - 449, 705, 74, 330, 641, 202, 513, 769, 394, 42, 298, 609, 170, - 481, 737, 106, 362, 673, 234, 545, 801, 417, 26, 282, 593, 154, - 465, 721, 90, 346, 657, 218, 529, 785, 433, 58, 314, 625, 186, - 497, 753, 122, 378, 689, 250, 561, 817, 413, 6, 262, 573, 134, - 445, 701, 70, 326, 637, 198, 509, 765, 390, 38, 294, 605, 166, - 477, 733, 102, 358, 669, 230, 541, 797, 406, 22, 278, 589, 150, - 461, 717, 86, 342, 653, 214, 525, 781, 429, 54, 310, 621, 182, - 493, 749, 118, 374, 685, 246, 557, 813, 14, 270, 581, 142, 453, - 709, 78, 334, 645, 206, 517, 773, 398, 46, 302, 613, 174, 485, - 741, 110, 366, 677, 238, 549, 805, 421, 30, 286, 597, 158, 469, - 725, 94, 350, 661, 222, 533, 789, 437, 62, 318, 629, 190, 501, - 757, 126, 382, 693, 254, 565, 821, 411, 1, 257, 568, 129, 440, - 696, 65, 321, 632, 193, 504, 760, 385, 33, 289, 600, 161, 472, - 728, 97, 353, 664, 225, 536, 792, 401, 17, 273, 584, 145, 456, - 712, 81, 337, 648, 209, 520, 776, 424, 49, 305, 616, 177, 488, - 744, 113, 369, 680, 241, 552, 808, 9, 265, 576, 137, 448, 704, - 73, 329, 640, 201, 512, 768, 393, 41, 297, 608, 169, 480, 736, - 105, 361, 672, 233, 544, 800, 416, 25, 281, 592, 153, 464, 720, - 89, 345, 656, 217, 528, 784, 432, 57, 313, 624, 185, 496, 752, - 121, 377, 688, 249, 560, 816, 409, 5, 261, 572, 133, 444, 700, - 69, 325, 636, 197, 508, 764, 389, 37, 293, 604, 165, 476, 732, - 101, 357, 668, 229, 540, 796, 405, 21, 277, 588, 149, 460, 716, - 85, 341, 652, 213, 524, 780, 428, 53, 309, 620, 181, 492, 748, - 117, 373, 684, 245, 556, 812, 13, 269, 580, 141, 452, 708, 77, - 333, 644, 205, 516, 772, 397, 45, 301, 612, 173, 484, 740, 109, - 365, 676, 237, 548, 804, 420, 29, 285, 596, 157, 468, 724, 93, - 349, 660, 221, 532, 788, 436, 61, 317, 628, 189, 500, 756, 125, - 381, 692, 253, 564, 820, 412, 3, 259, 570, 131, 442, 698, 67, - 323, 634, 195, 506, 762, 387, 35, 291, 602, 163, 474, 730, 99, - 355, 666, 227, 538, 794, 403, 19, 275, 586, 147, 458, 714, 83, - 339, 650, 211, 522, 778, 426, 51, 307, 618, 179, 490, 746, 115, - 371, 682, 243, 554, 810, 11, 267, 578, 139, 450, 706, 75, 331, - 642, 203, 514, 770, 395, 43, 299, 610, 171, 482, 738, 107, 363, - 674, 235, 546, 802, 418, 27, 283, 594, 155, 466, 722, 91, 347, - 658, 219, 530, 786, 434, 59, 315, 626, 187, 498, 754, 123, 379, - 690, 251, 562, 818, 414, 7, 263, 574, 135, 446, 702, 71, 327, - 638, 199, 510, 766, 391, 39, 295, 606, 167, 478, 734, 103, 359, - 670, 231, 542, 798, 407, 23, 279, 590, 151, 462, 718, 87, 343, - 654, 215, 526, 782, 430, 55, 311, 622, 183, 494, 750, 119, 375, - 686, 247, 558, 814, 15, 271, 582, 143, 454, 710, 79, 335, 646, - 207, 518, 774, 399, 47, 303, 614, 175, 486, 742, 111, 367, 678, - 239, 550, 806, 422, 31, 287, 598, 159, 470, 726, 95, 351, 662, - 223, 534, 790, 438, 63, 319, 630, 191, 502, 758, 127, 383, 694, - 255, 566, 822]; - - return (unsafe { *PERM823.get_unchecked((index % 823) as usize) } as u32 * 677329 + - unsafe { *PERM823.get_unchecked(((index / 823) % 823) as usize) } as u32 * 823 + - unsafe { - *PERM823.get_unchecked(((index / 677329) % 823) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (557441767u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton827(index: u32) -> f32 { - const PERM827: [u16; 827] = [0, 256, 571, 128, 443, 699, 64, 320, 635, 192, 507, 763, 384, 32, - 288, 603, 160, 475, 731, 96, 352, 667, 224, 539, 795, 400, 16, - 272, 587, 144, 459, 715, 80, 336, 651, 208, 523, 779, 427, 48, - 304, 619, 176, 491, 747, 112, 368, 683, 240, 555, 811, 408, 8, - 264, 579, 136, 451, 707, 72, 328, 643, 200, 515, 771, 392, 40, - 296, 611, 168, 483, 739, 104, 360, 675, 232, 547, 803, 419, 24, - 280, 595, 152, 467, 723, 88, 344, 659, 216, 531, 787, 435, 56, - 312, 627, 184, 499, 755, 120, 376, 691, 248, 563, 819, 4, 260, - 575, 132, 447, 703, 68, 324, 639, 196, 511, 767, 388, 36, 292, - 607, 164, 479, 735, 100, 356, 671, 228, 543, 799, 404, 20, 276, - 591, 148, 463, 719, 84, 340, 655, 212, 527, 783, 431, 52, 308, - 623, 180, 495, 751, 116, 372, 687, 244, 559, 815, 415, 12, 268, - 583, 140, 455, 711, 76, 332, 647, 204, 519, 775, 396, 44, 300, - 615, 172, 487, 743, 108, 364, 679, 236, 551, 807, 423, 28, 284, - 599, 156, 471, 727, 92, 348, 663, 220, 535, 791, 439, 60, 316, - 631, 188, 503, 759, 124, 380, 695, 252, 567, 823, 412, 2, 258, - 573, 130, 445, 701, 66, 322, 637, 194, 509, 765, 386, 34, 290, - 605, 162, 477, 733, 98, 354, 669, 226, 541, 797, 402, 18, 274, - 589, 146, 461, 717, 82, 338, 653, 210, 525, 781, 429, 50, 306, - 621, 178, 493, 749, 114, 370, 685, 242, 557, 813, 410, 10, 266, - 581, 138, 453, 709, 74, 330, 645, 202, 517, 773, 394, 42, 298, - 613, 170, 485, 741, 106, 362, 677, 234, 549, 805, 421, 26, 282, - 597, 154, 469, 725, 90, 346, 661, 218, 533, 789, 437, 58, 314, - 629, 186, 501, 757, 122, 378, 693, 250, 565, 821, 6, 262, 577, - 134, 449, 705, 70, 326, 641, 198, 513, 769, 390, 38, 294, 609, - 166, 481, 737, 102, 358, 673, 230, 545, 801, 406, 22, 278, 593, - 150, 465, 721, 86, 342, 657, 214, 529, 785, 433, 54, 310, 625, - 182, 497, 753, 118, 374, 689, 246, 561, 817, 417, 14, 270, 585, - 142, 457, 713, 78, 334, 649, 206, 521, 777, 398, 46, 302, 617, - 174, 489, 745, 110, 366, 681, 238, 553, 809, 425, 30, 286, 601, - 158, 473, 729, 94, 350, 665, 222, 537, 793, 441, 62, 318, 633, - 190, 505, 761, 126, 382, 697, 254, 569, 825, 413, 1, 257, 572, - 129, 444, 700, 65, 321, 636, 193, 508, 764, 385, 33, 289, 604, - 161, 476, 732, 97, 353, 668, 225, 540, 796, 401, 17, 273, 588, - 145, 460, 716, 81, 337, 652, 209, 524, 780, 428, 49, 305, 620, - 177, 492, 748, 113, 369, 684, 241, 556, 812, 409, 9, 265, 580, - 137, 452, 708, 73, 329, 644, 201, 516, 772, 393, 41, 297, 612, - 169, 484, 740, 105, 361, 676, 233, 548, 804, 420, 25, 281, 596, - 153, 468, 724, 89, 345, 660, 217, 532, 788, 436, 57, 313, 628, - 185, 500, 756, 121, 377, 692, 249, 564, 820, 5, 261, 576, 133, - 448, 704, 69, 325, 640, 197, 512, 768, 389, 37, 293, 608, 165, - 480, 736, 101, 357, 672, 229, 544, 800, 405, 21, 277, 592, 149, - 464, 720, 85, 341, 656, 213, 528, 784, 432, 53, 309, 624, 181, - 496, 752, 117, 373, 688, 245, 560, 816, 416, 13, 269, 584, 141, - 456, 712, 77, 333, 648, 205, 520, 776, 397, 45, 301, 616, 173, - 488, 744, 109, 365, 680, 237, 552, 808, 424, 29, 285, 600, 157, - 472, 728, 93, 349, 664, 221, 536, 792, 440, 61, 317, 632, 189, - 504, 760, 125, 381, 696, 253, 568, 824, 414, 3, 259, 574, 131, - 446, 702, 67, 323, 638, 195, 510, 766, 387, 35, 291, 606, 163, - 478, 734, 99, 355, 670, 227, 542, 798, 403, 19, 275, 590, 147, - 462, 718, 83, 339, 654, 211, 526, 782, 430, 51, 307, 622, 179, - 494, 750, 115, 371, 686, 243, 558, 814, 411, 11, 267, 582, 139, - 454, 710, 75, 331, 646, 203, 518, 774, 395, 43, 299, 614, 171, - 486, 742, 107, 363, 678, 235, 550, 806, 422, 27, 283, 598, 155, - 470, 726, 91, 347, 662, 219, 534, 790, 438, 59, 315, 630, 187, - 502, 758, 123, 379, 694, 251, 566, 822, 7, 263, 578, 135, 450, - 706, 71, 327, 642, 199, 514, 770, 391, 39, 295, 610, 167, 482, - 738, 103, 359, 674, 231, 546, 802, 407, 23, 279, 594, 151, 466, - 722, 87, 343, 658, 215, 530, 786, 434, 55, 311, 626, 183, 498, - 754, 119, 375, 690, 247, 562, 818, 418, 15, 271, 586, 143, 458, - 714, 79, 335, 650, 207, 522, 778, 399, 47, 303, 618, 175, 490, - 746, 111, 367, 682, 239, 554, 810, 426, 31, 287, 602, 159, 474, - 730, 95, 351, 666, 223, 538, 794, 442, 63, 319, 634, 191, 506, - 762, 127, 383, 698, 255, 570, 826]; - - return (unsafe { *PERM827.get_unchecked((index % 827) as usize) } as u32 * 683929 + - unsafe { *PERM827.get_unchecked(((index / 827) % 827) as usize) } as u32 * 827 + - unsafe { - *PERM827.get_unchecked(((index / 683929) % 827) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (565609283u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton829(index: u32) -> f32 { - const PERM829: [u16; 829] = [0, 256, 573, 128, 445, 701, 64, 320, 637, 192, 509, 765, 384, 32, - 288, 605, 160, 477, 733, 96, 352, 669, 224, 541, 797, 400, 16, - 272, 589, 144, 461, 717, 80, 336, 653, 208, 525, 781, 429, 48, - 304, 621, 176, 493, 749, 112, 368, 685, 240, 557, 813, 408, 8, - 264, 581, 136, 453, 709, 72, 328, 645, 200, 517, 773, 392, 40, - 296, 613, 168, 485, 741, 104, 360, 677, 232, 549, 805, 421, 24, - 280, 597, 152, 469, 725, 88, 344, 661, 216, 533, 789, 437, 56, - 312, 629, 184, 501, 757, 120, 376, 693, 248, 565, 821, 412, 4, - 260, 577, 132, 449, 705, 68, 324, 641, 196, 513, 769, 388, 36, - 292, 609, 164, 481, 737, 100, 356, 673, 228, 545, 801, 404, 20, - 276, 593, 148, 465, 721, 84, 340, 657, 212, 529, 785, 433, 52, - 308, 625, 180, 497, 753, 116, 372, 689, 244, 561, 817, 417, 12, - 268, 585, 140, 457, 713, 76, 332, 649, 204, 521, 777, 396, 44, - 300, 617, 172, 489, 745, 108, 364, 681, 236, 553, 809, 425, 28, - 284, 601, 156, 473, 729, 92, 348, 665, 220, 537, 793, 441, 60, - 316, 633, 188, 505, 761, 124, 380, 697, 252, 569, 825, 2, 258, - 575, 130, 447, 703, 66, 322, 639, 194, 511, 767, 386, 34, 290, - 607, 162, 479, 735, 98, 354, 671, 226, 543, 799, 402, 18, 274, - 591, 146, 463, 719, 82, 338, 655, 210, 527, 783, 431, 50, 306, - 623, 178, 495, 751, 114, 370, 687, 242, 559, 815, 410, 10, 266, - 583, 138, 455, 711, 74, 330, 647, 202, 519, 775, 394, 42, 298, - 615, 170, 487, 743, 106, 362, 679, 234, 551, 807, 423, 26, 282, - 599, 154, 471, 727, 90, 346, 663, 218, 535, 791, 439, 58, 314, - 631, 186, 503, 759, 122, 378, 695, 250, 567, 823, 415, 6, 262, - 579, 134, 451, 707, 70, 326, 643, 198, 515, 771, 390, 38, 294, - 611, 166, 483, 739, 102, 358, 675, 230, 547, 803, 406, 22, 278, - 595, 150, 467, 723, 86, 342, 659, 214, 531, 787, 435, 54, 310, - 627, 182, 499, 755, 118, 374, 691, 246, 563, 819, 419, 14, 270, - 587, 142, 459, 715, 78, 334, 651, 206, 523, 779, 398, 46, 302, - 619, 174, 491, 747, 110, 366, 683, 238, 555, 811, 427, 30, 286, - 603, 158, 475, 731, 94, 350, 667, 222, 539, 795, 443, 62, 318, - 635, 190, 507, 763, 126, 382, 699, 254, 571, 827, 414, 1, 257, - 574, 129, 446, 702, 65, 321, 638, 193, 510, 766, 385, 33, 289, - 606, 161, 478, 734, 97, 353, 670, 225, 542, 798, 401, 17, 273, - 590, 145, 462, 718, 81, 337, 654, 209, 526, 782, 430, 49, 305, - 622, 177, 494, 750, 113, 369, 686, 241, 558, 814, 409, 9, 265, - 582, 137, 454, 710, 73, 329, 646, 201, 518, 774, 393, 41, 297, - 614, 169, 486, 742, 105, 361, 678, 233, 550, 806, 422, 25, 281, - 598, 153, 470, 726, 89, 345, 662, 217, 534, 790, 438, 57, 313, - 630, 185, 502, 758, 121, 377, 694, 249, 566, 822, 413, 5, 261, - 578, 133, 450, 706, 69, 325, 642, 197, 514, 770, 389, 37, 293, - 610, 165, 482, 738, 101, 357, 674, 229, 546, 802, 405, 21, 277, - 594, 149, 466, 722, 85, 341, 658, 213, 530, 786, 434, 53, 309, - 626, 181, 498, 754, 117, 373, 690, 245, 562, 818, 418, 13, 269, - 586, 141, 458, 714, 77, 333, 650, 205, 522, 778, 397, 45, 301, - 618, 173, 490, 746, 109, 365, 682, 237, 554, 810, 426, 29, 285, - 602, 157, 474, 730, 93, 349, 666, 221, 538, 794, 442, 61, 317, - 634, 189, 506, 762, 125, 381, 698, 253, 570, 826, 3, 259, 576, - 131, 448, 704, 67, 323, 640, 195, 512, 768, 387, 35, 291, 608, - 163, 480, 736, 99, 355, 672, 227, 544, 800, 403, 19, 275, 592, - 147, 464, 720, 83, 339, 656, 211, 528, 784, 432, 51, 307, 624, - 179, 496, 752, 115, 371, 688, 243, 560, 816, 411, 11, 267, 584, - 139, 456, 712, 75, 331, 648, 203, 520, 776, 395, 43, 299, 616, - 171, 488, 744, 107, 363, 680, 235, 552, 808, 424, 27, 283, 600, - 155, 472, 728, 91, 347, 664, 219, 536, 792, 440, 59, 315, 632, - 187, 504, 760, 123, 379, 696, 251, 568, 824, 416, 7, 263, 580, - 135, 452, 708, 71, 327, 644, 199, 516, 772, 391, 39, 295, 612, - 167, 484, 740, 103, 359, 676, 231, 548, 804, 407, 23, 279, 596, - 151, 468, 724, 87, 343, 660, 215, 532, 788, 436, 55, 311, 628, - 183, 500, 756, 119, 375, 692, 247, 564, 820, 420, 15, 271, 588, - 143, 460, 716, 79, 335, 652, 207, 524, 780, 399, 47, 303, 620, - 175, 492, 748, 111, 367, 684, 239, 556, 812, 428, 31, 287, 604, - 159, 476, 732, 95, 351, 668, 223, 540, 796, 444, 63, 319, 636, - 191, 508, 764, 127, 383, 700, 255, 572, 828]; - - return (unsafe { *PERM829.get_unchecked((index % 829) as usize) } as u32 * 687241 + - unsafe { *PERM829.get_unchecked(((index / 829) % 829) as usize) } as u32 * 829 + - unsafe { - *PERM829.get_unchecked(((index / 687241) % 829) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (569722789u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton839(index: u32) -> f32 { - const PERM839: [u16; 839] = [0, 256, 583, 128, 455, 711, 384, 64, 320, 647, 192, 519, 775, 32, - 288, 615, 160, 487, 743, 423, 96, 352, 679, 224, 551, 807, 16, - 272, 599, 144, 471, 727, 400, 80, 336, 663, 208, 535, 791, 48, - 304, 631, 176, 503, 759, 439, 112, 368, 695, 240, 567, 823, 8, - 264, 591, 136, 463, 719, 392, 72, 328, 655, 200, 527, 783, 40, - 296, 623, 168, 495, 751, 431, 104, 360, 687, 232, 559, 815, 24, - 280, 607, 152, 479, 735, 408, 88, 344, 671, 216, 543, 799, 56, - 312, 639, 184, 511, 767, 447, 120, 376, 703, 248, 575, 831, 416, - 4, 260, 587, 132, 459, 715, 388, 68, 324, 651, 196, 523, 779, 36, - 292, 619, 164, 491, 747, 427, 100, 356, 683, 228, 555, 811, 20, - 276, 603, 148, 475, 731, 404, 84, 340, 667, 212, 539, 795, 52, - 308, 635, 180, 507, 763, 443, 116, 372, 699, 244, 571, 827, 12, - 268, 595, 140, 467, 723, 396, 76, 332, 659, 204, 531, 787, 44, - 300, 627, 172, 499, 755, 435, 108, 364, 691, 236, 563, 819, 28, - 284, 611, 156, 483, 739, 412, 92, 348, 675, 220, 547, 803, 60, - 316, 643, 188, 515, 771, 451, 124, 380, 707, 252, 579, 835, 418, - 2, 258, 585, 130, 457, 713, 386, 66, 322, 649, 194, 521, 777, 34, - 290, 617, 162, 489, 745, 425, 98, 354, 681, 226, 553, 809, 18, - 274, 601, 146, 473, 729, 402, 82, 338, 665, 210, 537, 793, 50, - 306, 633, 178, 505, 761, 441, 114, 370, 697, 242, 569, 825, 10, - 266, 593, 138, 465, 721, 394, 74, 330, 657, 202, 529, 785, 42, - 298, 625, 170, 497, 753, 433, 106, 362, 689, 234, 561, 817, 26, - 282, 609, 154, 481, 737, 410, 90, 346, 673, 218, 545, 801, 58, - 314, 641, 186, 513, 769, 449, 122, 378, 705, 250, 577, 833, 421, - 6, 262, 589, 134, 461, 717, 390, 70, 326, 653, 198, 525, 781, 38, - 294, 621, 166, 493, 749, 429, 102, 358, 685, 230, 557, 813, 22, - 278, 605, 150, 477, 733, 406, 86, 342, 669, 214, 541, 797, 54, - 310, 637, 182, 509, 765, 445, 118, 374, 701, 246, 573, 829, 14, - 270, 597, 142, 469, 725, 398, 78, 334, 661, 206, 533, 789, 46, - 302, 629, 174, 501, 757, 437, 110, 366, 693, 238, 565, 821, 30, - 286, 613, 158, 485, 741, 414, 94, 350, 677, 222, 549, 805, 62, - 318, 645, 190, 517, 773, 453, 126, 382, 709, 254, 581, 837, 419, - 1, 257, 584, 129, 456, 712, 385, 65, 321, 648, 193, 520, 776, 33, - 289, 616, 161, 488, 744, 424, 97, 353, 680, 225, 552, 808, 17, - 273, 600, 145, 472, 728, 401, 81, 337, 664, 209, 536, 792, 49, - 305, 632, 177, 504, 760, 440, 113, 369, 696, 241, 568, 824, 9, - 265, 592, 137, 464, 720, 393, 73, 329, 656, 201, 528, 784, 41, - 297, 624, 169, 496, 752, 432, 105, 361, 688, 233, 560, 816, 25, - 281, 608, 153, 480, 736, 409, 89, 345, 672, 217, 544, 800, 57, - 313, 640, 185, 512, 768, 448, 121, 377, 704, 249, 576, 832, 417, - 5, 261, 588, 133, 460, 716, 389, 69, 325, 652, 197, 524, 780, 37, - 293, 620, 165, 492, 748, 428, 101, 357, 684, 229, 556, 812, 21, - 277, 604, 149, 476, 732, 405, 85, 341, 668, 213, 540, 796, 53, - 309, 636, 181, 508, 764, 444, 117, 373, 700, 245, 572, 828, 13, - 269, 596, 141, 468, 724, 397, 77, 333, 660, 205, 532, 788, 45, - 301, 628, 173, 500, 756, 436, 109, 365, 692, 237, 564, 820, 29, - 285, 612, 157, 484, 740, 413, 93, 349, 676, 221, 548, 804, 61, - 317, 644, 189, 516, 772, 452, 125, 381, 708, 253, 580, 836, 420, - 3, 259, 586, 131, 458, 714, 387, 67, 323, 650, 195, 522, 778, 35, - 291, 618, 163, 490, 746, 426, 99, 355, 682, 227, 554, 810, 19, - 275, 602, 147, 474, 730, 403, 83, 339, 666, 211, 538, 794, 51, - 307, 634, 179, 506, 762, 442, 115, 371, 698, 243, 570, 826, 11, - 267, 594, 139, 466, 722, 395, 75, 331, 658, 203, 530, 786, 43, - 299, 626, 171, 498, 754, 434, 107, 363, 690, 235, 562, 818, 27, - 283, 610, 155, 482, 738, 411, 91, 347, 674, 219, 546, 802, 59, - 315, 642, 187, 514, 770, 450, 123, 379, 706, 251, 578, 834, 422, - 7, 263, 590, 135, 462, 718, 391, 71, 327, 654, 199, 526, 782, 39, - 295, 622, 167, 494, 750, 430, 103, 359, 686, 231, 558, 814, 23, - 279, 606, 151, 478, 734, 407, 87, 343, 670, 215, 542, 798, 55, - 311, 638, 183, 510, 766, 446, 119, 375, 702, 247, 574, 830, 15, - 271, 598, 143, 470, 726, 399, 79, 335, 662, 207, 534, 790, 47, - 303, 630, 175, 502, 758, 438, 111, 367, 694, 239, 566, 822, 31, - 287, 614, 159, 486, 742, 415, 95, 351, 678, 223, 550, 806, 63, - 319, 646, 191, 518, 774, 454, 127, 383, 710, 255, 582, 838]; - - return (unsafe { *PERM839.get_unchecked((index % 839) as usize) } as u32 * 703921 + - unsafe { *PERM839.get_unchecked(((index / 839) % 839) as usize) } as u32 * 839 + - unsafe { - *PERM839.get_unchecked(((index / 703921) % 839) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (590589719u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton853(index: u32) -> f32 { - const PERM853: [u16; 853] = [0, 256, 597, 128, 469, 725, 384, 64, 320, 661, 192, 533, 789, 32, - 288, 629, 160, 501, 757, 437, 96, 352, 693, 224, 565, 821, 416, - 16, 272, 613, 144, 485, 741, 400, 80, 336, 677, 208, 549, 805, - 48, 304, 645, 176, 517, 773, 453, 112, 368, 709, 240, 581, 837, - 8, 264, 605, 136, 477, 733, 392, 72, 328, 669, 200, 541, 797, 40, - 296, 637, 168, 509, 765, 445, 104, 360, 701, 232, 573, 829, 429, - 24, 280, 621, 152, 493, 749, 408, 88, 344, 685, 216, 557, 813, - 56, 312, 653, 184, 525, 781, 461, 120, 376, 717, 248, 589, 845, - 424, 4, 260, 601, 132, 473, 729, 388, 68, 324, 665, 196, 537, - 793, 36, 292, 633, 164, 505, 761, 441, 100, 356, 697, 228, 569, - 825, 420, 20, 276, 617, 148, 489, 745, 404, 84, 340, 681, 212, - 553, 809, 52, 308, 649, 180, 521, 777, 457, 116, 372, 713, 244, - 585, 841, 12, 268, 609, 140, 481, 737, 396, 76, 332, 673, 204, - 545, 801, 44, 300, 641, 172, 513, 769, 449, 108, 364, 705, 236, - 577, 833, 433, 28, 284, 625, 156, 497, 753, 412, 92, 348, 689, - 220, 561, 817, 60, 316, 657, 188, 529, 785, 465, 124, 380, 721, - 252, 593, 849, 2, 258, 599, 130, 471, 727, 386, 66, 322, 663, - 194, 535, 791, 34, 290, 631, 162, 503, 759, 439, 98, 354, 695, - 226, 567, 823, 418, 18, 274, 615, 146, 487, 743, 402, 82, 338, - 679, 210, 551, 807, 50, 306, 647, 178, 519, 775, 455, 114, 370, - 711, 242, 583, 839, 10, 266, 607, 138, 479, 735, 394, 74, 330, - 671, 202, 543, 799, 42, 298, 639, 170, 511, 767, 447, 106, 362, - 703, 234, 575, 831, 431, 26, 282, 623, 154, 495, 751, 410, 90, - 346, 687, 218, 559, 815, 58, 314, 655, 186, 527, 783, 463, 122, - 378, 719, 250, 591, 847, 427, 6, 262, 603, 134, 475, 731, 390, - 70, 326, 667, 198, 539, 795, 38, 294, 635, 166, 507, 763, 443, - 102, 358, 699, 230, 571, 827, 422, 22, 278, 619, 150, 491, 747, - 406, 86, 342, 683, 214, 555, 811, 54, 310, 651, 182, 523, 779, - 459, 118, 374, 715, 246, 587, 843, 14, 270, 611, 142, 483, 739, - 398, 78, 334, 675, 206, 547, 803, 46, 302, 643, 174, 515, 771, - 451, 110, 366, 707, 238, 579, 835, 435, 30, 286, 627, 158, 499, - 755, 414, 94, 350, 691, 222, 563, 819, 62, 318, 659, 190, 531, - 787, 467, 126, 382, 723, 254, 595, 851, 426, 1, 257, 598, 129, - 470, 726, 385, 65, 321, 662, 193, 534, 790, 33, 289, 630, 161, - 502, 758, 438, 97, 353, 694, 225, 566, 822, 417, 17, 273, 614, - 145, 486, 742, 401, 81, 337, 678, 209, 550, 806, 49, 305, 646, - 177, 518, 774, 454, 113, 369, 710, 241, 582, 838, 9, 265, 606, - 137, 478, 734, 393, 73, 329, 670, 201, 542, 798, 41, 297, 638, - 169, 510, 766, 446, 105, 361, 702, 233, 574, 830, 430, 25, 281, - 622, 153, 494, 750, 409, 89, 345, 686, 217, 558, 814, 57, 313, - 654, 185, 526, 782, 462, 121, 377, 718, 249, 590, 846, 425, 5, - 261, 602, 133, 474, 730, 389, 69, 325, 666, 197, 538, 794, 37, - 293, 634, 165, 506, 762, 442, 101, 357, 698, 229, 570, 826, 421, - 21, 277, 618, 149, 490, 746, 405, 85, 341, 682, 213, 554, 810, - 53, 309, 650, 181, 522, 778, 458, 117, 373, 714, 245, 586, 842, - 13, 269, 610, 141, 482, 738, 397, 77, 333, 674, 205, 546, 802, - 45, 301, 642, 173, 514, 770, 450, 109, 365, 706, 237, 578, 834, - 434, 29, 285, 626, 157, 498, 754, 413, 93, 349, 690, 221, 562, - 818, 61, 317, 658, 189, 530, 786, 466, 125, 381, 722, 253, 594, - 850, 3, 259, 600, 131, 472, 728, 387, 67, 323, 664, 195, 536, - 792, 35, 291, 632, 163, 504, 760, 440, 99, 355, 696, 227, 568, - 824, 419, 19, 275, 616, 147, 488, 744, 403, 83, 339, 680, 211, - 552, 808, 51, 307, 648, 179, 520, 776, 456, 115, 371, 712, 243, - 584, 840, 11, 267, 608, 139, 480, 736, 395, 75, 331, 672, 203, - 544, 800, 43, 299, 640, 171, 512, 768, 448, 107, 363, 704, 235, - 576, 832, 432, 27, 283, 624, 155, 496, 752, 411, 91, 347, 688, - 219, 560, 816, 59, 315, 656, 187, 528, 784, 464, 123, 379, 720, - 251, 592, 848, 428, 7, 263, 604, 135, 476, 732, 391, 71, 327, - 668, 199, 540, 796, 39, 295, 636, 167, 508, 764, 444, 103, 359, - 700, 231, 572, 828, 423, 23, 279, 620, 151, 492, 748, 407, 87, - 343, 684, 215, 556, 812, 55, 311, 652, 183, 524, 780, 460, 119, - 375, 716, 247, 588, 844, 15, 271, 612, 143, 484, 740, 399, 79, - 335, 676, 207, 548, 804, 47, 303, 644, 175, 516, 772, 452, 111, - 367, 708, 239, 580, 836, 436, 31, 287, 628, 159, 500, 756, 415, - 95, 351, 692, 223, 564, 820, 63, 319, 660, 191, 532, 788, 468, - 127, 383, 724, 255, 596, 852]; - - return (unsafe { *PERM853.get_unchecked((index % 853) as usize) } as u32 * 727609 + - unsafe { *PERM853.get_unchecked(((index / 853) % 853) as usize) } as u32 * 853 + - unsafe { - *PERM853.get_unchecked(((index / 727609) % 853) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (620650477u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton857(index: u32) -> f32 { - const PERM857: [u16; 857] = [0, 256, 601, 128, 473, 729, 384, 64, 320, 665, 192, 537, 793, 32, - 288, 633, 160, 505, 761, 441, 96, 352, 697, 224, 569, 825, 416, - 16, 272, 617, 144, 489, 745, 400, 80, 336, 681, 208, 553, 809, - 48, 304, 649, 176, 521, 777, 457, 112, 368, 713, 240, 585, 841, - 424, 8, 264, 609, 136, 481, 737, 392, 72, 328, 673, 200, 545, - 801, 40, 296, 641, 168, 513, 769, 449, 104, 360, 705, 232, 577, - 833, 433, 24, 280, 625, 152, 497, 753, 408, 88, 344, 689, 216, - 561, 817, 56, 312, 657, 184, 529, 785, 465, 120, 376, 721, 248, - 593, 849, 4, 260, 605, 132, 477, 733, 388, 68, 324, 669, 196, - 541, 797, 36, 292, 637, 164, 509, 765, 445, 100, 356, 701, 228, - 573, 829, 420, 20, 276, 621, 148, 493, 749, 404, 84, 340, 685, - 212, 557, 813, 52, 308, 653, 180, 525, 781, 461, 116, 372, 717, - 244, 589, 845, 429, 12, 268, 613, 140, 485, 741, 396, 76, 332, - 677, 204, 549, 805, 44, 300, 645, 172, 517, 773, 453, 108, 364, - 709, 236, 581, 837, 437, 28, 284, 629, 156, 501, 757, 412, 92, - 348, 693, 220, 565, 821, 60, 316, 661, 188, 533, 789, 469, 124, - 380, 725, 252, 597, 853, 2, 258, 603, 130, 475, 731, 386, 66, - 322, 667, 194, 539, 795, 34, 290, 635, 162, 507, 763, 443, 98, - 354, 699, 226, 571, 827, 418, 18, 274, 619, 146, 491, 747, 402, - 82, 338, 683, 210, 555, 811, 50, 306, 651, 178, 523, 779, 459, - 114, 370, 715, 242, 587, 843, 426, 10, 266, 611, 138, 483, 739, - 394, 74, 330, 675, 202, 547, 803, 42, 298, 643, 170, 515, 771, - 451, 106, 362, 707, 234, 579, 835, 435, 26, 282, 627, 154, 499, - 755, 410, 90, 346, 691, 218, 563, 819, 58, 314, 659, 186, 531, - 787, 467, 122, 378, 723, 250, 595, 851, 6, 262, 607, 134, 479, - 735, 390, 70, 326, 671, 198, 543, 799, 38, 294, 639, 166, 511, - 767, 447, 102, 358, 703, 230, 575, 831, 422, 22, 278, 623, 150, - 495, 751, 406, 86, 342, 687, 214, 559, 815, 54, 310, 655, 182, - 527, 783, 463, 118, 374, 719, 246, 591, 847, 431, 14, 270, 615, - 142, 487, 743, 398, 78, 334, 679, 206, 551, 807, 46, 302, 647, - 174, 519, 775, 455, 110, 366, 711, 238, 583, 839, 439, 30, 286, - 631, 158, 503, 759, 414, 94, 350, 695, 222, 567, 823, 62, 318, - 663, 190, 535, 791, 471, 126, 382, 727, 254, 599, 855, 428, 1, - 257, 602, 129, 474, 730, 385, 65, 321, 666, 193, 538, 794, 33, - 289, 634, 161, 506, 762, 442, 97, 353, 698, 225, 570, 826, 417, - 17, 273, 618, 145, 490, 746, 401, 81, 337, 682, 209, 554, 810, - 49, 305, 650, 177, 522, 778, 458, 113, 369, 714, 241, 586, 842, - 425, 9, 265, 610, 137, 482, 738, 393, 73, 329, 674, 201, 546, - 802, 41, 297, 642, 169, 514, 770, 450, 105, 361, 706, 233, 578, - 834, 434, 25, 281, 626, 153, 498, 754, 409, 89, 345, 690, 217, - 562, 818, 57, 313, 658, 185, 530, 786, 466, 121, 377, 722, 249, - 594, 850, 5, 261, 606, 133, 478, 734, 389, 69, 325, 670, 197, - 542, 798, 37, 293, 638, 165, 510, 766, 446, 101, 357, 702, 229, - 574, 830, 421, 21, 277, 622, 149, 494, 750, 405, 85, 341, 686, - 213, 558, 814, 53, 309, 654, 181, 526, 782, 462, 117, 373, 718, - 245, 590, 846, 430, 13, 269, 614, 141, 486, 742, 397, 77, 333, - 678, 205, 550, 806, 45, 301, 646, 173, 518, 774, 454, 109, 365, - 710, 237, 582, 838, 438, 29, 285, 630, 157, 502, 758, 413, 93, - 349, 694, 221, 566, 822, 61, 317, 662, 189, 534, 790, 470, 125, - 381, 726, 253, 598, 854, 3, 259, 604, 131, 476, 732, 387, 67, - 323, 668, 195, 540, 796, 35, 291, 636, 163, 508, 764, 444, 99, - 355, 700, 227, 572, 828, 419, 19, 275, 620, 147, 492, 748, 403, - 83, 339, 684, 211, 556, 812, 51, 307, 652, 179, 524, 780, 460, - 115, 371, 716, 243, 588, 844, 427, 11, 267, 612, 139, 484, 740, - 395, 75, 331, 676, 203, 548, 804, 43, 299, 644, 171, 516, 772, - 452, 107, 363, 708, 235, 580, 836, 436, 27, 283, 628, 155, 500, - 756, 411, 91, 347, 692, 219, 564, 820, 59, 315, 660, 187, 532, - 788, 468, 123, 379, 724, 251, 596, 852, 7, 263, 608, 135, 480, - 736, 391, 71, 327, 672, 199, 544, 800, 39, 295, 640, 167, 512, - 768, 448, 103, 359, 704, 231, 576, 832, 423, 23, 279, 624, 151, - 496, 752, 407, 87, 343, 688, 215, 560, 816, 55, 311, 656, 183, - 528, 784, 464, 119, 375, 720, 247, 592, 848, 432, 15, 271, 616, - 143, 488, 744, 399, 79, 335, 680, 207, 552, 808, 47, 303, 648, - 175, 520, 776, 456, 111, 367, 712, 239, 584, 840, 440, 31, 287, - 632, 159, 504, 760, 415, 95, 351, 696, 223, 568, 824, 63, 319, - 664, 191, 536, 792, 472, 127, 383, 728, 255, 600, 856]; - - return (unsafe { *PERM857.get_unchecked((index % 857) as usize) } as u32 * 734449 + - unsafe { *PERM857.get_unchecked(((index / 857) % 857) as usize) } as u32 * 857 + - unsafe { - *PERM857.get_unchecked(((index / 734449) % 857) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (629422793u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton859(index: u32) -> f32 { - const PERM859: [u16; 859] = [0, 256, 603, 128, 475, 731, 384, 64, 320, 667, 192, 539, 795, 32, - 288, 635, 160, 507, 763, 443, 96, 352, 699, 224, 571, 827, 416, - 16, 272, 619, 144, 491, 747, 400, 80, 336, 683, 208, 555, 811, - 48, 304, 651, 176, 523, 779, 459, 112, 368, 715, 240, 587, 843, - 424, 8, 264, 611, 136, 483, 739, 392, 72, 328, 675, 200, 547, - 803, 40, 296, 643, 168, 515, 771, 451, 104, 360, 707, 232, 579, - 835, 435, 24, 280, 627, 152, 499, 755, 408, 88, 344, 691, 216, - 563, 819, 56, 312, 659, 184, 531, 787, 467, 120, 376, 723, 248, - 595, 851, 4, 260, 607, 132, 479, 735, 388, 68, 324, 671, 196, - 543, 799, 36, 292, 639, 164, 511, 767, 447, 100, 356, 703, 228, - 575, 831, 420, 20, 276, 623, 148, 495, 751, 404, 84, 340, 687, - 212, 559, 815, 52, 308, 655, 180, 527, 783, 463, 116, 372, 719, - 244, 591, 847, 431, 12, 268, 615, 140, 487, 743, 396, 76, 332, - 679, 204, 551, 807, 44, 300, 647, 172, 519, 775, 455, 108, 364, - 711, 236, 583, 839, 439, 28, 284, 631, 156, 503, 759, 412, 92, - 348, 695, 220, 567, 823, 60, 316, 663, 188, 535, 791, 471, 124, - 380, 727, 252, 599, 855, 428, 2, 258, 605, 130, 477, 733, 386, - 66, 322, 669, 194, 541, 797, 34, 290, 637, 162, 509, 765, 445, - 98, 354, 701, 226, 573, 829, 418, 18, 274, 621, 146, 493, 749, - 402, 82, 338, 685, 210, 557, 813, 50, 306, 653, 178, 525, 781, - 461, 114, 370, 717, 242, 589, 845, 426, 10, 266, 613, 138, 485, - 741, 394, 74, 330, 677, 202, 549, 805, 42, 298, 645, 170, 517, - 773, 453, 106, 362, 709, 234, 581, 837, 437, 26, 282, 629, 154, - 501, 757, 410, 90, 346, 693, 218, 565, 821, 58, 314, 661, 186, - 533, 789, 469, 122, 378, 725, 250, 597, 853, 6, 262, 609, 134, - 481, 737, 390, 70, 326, 673, 198, 545, 801, 38, 294, 641, 166, - 513, 769, 449, 102, 358, 705, 230, 577, 833, 422, 22, 278, 625, - 150, 497, 753, 406, 86, 342, 689, 214, 561, 817, 54, 310, 657, - 182, 529, 785, 465, 118, 374, 721, 246, 593, 849, 433, 14, 270, - 617, 142, 489, 745, 398, 78, 334, 681, 206, 553, 809, 46, 302, - 649, 174, 521, 777, 457, 110, 366, 713, 238, 585, 841, 441, 30, - 286, 633, 158, 505, 761, 414, 94, 350, 697, 222, 569, 825, 62, - 318, 665, 190, 537, 793, 473, 126, 382, 729, 254, 601, 857, 429, - 1, 257, 604, 129, 476, 732, 385, 65, 321, 668, 193, 540, 796, 33, - 289, 636, 161, 508, 764, 444, 97, 353, 700, 225, 572, 828, 417, - 17, 273, 620, 145, 492, 748, 401, 81, 337, 684, 209, 556, 812, - 49, 305, 652, 177, 524, 780, 460, 113, 369, 716, 241, 588, 844, - 425, 9, 265, 612, 137, 484, 740, 393, 73, 329, 676, 201, 548, - 804, 41, 297, 644, 169, 516, 772, 452, 105, 361, 708, 233, 580, - 836, 436, 25, 281, 628, 153, 500, 756, 409, 89, 345, 692, 217, - 564, 820, 57, 313, 660, 185, 532, 788, 468, 121, 377, 724, 249, - 596, 852, 5, 261, 608, 133, 480, 736, 389, 69, 325, 672, 197, - 544, 800, 37, 293, 640, 165, 512, 768, 448, 101, 357, 704, 229, - 576, 832, 421, 21, 277, 624, 149, 496, 752, 405, 85, 341, 688, - 213, 560, 816, 53, 309, 656, 181, 528, 784, 464, 117, 373, 720, - 245, 592, 848, 432, 13, 269, 616, 141, 488, 744, 397, 77, 333, - 680, 205, 552, 808, 45, 301, 648, 173, 520, 776, 456, 109, 365, - 712, 237, 584, 840, 440, 29, 285, 632, 157, 504, 760, 413, 93, - 349, 696, 221, 568, 824, 61, 317, 664, 189, 536, 792, 472, 125, - 381, 728, 253, 600, 856, 430, 3, 259, 606, 131, 478, 734, 387, - 67, 323, 670, 195, 542, 798, 35, 291, 638, 163, 510, 766, 446, - 99, 355, 702, 227, 574, 830, 419, 19, 275, 622, 147, 494, 750, - 403, 83, 339, 686, 211, 558, 814, 51, 307, 654, 179, 526, 782, - 462, 115, 371, 718, 243, 590, 846, 427, 11, 267, 614, 139, 486, - 742, 395, 75, 331, 678, 203, 550, 806, 43, 299, 646, 171, 518, - 774, 454, 107, 363, 710, 235, 582, 838, 438, 27, 283, 630, 155, - 502, 758, 411, 91, 347, 694, 219, 566, 822, 59, 315, 662, 187, - 534, 790, 470, 123, 379, 726, 251, 598, 854, 7, 263, 610, 135, - 482, 738, 391, 71, 327, 674, 199, 546, 802, 39, 295, 642, 167, - 514, 770, 450, 103, 359, 706, 231, 578, 834, 423, 23, 279, 626, - 151, 498, 754, 407, 87, 343, 690, 215, 562, 818, 55, 311, 658, - 183, 530, 786, 466, 119, 375, 722, 247, 594, 850, 434, 15, 271, - 618, 143, 490, 746, 399, 79, 335, 682, 207, 554, 810, 47, 303, - 650, 175, 522, 778, 458, 111, 367, 714, 239, 586, 842, 442, 31, - 287, 634, 159, 506, 762, 415, 95, 351, 698, 223, 570, 826, 63, - 319, 666, 191, 538, 794, 474, 127, 383, 730, 255, 602, 858]; - - return (unsafe { *PERM859.get_unchecked((index % 859) as usize) } as u32 * 737881 + - unsafe { *PERM859.get_unchecked(((index / 859) % 859) as usize) } as u32 * 859 + - unsafe { - *PERM859.get_unchecked(((index / 737881) % 859) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (633839779u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton863(index: u32) -> f32 { - const PERM863: [u16; 863] = [0, 256, 607, 128, 479, 735, 384, 64, 320, 671, 192, 543, 799, 32, - 288, 639, 160, 511, 767, 447, 96, 352, 703, 224, 575, 831, 416, - 16, 272, 623, 144, 495, 751, 400, 80, 336, 687, 208, 559, 815, - 48, 304, 655, 176, 527, 783, 463, 112, 368, 719, 240, 591, 847, - 424, 8, 264, 615, 136, 487, 743, 392, 72, 328, 679, 200, 551, - 807, 40, 296, 647, 168, 519, 775, 455, 104, 360, 711, 232, 583, - 839, 439, 24, 280, 631, 152, 503, 759, 408, 88, 344, 695, 216, - 567, 823, 56, 312, 663, 184, 535, 791, 471, 120, 376, 727, 248, - 599, 855, 428, 4, 260, 611, 132, 483, 739, 388, 68, 324, 675, - 196, 547, 803, 36, 292, 643, 164, 515, 771, 451, 100, 356, 707, - 228, 579, 835, 420, 20, 276, 627, 148, 499, 755, 404, 84, 340, - 691, 212, 563, 819, 52, 308, 659, 180, 531, 787, 467, 116, 372, - 723, 244, 595, 851, 435, 12, 268, 619, 140, 491, 747, 396, 76, - 332, 683, 204, 555, 811, 44, 300, 651, 172, 523, 779, 459, 108, - 364, 715, 236, 587, 843, 443, 28, 284, 635, 156, 507, 763, 412, - 92, 348, 699, 220, 571, 827, 60, 316, 667, 188, 539, 795, 475, - 124, 380, 731, 252, 603, 859, 430, 2, 258, 609, 130, 481, 737, - 386, 66, 322, 673, 194, 545, 801, 34, 290, 641, 162, 513, 769, - 449, 98, 354, 705, 226, 577, 833, 418, 18, 274, 625, 146, 497, - 753, 402, 82, 338, 689, 210, 561, 817, 50, 306, 657, 178, 529, - 785, 465, 114, 370, 721, 242, 593, 849, 426, 10, 266, 617, 138, - 489, 745, 394, 74, 330, 681, 202, 553, 809, 42, 298, 649, 170, - 521, 777, 457, 106, 362, 713, 234, 585, 841, 441, 26, 282, 633, - 154, 505, 761, 410, 90, 346, 697, 218, 569, 825, 58, 314, 665, - 186, 537, 793, 473, 122, 378, 729, 250, 601, 857, 433, 6, 262, - 613, 134, 485, 741, 390, 70, 326, 677, 198, 549, 805, 38, 294, - 645, 166, 517, 773, 453, 102, 358, 709, 230, 581, 837, 422, 22, - 278, 629, 150, 501, 757, 406, 86, 342, 693, 214, 565, 821, 54, - 310, 661, 182, 533, 789, 469, 118, 374, 725, 246, 597, 853, 437, - 14, 270, 621, 142, 493, 749, 398, 78, 334, 685, 206, 557, 813, - 46, 302, 653, 174, 525, 781, 461, 110, 366, 717, 238, 589, 845, - 445, 30, 286, 637, 158, 509, 765, 414, 94, 350, 701, 222, 573, - 829, 62, 318, 669, 190, 541, 797, 477, 126, 382, 733, 254, 605, - 861, 431, 1, 257, 608, 129, 480, 736, 385, 65, 321, 672, 193, - 544, 800, 33, 289, 640, 161, 512, 768, 448, 97, 353, 704, 225, - 576, 832, 417, 17, 273, 624, 145, 496, 752, 401, 81, 337, 688, - 209, 560, 816, 49, 305, 656, 177, 528, 784, 464, 113, 369, 720, - 241, 592, 848, 425, 9, 265, 616, 137, 488, 744, 393, 73, 329, - 680, 201, 552, 808, 41, 297, 648, 169, 520, 776, 456, 105, 361, - 712, 233, 584, 840, 440, 25, 281, 632, 153, 504, 760, 409, 89, - 345, 696, 217, 568, 824, 57, 313, 664, 185, 536, 792, 472, 121, - 377, 728, 249, 600, 856, 429, 5, 261, 612, 133, 484, 740, 389, - 69, 325, 676, 197, 548, 804, 37, 293, 644, 165, 516, 772, 452, - 101, 357, 708, 229, 580, 836, 421, 21, 277, 628, 149, 500, 756, - 405, 85, 341, 692, 213, 564, 820, 53, 309, 660, 181, 532, 788, - 468, 117, 373, 724, 245, 596, 852, 436, 13, 269, 620, 141, 492, - 748, 397, 77, 333, 684, 205, 556, 812, 45, 301, 652, 173, 524, - 780, 460, 109, 365, 716, 237, 588, 844, 444, 29, 285, 636, 157, - 508, 764, 413, 93, 349, 700, 221, 572, 828, 61, 317, 668, 189, - 540, 796, 476, 125, 381, 732, 253, 604, 860, 432, 3, 259, 610, - 131, 482, 738, 387, 67, 323, 674, 195, 546, 802, 35, 291, 642, - 163, 514, 770, 450, 99, 355, 706, 227, 578, 834, 419, 19, 275, - 626, 147, 498, 754, 403, 83, 339, 690, 211, 562, 818, 51, 307, - 658, 179, 530, 786, 466, 115, 371, 722, 243, 594, 850, 427, 11, - 267, 618, 139, 490, 746, 395, 75, 331, 682, 203, 554, 810, 43, - 299, 650, 171, 522, 778, 458, 107, 363, 714, 235, 586, 842, 442, - 27, 283, 634, 155, 506, 762, 411, 91, 347, 698, 219, 570, 826, - 59, 315, 666, 187, 538, 794, 474, 123, 379, 730, 251, 602, 858, - 434, 7, 263, 614, 135, 486, 742, 391, 71, 327, 678, 199, 550, - 806, 39, 295, 646, 167, 518, 774, 454, 103, 359, 710, 231, 582, - 838, 423, 23, 279, 630, 151, 502, 758, 407, 87, 343, 694, 215, - 566, 822, 55, 311, 662, 183, 534, 790, 470, 119, 375, 726, 247, - 598, 854, 438, 15, 271, 622, 143, 494, 750, 399, 79, 335, 686, - 207, 558, 814, 47, 303, 654, 175, 526, 782, 462, 111, 367, 718, - 239, 590, 846, 446, 31, 287, 638, 159, 510, 766, 415, 95, 351, - 702, 223, 574, 830, 63, 319, 670, 191, 542, 798, 478, 127, 383, - 734, 255, 606, 862]; - - return (unsafe { *PERM863.get_unchecked((index % 863) as usize) } as u32 * 744769 + - unsafe { *PERM863.get_unchecked(((index / 863) % 863) as usize) } as u32 * 863 + - unsafe { - *PERM863.get_unchecked(((index / 744769) % 863) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (642735647u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton877(index: u32) -> f32 { - const PERM877: [u16; 877] = [0, 256, 621, 128, 493, 749, 384, 64, 320, 685, 192, 557, 813, - 416, 32, 288, 653, 160, 525, 781, 461, 96, 352, 717, 224, 589, - 845, 16, 272, 637, 144, 509, 765, 400, 80, 336, 701, 208, 573, - 829, 445, 48, 304, 669, 176, 541, 797, 477, 112, 368, 733, 240, - 605, 861, 432, 8, 264, 629, 136, 501, 757, 392, 72, 328, 693, - 200, 565, 821, 424, 40, 296, 661, 168, 533, 789, 469, 104, 360, - 725, 232, 597, 853, 24, 280, 645, 152, 517, 773, 408, 88, 344, - 709, 216, 581, 837, 453, 56, 312, 677, 184, 549, 805, 485, 120, - 376, 741, 248, 613, 869, 436, 4, 260, 625, 132, 497, 753, 388, - 68, 324, 689, 196, 561, 817, 420, 36, 292, 657, 164, 529, 785, - 465, 100, 356, 721, 228, 593, 849, 20, 276, 641, 148, 513, 769, - 404, 84, 340, 705, 212, 577, 833, 449, 52, 308, 673, 180, 545, - 801, 481, 116, 372, 737, 244, 609, 865, 441, 12, 268, 633, 140, - 505, 761, 396, 76, 332, 697, 204, 569, 825, 428, 44, 300, 665, - 172, 537, 793, 473, 108, 364, 729, 236, 601, 857, 28, 284, 649, - 156, 521, 777, 412, 92, 348, 713, 220, 585, 841, 457, 60, 316, - 681, 188, 553, 809, 489, 124, 380, 745, 252, 617, 873, 2, 258, - 623, 130, 495, 751, 386, 66, 322, 687, 194, 559, 815, 418, 34, - 290, 655, 162, 527, 783, 463, 98, 354, 719, 226, 591, 847, 18, - 274, 639, 146, 511, 767, 402, 82, 338, 703, 210, 575, 831, 447, - 50, 306, 671, 178, 543, 799, 479, 114, 370, 735, 242, 607, 863, - 434, 10, 266, 631, 138, 503, 759, 394, 74, 330, 695, 202, 567, - 823, 426, 42, 298, 663, 170, 535, 791, 471, 106, 362, 727, 234, - 599, 855, 26, 282, 647, 154, 519, 775, 410, 90, 346, 711, 218, - 583, 839, 455, 58, 314, 679, 186, 551, 807, 487, 122, 378, 743, - 250, 615, 871, 439, 6, 262, 627, 134, 499, 755, 390, 70, 326, - 691, 198, 563, 819, 422, 38, 294, 659, 166, 531, 787, 467, 102, - 358, 723, 230, 595, 851, 22, 278, 643, 150, 515, 771, 406, 86, - 342, 707, 214, 579, 835, 451, 54, 310, 675, 182, 547, 803, 483, - 118, 374, 739, 246, 611, 867, 443, 14, 270, 635, 142, 507, 763, - 398, 78, 334, 699, 206, 571, 827, 430, 46, 302, 667, 174, 539, - 795, 475, 110, 366, 731, 238, 603, 859, 30, 286, 651, 158, 523, - 779, 414, 94, 350, 715, 222, 587, 843, 459, 62, 318, 683, 190, - 555, 811, 491, 126, 382, 747, 254, 619, 875, 438, 1, 257, 622, - 129, 494, 750, 385, 65, 321, 686, 193, 558, 814, 417, 33, 289, - 654, 161, 526, 782, 462, 97, 353, 718, 225, 590, 846, 17, 273, - 638, 145, 510, 766, 401, 81, 337, 702, 209, 574, 830, 446, 49, - 305, 670, 177, 542, 798, 478, 113, 369, 734, 241, 606, 862, 433, - 9, 265, 630, 137, 502, 758, 393, 73, 329, 694, 201, 566, 822, - 425, 41, 297, 662, 169, 534, 790, 470, 105, 361, 726, 233, 598, - 854, 25, 281, 646, 153, 518, 774, 409, 89, 345, 710, 217, 582, - 838, 454, 57, 313, 678, 185, 550, 806, 486, 121, 377, 742, 249, - 614, 870, 437, 5, 261, 626, 133, 498, 754, 389, 69, 325, 690, - 197, 562, 818, 421, 37, 293, 658, 165, 530, 786, 466, 101, 357, - 722, 229, 594, 850, 21, 277, 642, 149, 514, 770, 405, 85, 341, - 706, 213, 578, 834, 450, 53, 309, 674, 181, 546, 802, 482, 117, - 373, 738, 245, 610, 866, 442, 13, 269, 634, 141, 506, 762, 397, - 77, 333, 698, 205, 570, 826, 429, 45, 301, 666, 173, 538, 794, - 474, 109, 365, 730, 237, 602, 858, 29, 285, 650, 157, 522, 778, - 413, 93, 349, 714, 221, 586, 842, 458, 61, 317, 682, 189, 554, - 810, 490, 125, 381, 746, 253, 618, 874, 3, 259, 624, 131, 496, - 752, 387, 67, 323, 688, 195, 560, 816, 419, 35, 291, 656, 163, - 528, 784, 464, 99, 355, 720, 227, 592, 848, 19, 275, 640, 147, - 512, 768, 403, 83, 339, 704, 211, 576, 832, 448, 51, 307, 672, - 179, 544, 800, 480, 115, 371, 736, 243, 608, 864, 435, 11, 267, - 632, 139, 504, 760, 395, 75, 331, 696, 203, 568, 824, 427, 43, - 299, 664, 171, 536, 792, 472, 107, 363, 728, 235, 600, 856, 27, - 283, 648, 155, 520, 776, 411, 91, 347, 712, 219, 584, 840, 456, - 59, 315, 680, 187, 552, 808, 488, 123, 379, 744, 251, 616, 872, - 440, 7, 263, 628, 135, 500, 756, 391, 71, 327, 692, 199, 564, - 820, 423, 39, 295, 660, 167, 532, 788, 468, 103, 359, 724, 231, - 596, 852, 23, 279, 644, 151, 516, 772, 407, 87, 343, 708, 215, - 580, 836, 452, 55, 311, 676, 183, 548, 804, 484, 119, 375, 740, - 247, 612, 868, 444, 15, 271, 636, 143, 508, 764, 399, 79, 335, - 700, 207, 572, 828, 431, 47, 303, 668, 175, 540, 796, 476, 111, - 367, 732, 239, 604, 860, 31, 287, 652, 159, 524, 780, 415, 95, - 351, 716, 223, 588, 844, 460, 63, 319, 684, 191, 556, 812, 492, - 127, 383, 748, 255, 620, 876]; - - return (unsafe { *PERM877.get_unchecked((index % 877) as usize) } as u32 * 769129 + - unsafe { *PERM877.get_unchecked(((index / 877) % 877) as usize) } as u32 * 877 + - unsafe { - *PERM877.get_unchecked(((index / 769129) % 877) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (674526133u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton881(index: u32) -> f32 { - const PERM881: [u16; 881] = [0, 256, 625, 128, 497, 753, 384, 64, 320, 689, 192, 561, 817, - 416, 32, 288, 657, 160, 529, 785, 465, 96, 352, 721, 224, 593, - 849, 432, 16, 272, 641, 144, 513, 769, 400, 80, 336, 705, 208, - 577, 833, 449, 48, 304, 673, 176, 545, 801, 481, 112, 368, 737, - 240, 609, 865, 8, 264, 633, 136, 505, 761, 392, 72, 328, 697, - 200, 569, 825, 424, 40, 296, 665, 168, 537, 793, 473, 104, 360, - 729, 232, 601, 857, 441, 24, 280, 649, 152, 521, 777, 408, 88, - 344, 713, 216, 585, 841, 457, 56, 312, 681, 184, 553, 809, 489, - 120, 376, 745, 248, 617, 873, 4, 260, 629, 132, 501, 757, 388, - 68, 324, 693, 196, 565, 821, 420, 36, 292, 661, 164, 533, 789, - 469, 100, 356, 725, 228, 597, 853, 436, 20, 276, 645, 148, 517, - 773, 404, 84, 340, 709, 212, 581, 837, 453, 52, 308, 677, 180, - 549, 805, 485, 116, 372, 741, 244, 613, 869, 12, 268, 637, 140, - 509, 765, 396, 76, 332, 701, 204, 573, 829, 428, 44, 300, 669, - 172, 541, 797, 477, 108, 364, 733, 236, 605, 861, 445, 28, 284, - 653, 156, 525, 781, 412, 92, 348, 717, 220, 589, 845, 461, 60, - 316, 685, 188, 557, 813, 493, 124, 380, 749, 252, 621, 877, 2, - 258, 627, 130, 499, 755, 386, 66, 322, 691, 194, 563, 819, 418, - 34, 290, 659, 162, 531, 787, 467, 98, 354, 723, 226, 595, 851, - 434, 18, 274, 643, 146, 515, 771, 402, 82, 338, 707, 210, 579, - 835, 451, 50, 306, 675, 178, 547, 803, 483, 114, 370, 739, 242, - 611, 867, 10, 266, 635, 138, 507, 763, 394, 74, 330, 699, 202, - 571, 827, 426, 42, 298, 667, 170, 539, 795, 475, 106, 362, 731, - 234, 603, 859, 443, 26, 282, 651, 154, 523, 779, 410, 90, 346, - 715, 218, 587, 843, 459, 58, 314, 683, 186, 555, 811, 491, 122, - 378, 747, 250, 619, 875, 6, 262, 631, 134, 503, 759, 390, 70, - 326, 695, 198, 567, 823, 422, 38, 294, 663, 166, 535, 791, 471, - 102, 358, 727, 230, 599, 855, 438, 22, 278, 647, 150, 519, 775, - 406, 86, 342, 711, 214, 583, 839, 455, 54, 310, 679, 182, 551, - 807, 487, 118, 374, 743, 246, 615, 871, 14, 270, 639, 142, 511, - 767, 398, 78, 334, 703, 206, 575, 831, 430, 46, 302, 671, 174, - 543, 799, 479, 110, 366, 735, 238, 607, 863, 447, 30, 286, 655, - 158, 527, 783, 414, 94, 350, 719, 222, 591, 847, 463, 62, 318, - 687, 190, 559, 815, 495, 126, 382, 751, 254, 623, 879, 440, 1, - 257, 626, 129, 498, 754, 385, 65, 321, 690, 193, 562, 818, 417, - 33, 289, 658, 161, 530, 786, 466, 97, 353, 722, 225, 594, 850, - 433, 17, 273, 642, 145, 514, 770, 401, 81, 337, 706, 209, 578, - 834, 450, 49, 305, 674, 177, 546, 802, 482, 113, 369, 738, 241, - 610, 866, 9, 265, 634, 137, 506, 762, 393, 73, 329, 698, 201, - 570, 826, 425, 41, 297, 666, 169, 538, 794, 474, 105, 361, 730, - 233, 602, 858, 442, 25, 281, 650, 153, 522, 778, 409, 89, 345, - 714, 217, 586, 842, 458, 57, 313, 682, 185, 554, 810, 490, 121, - 377, 746, 249, 618, 874, 5, 261, 630, 133, 502, 758, 389, 69, - 325, 694, 197, 566, 822, 421, 37, 293, 662, 165, 534, 790, 470, - 101, 357, 726, 229, 598, 854, 437, 21, 277, 646, 149, 518, 774, - 405, 85, 341, 710, 213, 582, 838, 454, 53, 309, 678, 181, 550, - 806, 486, 117, 373, 742, 245, 614, 870, 13, 269, 638, 141, 510, - 766, 397, 77, 333, 702, 205, 574, 830, 429, 45, 301, 670, 173, - 542, 798, 478, 109, 365, 734, 237, 606, 862, 446, 29, 285, 654, - 157, 526, 782, 413, 93, 349, 718, 221, 590, 846, 462, 61, 317, - 686, 189, 558, 814, 494, 125, 381, 750, 253, 622, 878, 3, 259, - 628, 131, 500, 756, 387, 67, 323, 692, 195, 564, 820, 419, 35, - 291, 660, 163, 532, 788, 468, 99, 355, 724, 227, 596, 852, 435, - 19, 275, 644, 147, 516, 772, 403, 83, 339, 708, 211, 580, 836, - 452, 51, 307, 676, 179, 548, 804, 484, 115, 371, 740, 243, 612, - 868, 11, 267, 636, 139, 508, 764, 395, 75, 331, 700, 203, 572, - 828, 427, 43, 299, 668, 171, 540, 796, 476, 107, 363, 732, 235, - 604, 860, 444, 27, 283, 652, 155, 524, 780, 411, 91, 347, 716, - 219, 588, 844, 460, 59, 315, 684, 187, 556, 812, 492, 123, 379, - 748, 251, 620, 876, 7, 263, 632, 135, 504, 760, 391, 71, 327, - 696, 199, 568, 824, 423, 39, 295, 664, 167, 536, 792, 472, 103, - 359, 728, 231, 600, 856, 439, 23, 279, 648, 151, 520, 776, 407, - 87, 343, 712, 215, 584, 840, 456, 55, 311, 680, 183, 552, 808, - 488, 119, 375, 744, 247, 616, 872, 15, 271, 640, 143, 512, 768, - 399, 79, 335, 704, 207, 576, 832, 431, 47, 303, 672, 175, 544, - 800, 480, 111, 367, 736, 239, 608, 864, 448, 31, 287, 656, 159, - 528, 784, 415, 95, 351, 720, 223, 592, 848, 464, 63, 319, 688, - 191, 560, 816, 496, 127, 383, 752, 255, 624, 880]; - - return (unsafe { *PERM881.get_unchecked((index % 881) as usize) } as u32 * 776161 + - unsafe { *PERM881.get_unchecked(((index / 881) % 881) as usize) } as u32 * 881 + - unsafe { - *PERM881.get_unchecked(((index / 776161) % 881) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (683797841u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton883(index: u32) -> f32 { - const PERM883: [u16; 883] = [0, 256, 627, 128, 499, 755, 384, 64, 320, 691, 192, 563, 819, - 416, 32, 288, 659, 160, 531, 787, 467, 96, 352, 723, 224, 595, - 851, 432, 16, 272, 643, 144, 515, 771, 400, 80, 336, 707, 208, - 579, 835, 451, 48, 304, 675, 176, 547, 803, 483, 112, 368, 739, - 240, 611, 867, 8, 264, 635, 136, 507, 763, 392, 72, 328, 699, - 200, 571, 827, 424, 40, 296, 667, 168, 539, 795, 475, 104, 360, - 731, 232, 603, 859, 443, 24, 280, 651, 152, 523, 779, 408, 88, - 344, 715, 216, 587, 843, 459, 56, 312, 683, 184, 555, 811, 491, - 120, 376, 747, 248, 619, 875, 4, 260, 631, 132, 503, 759, 388, - 68, 324, 695, 196, 567, 823, 420, 36, 292, 663, 164, 535, 791, - 471, 100, 356, 727, 228, 599, 855, 436, 20, 276, 647, 148, 519, - 775, 404, 84, 340, 711, 212, 583, 839, 455, 52, 308, 679, 180, - 551, 807, 487, 116, 372, 743, 244, 615, 871, 12, 268, 639, 140, - 511, 767, 396, 76, 332, 703, 204, 575, 831, 428, 44, 300, 671, - 172, 543, 799, 479, 108, 364, 735, 236, 607, 863, 447, 28, 284, - 655, 156, 527, 783, 412, 92, 348, 719, 220, 591, 847, 463, 60, - 316, 687, 188, 559, 815, 495, 124, 380, 751, 252, 623, 879, 440, - 2, 258, 629, 130, 501, 757, 386, 66, 322, 693, 194, 565, 821, - 418, 34, 290, 661, 162, 533, 789, 469, 98, 354, 725, 226, 597, - 853, 434, 18, 274, 645, 146, 517, 773, 402, 82, 338, 709, 210, - 581, 837, 453, 50, 306, 677, 178, 549, 805, 485, 114, 370, 741, - 242, 613, 869, 10, 266, 637, 138, 509, 765, 394, 74, 330, 701, - 202, 573, 829, 426, 42, 298, 669, 170, 541, 797, 477, 106, 362, - 733, 234, 605, 861, 445, 26, 282, 653, 154, 525, 781, 410, 90, - 346, 717, 218, 589, 845, 461, 58, 314, 685, 186, 557, 813, 493, - 122, 378, 749, 250, 621, 877, 6, 262, 633, 134, 505, 761, 390, - 70, 326, 697, 198, 569, 825, 422, 38, 294, 665, 166, 537, 793, - 473, 102, 358, 729, 230, 601, 857, 438, 22, 278, 649, 150, 521, - 777, 406, 86, 342, 713, 214, 585, 841, 457, 54, 310, 681, 182, - 553, 809, 489, 118, 374, 745, 246, 617, 873, 14, 270, 641, 142, - 513, 769, 398, 78, 334, 705, 206, 577, 833, 430, 46, 302, 673, - 174, 545, 801, 481, 110, 366, 737, 238, 609, 865, 449, 30, 286, - 657, 158, 529, 785, 414, 94, 350, 721, 222, 593, 849, 465, 62, - 318, 689, 190, 561, 817, 497, 126, 382, 753, 254, 625, 881, 441, - 1, 257, 628, 129, 500, 756, 385, 65, 321, 692, 193, 564, 820, - 417, 33, 289, 660, 161, 532, 788, 468, 97, 353, 724, 225, 596, - 852, 433, 17, 273, 644, 145, 516, 772, 401, 81, 337, 708, 209, - 580, 836, 452, 49, 305, 676, 177, 548, 804, 484, 113, 369, 740, - 241, 612, 868, 9, 265, 636, 137, 508, 764, 393, 73, 329, 700, - 201, 572, 828, 425, 41, 297, 668, 169, 540, 796, 476, 105, 361, - 732, 233, 604, 860, 444, 25, 281, 652, 153, 524, 780, 409, 89, - 345, 716, 217, 588, 844, 460, 57, 313, 684, 185, 556, 812, 492, - 121, 377, 748, 249, 620, 876, 5, 261, 632, 133, 504, 760, 389, - 69, 325, 696, 197, 568, 824, 421, 37, 293, 664, 165, 536, 792, - 472, 101, 357, 728, 229, 600, 856, 437, 21, 277, 648, 149, 520, - 776, 405, 85, 341, 712, 213, 584, 840, 456, 53, 309, 680, 181, - 552, 808, 488, 117, 373, 744, 245, 616, 872, 13, 269, 640, 141, - 512, 768, 397, 77, 333, 704, 205, 576, 832, 429, 45, 301, 672, - 173, 544, 800, 480, 109, 365, 736, 237, 608, 864, 448, 29, 285, - 656, 157, 528, 784, 413, 93, 349, 720, 221, 592, 848, 464, 61, - 317, 688, 189, 560, 816, 496, 125, 381, 752, 253, 624, 880, 442, - 3, 259, 630, 131, 502, 758, 387, 67, 323, 694, 195, 566, 822, - 419, 35, 291, 662, 163, 534, 790, 470, 99, 355, 726, 227, 598, - 854, 435, 19, 275, 646, 147, 518, 774, 403, 83, 339, 710, 211, - 582, 838, 454, 51, 307, 678, 179, 550, 806, 486, 115, 371, 742, - 243, 614, 870, 11, 267, 638, 139, 510, 766, 395, 75, 331, 702, - 203, 574, 830, 427, 43, 299, 670, 171, 542, 798, 478, 107, 363, - 734, 235, 606, 862, 446, 27, 283, 654, 155, 526, 782, 411, 91, - 347, 718, 219, 590, 846, 462, 59, 315, 686, 187, 558, 814, 494, - 123, 379, 750, 251, 622, 878, 7, 263, 634, 135, 506, 762, 391, - 71, 327, 698, 199, 570, 826, 423, 39, 295, 666, 167, 538, 794, - 474, 103, 359, 730, 231, 602, 858, 439, 23, 279, 650, 151, 522, - 778, 407, 87, 343, 714, 215, 586, 842, 458, 55, 311, 682, 183, - 554, 810, 490, 119, 375, 746, 247, 618, 874, 15, 271, 642, 143, - 514, 770, 399, 79, 335, 706, 207, 578, 834, 431, 47, 303, 674, - 175, 546, 802, 482, 111, 367, 738, 239, 610, 866, 450, 31, 287, - 658, 159, 530, 786, 415, 95, 351, 722, 223, 594, 850, 466, 63, - 319, 690, 191, 562, 818, 498, 127, 383, 754, 255, 626, 882]; - - return (unsafe { *PERM883.get_unchecked((index % 883) as usize) } as u32 * 779689 + - unsafe { *PERM883.get_unchecked(((index / 883) % 883) as usize) } as u32 * 883 + - unsafe { - *PERM883.get_unchecked(((index / 779689) % 883) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (688465387u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton887(index: u32) -> f32 { - const PERM887: [u16; 887] = [0, 256, 631, 128, 503, 759, 384, 64, 320, 695, 192, 567, 823, - 416, 32, 288, 663, 160, 535, 791, 471, 96, 352, 727, 224, 599, - 855, 432, 16, 272, 647, 144, 519, 775, 400, 80, 336, 711, 208, - 583, 839, 455, 48, 304, 679, 176, 551, 807, 487, 112, 368, 743, - 240, 615, 871, 8, 264, 639, 136, 511, 767, 392, 72, 328, 703, - 200, 575, 831, 424, 40, 296, 671, 168, 543, 799, 479, 104, 360, - 735, 232, 607, 863, 447, 24, 280, 655, 152, 527, 783, 408, 88, - 344, 719, 216, 591, 847, 463, 56, 312, 687, 184, 559, 815, 495, - 120, 376, 751, 248, 623, 879, 440, 4, 260, 635, 132, 507, 763, - 388, 68, 324, 699, 196, 571, 827, 420, 36, 292, 667, 164, 539, - 795, 475, 100, 356, 731, 228, 603, 859, 436, 20, 276, 651, 148, - 523, 779, 404, 84, 340, 715, 212, 587, 843, 459, 52, 308, 683, - 180, 555, 811, 491, 116, 372, 747, 244, 619, 875, 12, 268, 643, - 140, 515, 771, 396, 76, 332, 707, 204, 579, 835, 428, 44, 300, - 675, 172, 547, 803, 483, 108, 364, 739, 236, 611, 867, 451, 28, - 284, 659, 156, 531, 787, 412, 92, 348, 723, 220, 595, 851, 467, - 60, 316, 691, 188, 563, 819, 499, 124, 380, 755, 252, 627, 883, - 442, 2, 258, 633, 130, 505, 761, 386, 66, 322, 697, 194, 569, - 825, 418, 34, 290, 665, 162, 537, 793, 473, 98, 354, 729, 226, - 601, 857, 434, 18, 274, 649, 146, 521, 777, 402, 82, 338, 713, - 210, 585, 841, 457, 50, 306, 681, 178, 553, 809, 489, 114, 370, - 745, 242, 617, 873, 10, 266, 641, 138, 513, 769, 394, 74, 330, - 705, 202, 577, 833, 426, 42, 298, 673, 170, 545, 801, 481, 106, - 362, 737, 234, 609, 865, 449, 26, 282, 657, 154, 529, 785, 410, - 90, 346, 721, 218, 593, 849, 465, 58, 314, 689, 186, 561, 817, - 497, 122, 378, 753, 250, 625, 881, 445, 6, 262, 637, 134, 509, - 765, 390, 70, 326, 701, 198, 573, 829, 422, 38, 294, 669, 166, - 541, 797, 477, 102, 358, 733, 230, 605, 861, 438, 22, 278, 653, - 150, 525, 781, 406, 86, 342, 717, 214, 589, 845, 461, 54, 310, - 685, 182, 557, 813, 493, 118, 374, 749, 246, 621, 877, 14, 270, - 645, 142, 517, 773, 398, 78, 334, 709, 206, 581, 837, 430, 46, - 302, 677, 174, 549, 805, 485, 110, 366, 741, 238, 613, 869, 453, - 30, 286, 661, 158, 533, 789, 414, 94, 350, 725, 222, 597, 853, - 469, 62, 318, 693, 190, 565, 821, 501, 126, 382, 757, 254, 629, - 885, 443, 1, 257, 632, 129, 504, 760, 385, 65, 321, 696, 193, - 568, 824, 417, 33, 289, 664, 161, 536, 792, 472, 97, 353, 728, - 225, 600, 856, 433, 17, 273, 648, 145, 520, 776, 401, 81, 337, - 712, 209, 584, 840, 456, 49, 305, 680, 177, 552, 808, 488, 113, - 369, 744, 241, 616, 872, 9, 265, 640, 137, 512, 768, 393, 73, - 329, 704, 201, 576, 832, 425, 41, 297, 672, 169, 544, 800, 480, - 105, 361, 736, 233, 608, 864, 448, 25, 281, 656, 153, 528, 784, - 409, 89, 345, 720, 217, 592, 848, 464, 57, 313, 688, 185, 560, - 816, 496, 121, 377, 752, 249, 624, 880, 441, 5, 261, 636, 133, - 508, 764, 389, 69, 325, 700, 197, 572, 828, 421, 37, 293, 668, - 165, 540, 796, 476, 101, 357, 732, 229, 604, 860, 437, 21, 277, - 652, 149, 524, 780, 405, 85, 341, 716, 213, 588, 844, 460, 53, - 309, 684, 181, 556, 812, 492, 117, 373, 748, 245, 620, 876, 13, - 269, 644, 141, 516, 772, 397, 77, 333, 708, 205, 580, 836, 429, - 45, 301, 676, 173, 548, 804, 484, 109, 365, 740, 237, 612, 868, - 452, 29, 285, 660, 157, 532, 788, 413, 93, 349, 724, 221, 596, - 852, 468, 61, 317, 692, 189, 564, 820, 500, 125, 381, 756, 253, - 628, 884, 444, 3, 259, 634, 131, 506, 762, 387, 67, 323, 698, - 195, 570, 826, 419, 35, 291, 666, 163, 538, 794, 474, 99, 355, - 730, 227, 602, 858, 435, 19, 275, 650, 147, 522, 778, 403, 83, - 339, 714, 211, 586, 842, 458, 51, 307, 682, 179, 554, 810, 490, - 115, 371, 746, 243, 618, 874, 11, 267, 642, 139, 514, 770, 395, - 75, 331, 706, 203, 578, 834, 427, 43, 299, 674, 171, 546, 802, - 482, 107, 363, 738, 235, 610, 866, 450, 27, 283, 658, 155, 530, - 786, 411, 91, 347, 722, 219, 594, 850, 466, 59, 315, 690, 187, - 562, 818, 498, 123, 379, 754, 251, 626, 882, 446, 7, 263, 638, - 135, 510, 766, 391, 71, 327, 702, 199, 574, 830, 423, 39, 295, - 670, 167, 542, 798, 478, 103, 359, 734, 231, 606, 862, 439, 23, - 279, 654, 151, 526, 782, 407, 87, 343, 718, 215, 590, 846, 462, - 55, 311, 686, 183, 558, 814, 494, 119, 375, 750, 247, 622, 878, - 15, 271, 646, 143, 518, 774, 399, 79, 335, 710, 207, 582, 838, - 431, 47, 303, 678, 175, 550, 806, 486, 111, 367, 742, 239, 614, - 870, 454, 31, 287, 662, 159, 534, 790, 415, 95, 351, 726, 223, - 598, 854, 470, 63, 319, 694, 191, 566, 822, 502, 127, 383, 758, - 255, 630, 886]; - - return (unsafe { *PERM887.get_unchecked((index % 887) as usize) } as u32 * 786769 + - unsafe { *PERM887.get_unchecked(((index / 887) % 887) as usize) } as u32 * 887 + - unsafe { - *PERM887.get_unchecked(((index / 786769) % 887) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (697864103u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton907(index: u32) -> f32 { - const PERM907: [u16; 907] = [0, 256, 651, 384, 128, 523, 779, 64, 320, 715, 459, 192, 587, - 843, 32, 288, 683, 416, 160, 555, 811, 96, 352, 747, 491, 224, - 619, 875, 16, 272, 667, 400, 144, 539, 795, 80, 336, 731, 475, - 208, 603, 859, 48, 304, 699, 432, 176, 571, 827, 112, 368, 763, - 507, 240, 635, 891, 448, 8, 264, 659, 392, 136, 531, 787, 72, - 328, 723, 467, 200, 595, 851, 40, 296, 691, 424, 168, 563, 819, - 104, 360, 755, 499, 232, 627, 883, 24, 280, 675, 408, 152, 547, - 803, 88, 344, 739, 483, 216, 611, 867, 56, 312, 707, 440, 184, - 579, 835, 120, 376, 771, 515, 248, 643, 899, 4, 260, 655, 388, - 132, 527, 783, 68, 324, 719, 463, 196, 591, 847, 36, 292, 687, - 420, 164, 559, 815, 100, 356, 751, 495, 228, 623, 879, 20, 276, - 671, 404, 148, 543, 799, 84, 340, 735, 479, 212, 607, 863, 52, - 308, 703, 436, 180, 575, 831, 116, 372, 767, 511, 244, 639, 895, - 455, 12, 268, 663, 396, 140, 535, 791, 76, 332, 727, 471, 204, - 599, 855, 44, 300, 695, 428, 172, 567, 823, 108, 364, 759, 503, - 236, 631, 887, 28, 284, 679, 412, 156, 551, 807, 92, 348, 743, - 487, 220, 615, 871, 60, 316, 711, 444, 188, 583, 839, 124, 380, - 775, 519, 252, 647, 903, 452, 2, 258, 653, 386, 130, 525, 781, - 66, 322, 717, 461, 194, 589, 845, 34, 290, 685, 418, 162, 557, - 813, 98, 354, 749, 493, 226, 621, 877, 18, 274, 669, 402, 146, - 541, 797, 82, 338, 733, 477, 210, 605, 861, 50, 306, 701, 434, - 178, 573, 829, 114, 370, 765, 509, 242, 637, 893, 450, 10, 266, - 661, 394, 138, 533, 789, 74, 330, 725, 469, 202, 597, 853, 42, - 298, 693, 426, 170, 565, 821, 106, 362, 757, 501, 234, 629, 885, - 26, 282, 677, 410, 154, 549, 805, 90, 346, 741, 485, 218, 613, - 869, 58, 314, 709, 442, 186, 581, 837, 122, 378, 773, 517, 250, - 645, 901, 6, 262, 657, 390, 134, 529, 785, 70, 326, 721, 465, - 198, 593, 849, 38, 294, 689, 422, 166, 561, 817, 102, 358, 753, - 497, 230, 625, 881, 22, 278, 673, 406, 150, 545, 801, 86, 342, - 737, 481, 214, 609, 865, 54, 310, 705, 438, 182, 577, 833, 118, - 374, 769, 513, 246, 641, 897, 457, 14, 270, 665, 398, 142, 537, - 793, 78, 334, 729, 473, 206, 601, 857, 46, 302, 697, 430, 174, - 569, 825, 110, 366, 761, 505, 238, 633, 889, 30, 286, 681, 414, - 158, 553, 809, 94, 350, 745, 489, 222, 617, 873, 62, 318, 713, - 446, 190, 585, 841, 126, 382, 777, 521, 254, 649, 905, 453, 1, - 257, 652, 385, 129, 524, 780, 65, 321, 716, 460, 193, 588, 844, - 33, 289, 684, 417, 161, 556, 812, 97, 353, 748, 492, 225, 620, - 876, 17, 273, 668, 401, 145, 540, 796, 81, 337, 732, 476, 209, - 604, 860, 49, 305, 700, 433, 177, 572, 828, 113, 369, 764, 508, - 241, 636, 892, 449, 9, 265, 660, 393, 137, 532, 788, 73, 329, - 724, 468, 201, 596, 852, 41, 297, 692, 425, 169, 564, 820, 105, - 361, 756, 500, 233, 628, 884, 25, 281, 676, 409, 153, 548, 804, - 89, 345, 740, 484, 217, 612, 868, 57, 313, 708, 441, 185, 580, - 836, 121, 377, 772, 516, 249, 644, 900, 5, 261, 656, 389, 133, - 528, 784, 69, 325, 720, 464, 197, 592, 848, 37, 293, 688, 421, - 165, 560, 816, 101, 357, 752, 496, 229, 624, 880, 21, 277, 672, - 405, 149, 544, 800, 85, 341, 736, 480, 213, 608, 864, 53, 309, - 704, 437, 181, 576, 832, 117, 373, 768, 512, 245, 640, 896, 456, - 13, 269, 664, 397, 141, 536, 792, 77, 333, 728, 472, 205, 600, - 856, 45, 301, 696, 429, 173, 568, 824, 109, 365, 760, 504, 237, - 632, 888, 29, 285, 680, 413, 157, 552, 808, 93, 349, 744, 488, - 221, 616, 872, 61, 317, 712, 445, 189, 584, 840, 125, 381, 776, - 520, 253, 648, 904, 454, 3, 259, 654, 387, 131, 526, 782, 67, - 323, 718, 462, 195, 590, 846, 35, 291, 686, 419, 163, 558, 814, - 99, 355, 750, 494, 227, 622, 878, 19, 275, 670, 403, 147, 542, - 798, 83, 339, 734, 478, 211, 606, 862, 51, 307, 702, 435, 179, - 574, 830, 115, 371, 766, 510, 243, 638, 894, 451, 11, 267, 662, - 395, 139, 534, 790, 75, 331, 726, 470, 203, 598, 854, 43, 299, - 694, 427, 171, 566, 822, 107, 363, 758, 502, 235, 630, 886, 27, - 283, 678, 411, 155, 550, 806, 91, 347, 742, 486, 219, 614, 870, - 59, 315, 710, 443, 187, 582, 838, 123, 379, 774, 518, 251, 646, - 902, 7, 263, 658, 391, 135, 530, 786, 71, 327, 722, 466, 199, - 594, 850, 39, 295, 690, 423, 167, 562, 818, 103, 359, 754, 498, - 231, 626, 882, 23, 279, 674, 407, 151, 546, 802, 87, 343, 738, - 482, 215, 610, 866, 55, 311, 706, 439, 183, 578, 834, 119, 375, - 770, 514, 247, 642, 898, 458, 15, 271, 666, 399, 143, 538, 794, - 79, 335, 730, 474, 207, 602, 858, 47, 303, 698, 431, 175, 570, - 826, 111, 367, 762, 506, 239, 634, 890, 31, 287, 682, 415, 159, - 554, 810, 95, 351, 746, 490, 223, 618, 874, 63, 319, 714, 447, - 191, 586, 842, 127, 383, 778, 522, 255, 650, 906]; - - return (unsafe { *PERM907.get_unchecked((index % 907) as usize) } as u32 * 822649 + - unsafe { *PERM907.get_unchecked(((index / 907) % 907) as usize) } as u32 * 907 + - unsafe { - *PERM907.get_unchecked(((index / 822649) % 907) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (746142643u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton911(index: u32) -> f32 { - const PERM911: [u16; 911] = [0, 256, 655, 384, 128, 527, 783, 64, 320, 719, 463, 192, 591, - 847, 32, 288, 687, 416, 160, 559, 815, 96, 352, 751, 495, 224, - 623, 879, 16, 272, 671, 400, 144, 543, 799, 80, 336, 735, 479, - 208, 607, 863, 48, 304, 703, 432, 176, 575, 831, 112, 368, 767, - 511, 240, 639, 895, 448, 8, 264, 663, 392, 136, 535, 791, 72, - 328, 727, 471, 200, 599, 855, 40, 296, 695, 424, 168, 567, 823, - 104, 360, 759, 503, 232, 631, 887, 24, 280, 679, 408, 152, 551, - 807, 88, 344, 743, 487, 216, 615, 871, 56, 312, 711, 440, 184, - 583, 839, 120, 376, 775, 519, 248, 647, 903, 452, 4, 260, 659, - 388, 132, 531, 787, 68, 324, 723, 467, 196, 595, 851, 36, 292, - 691, 420, 164, 563, 819, 100, 356, 755, 499, 228, 627, 883, 20, - 276, 675, 404, 148, 547, 803, 84, 340, 739, 483, 212, 611, 867, - 52, 308, 707, 436, 180, 579, 835, 116, 372, 771, 515, 244, 643, - 899, 459, 12, 268, 667, 396, 140, 539, 795, 76, 332, 731, 475, - 204, 603, 859, 44, 300, 699, 428, 172, 571, 827, 108, 364, 763, - 507, 236, 635, 891, 28, 284, 683, 412, 156, 555, 811, 92, 348, - 747, 491, 220, 619, 875, 60, 316, 715, 444, 188, 587, 843, 124, - 380, 779, 523, 252, 651, 907, 454, 2, 258, 657, 386, 130, 529, - 785, 66, 322, 721, 465, 194, 593, 849, 34, 290, 689, 418, 162, - 561, 817, 98, 354, 753, 497, 226, 625, 881, 18, 274, 673, 402, - 146, 545, 801, 82, 338, 737, 481, 210, 609, 865, 50, 306, 705, - 434, 178, 577, 833, 114, 370, 769, 513, 242, 641, 897, 450, 10, - 266, 665, 394, 138, 537, 793, 74, 330, 729, 473, 202, 601, 857, - 42, 298, 697, 426, 170, 569, 825, 106, 362, 761, 505, 234, 633, - 889, 26, 282, 681, 410, 154, 553, 809, 90, 346, 745, 489, 218, - 617, 873, 58, 314, 713, 442, 186, 585, 841, 122, 378, 777, 521, - 250, 649, 905, 457, 6, 262, 661, 390, 134, 533, 789, 70, 326, - 725, 469, 198, 597, 853, 38, 294, 693, 422, 166, 565, 821, 102, - 358, 757, 501, 230, 629, 885, 22, 278, 677, 406, 150, 549, 805, - 86, 342, 741, 485, 214, 613, 869, 54, 310, 709, 438, 182, 581, - 837, 118, 374, 773, 517, 246, 645, 901, 461, 14, 270, 669, 398, - 142, 541, 797, 78, 334, 733, 477, 206, 605, 861, 46, 302, 701, - 430, 174, 573, 829, 110, 366, 765, 509, 238, 637, 893, 30, 286, - 685, 414, 158, 557, 813, 94, 350, 749, 493, 222, 621, 877, 62, - 318, 717, 446, 190, 589, 845, 126, 382, 781, 525, 254, 653, 909, - 455, 1, 257, 656, 385, 129, 528, 784, 65, 321, 720, 464, 193, - 592, 848, 33, 289, 688, 417, 161, 560, 816, 97, 353, 752, 496, - 225, 624, 880, 17, 273, 672, 401, 145, 544, 800, 81, 337, 736, - 480, 209, 608, 864, 49, 305, 704, 433, 177, 576, 832, 113, 369, - 768, 512, 241, 640, 896, 449, 9, 265, 664, 393, 137, 536, 792, - 73, 329, 728, 472, 201, 600, 856, 41, 297, 696, 425, 169, 568, - 824, 105, 361, 760, 504, 233, 632, 888, 25, 281, 680, 409, 153, - 552, 808, 89, 345, 744, 488, 217, 616, 872, 57, 313, 712, 441, - 185, 584, 840, 121, 377, 776, 520, 249, 648, 904, 453, 5, 261, - 660, 389, 133, 532, 788, 69, 325, 724, 468, 197, 596, 852, 37, - 293, 692, 421, 165, 564, 820, 101, 357, 756, 500, 229, 628, 884, - 21, 277, 676, 405, 149, 548, 804, 85, 341, 740, 484, 213, 612, - 868, 53, 309, 708, 437, 181, 580, 836, 117, 373, 772, 516, 245, - 644, 900, 460, 13, 269, 668, 397, 141, 540, 796, 77, 333, 732, - 476, 205, 604, 860, 45, 301, 700, 429, 173, 572, 828, 109, 365, - 764, 508, 237, 636, 892, 29, 285, 684, 413, 157, 556, 812, 93, - 349, 748, 492, 221, 620, 876, 61, 317, 716, 445, 189, 588, 844, - 125, 381, 780, 524, 253, 652, 908, 456, 3, 259, 658, 387, 131, - 530, 786, 67, 323, 722, 466, 195, 594, 850, 35, 291, 690, 419, - 163, 562, 818, 99, 355, 754, 498, 227, 626, 882, 19, 275, 674, - 403, 147, 546, 802, 83, 339, 738, 482, 211, 610, 866, 51, 307, - 706, 435, 179, 578, 834, 115, 371, 770, 514, 243, 642, 898, 451, - 11, 267, 666, 395, 139, 538, 794, 75, 331, 730, 474, 203, 602, - 858, 43, 299, 698, 427, 171, 570, 826, 107, 363, 762, 506, 235, - 634, 890, 27, 283, 682, 411, 155, 554, 810, 91, 347, 746, 490, - 219, 618, 874, 59, 315, 714, 443, 187, 586, 842, 123, 379, 778, - 522, 251, 650, 906, 458, 7, 263, 662, 391, 135, 534, 790, 71, - 327, 726, 470, 199, 598, 854, 39, 295, 694, 423, 167, 566, 822, - 103, 359, 758, 502, 231, 630, 886, 23, 279, 678, 407, 151, 550, - 806, 87, 343, 742, 486, 215, 614, 870, 55, 311, 710, 439, 183, - 582, 838, 119, 375, 774, 518, 247, 646, 902, 462, 15, 271, 670, - 399, 143, 542, 798, 79, 335, 734, 478, 207, 606, 862, 47, 303, - 702, 431, 175, 574, 830, 111, 367, 766, 510, 239, 638, 894, 31, - 287, 686, 415, 159, 558, 814, 95, 351, 750, 494, 223, 622, 878, - 63, 319, 718, 447, 191, 590, 846, 127, 383, 782, 526, 255, 654, - 910]; - - return (unsafe { *PERM911.get_unchecked((index % 911) as usize) } as u32 * 829921 + - unsafe { *PERM911.get_unchecked(((index / 911) % 911) as usize) } as u32 * 911 + - unsafe { - *PERM911.get_unchecked(((index / 829921) % 911) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (756058031u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton919(index: u32) -> f32 { - const PERM919: [u16; 919] = [0, 256, 663, 384, 128, 535, 791, 64, 320, 727, 471, 192, 599, - 855, 32, 288, 695, 416, 160, 567, 823, 96, 352, 759, 503, 224, - 631, 887, 448, 16, 272, 679, 400, 144, 551, 807, 80, 336, 743, - 487, 208, 615, 871, 48, 304, 711, 432, 176, 583, 839, 112, 368, - 775, 519, 240, 647, 903, 8, 264, 671, 392, 136, 543, 799, 72, - 328, 735, 479, 200, 607, 863, 40, 296, 703, 424, 168, 575, 831, - 104, 360, 767, 511, 232, 639, 895, 463, 24, 280, 687, 408, 152, - 559, 815, 88, 344, 751, 495, 216, 623, 879, 56, 312, 719, 440, - 184, 591, 847, 120, 376, 783, 527, 248, 655, 911, 456, 4, 260, - 667, 388, 132, 539, 795, 68, 324, 731, 475, 196, 603, 859, 36, - 292, 699, 420, 164, 571, 827, 100, 356, 763, 507, 228, 635, 891, - 452, 20, 276, 683, 404, 148, 555, 811, 84, 340, 747, 491, 212, - 619, 875, 52, 308, 715, 436, 180, 587, 843, 116, 372, 779, 523, - 244, 651, 907, 12, 268, 675, 396, 140, 547, 803, 76, 332, 739, - 483, 204, 611, 867, 44, 300, 707, 428, 172, 579, 835, 108, 364, - 771, 515, 236, 643, 899, 467, 28, 284, 691, 412, 156, 563, 819, - 92, 348, 755, 499, 220, 627, 883, 60, 316, 723, 444, 188, 595, - 851, 124, 380, 787, 531, 252, 659, 915, 458, 2, 258, 665, 386, - 130, 537, 793, 66, 322, 729, 473, 194, 601, 857, 34, 290, 697, - 418, 162, 569, 825, 98, 354, 761, 505, 226, 633, 889, 450, 18, - 274, 681, 402, 146, 553, 809, 82, 338, 745, 489, 210, 617, 873, - 50, 306, 713, 434, 178, 585, 841, 114, 370, 777, 521, 242, 649, - 905, 10, 266, 673, 394, 138, 545, 801, 74, 330, 737, 481, 202, - 609, 865, 42, 298, 705, 426, 170, 577, 833, 106, 362, 769, 513, - 234, 641, 897, 465, 26, 282, 689, 410, 154, 561, 817, 90, 346, - 753, 497, 218, 625, 881, 58, 314, 721, 442, 186, 593, 849, 122, - 378, 785, 529, 250, 657, 913, 461, 6, 262, 669, 390, 134, 541, - 797, 70, 326, 733, 477, 198, 605, 861, 38, 294, 701, 422, 166, - 573, 829, 102, 358, 765, 509, 230, 637, 893, 454, 22, 278, 685, - 406, 150, 557, 813, 86, 342, 749, 493, 214, 621, 877, 54, 310, - 717, 438, 182, 589, 845, 118, 374, 781, 525, 246, 653, 909, 14, - 270, 677, 398, 142, 549, 805, 78, 334, 741, 485, 206, 613, 869, - 46, 302, 709, 430, 174, 581, 837, 110, 366, 773, 517, 238, 645, - 901, 469, 30, 286, 693, 414, 158, 565, 821, 94, 350, 757, 501, - 222, 629, 885, 62, 318, 725, 446, 190, 597, 853, 126, 382, 789, - 533, 254, 661, 917, 459, 1, 257, 664, 385, 129, 536, 792, 65, - 321, 728, 472, 193, 600, 856, 33, 289, 696, 417, 161, 568, 824, - 97, 353, 760, 504, 225, 632, 888, 449, 17, 273, 680, 401, 145, - 552, 808, 81, 337, 744, 488, 209, 616, 872, 49, 305, 712, 433, - 177, 584, 840, 113, 369, 776, 520, 241, 648, 904, 9, 265, 672, - 393, 137, 544, 800, 73, 329, 736, 480, 201, 608, 864, 41, 297, - 704, 425, 169, 576, 832, 105, 361, 768, 512, 233, 640, 896, 464, - 25, 281, 688, 409, 153, 560, 816, 89, 345, 752, 496, 217, 624, - 880, 57, 313, 720, 441, 185, 592, 848, 121, 377, 784, 528, 249, - 656, 912, 457, 5, 261, 668, 389, 133, 540, 796, 69, 325, 732, - 476, 197, 604, 860, 37, 293, 700, 421, 165, 572, 828, 101, 357, - 764, 508, 229, 636, 892, 453, 21, 277, 684, 405, 149, 556, 812, - 85, 341, 748, 492, 213, 620, 876, 53, 309, 716, 437, 181, 588, - 844, 117, 373, 780, 524, 245, 652, 908, 13, 269, 676, 397, 141, - 548, 804, 77, 333, 740, 484, 205, 612, 868, 45, 301, 708, 429, - 173, 580, 836, 109, 365, 772, 516, 237, 644, 900, 468, 29, 285, - 692, 413, 157, 564, 820, 93, 349, 756, 500, 221, 628, 884, 61, - 317, 724, 445, 189, 596, 852, 125, 381, 788, 532, 253, 660, 916, - 460, 3, 259, 666, 387, 131, 538, 794, 67, 323, 730, 474, 195, - 602, 858, 35, 291, 698, 419, 163, 570, 826, 99, 355, 762, 506, - 227, 634, 890, 451, 19, 275, 682, 403, 147, 554, 810, 83, 339, - 746, 490, 211, 618, 874, 51, 307, 714, 435, 179, 586, 842, 115, - 371, 778, 522, 243, 650, 906, 11, 267, 674, 395, 139, 546, 802, - 75, 331, 738, 482, 203, 610, 866, 43, 299, 706, 427, 171, 578, - 834, 107, 363, 770, 514, 235, 642, 898, 466, 27, 283, 690, 411, - 155, 562, 818, 91, 347, 754, 498, 219, 626, 882, 59, 315, 722, - 443, 187, 594, 850, 123, 379, 786, 530, 251, 658, 914, 462, 7, - 263, 670, 391, 135, 542, 798, 71, 327, 734, 478, 199, 606, 862, - 39, 295, 702, 423, 167, 574, 830, 103, 359, 766, 510, 231, 638, - 894, 455, 23, 279, 686, 407, 151, 558, 814, 87, 343, 750, 494, - 215, 622, 878, 55, 311, 718, 439, 183, 590, 846, 119, 375, 782, - 526, 247, 654, 910, 15, 271, 678, 399, 143, 550, 806, 79, 335, - 742, 486, 207, 614, 870, 47, 303, 710, 431, 175, 582, 838, 111, - 367, 774, 518, 239, 646, 902, 470, 31, 287, 694, 415, 159, 566, - 822, 95, 351, 758, 502, 223, 630, 886, 63, 319, 726, 447, 191, - 598, 854, 127, 383, 790, 534, 255, 662, 918]; - - return (unsafe { *PERM919.get_unchecked((index % 919) as usize) } as u32 * 844561 + - unsafe { *PERM919.get_unchecked(((index / 919) % 919) as usize) } as u32 * 919 + - unsafe { - *PERM919.get_unchecked(((index / 844561) % 919) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (776151559u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton929(index: u32) -> f32 { - const PERM929: [u16; 929] = [0, 256, 673, 384, 128, 545, 801, 64, 320, 737, 481, 192, 609, - 865, 448, 32, 288, 705, 416, 160, 577, 833, 96, 352, 769, 513, - 224, 641, 897, 16, 272, 689, 400, 144, 561, 817, 80, 336, 753, - 497, 208, 625, 881, 465, 48, 304, 721, 432, 176, 593, 849, 112, - 368, 785, 529, 240, 657, 913, 8, 264, 681, 392, 136, 553, 809, - 72, 328, 745, 489, 200, 617, 873, 456, 40, 296, 713, 424, 168, - 585, 841, 104, 360, 777, 521, 232, 649, 905, 24, 280, 697, 408, - 152, 569, 825, 88, 344, 761, 505, 216, 633, 889, 473, 56, 312, - 729, 440, 184, 601, 857, 120, 376, 793, 537, 248, 665, 921, 4, - 260, 677, 388, 132, 549, 805, 68, 324, 741, 485, 196, 613, 869, - 452, 36, 292, 709, 420, 164, 581, 837, 100, 356, 773, 517, 228, - 645, 901, 20, 276, 693, 404, 148, 565, 821, 84, 340, 757, 501, - 212, 629, 885, 469, 52, 308, 725, 436, 180, 597, 853, 116, 372, - 789, 533, 244, 661, 917, 12, 268, 685, 396, 140, 557, 813, 76, - 332, 749, 493, 204, 621, 877, 460, 44, 300, 717, 428, 172, 589, - 845, 108, 364, 781, 525, 236, 653, 909, 28, 284, 701, 412, 156, - 573, 829, 92, 348, 765, 509, 220, 637, 893, 477, 60, 316, 733, - 444, 188, 605, 861, 124, 380, 797, 541, 252, 669, 925, 2, 258, - 675, 386, 130, 547, 803, 66, 322, 739, 483, 194, 611, 867, 450, - 34, 290, 707, 418, 162, 579, 835, 98, 354, 771, 515, 226, 643, - 899, 18, 274, 691, 402, 146, 563, 819, 82, 338, 755, 499, 210, - 627, 883, 467, 50, 306, 723, 434, 178, 595, 851, 114, 370, 787, - 531, 242, 659, 915, 10, 266, 683, 394, 138, 555, 811, 74, 330, - 747, 491, 202, 619, 875, 458, 42, 298, 715, 426, 170, 587, 843, - 106, 362, 779, 523, 234, 651, 907, 26, 282, 699, 410, 154, 571, - 827, 90, 346, 763, 507, 218, 635, 891, 475, 58, 314, 731, 442, - 186, 603, 859, 122, 378, 795, 539, 250, 667, 923, 6, 262, 679, - 390, 134, 551, 807, 70, 326, 743, 487, 198, 615, 871, 454, 38, - 294, 711, 422, 166, 583, 839, 102, 358, 775, 519, 230, 647, 903, - 22, 278, 695, 406, 150, 567, 823, 86, 342, 759, 503, 214, 631, - 887, 471, 54, 310, 727, 438, 182, 599, 855, 118, 374, 791, 535, - 246, 663, 919, 14, 270, 687, 398, 142, 559, 815, 78, 334, 751, - 495, 206, 623, 879, 462, 46, 302, 719, 430, 174, 591, 847, 110, - 366, 783, 527, 238, 655, 911, 30, 286, 703, 414, 158, 575, 831, - 94, 350, 767, 511, 222, 639, 895, 479, 62, 318, 735, 446, 190, - 607, 863, 126, 382, 799, 543, 254, 671, 927, 464, 1, 257, 674, - 385, 129, 546, 802, 65, 321, 738, 482, 193, 610, 866, 449, 33, - 289, 706, 417, 161, 578, 834, 97, 353, 770, 514, 225, 642, 898, - 17, 273, 690, 401, 145, 562, 818, 81, 337, 754, 498, 209, 626, - 882, 466, 49, 305, 722, 433, 177, 594, 850, 113, 369, 786, 530, - 241, 658, 914, 9, 265, 682, 393, 137, 554, 810, 73, 329, 746, - 490, 201, 618, 874, 457, 41, 297, 714, 425, 169, 586, 842, 105, - 361, 778, 522, 233, 650, 906, 25, 281, 698, 409, 153, 570, 826, - 89, 345, 762, 506, 217, 634, 890, 474, 57, 313, 730, 441, 185, - 602, 858, 121, 377, 794, 538, 249, 666, 922, 5, 261, 678, 389, - 133, 550, 806, 69, 325, 742, 486, 197, 614, 870, 453, 37, 293, - 710, 421, 165, 582, 838, 101, 357, 774, 518, 229, 646, 902, 21, - 277, 694, 405, 149, 566, 822, 85, 341, 758, 502, 213, 630, 886, - 470, 53, 309, 726, 437, 181, 598, 854, 117, 373, 790, 534, 245, - 662, 918, 13, 269, 686, 397, 141, 558, 814, 77, 333, 750, 494, - 205, 622, 878, 461, 45, 301, 718, 429, 173, 590, 846, 109, 365, - 782, 526, 237, 654, 910, 29, 285, 702, 413, 157, 574, 830, 93, - 349, 766, 510, 221, 638, 894, 478, 61, 317, 734, 445, 189, 606, - 862, 125, 381, 798, 542, 253, 670, 926, 3, 259, 676, 387, 131, - 548, 804, 67, 323, 740, 484, 195, 612, 868, 451, 35, 291, 708, - 419, 163, 580, 836, 99, 355, 772, 516, 227, 644, 900, 19, 275, - 692, 403, 147, 564, 820, 83, 339, 756, 500, 211, 628, 884, 468, - 51, 307, 724, 435, 179, 596, 852, 115, 371, 788, 532, 243, 660, - 916, 11, 267, 684, 395, 139, 556, 812, 75, 331, 748, 492, 203, - 620, 876, 459, 43, 299, 716, 427, 171, 588, 844, 107, 363, 780, - 524, 235, 652, 908, 27, 283, 700, 411, 155, 572, 828, 91, 347, - 764, 508, 219, 636, 892, 476, 59, 315, 732, 443, 187, 604, 860, - 123, 379, 796, 540, 251, 668, 924, 7, 263, 680, 391, 135, 552, - 808, 71, 327, 744, 488, 199, 616, 872, 455, 39, 295, 712, 423, - 167, 584, 840, 103, 359, 776, 520, 231, 648, 904, 23, 279, 696, - 407, 151, 568, 824, 87, 343, 760, 504, 215, 632, 888, 472, 55, - 311, 728, 439, 183, 600, 856, 119, 375, 792, 536, 247, 664, 920, - 15, 271, 688, 399, 143, 560, 816, 79, 335, 752, 496, 207, 624, - 880, 463, 47, 303, 720, 431, 175, 592, 848, 111, 367, 784, 528, - 239, 656, 912, 31, 287, 704, 415, 159, 576, 832, 95, 351, 768, - 512, 223, 640, 896, 480, 63, 319, 736, 447, 191, 608, 864, 127, - 383, 800, 544, 255, 672, 928]; - - return (unsafe { *PERM929.get_unchecked((index % 929) as usize) } as u32 * 863041 + - unsafe { *PERM929.get_unchecked(((index / 929) % 929) as usize) } as u32 * 929 + - unsafe { - *PERM929.get_unchecked(((index / 863041) % 929) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (801765089u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton937(index: u32) -> f32 { - const PERM937: [u16; 937] = [0, 256, 681, 384, 128, 553, 809, 64, 320, 745, 489, 192, 617, - 873, 448, 32, 288, 713, 416, 160, 585, 841, 96, 352, 777, 521, - 224, 649, 905, 16, 272, 697, 400, 144, 569, 825, 80, 336, 761, - 505, 208, 633, 889, 473, 48, 304, 729, 432, 176, 601, 857, 112, - 368, 793, 537, 240, 665, 921, 464, 8, 264, 689, 392, 136, 561, - 817, 72, 328, 753, 497, 200, 625, 881, 456, 40, 296, 721, 424, - 168, 593, 849, 104, 360, 785, 529, 232, 657, 913, 24, 280, 705, - 408, 152, 577, 833, 88, 344, 769, 513, 216, 641, 897, 481, 56, - 312, 737, 440, 184, 609, 865, 120, 376, 801, 545, 248, 673, 929, - 4, 260, 685, 388, 132, 557, 813, 68, 324, 749, 493, 196, 621, - 877, 452, 36, 292, 717, 420, 164, 589, 845, 100, 356, 781, 525, - 228, 653, 909, 20, 276, 701, 404, 148, 573, 829, 84, 340, 765, - 509, 212, 637, 893, 477, 52, 308, 733, 436, 180, 605, 861, 116, - 372, 797, 541, 244, 669, 925, 469, 12, 268, 693, 396, 140, 565, - 821, 76, 332, 757, 501, 204, 629, 885, 460, 44, 300, 725, 428, - 172, 597, 853, 108, 364, 789, 533, 236, 661, 917, 28, 284, 709, - 412, 156, 581, 837, 92, 348, 773, 517, 220, 645, 901, 485, 60, - 316, 741, 444, 188, 613, 869, 124, 380, 805, 549, 252, 677, 933, - 2, 258, 683, 386, 130, 555, 811, 66, 322, 747, 491, 194, 619, - 875, 450, 34, 290, 715, 418, 162, 587, 843, 98, 354, 779, 523, - 226, 651, 907, 18, 274, 699, 402, 146, 571, 827, 82, 338, 763, - 507, 210, 635, 891, 475, 50, 306, 731, 434, 178, 603, 859, 114, - 370, 795, 539, 242, 667, 923, 466, 10, 266, 691, 394, 138, 563, - 819, 74, 330, 755, 499, 202, 627, 883, 458, 42, 298, 723, 426, - 170, 595, 851, 106, 362, 787, 531, 234, 659, 915, 26, 282, 707, - 410, 154, 579, 835, 90, 346, 771, 515, 218, 643, 899, 483, 58, - 314, 739, 442, 186, 611, 867, 122, 378, 803, 547, 250, 675, 931, - 6, 262, 687, 390, 134, 559, 815, 70, 326, 751, 495, 198, 623, - 879, 454, 38, 294, 719, 422, 166, 591, 847, 102, 358, 783, 527, - 230, 655, 911, 22, 278, 703, 406, 150, 575, 831, 86, 342, 767, - 511, 214, 639, 895, 479, 54, 310, 735, 438, 182, 607, 863, 118, - 374, 799, 543, 246, 671, 927, 471, 14, 270, 695, 398, 142, 567, - 823, 78, 334, 759, 503, 206, 631, 887, 462, 46, 302, 727, 430, - 174, 599, 855, 110, 366, 791, 535, 238, 663, 919, 30, 286, 711, - 414, 158, 583, 839, 94, 350, 775, 519, 222, 647, 903, 487, 62, - 318, 743, 446, 190, 615, 871, 126, 382, 807, 551, 254, 679, 935, - 468, 1, 257, 682, 385, 129, 554, 810, 65, 321, 746, 490, 193, - 618, 874, 449, 33, 289, 714, 417, 161, 586, 842, 97, 353, 778, - 522, 225, 650, 906, 17, 273, 698, 401, 145, 570, 826, 81, 337, - 762, 506, 209, 634, 890, 474, 49, 305, 730, 433, 177, 602, 858, - 113, 369, 794, 538, 241, 666, 922, 465, 9, 265, 690, 393, 137, - 562, 818, 73, 329, 754, 498, 201, 626, 882, 457, 41, 297, 722, - 425, 169, 594, 850, 105, 361, 786, 530, 233, 658, 914, 25, 281, - 706, 409, 153, 578, 834, 89, 345, 770, 514, 217, 642, 898, 482, - 57, 313, 738, 441, 185, 610, 866, 121, 377, 802, 546, 249, 674, - 930, 5, 261, 686, 389, 133, 558, 814, 69, 325, 750, 494, 197, - 622, 878, 453, 37, 293, 718, 421, 165, 590, 846, 101, 357, 782, - 526, 229, 654, 910, 21, 277, 702, 405, 149, 574, 830, 85, 341, - 766, 510, 213, 638, 894, 478, 53, 309, 734, 437, 181, 606, 862, - 117, 373, 798, 542, 245, 670, 926, 470, 13, 269, 694, 397, 141, - 566, 822, 77, 333, 758, 502, 205, 630, 886, 461, 45, 301, 726, - 429, 173, 598, 854, 109, 365, 790, 534, 237, 662, 918, 29, 285, - 710, 413, 157, 582, 838, 93, 349, 774, 518, 221, 646, 902, 486, - 61, 317, 742, 445, 189, 614, 870, 125, 381, 806, 550, 253, 678, - 934, 3, 259, 684, 387, 131, 556, 812, 67, 323, 748, 492, 195, - 620, 876, 451, 35, 291, 716, 419, 163, 588, 844, 99, 355, 780, - 524, 227, 652, 908, 19, 275, 700, 403, 147, 572, 828, 83, 339, - 764, 508, 211, 636, 892, 476, 51, 307, 732, 435, 179, 604, 860, - 115, 371, 796, 540, 243, 668, 924, 467, 11, 267, 692, 395, 139, - 564, 820, 75, 331, 756, 500, 203, 628, 884, 459, 43, 299, 724, - 427, 171, 596, 852, 107, 363, 788, 532, 235, 660, 916, 27, 283, - 708, 411, 155, 580, 836, 91, 347, 772, 516, 219, 644, 900, 484, - 59, 315, 740, 443, 187, 612, 868, 123, 379, 804, 548, 251, 676, - 932, 7, 263, 688, 391, 135, 560, 816, 71, 327, 752, 496, 199, - 624, 880, 455, 39, 295, 720, 423, 167, 592, 848, 103, 359, 784, - 528, 231, 656, 912, 23, 279, 704, 407, 151, 576, 832, 87, 343, - 768, 512, 215, 640, 896, 480, 55, 311, 736, 439, 183, 608, 864, - 119, 375, 800, 544, 247, 672, 928, 472, 15, 271, 696, 399, 143, - 568, 824, 79, 335, 760, 504, 207, 632, 888, 463, 47, 303, 728, - 431, 175, 600, 856, 111, 367, 792, 536, 239, 664, 920, 31, 287, - 712, 415, 159, 584, 840, 95, 351, 776, 520, 223, 648, 904, 488, - 63, 319, 744, 447, 191, 616, 872, 127, 383, 808, 552, 255, 680, - 936]; - - return (unsafe { *PERM937.get_unchecked((index % 937) as usize) } as u32 * 877969 + - unsafe { *PERM937.get_unchecked(((index / 937) % 937) as usize) } as u32 * 937 + - unsafe { - *PERM937.get_unchecked(((index / 877969) % 937) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (822656953u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton941(index: u32) -> f32 { - const PERM941: [u16; 941] = [0, 256, 685, 384, 128, 557, 813, 64, 320, 749, 493, 192, 621, - 877, 448, 32, 288, 717, 416, 160, 589, 845, 96, 352, 781, 525, - 224, 653, 909, 16, 272, 701, 400, 144, 573, 829, 80, 336, 765, - 509, 208, 637, 893, 477, 48, 304, 733, 432, 176, 605, 861, 112, - 368, 797, 541, 240, 669, 925, 464, 8, 264, 693, 392, 136, 565, - 821, 72, 328, 757, 501, 200, 629, 885, 456, 40, 296, 725, 424, - 168, 597, 853, 104, 360, 789, 533, 232, 661, 917, 24, 280, 709, - 408, 152, 581, 837, 88, 344, 773, 517, 216, 645, 901, 485, 56, - 312, 741, 440, 184, 613, 869, 120, 376, 805, 549, 248, 677, 933, - 468, 4, 260, 689, 388, 132, 561, 817, 68, 324, 753, 497, 196, - 625, 881, 452, 36, 292, 721, 420, 164, 593, 849, 100, 356, 785, - 529, 228, 657, 913, 20, 276, 705, 404, 148, 577, 833, 84, 340, - 769, 513, 212, 641, 897, 481, 52, 308, 737, 436, 180, 609, 865, - 116, 372, 801, 545, 244, 673, 929, 473, 12, 268, 697, 396, 140, - 569, 825, 76, 332, 761, 505, 204, 633, 889, 460, 44, 300, 729, - 428, 172, 601, 857, 108, 364, 793, 537, 236, 665, 921, 28, 284, - 713, 412, 156, 585, 841, 92, 348, 777, 521, 220, 649, 905, 489, - 60, 316, 745, 444, 188, 617, 873, 124, 380, 809, 553, 252, 681, - 937, 2, 258, 687, 386, 130, 559, 815, 66, 322, 751, 495, 194, - 623, 879, 450, 34, 290, 719, 418, 162, 591, 847, 98, 354, 783, - 527, 226, 655, 911, 18, 274, 703, 402, 146, 575, 831, 82, 338, - 767, 511, 210, 639, 895, 479, 50, 306, 735, 434, 178, 607, 863, - 114, 370, 799, 543, 242, 671, 927, 466, 10, 266, 695, 394, 138, - 567, 823, 74, 330, 759, 503, 202, 631, 887, 458, 42, 298, 727, - 426, 170, 599, 855, 106, 362, 791, 535, 234, 663, 919, 26, 282, - 711, 410, 154, 583, 839, 90, 346, 775, 519, 218, 647, 903, 487, - 58, 314, 743, 442, 186, 615, 871, 122, 378, 807, 551, 250, 679, - 935, 471, 6, 262, 691, 390, 134, 563, 819, 70, 326, 755, 499, - 198, 627, 883, 454, 38, 294, 723, 422, 166, 595, 851, 102, 358, - 787, 531, 230, 659, 915, 22, 278, 707, 406, 150, 579, 835, 86, - 342, 771, 515, 214, 643, 899, 483, 54, 310, 739, 438, 182, 611, - 867, 118, 374, 803, 547, 246, 675, 931, 475, 14, 270, 699, 398, - 142, 571, 827, 78, 334, 763, 507, 206, 635, 891, 462, 46, 302, - 731, 430, 174, 603, 859, 110, 366, 795, 539, 238, 667, 923, 30, - 286, 715, 414, 158, 587, 843, 94, 350, 779, 523, 222, 651, 907, - 491, 62, 318, 747, 446, 190, 619, 875, 126, 382, 811, 555, 254, - 683, 939, 470, 1, 257, 686, 385, 129, 558, 814, 65, 321, 750, - 494, 193, 622, 878, 449, 33, 289, 718, 417, 161, 590, 846, 97, - 353, 782, 526, 225, 654, 910, 17, 273, 702, 401, 145, 574, 830, - 81, 337, 766, 510, 209, 638, 894, 478, 49, 305, 734, 433, 177, - 606, 862, 113, 369, 798, 542, 241, 670, 926, 465, 9, 265, 694, - 393, 137, 566, 822, 73, 329, 758, 502, 201, 630, 886, 457, 41, - 297, 726, 425, 169, 598, 854, 105, 361, 790, 534, 233, 662, 918, - 25, 281, 710, 409, 153, 582, 838, 89, 345, 774, 518, 217, 646, - 902, 486, 57, 313, 742, 441, 185, 614, 870, 121, 377, 806, 550, - 249, 678, 934, 469, 5, 261, 690, 389, 133, 562, 818, 69, 325, - 754, 498, 197, 626, 882, 453, 37, 293, 722, 421, 165, 594, 850, - 101, 357, 786, 530, 229, 658, 914, 21, 277, 706, 405, 149, 578, - 834, 85, 341, 770, 514, 213, 642, 898, 482, 53, 309, 738, 437, - 181, 610, 866, 117, 373, 802, 546, 245, 674, 930, 474, 13, 269, - 698, 397, 141, 570, 826, 77, 333, 762, 506, 205, 634, 890, 461, - 45, 301, 730, 429, 173, 602, 858, 109, 365, 794, 538, 237, 666, - 922, 29, 285, 714, 413, 157, 586, 842, 93, 349, 778, 522, 221, - 650, 906, 490, 61, 317, 746, 445, 189, 618, 874, 125, 381, 810, - 554, 253, 682, 938, 3, 259, 688, 387, 131, 560, 816, 67, 323, - 752, 496, 195, 624, 880, 451, 35, 291, 720, 419, 163, 592, 848, - 99, 355, 784, 528, 227, 656, 912, 19, 275, 704, 403, 147, 576, - 832, 83, 339, 768, 512, 211, 640, 896, 480, 51, 307, 736, 435, - 179, 608, 864, 115, 371, 800, 544, 243, 672, 928, 467, 11, 267, - 696, 395, 139, 568, 824, 75, 331, 760, 504, 203, 632, 888, 459, - 43, 299, 728, 427, 171, 600, 856, 107, 363, 792, 536, 235, 664, - 920, 27, 283, 712, 411, 155, 584, 840, 91, 347, 776, 520, 219, - 648, 904, 488, 59, 315, 744, 443, 187, 616, 872, 123, 379, 808, - 552, 251, 680, 936, 472, 7, 263, 692, 391, 135, 564, 820, 71, - 327, 756, 500, 199, 628, 884, 455, 39, 295, 724, 423, 167, 596, - 852, 103, 359, 788, 532, 231, 660, 916, 23, 279, 708, 407, 151, - 580, 836, 87, 343, 772, 516, 215, 644, 900, 484, 55, 311, 740, - 439, 183, 612, 868, 119, 375, 804, 548, 247, 676, 932, 476, 15, - 271, 700, 399, 143, 572, 828, 79, 335, 764, 508, 207, 636, 892, - 463, 47, 303, 732, 431, 175, 604, 860, 111, 367, 796, 540, 239, - 668, 924, 31, 287, 716, 415, 159, 588, 844, 95, 351, 780, 524, - 223, 652, 908, 492, 63, 319, 748, 447, 191, 620, 876, 127, 383, - 812, 556, 255, 684, 940]; - - return (unsafe { *PERM941.get_unchecked((index % 941) as usize) } as u32 * 885481 + - unsafe { *PERM941.get_unchecked(((index / 941) % 941) as usize) } as u32 * 941 + - unsafe { - *PERM941.get_unchecked(((index / 885481) % 941) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (833237621u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton947(index: u32) -> f32 { - const PERM947: [u16; 947] = [0, 256, 691, 384, 128, 563, 819, 64, 320, 755, 499, 192, 627, - 883, 448, 32, 288, 723, 416, 160, 595, 851, 96, 352, 787, 531, - 224, 659, 915, 464, 16, 272, 707, 400, 144, 579, 835, 80, 336, - 771, 515, 208, 643, 899, 483, 48, 304, 739, 432, 176, 611, 867, - 112, 368, 803, 547, 240, 675, 931, 8, 264, 699, 392, 136, 571, - 827, 72, 328, 763, 507, 200, 635, 891, 456, 40, 296, 731, 424, - 168, 603, 859, 104, 360, 795, 539, 232, 667, 923, 475, 24, 280, - 715, 408, 152, 587, 843, 88, 344, 779, 523, 216, 651, 907, 491, - 56, 312, 747, 440, 184, 619, 875, 120, 376, 811, 555, 248, 683, - 939, 4, 260, 695, 388, 132, 567, 823, 68, 324, 759, 503, 196, - 631, 887, 452, 36, 292, 727, 420, 164, 599, 855, 100, 356, 791, - 535, 228, 663, 919, 468, 20, 276, 711, 404, 148, 583, 839, 84, - 340, 775, 519, 212, 647, 903, 487, 52, 308, 743, 436, 180, 615, - 871, 116, 372, 807, 551, 244, 679, 935, 12, 268, 703, 396, 140, - 575, 831, 76, 332, 767, 511, 204, 639, 895, 460, 44, 300, 735, - 428, 172, 607, 863, 108, 364, 799, 543, 236, 671, 927, 479, 28, - 284, 719, 412, 156, 591, 847, 92, 348, 783, 527, 220, 655, 911, - 495, 60, 316, 751, 444, 188, 623, 879, 124, 380, 815, 559, 252, - 687, 943, 472, 2, 258, 693, 386, 130, 565, 821, 66, 322, 757, - 501, 194, 629, 885, 450, 34, 290, 725, 418, 162, 597, 853, 98, - 354, 789, 533, 226, 661, 917, 466, 18, 274, 709, 402, 146, 581, - 837, 82, 338, 773, 517, 210, 645, 901, 485, 50, 306, 741, 434, - 178, 613, 869, 114, 370, 805, 549, 242, 677, 933, 10, 266, 701, - 394, 138, 573, 829, 74, 330, 765, 509, 202, 637, 893, 458, 42, - 298, 733, 426, 170, 605, 861, 106, 362, 797, 541, 234, 669, 925, - 477, 26, 282, 717, 410, 154, 589, 845, 90, 346, 781, 525, 218, - 653, 909, 493, 58, 314, 749, 442, 186, 621, 877, 122, 378, 813, - 557, 250, 685, 941, 6, 262, 697, 390, 134, 569, 825, 70, 326, - 761, 505, 198, 633, 889, 454, 38, 294, 729, 422, 166, 601, 857, - 102, 358, 793, 537, 230, 665, 921, 470, 22, 278, 713, 406, 150, - 585, 841, 86, 342, 777, 521, 214, 649, 905, 489, 54, 310, 745, - 438, 182, 617, 873, 118, 374, 809, 553, 246, 681, 937, 14, 270, - 705, 398, 142, 577, 833, 78, 334, 769, 513, 206, 641, 897, 462, - 46, 302, 737, 430, 174, 609, 865, 110, 366, 801, 545, 238, 673, - 929, 481, 30, 286, 721, 414, 158, 593, 849, 94, 350, 785, 529, - 222, 657, 913, 497, 62, 318, 753, 446, 190, 625, 881, 126, 382, - 817, 561, 254, 689, 945, 473, 1, 257, 692, 385, 129, 564, 820, - 65, 321, 756, 500, 193, 628, 884, 449, 33, 289, 724, 417, 161, - 596, 852, 97, 353, 788, 532, 225, 660, 916, 465, 17, 273, 708, - 401, 145, 580, 836, 81, 337, 772, 516, 209, 644, 900, 484, 49, - 305, 740, 433, 177, 612, 868, 113, 369, 804, 548, 241, 676, 932, - 9, 265, 700, 393, 137, 572, 828, 73, 329, 764, 508, 201, 636, - 892, 457, 41, 297, 732, 425, 169, 604, 860, 105, 361, 796, 540, - 233, 668, 924, 476, 25, 281, 716, 409, 153, 588, 844, 89, 345, - 780, 524, 217, 652, 908, 492, 57, 313, 748, 441, 185, 620, 876, - 121, 377, 812, 556, 249, 684, 940, 5, 261, 696, 389, 133, 568, - 824, 69, 325, 760, 504, 197, 632, 888, 453, 37, 293, 728, 421, - 165, 600, 856, 101, 357, 792, 536, 229, 664, 920, 469, 21, 277, - 712, 405, 149, 584, 840, 85, 341, 776, 520, 213, 648, 904, 488, - 53, 309, 744, 437, 181, 616, 872, 117, 373, 808, 552, 245, 680, - 936, 13, 269, 704, 397, 141, 576, 832, 77, 333, 768, 512, 205, - 640, 896, 461, 45, 301, 736, 429, 173, 608, 864, 109, 365, 800, - 544, 237, 672, 928, 480, 29, 285, 720, 413, 157, 592, 848, 93, - 349, 784, 528, 221, 656, 912, 496, 61, 317, 752, 445, 189, 624, - 880, 125, 381, 816, 560, 253, 688, 944, 474, 3, 259, 694, 387, - 131, 566, 822, 67, 323, 758, 502, 195, 630, 886, 451, 35, 291, - 726, 419, 163, 598, 854, 99, 355, 790, 534, 227, 662, 918, 467, - 19, 275, 710, 403, 147, 582, 838, 83, 339, 774, 518, 211, 646, - 902, 486, 51, 307, 742, 435, 179, 614, 870, 115, 371, 806, 550, - 243, 678, 934, 11, 267, 702, 395, 139, 574, 830, 75, 331, 766, - 510, 203, 638, 894, 459, 43, 299, 734, 427, 171, 606, 862, 107, - 363, 798, 542, 235, 670, 926, 478, 27, 283, 718, 411, 155, 590, - 846, 91, 347, 782, 526, 219, 654, 910, 494, 59, 315, 750, 443, - 187, 622, 878, 123, 379, 814, 558, 251, 686, 942, 7, 263, 698, - 391, 135, 570, 826, 71, 327, 762, 506, 199, 634, 890, 455, 39, - 295, 730, 423, 167, 602, 858, 103, 359, 794, 538, 231, 666, 922, - 471, 23, 279, 714, 407, 151, 586, 842, 87, 343, 778, 522, 215, - 650, 906, 490, 55, 311, 746, 439, 183, 618, 874, 119, 375, 810, - 554, 247, 682, 938, 15, 271, 706, 399, 143, 578, 834, 79, 335, - 770, 514, 207, 642, 898, 463, 47, 303, 738, 431, 175, 610, 866, - 111, 367, 802, 546, 239, 674, 930, 482, 31, 287, 722, 415, 159, - 594, 850, 95, 351, 786, 530, 223, 658, 914, 498, 63, 319, 754, - 447, 191, 626, 882, 127, 383, 818, 562, 255, 690, 946]; - - return (unsafe { *PERM947.get_unchecked((index % 947) as usize) } as u32 * 896809 + - unsafe { *PERM947.get_unchecked(((index / 947) % 947) as usize) } as u32 * 947 + - unsafe { - *PERM947.get_unchecked(((index / 896809) % 947) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (849278123u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton953(index: u32) -> f32 { - const PERM953: [u16; 953] = [0, 256, 697, 384, 128, 569, 825, 64, 320, 761, 505, 192, 633, - 889, 448, 32, 288, 729, 416, 160, 601, 857, 96, 352, 793, 537, - 224, 665, 921, 464, 16, 272, 713, 400, 144, 585, 841, 80, 336, - 777, 521, 208, 649, 905, 489, 48, 304, 745, 432, 176, 617, 873, - 112, 368, 809, 553, 240, 681, 937, 472, 8, 264, 705, 392, 136, - 577, 833, 72, 328, 769, 513, 200, 641, 897, 456, 40, 296, 737, - 424, 168, 609, 865, 104, 360, 801, 545, 232, 673, 929, 481, 24, - 280, 721, 408, 152, 593, 849, 88, 344, 785, 529, 216, 657, 913, - 497, 56, 312, 753, 440, 184, 625, 881, 120, 376, 817, 561, 248, - 689, 945, 4, 260, 701, 388, 132, 573, 829, 68, 324, 765, 509, - 196, 637, 893, 452, 36, 292, 733, 420, 164, 605, 861, 100, 356, - 797, 541, 228, 669, 925, 468, 20, 276, 717, 404, 148, 589, 845, - 84, 340, 781, 525, 212, 653, 909, 493, 52, 308, 749, 436, 180, - 621, 877, 116, 372, 813, 557, 244, 685, 941, 477, 12, 268, 709, - 396, 140, 581, 837, 76, 332, 773, 517, 204, 645, 901, 460, 44, - 300, 741, 428, 172, 613, 869, 108, 364, 805, 549, 236, 677, 933, - 485, 28, 284, 725, 412, 156, 597, 853, 92, 348, 789, 533, 220, - 661, 917, 501, 60, 316, 757, 444, 188, 629, 885, 124, 380, 821, - 565, 252, 693, 949, 2, 258, 699, 386, 130, 571, 827, 66, 322, - 763, 507, 194, 635, 891, 450, 34, 290, 731, 418, 162, 603, 859, - 98, 354, 795, 539, 226, 667, 923, 466, 18, 274, 715, 402, 146, - 587, 843, 82, 338, 779, 523, 210, 651, 907, 491, 50, 306, 747, - 434, 178, 619, 875, 114, 370, 811, 555, 242, 683, 939, 474, 10, - 266, 707, 394, 138, 579, 835, 74, 330, 771, 515, 202, 643, 899, - 458, 42, 298, 739, 426, 170, 611, 867, 106, 362, 803, 547, 234, - 675, 931, 483, 26, 282, 723, 410, 154, 595, 851, 90, 346, 787, - 531, 218, 659, 915, 499, 58, 314, 755, 442, 186, 627, 883, 122, - 378, 819, 563, 250, 691, 947, 6, 262, 703, 390, 134, 575, 831, - 70, 326, 767, 511, 198, 639, 895, 454, 38, 294, 735, 422, 166, - 607, 863, 102, 358, 799, 543, 230, 671, 927, 470, 22, 278, 719, - 406, 150, 591, 847, 86, 342, 783, 527, 214, 655, 911, 495, 54, - 310, 751, 438, 182, 623, 879, 118, 374, 815, 559, 246, 687, 943, - 479, 14, 270, 711, 398, 142, 583, 839, 78, 334, 775, 519, 206, - 647, 903, 462, 46, 302, 743, 430, 174, 615, 871, 110, 366, 807, - 551, 238, 679, 935, 487, 30, 286, 727, 414, 158, 599, 855, 94, - 350, 791, 535, 222, 663, 919, 503, 62, 318, 759, 446, 190, 631, - 887, 126, 382, 823, 567, 254, 695, 951, 476, 1, 257, 698, 385, - 129, 570, 826, 65, 321, 762, 506, 193, 634, 890, 449, 33, 289, - 730, 417, 161, 602, 858, 97, 353, 794, 538, 225, 666, 922, 465, - 17, 273, 714, 401, 145, 586, 842, 81, 337, 778, 522, 209, 650, - 906, 490, 49, 305, 746, 433, 177, 618, 874, 113, 369, 810, 554, - 241, 682, 938, 473, 9, 265, 706, 393, 137, 578, 834, 73, 329, - 770, 514, 201, 642, 898, 457, 41, 297, 738, 425, 169, 610, 866, - 105, 361, 802, 546, 233, 674, 930, 482, 25, 281, 722, 409, 153, - 594, 850, 89, 345, 786, 530, 217, 658, 914, 498, 57, 313, 754, - 441, 185, 626, 882, 121, 377, 818, 562, 249, 690, 946, 5, 261, - 702, 389, 133, 574, 830, 69, 325, 766, 510, 197, 638, 894, 453, - 37, 293, 734, 421, 165, 606, 862, 101, 357, 798, 542, 229, 670, - 926, 469, 21, 277, 718, 405, 149, 590, 846, 85, 341, 782, 526, - 213, 654, 910, 494, 53, 309, 750, 437, 181, 622, 878, 117, 373, - 814, 558, 245, 686, 942, 478, 13, 269, 710, 397, 141, 582, 838, - 77, 333, 774, 518, 205, 646, 902, 461, 45, 301, 742, 429, 173, - 614, 870, 109, 365, 806, 550, 237, 678, 934, 486, 29, 285, 726, - 413, 157, 598, 854, 93, 349, 790, 534, 221, 662, 918, 502, 61, - 317, 758, 445, 189, 630, 886, 125, 381, 822, 566, 253, 694, 950, - 3, 259, 700, 387, 131, 572, 828, 67, 323, 764, 508, 195, 636, - 892, 451, 35, 291, 732, 419, 163, 604, 860, 99, 355, 796, 540, - 227, 668, 924, 467, 19, 275, 716, 403, 147, 588, 844, 83, 339, - 780, 524, 211, 652, 908, 492, 51, 307, 748, 435, 179, 620, 876, - 115, 371, 812, 556, 243, 684, 940, 475, 11, 267, 708, 395, 139, - 580, 836, 75, 331, 772, 516, 203, 644, 900, 459, 43, 299, 740, - 427, 171, 612, 868, 107, 363, 804, 548, 235, 676, 932, 484, 27, - 283, 724, 411, 155, 596, 852, 91, 347, 788, 532, 219, 660, 916, - 500, 59, 315, 756, 443, 187, 628, 884, 123, 379, 820, 564, 251, - 692, 948, 7, 263, 704, 391, 135, 576, 832, 71, 327, 768, 512, - 199, 640, 896, 455, 39, 295, 736, 423, 167, 608, 864, 103, 359, - 800, 544, 231, 672, 928, 471, 23, 279, 720, 407, 151, 592, 848, - 87, 343, 784, 528, 215, 656, 912, 496, 55, 311, 752, 439, 183, - 624, 880, 119, 375, 816, 560, 247, 688, 944, 480, 15, 271, 712, - 399, 143, 584, 840, 79, 335, 776, 520, 207, 648, 904, 463, 47, - 303, 744, 431, 175, 616, 872, 111, 367, 808, 552, 239, 680, 936, - 488, 31, 287, 728, 415, 159, 600, 856, 95, 351, 792, 536, 223, - 664, 920, 504, 63, 319, 760, 447, 191, 632, 888, 127, 383, 824, - 568, 255, 696, 952]; - - return (unsafe { *PERM953.get_unchecked((index % 953) as usize) } as u32 * 908209 + - unsafe { *PERM953.get_unchecked(((index / 953) % 953) as usize) } as u32 * 953 + - unsafe { - *PERM953.get_unchecked(((index / 908209) % 953) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (865523177u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton967(index: u32) -> f32 { - const PERM967: [u16; 967] = [0, 256, 711, 384, 128, 583, 839, 448, 64, 320, 775, 519, 192, - 647, 903, 32, 288, 743, 416, 160, 615, 871, 487, 96, 352, 807, - 551, 224, 679, 935, 16, 272, 727, 400, 144, 599, 855, 464, 80, - 336, 791, 535, 208, 663, 919, 48, 304, 759, 432, 176, 631, 887, - 503, 112, 368, 823, 567, 240, 695, 951, 8, 264, 719, 392, 136, - 591, 847, 456, 72, 328, 783, 527, 200, 655, 911, 40, 296, 751, - 424, 168, 623, 879, 495, 104, 360, 815, 559, 232, 687, 943, 24, - 280, 735, 408, 152, 607, 863, 472, 88, 344, 799, 543, 216, 671, - 927, 56, 312, 767, 440, 184, 639, 895, 511, 120, 376, 831, 575, - 248, 703, 959, 480, 4, 260, 715, 388, 132, 587, 843, 452, 68, - 324, 779, 523, 196, 651, 907, 36, 292, 747, 420, 164, 619, 875, - 491, 100, 356, 811, 555, 228, 683, 939, 20, 276, 731, 404, 148, - 603, 859, 468, 84, 340, 795, 539, 212, 667, 923, 52, 308, 763, - 436, 180, 635, 891, 507, 116, 372, 827, 571, 244, 699, 955, 12, - 268, 723, 396, 140, 595, 851, 460, 76, 332, 787, 531, 204, 659, - 915, 44, 300, 755, 428, 172, 627, 883, 499, 108, 364, 819, 563, - 236, 691, 947, 28, 284, 739, 412, 156, 611, 867, 476, 92, 348, - 803, 547, 220, 675, 931, 60, 316, 771, 444, 188, 643, 899, 515, - 124, 380, 835, 579, 252, 707, 963, 482, 2, 258, 713, 386, 130, - 585, 841, 450, 66, 322, 777, 521, 194, 649, 905, 34, 290, 745, - 418, 162, 617, 873, 489, 98, 354, 809, 553, 226, 681, 937, 18, - 274, 729, 402, 146, 601, 857, 466, 82, 338, 793, 537, 210, 665, - 921, 50, 306, 761, 434, 178, 633, 889, 505, 114, 370, 825, 569, - 242, 697, 953, 10, 266, 721, 394, 138, 593, 849, 458, 74, 330, - 785, 529, 202, 657, 913, 42, 298, 753, 426, 170, 625, 881, 497, - 106, 362, 817, 561, 234, 689, 945, 26, 282, 737, 410, 154, 609, - 865, 474, 90, 346, 801, 545, 218, 673, 929, 58, 314, 769, 442, - 186, 641, 897, 513, 122, 378, 833, 577, 250, 705, 961, 485, 6, - 262, 717, 390, 134, 589, 845, 454, 70, 326, 781, 525, 198, 653, - 909, 38, 294, 749, 422, 166, 621, 877, 493, 102, 358, 813, 557, - 230, 685, 941, 22, 278, 733, 406, 150, 605, 861, 470, 86, 342, - 797, 541, 214, 669, 925, 54, 310, 765, 438, 182, 637, 893, 509, - 118, 374, 829, 573, 246, 701, 957, 14, 270, 725, 398, 142, 597, - 853, 462, 78, 334, 789, 533, 206, 661, 917, 46, 302, 757, 430, - 174, 629, 885, 501, 110, 366, 821, 565, 238, 693, 949, 30, 286, - 741, 414, 158, 613, 869, 478, 94, 350, 805, 549, 222, 677, 933, - 62, 318, 773, 446, 190, 645, 901, 517, 126, 382, 837, 581, 254, - 709, 965, 483, 1, 257, 712, 385, 129, 584, 840, 449, 65, 321, - 776, 520, 193, 648, 904, 33, 289, 744, 417, 161, 616, 872, 488, - 97, 353, 808, 552, 225, 680, 936, 17, 273, 728, 401, 145, 600, - 856, 465, 81, 337, 792, 536, 209, 664, 920, 49, 305, 760, 433, - 177, 632, 888, 504, 113, 369, 824, 568, 241, 696, 952, 9, 265, - 720, 393, 137, 592, 848, 457, 73, 329, 784, 528, 201, 656, 912, - 41, 297, 752, 425, 169, 624, 880, 496, 105, 361, 816, 560, 233, - 688, 944, 25, 281, 736, 409, 153, 608, 864, 473, 89, 345, 800, - 544, 217, 672, 928, 57, 313, 768, 441, 185, 640, 896, 512, 121, - 377, 832, 576, 249, 704, 960, 481, 5, 261, 716, 389, 133, 588, - 844, 453, 69, 325, 780, 524, 197, 652, 908, 37, 293, 748, 421, - 165, 620, 876, 492, 101, 357, 812, 556, 229, 684, 940, 21, 277, - 732, 405, 149, 604, 860, 469, 85, 341, 796, 540, 213, 668, 924, - 53, 309, 764, 437, 181, 636, 892, 508, 117, 373, 828, 572, 245, - 700, 956, 13, 269, 724, 397, 141, 596, 852, 461, 77, 333, 788, - 532, 205, 660, 916, 45, 301, 756, 429, 173, 628, 884, 500, 109, - 365, 820, 564, 237, 692, 948, 29, 285, 740, 413, 157, 612, 868, - 477, 93, 349, 804, 548, 221, 676, 932, 61, 317, 772, 445, 189, - 644, 900, 516, 125, 381, 836, 580, 253, 708, 964, 484, 3, 259, - 714, 387, 131, 586, 842, 451, 67, 323, 778, 522, 195, 650, 906, - 35, 291, 746, 419, 163, 618, 874, 490, 99, 355, 810, 554, 227, - 682, 938, 19, 275, 730, 403, 147, 602, 858, 467, 83, 339, 794, - 538, 211, 666, 922, 51, 307, 762, 435, 179, 634, 890, 506, 115, - 371, 826, 570, 243, 698, 954, 11, 267, 722, 395, 139, 594, 850, - 459, 75, 331, 786, 530, 203, 658, 914, 43, 299, 754, 427, 171, - 626, 882, 498, 107, 363, 818, 562, 235, 690, 946, 27, 283, 738, - 411, 155, 610, 866, 475, 91, 347, 802, 546, 219, 674, 930, 59, - 315, 770, 443, 187, 642, 898, 514, 123, 379, 834, 578, 251, 706, - 962, 486, 7, 263, 718, 391, 135, 590, 846, 455, 71, 327, 782, - 526, 199, 654, 910, 39, 295, 750, 423, 167, 622, 878, 494, 103, - 359, 814, 558, 231, 686, 942, 23, 279, 734, 407, 151, 606, 862, - 471, 87, 343, 798, 542, 215, 670, 926, 55, 311, 766, 439, 183, - 638, 894, 510, 119, 375, 830, 574, 247, 702, 958, 15, 271, 726, - 399, 143, 598, 854, 463, 79, 335, 790, 534, 207, 662, 918, 47, - 303, 758, 431, 175, 630, 886, 502, 111, 367, 822, 566, 239, 694, - 950, 31, 287, 742, 415, 159, 614, 870, 479, 95, 351, 806, 550, - 223, 678, 934, 63, 319, 774, 447, 191, 646, 902, 518, 127, 383, - 838, 582, 255, 710, 966]; - - return (unsafe { *PERM967.get_unchecked((index % 967) as usize) } as u32 * 935089 + - unsafe { *PERM967.get_unchecked(((index / 967) % 967) as usize) } as u32 * 967 + - unsafe { - *PERM967.get_unchecked(((index / 935089) % 967) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (904231063u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton971(index: u32) -> f32 { - const PERM971: [u16; 971] = [0, 256, 715, 384, 128, 587, 843, 448, 64, 320, 779, 523, 192, - 651, 907, 32, 288, 747, 416, 160, 619, 875, 491, 96, 352, 811, - 555, 224, 683, 939, 16, 272, 731, 400, 144, 603, 859, 464, 80, - 336, 795, 539, 208, 667, 923, 48, 304, 763, 432, 176, 635, 891, - 507, 112, 368, 827, 571, 240, 699, 955, 480, 8, 264, 723, 392, - 136, 595, 851, 456, 72, 328, 787, 531, 200, 659, 915, 40, 296, - 755, 424, 168, 627, 883, 499, 104, 360, 819, 563, 232, 691, 947, - 24, 280, 739, 408, 152, 611, 867, 472, 88, 344, 803, 547, 216, - 675, 931, 56, 312, 771, 440, 184, 643, 899, 515, 120, 376, 835, - 579, 248, 707, 963, 4, 260, 719, 388, 132, 591, 847, 452, 68, - 324, 783, 527, 196, 655, 911, 36, 292, 751, 420, 164, 623, 879, - 495, 100, 356, 815, 559, 228, 687, 943, 20, 276, 735, 404, 148, - 607, 863, 468, 84, 340, 799, 543, 212, 671, 927, 52, 308, 767, - 436, 180, 639, 895, 511, 116, 372, 831, 575, 244, 703, 959, 487, - 12, 268, 727, 396, 140, 599, 855, 460, 76, 332, 791, 535, 204, - 663, 919, 44, 300, 759, 428, 172, 631, 887, 503, 108, 364, 823, - 567, 236, 695, 951, 28, 284, 743, 412, 156, 615, 871, 476, 92, - 348, 807, 551, 220, 679, 935, 60, 316, 775, 444, 188, 647, 903, - 519, 124, 380, 839, 583, 252, 711, 967, 484, 2, 258, 717, 386, - 130, 589, 845, 450, 66, 322, 781, 525, 194, 653, 909, 34, 290, - 749, 418, 162, 621, 877, 493, 98, 354, 813, 557, 226, 685, 941, - 18, 274, 733, 402, 146, 605, 861, 466, 82, 338, 797, 541, 210, - 669, 925, 50, 306, 765, 434, 178, 637, 893, 509, 114, 370, 829, - 573, 242, 701, 957, 482, 10, 266, 725, 394, 138, 597, 853, 458, - 74, 330, 789, 533, 202, 661, 917, 42, 298, 757, 426, 170, 629, - 885, 501, 106, 362, 821, 565, 234, 693, 949, 26, 282, 741, 410, - 154, 613, 869, 474, 90, 346, 805, 549, 218, 677, 933, 58, 314, - 773, 442, 186, 645, 901, 517, 122, 378, 837, 581, 250, 709, 965, - 6, 262, 721, 390, 134, 593, 849, 454, 70, 326, 785, 529, 198, - 657, 913, 38, 294, 753, 422, 166, 625, 881, 497, 102, 358, 817, - 561, 230, 689, 945, 22, 278, 737, 406, 150, 609, 865, 470, 86, - 342, 801, 545, 214, 673, 929, 54, 310, 769, 438, 182, 641, 897, - 513, 118, 374, 833, 577, 246, 705, 961, 489, 14, 270, 729, 398, - 142, 601, 857, 462, 78, 334, 793, 537, 206, 665, 921, 46, 302, - 761, 430, 174, 633, 889, 505, 110, 366, 825, 569, 238, 697, 953, - 30, 286, 745, 414, 158, 617, 873, 478, 94, 350, 809, 553, 222, - 681, 937, 62, 318, 777, 446, 190, 649, 905, 521, 126, 382, 841, - 585, 254, 713, 969, 485, 1, 257, 716, 385, 129, 588, 844, 449, - 65, 321, 780, 524, 193, 652, 908, 33, 289, 748, 417, 161, 620, - 876, 492, 97, 353, 812, 556, 225, 684, 940, 17, 273, 732, 401, - 145, 604, 860, 465, 81, 337, 796, 540, 209, 668, 924, 49, 305, - 764, 433, 177, 636, 892, 508, 113, 369, 828, 572, 241, 700, 956, - 481, 9, 265, 724, 393, 137, 596, 852, 457, 73, 329, 788, 532, - 201, 660, 916, 41, 297, 756, 425, 169, 628, 884, 500, 105, 361, - 820, 564, 233, 692, 948, 25, 281, 740, 409, 153, 612, 868, 473, - 89, 345, 804, 548, 217, 676, 932, 57, 313, 772, 441, 185, 644, - 900, 516, 121, 377, 836, 580, 249, 708, 964, 5, 261, 720, 389, - 133, 592, 848, 453, 69, 325, 784, 528, 197, 656, 912, 37, 293, - 752, 421, 165, 624, 880, 496, 101, 357, 816, 560, 229, 688, 944, - 21, 277, 736, 405, 149, 608, 864, 469, 85, 341, 800, 544, 213, - 672, 928, 53, 309, 768, 437, 181, 640, 896, 512, 117, 373, 832, - 576, 245, 704, 960, 488, 13, 269, 728, 397, 141, 600, 856, 461, - 77, 333, 792, 536, 205, 664, 920, 45, 301, 760, 429, 173, 632, - 888, 504, 109, 365, 824, 568, 237, 696, 952, 29, 285, 744, 413, - 157, 616, 872, 477, 93, 349, 808, 552, 221, 680, 936, 61, 317, - 776, 445, 189, 648, 904, 520, 125, 381, 840, 584, 253, 712, 968, - 486, 3, 259, 718, 387, 131, 590, 846, 451, 67, 323, 782, 526, - 195, 654, 910, 35, 291, 750, 419, 163, 622, 878, 494, 99, 355, - 814, 558, 227, 686, 942, 19, 275, 734, 403, 147, 606, 862, 467, - 83, 339, 798, 542, 211, 670, 926, 51, 307, 766, 435, 179, 638, - 894, 510, 115, 371, 830, 574, 243, 702, 958, 483, 11, 267, 726, - 395, 139, 598, 854, 459, 75, 331, 790, 534, 203, 662, 918, 43, - 299, 758, 427, 171, 630, 886, 502, 107, 363, 822, 566, 235, 694, - 950, 27, 283, 742, 411, 155, 614, 870, 475, 91, 347, 806, 550, - 219, 678, 934, 59, 315, 774, 443, 187, 646, 902, 518, 123, 379, - 838, 582, 251, 710, 966, 7, 263, 722, 391, 135, 594, 850, 455, - 71, 327, 786, 530, 199, 658, 914, 39, 295, 754, 423, 167, 626, - 882, 498, 103, 359, 818, 562, 231, 690, 946, 23, 279, 738, 407, - 151, 610, 866, 471, 87, 343, 802, 546, 215, 674, 930, 55, 311, - 770, 439, 183, 642, 898, 514, 119, 375, 834, 578, 247, 706, 962, - 490, 15, 271, 730, 399, 143, 602, 858, 463, 79, 335, 794, 538, - 207, 666, 922, 47, 303, 762, 431, 175, 634, 890, 506, 111, 367, - 826, 570, 239, 698, 954, 31, 287, 746, 415, 159, 618, 874, 479, - 95, 351, 810, 554, 223, 682, 938, 63, 319, 778, 447, 191, 650, - 906, 522, 127, 383, 842, 586, 255, 714, 970]; - - return (unsafe { *PERM971.get_unchecked((index % 971) as usize) } as u32 * 942841 + - unsafe { *PERM971.get_unchecked(((index / 971) % 971) as usize) } as u32 * 971 + - unsafe { - *PERM971.get_unchecked(((index / 942841) % 971) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (915498611u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton977(index: u32) -> f32 { - const PERM977: [u16; 977] = [0, 256, 721, 384, 128, 593, 849, 448, 64, 320, 785, 529, 192, - 657, 913, 32, 288, 753, 416, 160, 625, 881, 497, 96, 352, 817, - 561, 224, 689, 945, 480, 16, 272, 737, 400, 144, 609, 865, 464, - 80, 336, 801, 545, 208, 673, 929, 48, 304, 769, 432, 176, 641, - 897, 513, 112, 368, 833, 577, 240, 705, 961, 8, 264, 729, 392, - 136, 601, 857, 456, 72, 328, 793, 537, 200, 665, 921, 40, 296, - 761, 424, 168, 633, 889, 505, 104, 360, 825, 569, 232, 697, 953, - 489, 24, 280, 745, 408, 152, 617, 873, 472, 88, 344, 809, 553, - 216, 681, 937, 56, 312, 777, 440, 184, 649, 905, 521, 120, 376, - 841, 585, 248, 713, 969, 4, 260, 725, 388, 132, 597, 853, 452, - 68, 324, 789, 533, 196, 661, 917, 36, 292, 757, 420, 164, 629, - 885, 501, 100, 356, 821, 565, 228, 693, 949, 484, 20, 276, 741, - 404, 148, 613, 869, 468, 84, 340, 805, 549, 212, 677, 933, 52, - 308, 773, 436, 180, 645, 901, 517, 116, 372, 837, 581, 244, 709, - 965, 12, 268, 733, 396, 140, 605, 861, 460, 76, 332, 797, 541, - 204, 669, 925, 44, 300, 765, 428, 172, 637, 893, 509, 108, 364, - 829, 573, 236, 701, 957, 493, 28, 284, 749, 412, 156, 621, 877, - 476, 92, 348, 813, 557, 220, 685, 941, 60, 316, 781, 444, 188, - 653, 909, 525, 124, 380, 845, 589, 252, 717, 973, 2, 258, 723, - 386, 130, 595, 851, 450, 66, 322, 787, 531, 194, 659, 915, 34, - 290, 755, 418, 162, 627, 883, 499, 98, 354, 819, 563, 226, 691, - 947, 482, 18, 274, 739, 402, 146, 611, 867, 466, 82, 338, 803, - 547, 210, 675, 931, 50, 306, 771, 434, 178, 643, 899, 515, 114, - 370, 835, 579, 242, 707, 963, 10, 266, 731, 394, 138, 603, 859, - 458, 74, 330, 795, 539, 202, 667, 923, 42, 298, 763, 426, 170, - 635, 891, 507, 106, 362, 827, 571, 234, 699, 955, 491, 26, 282, - 747, 410, 154, 619, 875, 474, 90, 346, 811, 555, 218, 683, 939, - 58, 314, 779, 442, 186, 651, 907, 523, 122, 378, 843, 587, 250, - 715, 971, 6, 262, 727, 390, 134, 599, 855, 454, 70, 326, 791, - 535, 198, 663, 919, 38, 294, 759, 422, 166, 631, 887, 503, 102, - 358, 823, 567, 230, 695, 951, 486, 22, 278, 743, 406, 150, 615, - 871, 470, 86, 342, 807, 551, 214, 679, 935, 54, 310, 775, 438, - 182, 647, 903, 519, 118, 374, 839, 583, 246, 711, 967, 14, 270, - 735, 398, 142, 607, 863, 462, 78, 334, 799, 543, 206, 671, 927, - 46, 302, 767, 430, 174, 639, 895, 511, 110, 366, 831, 575, 238, - 703, 959, 495, 30, 286, 751, 414, 158, 623, 879, 478, 94, 350, - 815, 559, 222, 687, 943, 62, 318, 783, 446, 190, 655, 911, 527, - 126, 382, 847, 591, 254, 719, 975, 488, 1, 257, 722, 385, 129, - 594, 850, 449, 65, 321, 786, 530, 193, 658, 914, 33, 289, 754, - 417, 161, 626, 882, 498, 97, 353, 818, 562, 225, 690, 946, 481, - 17, 273, 738, 401, 145, 610, 866, 465, 81, 337, 802, 546, 209, - 674, 930, 49, 305, 770, 433, 177, 642, 898, 514, 113, 369, 834, - 578, 241, 706, 962, 9, 265, 730, 393, 137, 602, 858, 457, 73, - 329, 794, 538, 201, 666, 922, 41, 297, 762, 425, 169, 634, 890, - 506, 105, 361, 826, 570, 233, 698, 954, 490, 25, 281, 746, 409, - 153, 618, 874, 473, 89, 345, 810, 554, 217, 682, 938, 57, 313, - 778, 441, 185, 650, 906, 522, 121, 377, 842, 586, 249, 714, 970, - 5, 261, 726, 389, 133, 598, 854, 453, 69, 325, 790, 534, 197, - 662, 918, 37, 293, 758, 421, 165, 630, 886, 502, 101, 357, 822, - 566, 229, 694, 950, 485, 21, 277, 742, 405, 149, 614, 870, 469, - 85, 341, 806, 550, 213, 678, 934, 53, 309, 774, 437, 181, 646, - 902, 518, 117, 373, 838, 582, 245, 710, 966, 13, 269, 734, 397, - 141, 606, 862, 461, 77, 333, 798, 542, 205, 670, 926, 45, 301, - 766, 429, 173, 638, 894, 510, 109, 365, 830, 574, 237, 702, 958, - 494, 29, 285, 750, 413, 157, 622, 878, 477, 93, 349, 814, 558, - 221, 686, 942, 61, 317, 782, 445, 189, 654, 910, 526, 125, 381, - 846, 590, 253, 718, 974, 3, 259, 724, 387, 131, 596, 852, 451, - 67, 323, 788, 532, 195, 660, 916, 35, 291, 756, 419, 163, 628, - 884, 500, 99, 355, 820, 564, 227, 692, 948, 483, 19, 275, 740, - 403, 147, 612, 868, 467, 83, 339, 804, 548, 211, 676, 932, 51, - 307, 772, 435, 179, 644, 900, 516, 115, 371, 836, 580, 243, 708, - 964, 11, 267, 732, 395, 139, 604, 860, 459, 75, 331, 796, 540, - 203, 668, 924, 43, 299, 764, 427, 171, 636, 892, 508, 107, 363, - 828, 572, 235, 700, 956, 492, 27, 283, 748, 411, 155, 620, 876, - 475, 91, 347, 812, 556, 219, 684, 940, 59, 315, 780, 443, 187, - 652, 908, 524, 123, 379, 844, 588, 251, 716, 972, 7, 263, 728, - 391, 135, 600, 856, 455, 71, 327, 792, 536, 199, 664, 920, 39, - 295, 760, 423, 167, 632, 888, 504, 103, 359, 824, 568, 231, 696, - 952, 487, 23, 279, 744, 407, 151, 616, 872, 471, 87, 343, 808, - 552, 215, 680, 936, 55, 311, 776, 439, 183, 648, 904, 520, 119, - 375, 840, 584, 247, 712, 968, 15, 271, 736, 399, 143, 608, 864, - 463, 79, 335, 800, 544, 207, 672, 928, 47, 303, 768, 431, 175, - 640, 896, 512, 111, 367, 832, 576, 239, 704, 960, 496, 31, 287, - 752, 415, 159, 624, 880, 479, 95, 351, 816, 560, 223, 688, 944, - 63, 319, 784, 447, 191, 656, 912, 528, 127, 383, 848, 592, 255, - 720, 976]; - - return (unsafe { *PERM977.get_unchecked((index % 977) as usize) } as u32 * 954529 + - unsafe { *PERM977.get_unchecked(((index / 977) % 977) as usize) } as u32 * 977 + - unsafe { - *PERM977.get_unchecked(((index / 954529) % 977) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (932574833u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton983(index: u32) -> f32 { - const PERM983: [u16; 983] = [0, 256, 727, 384, 128, 599, 855, 448, 64, 320, 791, 535, 192, - 663, 919, 32, 288, 759, 416, 160, 631, 887, 503, 96, 352, 823, - 567, 224, 695, 951, 480, 16, 272, 743, 400, 144, 615, 871, 464, - 80, 336, 807, 551, 208, 679, 935, 48, 304, 775, 432, 176, 647, - 903, 519, 112, 368, 839, 583, 240, 711, 967, 8, 264, 735, 392, - 136, 607, 863, 456, 72, 328, 799, 543, 200, 671, 927, 40, 296, - 767, 424, 168, 639, 895, 511, 104, 360, 831, 575, 232, 703, 959, - 495, 24, 280, 751, 408, 152, 623, 879, 472, 88, 344, 815, 559, - 216, 687, 943, 56, 312, 783, 440, 184, 655, 911, 527, 120, 376, - 847, 591, 248, 719, 975, 488, 4, 260, 731, 388, 132, 603, 859, - 452, 68, 324, 795, 539, 196, 667, 923, 36, 292, 763, 420, 164, - 635, 891, 507, 100, 356, 827, 571, 228, 699, 955, 484, 20, 276, - 747, 404, 148, 619, 875, 468, 84, 340, 811, 555, 212, 683, 939, - 52, 308, 779, 436, 180, 651, 907, 523, 116, 372, 843, 587, 244, - 715, 971, 12, 268, 739, 396, 140, 611, 867, 460, 76, 332, 803, - 547, 204, 675, 931, 44, 300, 771, 428, 172, 643, 899, 515, 108, - 364, 835, 579, 236, 707, 963, 499, 28, 284, 755, 412, 156, 627, - 883, 476, 92, 348, 819, 563, 220, 691, 947, 60, 316, 787, 444, - 188, 659, 915, 531, 124, 380, 851, 595, 252, 723, 979, 490, 2, - 258, 729, 386, 130, 601, 857, 450, 66, 322, 793, 537, 194, 665, - 921, 34, 290, 761, 418, 162, 633, 889, 505, 98, 354, 825, 569, - 226, 697, 953, 482, 18, 274, 745, 402, 146, 617, 873, 466, 82, - 338, 809, 553, 210, 681, 937, 50, 306, 777, 434, 178, 649, 905, - 521, 114, 370, 841, 585, 242, 713, 969, 10, 266, 737, 394, 138, - 609, 865, 458, 74, 330, 801, 545, 202, 673, 929, 42, 298, 769, - 426, 170, 641, 897, 513, 106, 362, 833, 577, 234, 705, 961, 497, - 26, 282, 753, 410, 154, 625, 881, 474, 90, 346, 817, 561, 218, - 689, 945, 58, 314, 785, 442, 186, 657, 913, 529, 122, 378, 849, - 593, 250, 721, 977, 493, 6, 262, 733, 390, 134, 605, 861, 454, - 70, 326, 797, 541, 198, 669, 925, 38, 294, 765, 422, 166, 637, - 893, 509, 102, 358, 829, 573, 230, 701, 957, 486, 22, 278, 749, - 406, 150, 621, 877, 470, 86, 342, 813, 557, 214, 685, 941, 54, - 310, 781, 438, 182, 653, 909, 525, 118, 374, 845, 589, 246, 717, - 973, 14, 270, 741, 398, 142, 613, 869, 462, 78, 334, 805, 549, - 206, 677, 933, 46, 302, 773, 430, 174, 645, 901, 517, 110, 366, - 837, 581, 238, 709, 965, 501, 30, 286, 757, 414, 158, 629, 885, - 478, 94, 350, 821, 565, 222, 693, 949, 62, 318, 789, 446, 190, - 661, 917, 533, 126, 382, 853, 597, 254, 725, 981, 491, 1, 257, - 728, 385, 129, 600, 856, 449, 65, 321, 792, 536, 193, 664, 920, - 33, 289, 760, 417, 161, 632, 888, 504, 97, 353, 824, 568, 225, - 696, 952, 481, 17, 273, 744, 401, 145, 616, 872, 465, 81, 337, - 808, 552, 209, 680, 936, 49, 305, 776, 433, 177, 648, 904, 520, - 113, 369, 840, 584, 241, 712, 968, 9, 265, 736, 393, 137, 608, - 864, 457, 73, 329, 800, 544, 201, 672, 928, 41, 297, 768, 425, - 169, 640, 896, 512, 105, 361, 832, 576, 233, 704, 960, 496, 25, - 281, 752, 409, 153, 624, 880, 473, 89, 345, 816, 560, 217, 688, - 944, 57, 313, 784, 441, 185, 656, 912, 528, 121, 377, 848, 592, - 249, 720, 976, 489, 5, 261, 732, 389, 133, 604, 860, 453, 69, - 325, 796, 540, 197, 668, 924, 37, 293, 764, 421, 165, 636, 892, - 508, 101, 357, 828, 572, 229, 700, 956, 485, 21, 277, 748, 405, - 149, 620, 876, 469, 85, 341, 812, 556, 213, 684, 940, 53, 309, - 780, 437, 181, 652, 908, 524, 117, 373, 844, 588, 245, 716, 972, - 13, 269, 740, 397, 141, 612, 868, 461, 77, 333, 804, 548, 205, - 676, 932, 45, 301, 772, 429, 173, 644, 900, 516, 109, 365, 836, - 580, 237, 708, 964, 500, 29, 285, 756, 413, 157, 628, 884, 477, - 93, 349, 820, 564, 221, 692, 948, 61, 317, 788, 445, 189, 660, - 916, 532, 125, 381, 852, 596, 253, 724, 980, 492, 3, 259, 730, - 387, 131, 602, 858, 451, 67, 323, 794, 538, 195, 666, 922, 35, - 291, 762, 419, 163, 634, 890, 506, 99, 355, 826, 570, 227, 698, - 954, 483, 19, 275, 746, 403, 147, 618, 874, 467, 83, 339, 810, - 554, 211, 682, 938, 51, 307, 778, 435, 179, 650, 906, 522, 115, - 371, 842, 586, 243, 714, 970, 11, 267, 738, 395, 139, 610, 866, - 459, 75, 331, 802, 546, 203, 674, 930, 43, 299, 770, 427, 171, - 642, 898, 514, 107, 363, 834, 578, 235, 706, 962, 498, 27, 283, - 754, 411, 155, 626, 882, 475, 91, 347, 818, 562, 219, 690, 946, - 59, 315, 786, 443, 187, 658, 914, 530, 123, 379, 850, 594, 251, - 722, 978, 494, 7, 263, 734, 391, 135, 606, 862, 455, 71, 327, - 798, 542, 199, 670, 926, 39, 295, 766, 423, 167, 638, 894, 510, - 103, 359, 830, 574, 231, 702, 958, 487, 23, 279, 750, 407, 151, - 622, 878, 471, 87, 343, 814, 558, 215, 686, 942, 55, 311, 782, - 439, 183, 654, 910, 526, 119, 375, 846, 590, 247, 718, 974, 15, - 271, 742, 399, 143, 614, 870, 463, 79, 335, 806, 550, 207, 678, - 934, 47, 303, 774, 431, 175, 646, 902, 518, 111, 367, 838, 582, - 239, 710, 966, 502, 31, 287, 758, 415, 159, 630, 886, 479, 95, - 351, 822, 566, 223, 694, 950, 63, 319, 790, 447, 191, 662, 918, - 534, 127, 383, 854, 598, 255, 726, 982]; - - return (unsafe { *PERM983.get_unchecked((index % 983) as usize) } as u32 * 966289 + - unsafe { *PERM983.get_unchecked(((index / 983) % 983) as usize) } as u32 * 983 + - unsafe { - *PERM983.get_unchecked(((index / 966289) % 983) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (949862087u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton991(index: u32) -> f32 { - const PERM991: [u16; 991] = [0, 256, 735, 384, 128, 607, 863, 448, 64, 320, 799, 543, 192, - 671, 927, 32, 288, 767, 416, 160, 639, 895, 511, 96, 352, 831, - 575, 224, 703, 959, 480, 16, 272, 751, 400, 144, 623, 879, 464, - 80, 336, 815, 559, 208, 687, 943, 48, 304, 783, 432, 176, 655, - 911, 527, 112, 368, 847, 591, 240, 719, 975, 488, 8, 264, 743, - 392, 136, 615, 871, 456, 72, 328, 807, 551, 200, 679, 935, 40, - 296, 775, 424, 168, 647, 903, 519, 104, 360, 839, 583, 232, 711, - 967, 503, 24, 280, 759, 408, 152, 631, 887, 472, 88, 344, 823, - 567, 216, 695, 951, 56, 312, 791, 440, 184, 663, 919, 535, 120, - 376, 855, 599, 248, 727, 983, 492, 4, 260, 739, 388, 132, 611, - 867, 452, 68, 324, 803, 547, 196, 675, 931, 36, 292, 771, 420, - 164, 643, 899, 515, 100, 356, 835, 579, 228, 707, 963, 484, 20, - 276, 755, 404, 148, 627, 883, 468, 84, 340, 819, 563, 212, 691, - 947, 52, 308, 787, 436, 180, 659, 915, 531, 116, 372, 851, 595, - 244, 723, 979, 499, 12, 268, 747, 396, 140, 619, 875, 460, 76, - 332, 811, 555, 204, 683, 939, 44, 300, 779, 428, 172, 651, 907, - 523, 108, 364, 843, 587, 236, 715, 971, 507, 28, 284, 763, 412, - 156, 635, 891, 476, 92, 348, 827, 571, 220, 699, 955, 60, 316, - 795, 444, 188, 667, 923, 539, 124, 380, 859, 603, 252, 731, 987, - 494, 2, 258, 737, 386, 130, 609, 865, 450, 66, 322, 801, 545, - 194, 673, 929, 34, 290, 769, 418, 162, 641, 897, 513, 98, 354, - 833, 577, 226, 705, 961, 482, 18, 274, 753, 402, 146, 625, 881, - 466, 82, 338, 817, 561, 210, 689, 945, 50, 306, 785, 434, 178, - 657, 913, 529, 114, 370, 849, 593, 242, 721, 977, 490, 10, 266, - 745, 394, 138, 617, 873, 458, 74, 330, 809, 553, 202, 681, 937, - 42, 298, 777, 426, 170, 649, 905, 521, 106, 362, 841, 585, 234, - 713, 969, 505, 26, 282, 761, 410, 154, 633, 889, 474, 90, 346, - 825, 569, 218, 697, 953, 58, 314, 793, 442, 186, 665, 921, 537, - 122, 378, 857, 601, 250, 729, 985, 497, 6, 262, 741, 390, 134, - 613, 869, 454, 70, 326, 805, 549, 198, 677, 933, 38, 294, 773, - 422, 166, 645, 901, 517, 102, 358, 837, 581, 230, 709, 965, 486, - 22, 278, 757, 406, 150, 629, 885, 470, 86, 342, 821, 565, 214, - 693, 949, 54, 310, 789, 438, 182, 661, 917, 533, 118, 374, 853, - 597, 246, 725, 981, 501, 14, 270, 749, 398, 142, 621, 877, 462, - 78, 334, 813, 557, 206, 685, 941, 46, 302, 781, 430, 174, 653, - 909, 525, 110, 366, 845, 589, 238, 717, 973, 509, 30, 286, 765, - 414, 158, 637, 893, 478, 94, 350, 829, 573, 222, 701, 957, 62, - 318, 797, 446, 190, 669, 925, 541, 126, 382, 861, 605, 254, 733, - 989, 495, 1, 257, 736, 385, 129, 608, 864, 449, 65, 321, 800, - 544, 193, 672, 928, 33, 289, 768, 417, 161, 640, 896, 512, 97, - 353, 832, 576, 225, 704, 960, 481, 17, 273, 752, 401, 145, 624, - 880, 465, 81, 337, 816, 560, 209, 688, 944, 49, 305, 784, 433, - 177, 656, 912, 528, 113, 369, 848, 592, 241, 720, 976, 489, 9, - 265, 744, 393, 137, 616, 872, 457, 73, 329, 808, 552, 201, 680, - 936, 41, 297, 776, 425, 169, 648, 904, 520, 105, 361, 840, 584, - 233, 712, 968, 504, 25, 281, 760, 409, 153, 632, 888, 473, 89, - 345, 824, 568, 217, 696, 952, 57, 313, 792, 441, 185, 664, 920, - 536, 121, 377, 856, 600, 249, 728, 984, 493, 5, 261, 740, 389, - 133, 612, 868, 453, 69, 325, 804, 548, 197, 676, 932, 37, 293, - 772, 421, 165, 644, 900, 516, 101, 357, 836, 580, 229, 708, 964, - 485, 21, 277, 756, 405, 149, 628, 884, 469, 85, 341, 820, 564, - 213, 692, 948, 53, 309, 788, 437, 181, 660, 916, 532, 117, 373, - 852, 596, 245, 724, 980, 500, 13, 269, 748, 397, 141, 620, 876, - 461, 77, 333, 812, 556, 205, 684, 940, 45, 301, 780, 429, 173, - 652, 908, 524, 109, 365, 844, 588, 237, 716, 972, 508, 29, 285, - 764, 413, 157, 636, 892, 477, 93, 349, 828, 572, 221, 700, 956, - 61, 317, 796, 445, 189, 668, 924, 540, 125, 381, 860, 604, 253, - 732, 988, 496, 3, 259, 738, 387, 131, 610, 866, 451, 67, 323, - 802, 546, 195, 674, 930, 35, 291, 770, 419, 163, 642, 898, 514, - 99, 355, 834, 578, 227, 706, 962, 483, 19, 275, 754, 403, 147, - 626, 882, 467, 83, 339, 818, 562, 211, 690, 946, 51, 307, 786, - 435, 179, 658, 914, 530, 115, 371, 850, 594, 243, 722, 978, 491, - 11, 267, 746, 395, 139, 618, 874, 459, 75, 331, 810, 554, 203, - 682, 938, 43, 299, 778, 427, 171, 650, 906, 522, 107, 363, 842, - 586, 235, 714, 970, 506, 27, 283, 762, 411, 155, 634, 890, 475, - 91, 347, 826, 570, 219, 698, 954, 59, 315, 794, 443, 187, 666, - 922, 538, 123, 379, 858, 602, 251, 730, 986, 498, 7, 263, 742, - 391, 135, 614, 870, 455, 71, 327, 806, 550, 199, 678, 934, 39, - 295, 774, 423, 167, 646, 902, 518, 103, 359, 838, 582, 231, 710, - 966, 487, 23, 279, 758, 407, 151, 630, 886, 471, 87, 343, 822, - 566, 215, 694, 950, 55, 311, 790, 439, 183, 662, 918, 534, 119, - 375, 854, 598, 247, 726, 982, 502, 15, 271, 750, 399, 143, 622, - 878, 463, 79, 335, 814, 558, 207, 686, 942, 47, 303, 782, 431, - 175, 654, 910, 526, 111, 367, 846, 590, 239, 718, 974, 510, 31, - 287, 766, 415, 159, 638, 894, 479, 95, 351, 830, 574, 223, 702, - 958, 63, 319, 798, 447, 191, 670, 926, 542, 127, 383, 862, 606, - 255, 734, 990]; - - return (unsafe { *PERM991.get_unchecked((index % 991) as usize) } as u32 * 982081 + - unsafe { *PERM991.get_unchecked(((index / 991) % 991) as usize) } as u32 * 991 + - unsafe { - *PERM991.get_unchecked(((index / 982081) % 991) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (973242271u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton997(index: u32) -> f32 { - const PERM997: [u16; 997] = [0, 256, 741, 384, 128, 613, 869, 448, 64, 320, 805, 549, 192, - 677, 933, 480, 32, 288, 773, 416, 160, 645, 901, 517, 96, 352, - 837, 581, 224, 709, 965, 16, 272, 757, 400, 144, 629, 885, 464, - 80, 336, 821, 565, 208, 693, 949, 501, 48, 304, 789, 432, 176, - 661, 917, 533, 112, 368, 853, 597, 240, 725, 981, 8, 264, 749, - 392, 136, 621, 877, 456, 72, 328, 813, 557, 200, 685, 941, 488, - 40, 296, 781, 424, 168, 653, 909, 525, 104, 360, 845, 589, 232, - 717, 973, 24, 280, 765, 408, 152, 637, 893, 472, 88, 344, 829, - 573, 216, 701, 957, 509, 56, 312, 797, 440, 184, 669, 925, 541, - 120, 376, 861, 605, 248, 733, 989, 496, 4, 260, 745, 388, 132, - 617, 873, 452, 68, 324, 809, 553, 196, 681, 937, 484, 36, 292, - 777, 420, 164, 649, 905, 521, 100, 356, 841, 585, 228, 713, 969, - 20, 276, 761, 404, 148, 633, 889, 468, 84, 340, 825, 569, 212, - 697, 953, 505, 52, 308, 793, 436, 180, 665, 921, 537, 116, 372, - 857, 601, 244, 729, 985, 12, 268, 753, 396, 140, 625, 881, 460, - 76, 332, 817, 561, 204, 689, 945, 492, 44, 300, 785, 428, 172, - 657, 913, 529, 108, 364, 849, 593, 236, 721, 977, 28, 284, 769, - 412, 156, 641, 897, 476, 92, 348, 833, 577, 220, 705, 961, 513, - 60, 316, 801, 444, 188, 673, 929, 545, 124, 380, 865, 609, 252, - 737, 993, 2, 258, 743, 386, 130, 615, 871, 450, 66, 322, 807, - 551, 194, 679, 935, 482, 34, 290, 775, 418, 162, 647, 903, 519, - 98, 354, 839, 583, 226, 711, 967, 18, 274, 759, 402, 146, 631, - 887, 466, 82, 338, 823, 567, 210, 695, 951, 503, 50, 306, 791, - 434, 178, 663, 919, 535, 114, 370, 855, 599, 242, 727, 983, 10, - 266, 751, 394, 138, 623, 879, 458, 74, 330, 815, 559, 202, 687, - 943, 490, 42, 298, 783, 426, 170, 655, 911, 527, 106, 362, 847, - 591, 234, 719, 975, 26, 282, 767, 410, 154, 639, 895, 474, 90, - 346, 831, 575, 218, 703, 959, 511, 58, 314, 799, 442, 186, 671, - 927, 543, 122, 378, 863, 607, 250, 735, 991, 499, 6, 262, 747, - 390, 134, 619, 875, 454, 70, 326, 811, 555, 198, 683, 939, 486, - 38, 294, 779, 422, 166, 651, 907, 523, 102, 358, 843, 587, 230, - 715, 971, 22, 278, 763, 406, 150, 635, 891, 470, 86, 342, 827, - 571, 214, 699, 955, 507, 54, 310, 795, 438, 182, 667, 923, 539, - 118, 374, 859, 603, 246, 731, 987, 14, 270, 755, 398, 142, 627, - 883, 462, 78, 334, 819, 563, 206, 691, 947, 494, 46, 302, 787, - 430, 174, 659, 915, 531, 110, 366, 851, 595, 238, 723, 979, 30, - 286, 771, 414, 158, 643, 899, 478, 94, 350, 835, 579, 222, 707, - 963, 515, 62, 318, 803, 446, 190, 675, 931, 547, 126, 382, 867, - 611, 254, 739, 995, 498, 1, 257, 742, 385, 129, 614, 870, 449, - 65, 321, 806, 550, 193, 678, 934, 481, 33, 289, 774, 417, 161, - 646, 902, 518, 97, 353, 838, 582, 225, 710, 966, 17, 273, 758, - 401, 145, 630, 886, 465, 81, 337, 822, 566, 209, 694, 950, 502, - 49, 305, 790, 433, 177, 662, 918, 534, 113, 369, 854, 598, 241, - 726, 982, 9, 265, 750, 393, 137, 622, 878, 457, 73, 329, 814, - 558, 201, 686, 942, 489, 41, 297, 782, 425, 169, 654, 910, 526, - 105, 361, 846, 590, 233, 718, 974, 25, 281, 766, 409, 153, 638, - 894, 473, 89, 345, 830, 574, 217, 702, 958, 510, 57, 313, 798, - 441, 185, 670, 926, 542, 121, 377, 862, 606, 249, 734, 990, 497, - 5, 261, 746, 389, 133, 618, 874, 453, 69, 325, 810, 554, 197, - 682, 938, 485, 37, 293, 778, 421, 165, 650, 906, 522, 101, 357, - 842, 586, 229, 714, 970, 21, 277, 762, 405, 149, 634, 890, 469, - 85, 341, 826, 570, 213, 698, 954, 506, 53, 309, 794, 437, 181, - 666, 922, 538, 117, 373, 858, 602, 245, 730, 986, 13, 269, 754, - 397, 141, 626, 882, 461, 77, 333, 818, 562, 205, 690, 946, 493, - 45, 301, 786, 429, 173, 658, 914, 530, 109, 365, 850, 594, 237, - 722, 978, 29, 285, 770, 413, 157, 642, 898, 477, 93, 349, 834, - 578, 221, 706, 962, 514, 61, 317, 802, 445, 189, 674, 930, 546, - 125, 381, 866, 610, 253, 738, 994, 3, 259, 744, 387, 131, 616, - 872, 451, 67, 323, 808, 552, 195, 680, 936, 483, 35, 291, 776, - 419, 163, 648, 904, 520, 99, 355, 840, 584, 227, 712, 968, 19, - 275, 760, 403, 147, 632, 888, 467, 83, 339, 824, 568, 211, 696, - 952, 504, 51, 307, 792, 435, 179, 664, 920, 536, 115, 371, 856, - 600, 243, 728, 984, 11, 267, 752, 395, 139, 624, 880, 459, 75, - 331, 816, 560, 203, 688, 944, 491, 43, 299, 784, 427, 171, 656, - 912, 528, 107, 363, 848, 592, 235, 720, 976, 27, 283, 768, 411, - 155, 640, 896, 475, 91, 347, 832, 576, 219, 704, 960, 512, 59, - 315, 800, 443, 187, 672, 928, 544, 123, 379, 864, 608, 251, 736, - 992, 500, 7, 263, 748, 391, 135, 620, 876, 455, 71, 327, 812, - 556, 199, 684, 940, 487, 39, 295, 780, 423, 167, 652, 908, 524, - 103, 359, 844, 588, 231, 716, 972, 23, 279, 764, 407, 151, 636, - 892, 471, 87, 343, 828, 572, 215, 700, 956, 508, 55, 311, 796, - 439, 183, 668, 924, 540, 119, 375, 860, 604, 247, 732, 988, 15, - 271, 756, 399, 143, 628, 884, 463, 79, 335, 820, 564, 207, 692, - 948, 495, 47, 303, 788, 431, 175, 660, 916, 532, 111, 367, 852, - 596, 239, 724, 980, 31, 287, 772, 415, 159, 644, 900, 479, 95, - 351, 836, 580, 223, 708, 964, 516, 63, 319, 804, 447, 191, 676, - 932, 548, 127, 383, 868, 612, 255, 740, 996]; - - return (unsafe { *PERM997.get_unchecked((index % 997) as usize) } as u32 * 994009 + - unsafe { *PERM997.get_unchecked(((index / 997) % 997) as usize) } as u32 * 997 + - unsafe { - *PERM997.get_unchecked(((index / 994009) % 997) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (991026973u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1009(index: u32) -> f32 { - const PERM1009: [u16; 1009] = [0, 256, 753, 384, 128, 625, 881, 448, 64, 320, 817, 561, 192, - 689, 945, 480, 32, 288, 785, 416, 160, 657, 913, 529, 96, 352, - 849, 593, 224, 721, 977, 496, 16, 272, 769, 400, 144, 641, 897, - 464, 80, 336, 833, 577, 208, 705, 961, 513, 48, 304, 801, 432, - 176, 673, 929, 545, 112, 368, 865, 609, 240, 737, 993, 8, 264, - 761, 392, 136, 633, 889, 456, 72, 328, 825, 569, 200, 697, 953, - 488, 40, 296, 793, 424, 168, 665, 921, 537, 104, 360, 857, 601, - 232, 729, 985, 505, 24, 280, 777, 408, 152, 649, 905, 472, 88, - 344, 841, 585, 216, 713, 969, 521, 56, 312, 809, 440, 184, 681, - 937, 553, 120, 376, 873, 617, 248, 745, 1001, 4, 260, 757, 388, - 132, 629, 885, 452, 68, 324, 821, 565, 196, 693, 949, 484, 36, - 292, 789, 420, 164, 661, 917, 533, 100, 356, 853, 597, 228, - 725, 981, 500, 20, 276, 773, 404, 148, 645, 901, 468, 84, 340, - 837, 581, 212, 709, 965, 517, 52, 308, 805, 436, 180, 677, 933, - 549, 116, 372, 869, 613, 244, 741, 997, 12, 268, 765, 396, 140, - 637, 893, 460, 76, 332, 829, 573, 204, 701, 957, 492, 44, 300, - 797, 428, 172, 669, 925, 541, 108, 364, 861, 605, 236, 733, - 989, 509, 28, 284, 781, 412, 156, 653, 909, 476, 92, 348, 845, - 589, 220, 717, 973, 525, 60, 316, 813, 444, 188, 685, 941, 557, - 124, 380, 877, 621, 252, 749, 1005, 2, 258, 755, 386, 130, 627, - 883, 450, 66, 322, 819, 563, 194, 691, 947, 482, 34, 290, 787, - 418, 162, 659, 915, 531, 98, 354, 851, 595, 226, 723, 979, 498, - 18, 274, 771, 402, 146, 643, 899, 466, 82, 338, 835, 579, 210, - 707, 963, 515, 50, 306, 803, 434, 178, 675, 931, 547, 114, 370, - 867, 611, 242, 739, 995, 10, 266, 763, 394, 138, 635, 891, 458, - 74, 330, 827, 571, 202, 699, 955, 490, 42, 298, 795, 426, 170, - 667, 923, 539, 106, 362, 859, 603, 234, 731, 987, 507, 26, 282, - 779, 410, 154, 651, 907, 474, 90, 346, 843, 587, 218, 715, 971, - 523, 58, 314, 811, 442, 186, 683, 939, 555, 122, 378, 875, 619, - 250, 747, 1003, 6, 262, 759, 390, 134, 631, 887, 454, 70, 326, - 823, 567, 198, 695, 951, 486, 38, 294, 791, 422, 166, 663, 919, - 535, 102, 358, 855, 599, 230, 727, 983, 502, 22, 278, 775, 406, - 150, 647, 903, 470, 86, 342, 839, 583, 214, 711, 967, 519, 54, - 310, 807, 438, 182, 679, 935, 551, 118, 374, 871, 615, 246, - 743, 999, 14, 270, 767, 398, 142, 639, 895, 462, 78, 334, 831, - 575, 206, 703, 959, 494, 46, 302, 799, 430, 174, 671, 927, 543, - 110, 366, 863, 607, 238, 735, 991, 511, 30, 286, 783, 414, 158, - 655, 911, 478, 94, 350, 847, 591, 222, 719, 975, 527, 62, 318, - 815, 446, 190, 687, 943, 559, 126, 382, 879, 623, 254, 751, - 1007, 504, 1, 257, 754, 385, 129, 626, 882, 449, 65, 321, 818, - 562, 193, 690, 946, 481, 33, 289, 786, 417, 161, 658, 914, 530, - 97, 353, 850, 594, 225, 722, 978, 497, 17, 273, 770, 401, 145, - 642, 898, 465, 81, 337, 834, 578, 209, 706, 962, 514, 49, 305, - 802, 433, 177, 674, 930, 546, 113, 369, 866, 610, 241, 738, - 994, 9, 265, 762, 393, 137, 634, 890, 457, 73, 329, 826, 570, - 201, 698, 954, 489, 41, 297, 794, 425, 169, 666, 922, 538, 105, - 361, 858, 602, 233, 730, 986, 506, 25, 281, 778, 409, 153, 650, - 906, 473, 89, 345, 842, 586, 217, 714, 970, 522, 57, 313, 810, - 441, 185, 682, 938, 554, 121, 377, 874, 618, 249, 746, 1002, 5, - 261, 758, 389, 133, 630, 886, 453, 69, 325, 822, 566, 197, 694, - 950, 485, 37, 293, 790, 421, 165, 662, 918, 534, 101, 357, 854, - 598, 229, 726, 982, 501, 21, 277, 774, 405, 149, 646, 902, 469, - 85, 341, 838, 582, 213, 710, 966, 518, 53, 309, 806, 437, 181, - 678, 934, 550, 117, 373, 870, 614, 245, 742, 998, 13, 269, 766, - 397, 141, 638, 894, 461, 77, 333, 830, 574, 205, 702, 958, 493, - 45, 301, 798, 429, 173, 670, 926, 542, 109, 365, 862, 606, 237, - 734, 990, 510, 29, 285, 782, 413, 157, 654, 910, 477, 93, 349, - 846, 590, 221, 718, 974, 526, 61, 317, 814, 445, 189, 686, 942, - 558, 125, 381, 878, 622, 253, 750, 1006, 3, 259, 756, 387, 131, - 628, 884, 451, 67, 323, 820, 564, 195, 692, 948, 483, 35, 291, - 788, 419, 163, 660, 916, 532, 99, 355, 852, 596, 227, 724, 980, - 499, 19, 275, 772, 403, 147, 644, 900, 467, 83, 339, 836, 580, - 211, 708, 964, 516, 51, 307, 804, 435, 179, 676, 932, 548, 115, - 371, 868, 612, 243, 740, 996, 11, 267, 764, 395, 139, 636, 892, - 459, 75, 331, 828, 572, 203, 700, 956, 491, 43, 299, 796, 427, - 171, 668, 924, 540, 107, 363, 860, 604, 235, 732, 988, 508, 27, - 283, 780, 411, 155, 652, 908, 475, 91, 347, 844, 588, 219, 716, - 972, 524, 59, 315, 812, 443, 187, 684, 940, 556, 123, 379, 876, - 620, 251, 748, 1004, 7, 263, 760, 391, 135, 632, 888, 455, 71, - 327, 824, 568, 199, 696, 952, 487, 39, 295, 792, 423, 167, 664, - 920, 536, 103, 359, 856, 600, 231, 728, 984, 503, 23, 279, 776, - 407, 151, 648, 904, 471, 87, 343, 840, 584, 215, 712, 968, 520, - 55, 311, 808, 439, 183, 680, 936, 552, 119, 375, 872, 616, 247, - 744, 1000, 15, 271, 768, 399, 143, 640, 896, 463, 79, 335, 832, - 576, 207, 704, 960, 495, 47, 303, 800, 431, 175, 672, 928, 544, - 111, 367, 864, 608, 239, 736, 992, 512, 31, 287, 784, 415, 159, - 656, 912, 479, 95, 351, 848, 592, 223, 720, 976, 528, 63, 319, - 816, 447, 191, 688, 944, 560, 127, 383, 880, 624, 255, 752, - 1008]; - - return (unsafe { *PERM1009.get_unchecked((index % 1009) as usize) } as u32 * 1018081 + - unsafe { *PERM1009.get_unchecked(((index / 1009) % 1009) as usize) } as u32 * 1009 + - unsafe { - *PERM1009.get_unchecked(((index / 1018081) % 1009) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1027243729u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1013(index: u32) -> f32 { - const PERM1013: [u16; 1013] = [0, 256, 757, 384, 128, 629, 885, 448, 64, 320, 821, 565, 192, - 693, 949, 480, 32, 288, 789, 416, 160, 661, 917, 533, 96, 352, - 853, 597, 224, 725, 981, 496, 16, 272, 773, 400, 144, 645, 901, - 464, 80, 336, 837, 581, 208, 709, 965, 517, 48, 304, 805, 432, - 176, 677, 933, 549, 112, 368, 869, 613, 240, 741, 997, 8, 264, - 765, 392, 136, 637, 893, 456, 72, 328, 829, 573, 200, 701, 957, - 488, 40, 296, 797, 424, 168, 669, 925, 541, 104, 360, 861, 605, - 232, 733, 989, 509, 24, 280, 781, 408, 152, 653, 909, 472, 88, - 344, 845, 589, 216, 717, 973, 525, 56, 312, 813, 440, 184, 685, - 941, 557, 120, 376, 877, 621, 248, 749, 1005, 504, 4, 260, 761, - 388, 132, 633, 889, 452, 68, 324, 825, 569, 196, 697, 953, 484, - 36, 292, 793, 420, 164, 665, 921, 537, 100, 356, 857, 601, 228, - 729, 985, 500, 20, 276, 777, 404, 148, 649, 905, 468, 84, 340, - 841, 585, 212, 713, 969, 521, 52, 308, 809, 436, 180, 681, 937, - 553, 116, 372, 873, 617, 244, 745, 1001, 12, 268, 769, 396, - 140, 641, 897, 460, 76, 332, 833, 577, 204, 705, 961, 492, 44, - 300, 801, 428, 172, 673, 929, 545, 108, 364, 865, 609, 236, - 737, 993, 513, 28, 284, 785, 412, 156, 657, 913, 476, 92, 348, - 849, 593, 220, 721, 977, 529, 60, 316, 817, 444, 188, 689, 945, - 561, 124, 380, 881, 625, 252, 753, 1009, 2, 258, 759, 386, 130, - 631, 887, 450, 66, 322, 823, 567, 194, 695, 951, 482, 34, 290, - 791, 418, 162, 663, 919, 535, 98, 354, 855, 599, 226, 727, 983, - 498, 18, 274, 775, 402, 146, 647, 903, 466, 82, 338, 839, 583, - 210, 711, 967, 519, 50, 306, 807, 434, 178, 679, 935, 551, 114, - 370, 871, 615, 242, 743, 999, 10, 266, 767, 394, 138, 639, 895, - 458, 74, 330, 831, 575, 202, 703, 959, 490, 42, 298, 799, 426, - 170, 671, 927, 543, 106, 362, 863, 607, 234, 735, 991, 511, 26, - 282, 783, 410, 154, 655, 911, 474, 90, 346, 847, 591, 218, 719, - 975, 527, 58, 314, 815, 442, 186, 687, 943, 559, 122, 378, 879, - 623, 250, 751, 1007, 507, 6, 262, 763, 390, 134, 635, 891, 454, - 70, 326, 827, 571, 198, 699, 955, 486, 38, 294, 795, 422, 166, - 667, 923, 539, 102, 358, 859, 603, 230, 731, 987, 502, 22, 278, - 779, 406, 150, 651, 907, 470, 86, 342, 843, 587, 214, 715, 971, - 523, 54, 310, 811, 438, 182, 683, 939, 555, 118, 374, 875, 619, - 246, 747, 1003, 14, 270, 771, 398, 142, 643, 899, 462, 78, 334, - 835, 579, 206, 707, 963, 494, 46, 302, 803, 430, 174, 675, 931, - 547, 110, 366, 867, 611, 238, 739, 995, 515, 30, 286, 787, 414, - 158, 659, 915, 478, 94, 350, 851, 595, 222, 723, 979, 531, 62, - 318, 819, 446, 190, 691, 947, 563, 126, 382, 883, 627, 254, - 755, 1011, 506, 1, 257, 758, 385, 129, 630, 886, 449, 65, 321, - 822, 566, 193, 694, 950, 481, 33, 289, 790, 417, 161, 662, 918, - 534, 97, 353, 854, 598, 225, 726, 982, 497, 17, 273, 774, 401, - 145, 646, 902, 465, 81, 337, 838, 582, 209, 710, 966, 518, 49, - 305, 806, 433, 177, 678, 934, 550, 113, 369, 870, 614, 241, - 742, 998, 9, 265, 766, 393, 137, 638, 894, 457, 73, 329, 830, - 574, 201, 702, 958, 489, 41, 297, 798, 425, 169, 670, 926, 542, - 105, 361, 862, 606, 233, 734, 990, 510, 25, 281, 782, 409, 153, - 654, 910, 473, 89, 345, 846, 590, 217, 718, 974, 526, 57, 313, - 814, 441, 185, 686, 942, 558, 121, 377, 878, 622, 249, 750, - 1006, 505, 5, 261, 762, 389, 133, 634, 890, 453, 69, 325, 826, - 570, 197, 698, 954, 485, 37, 293, 794, 421, 165, 666, 922, 538, - 101, 357, 858, 602, 229, 730, 986, 501, 21, 277, 778, 405, 149, - 650, 906, 469, 85, 341, 842, 586, 213, 714, 970, 522, 53, 309, - 810, 437, 181, 682, 938, 554, 117, 373, 874, 618, 245, 746, - 1002, 13, 269, 770, 397, 141, 642, 898, 461, 77, 333, 834, 578, - 205, 706, 962, 493, 45, 301, 802, 429, 173, 674, 930, 546, 109, - 365, 866, 610, 237, 738, 994, 514, 29, 285, 786, 413, 157, 658, - 914, 477, 93, 349, 850, 594, 221, 722, 978, 530, 61, 317, 818, - 445, 189, 690, 946, 562, 125, 381, 882, 626, 253, 754, 1010, 3, - 259, 760, 387, 131, 632, 888, 451, 67, 323, 824, 568, 195, 696, - 952, 483, 35, 291, 792, 419, 163, 664, 920, 536, 99, 355, 856, - 600, 227, 728, 984, 499, 19, 275, 776, 403, 147, 648, 904, 467, - 83, 339, 840, 584, 211, 712, 968, 520, 51, 307, 808, 435, 179, - 680, 936, 552, 115, 371, 872, 616, 243, 744, 1000, 11, 267, - 768, 395, 139, 640, 896, 459, 75, 331, 832, 576, 203, 704, 960, - 491, 43, 299, 800, 427, 171, 672, 928, 544, 107, 363, 864, 608, - 235, 736, 992, 512, 27, 283, 784, 411, 155, 656, 912, 475, 91, - 347, 848, 592, 219, 720, 976, 528, 59, 315, 816, 443, 187, 688, - 944, 560, 123, 379, 880, 624, 251, 752, 1008, 508, 7, 263, 764, - 391, 135, 636, 892, 455, 71, 327, 828, 572, 199, 700, 956, 487, - 39, 295, 796, 423, 167, 668, 924, 540, 103, 359, 860, 604, 231, - 732, 988, 503, 23, 279, 780, 407, 151, 652, 908, 471, 87, 343, - 844, 588, 215, 716, 972, 524, 55, 311, 812, 439, 183, 684, 940, - 556, 119, 375, 876, 620, 247, 748, 1004, 15, 271, 772, 399, - 143, 644, 900, 463, 79, 335, 836, 580, 207, 708, 964, 495, 47, - 303, 804, 431, 175, 676, 932, 548, 111, 367, 868, 612, 239, - 740, 996, 516, 31, 287, 788, 415, 159, 660, 916, 479, 95, 351, - 852, 596, 223, 724, 980, 532, 63, 319, 820, 447, 191, 692, 948, - 564, 127, 383, 884, 628, 255, 756, 1012]; - - return (unsafe { *PERM1013.get_unchecked((index % 1013) as usize) } as u32 * 1026169 + - unsafe { *PERM1013.get_unchecked(((index / 1013) % 1013) as usize) } as u32 * 1013 + - unsafe { - *PERM1013.get_unchecked(((index / 1026169) % 1013) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1039509197u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1019(index: u32) -> f32 { - const PERM1019: [u16; 1019] = [0, 256, 763, 384, 128, 635, 891, 448, 64, 320, 827, 571, 192, - 699, 955, 480, 32, 288, 795, 416, 160, 667, 923, 539, 96, 352, - 859, 603, 224, 731, 987, 496, 16, 272, 779, 400, 144, 651, 907, - 464, 80, 336, 843, 587, 208, 715, 971, 523, 48, 304, 811, 432, - 176, 683, 939, 555, 112, 368, 875, 619, 240, 747, 1003, 504, 8, - 264, 771, 392, 136, 643, 899, 456, 72, 328, 835, 579, 200, 707, - 963, 488, 40, 296, 803, 424, 168, 675, 931, 547, 104, 360, 867, - 611, 232, 739, 995, 515, 24, 280, 787, 408, 152, 659, 915, 472, - 88, 344, 851, 595, 216, 723, 979, 531, 56, 312, 819, 440, 184, - 691, 947, 563, 120, 376, 883, 627, 248, 755, 1011, 4, 260, 767, - 388, 132, 639, 895, 452, 68, 324, 831, 575, 196, 703, 959, 484, - 36, 292, 799, 420, 164, 671, 927, 543, 100, 356, 863, 607, 228, - 735, 991, 500, 20, 276, 783, 404, 148, 655, 911, 468, 84, 340, - 847, 591, 212, 719, 975, 527, 52, 308, 815, 436, 180, 687, 943, - 559, 116, 372, 879, 623, 244, 751, 1007, 511, 12, 268, 775, - 396, 140, 647, 903, 460, 76, 332, 839, 583, 204, 711, 967, 492, - 44, 300, 807, 428, 172, 679, 935, 551, 108, 364, 871, 615, 236, - 743, 999, 519, 28, 284, 791, 412, 156, 663, 919, 476, 92, 348, - 855, 599, 220, 727, 983, 535, 60, 316, 823, 444, 188, 695, 951, - 567, 124, 380, 887, 631, 252, 759, 1015, 508, 2, 258, 765, 386, - 130, 637, 893, 450, 66, 322, 829, 573, 194, 701, 957, 482, 34, - 290, 797, 418, 162, 669, 925, 541, 98, 354, 861, 605, 226, 733, - 989, 498, 18, 274, 781, 402, 146, 653, 909, 466, 82, 338, 845, - 589, 210, 717, 973, 525, 50, 306, 813, 434, 178, 685, 941, 557, - 114, 370, 877, 621, 242, 749, 1005, 506, 10, 266, 773, 394, - 138, 645, 901, 458, 74, 330, 837, 581, 202, 709, 965, 490, 42, - 298, 805, 426, 170, 677, 933, 549, 106, 362, 869, 613, 234, - 741, 997, 517, 26, 282, 789, 410, 154, 661, 917, 474, 90, 346, - 853, 597, 218, 725, 981, 533, 58, 314, 821, 442, 186, 693, 949, - 565, 122, 378, 885, 629, 250, 757, 1013, 6, 262, 769, 390, 134, - 641, 897, 454, 70, 326, 833, 577, 198, 705, 961, 486, 38, 294, - 801, 422, 166, 673, 929, 545, 102, 358, 865, 609, 230, 737, - 993, 502, 22, 278, 785, 406, 150, 657, 913, 470, 86, 342, 849, - 593, 214, 721, 977, 529, 54, 310, 817, 438, 182, 689, 945, 561, - 118, 374, 881, 625, 246, 753, 1009, 513, 14, 270, 777, 398, - 142, 649, 905, 462, 78, 334, 841, 585, 206, 713, 969, 494, 46, - 302, 809, 430, 174, 681, 937, 553, 110, 366, 873, 617, 238, - 745, 1001, 521, 30, 286, 793, 414, 158, 665, 921, 478, 94, 350, - 857, 601, 222, 729, 985, 537, 62, 318, 825, 446, 190, 697, 953, - 569, 126, 382, 889, 633, 254, 761, 1017, 509, 1, 257, 764, 385, - 129, 636, 892, 449, 65, 321, 828, 572, 193, 700, 956, 481, 33, - 289, 796, 417, 161, 668, 924, 540, 97, 353, 860, 604, 225, 732, - 988, 497, 17, 273, 780, 401, 145, 652, 908, 465, 81, 337, 844, - 588, 209, 716, 972, 524, 49, 305, 812, 433, 177, 684, 940, 556, - 113, 369, 876, 620, 241, 748, 1004, 505, 9, 265, 772, 393, 137, - 644, 900, 457, 73, 329, 836, 580, 201, 708, 964, 489, 41, 297, - 804, 425, 169, 676, 932, 548, 105, 361, 868, 612, 233, 740, - 996, 516, 25, 281, 788, 409, 153, 660, 916, 473, 89, 345, 852, - 596, 217, 724, 980, 532, 57, 313, 820, 441, 185, 692, 948, 564, - 121, 377, 884, 628, 249, 756, 1012, 5, 261, 768, 389, 133, 640, - 896, 453, 69, 325, 832, 576, 197, 704, 960, 485, 37, 293, 800, - 421, 165, 672, 928, 544, 101, 357, 864, 608, 229, 736, 992, - 501, 21, 277, 784, 405, 149, 656, 912, 469, 85, 341, 848, 592, - 213, 720, 976, 528, 53, 309, 816, 437, 181, 688, 944, 560, 117, - 373, 880, 624, 245, 752, 1008, 512, 13, 269, 776, 397, 141, - 648, 904, 461, 77, 333, 840, 584, 205, 712, 968, 493, 45, 301, - 808, 429, 173, 680, 936, 552, 109, 365, 872, 616, 237, 744, - 1000, 520, 29, 285, 792, 413, 157, 664, 920, 477, 93, 349, 856, - 600, 221, 728, 984, 536, 61, 317, 824, 445, 189, 696, 952, 568, - 125, 381, 888, 632, 253, 760, 1016, 510, 3, 259, 766, 387, 131, - 638, 894, 451, 67, 323, 830, 574, 195, 702, 958, 483, 35, 291, - 798, 419, 163, 670, 926, 542, 99, 355, 862, 606, 227, 734, 990, - 499, 19, 275, 782, 403, 147, 654, 910, 467, 83, 339, 846, 590, - 211, 718, 974, 526, 51, 307, 814, 435, 179, 686, 942, 558, 115, - 371, 878, 622, 243, 750, 1006, 507, 11, 267, 774, 395, 139, - 646, 902, 459, 75, 331, 838, 582, 203, 710, 966, 491, 43, 299, - 806, 427, 171, 678, 934, 550, 107, 363, 870, 614, 235, 742, - 998, 518, 27, 283, 790, 411, 155, 662, 918, 475, 91, 347, 854, - 598, 219, 726, 982, 534, 59, 315, 822, 443, 187, 694, 950, 566, - 123, 379, 886, 630, 251, 758, 1014, 7, 263, 770, 391, 135, 642, - 898, 455, 71, 327, 834, 578, 199, 706, 962, 487, 39, 295, 802, - 423, 167, 674, 930, 546, 103, 359, 866, 610, 231, 738, 994, - 503, 23, 279, 786, 407, 151, 658, 914, 471, 87, 343, 850, 594, - 215, 722, 978, 530, 55, 311, 818, 439, 183, 690, 946, 562, 119, - 375, 882, 626, 247, 754, 1010, 514, 15, 271, 778, 399, 143, - 650, 906, 463, 79, 335, 842, 586, 207, 714, 970, 495, 47, 303, - 810, 431, 175, 682, 938, 554, 111, 367, 874, 618, 239, 746, - 1002, 522, 31, 287, 794, 415, 159, 666, 922, 479, 95, 351, 858, - 602, 223, 730, 986, 538, 63, 319, 826, 447, 191, 698, 954, 570, - 127, 383, 890, 634, 255, 762, 1018]; - - return (unsafe { *PERM1019.get_unchecked((index % 1019) as usize) } as u32 * 1038361 + - unsafe { *PERM1019.get_unchecked(((index / 1019) % 1019) as usize) } as u32 * 1019 + - unsafe { - *PERM1019.get_unchecked(((index / 1038361) % 1019) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1058089859u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1021(index: u32) -> f32 { - const PERM1021: [u16; 1021] = [0, 256, 765, 384, 128, 637, 893, 448, 64, 320, 829, 573, 192, - 701, 957, 480, 32, 288, 797, 416, 160, 669, 925, 541, 96, 352, - 861, 605, 224, 733, 989, 496, 16, 272, 781, 400, 144, 653, 909, - 464, 80, 336, 845, 589, 208, 717, 973, 525, 48, 304, 813, 432, - 176, 685, 941, 557, 112, 368, 877, 621, 240, 749, 1005, 504, 8, - 264, 773, 392, 136, 645, 901, 456, 72, 328, 837, 581, 200, 709, - 965, 488, 40, 296, 805, 424, 168, 677, 933, 549, 104, 360, 869, - 613, 232, 741, 997, 517, 24, 280, 789, 408, 152, 661, 917, 472, - 88, 344, 853, 597, 216, 725, 981, 533, 56, 312, 821, 440, 184, - 693, 949, 565, 120, 376, 885, 629, 248, 757, 1013, 508, 4, 260, - 769, 388, 132, 641, 897, 452, 68, 324, 833, 577, 196, 705, 961, - 484, 36, 292, 801, 420, 164, 673, 929, 545, 100, 356, 865, 609, - 228, 737, 993, 500, 20, 276, 785, 404, 148, 657, 913, 468, 84, - 340, 849, 593, 212, 721, 977, 529, 52, 308, 817, 436, 180, 689, - 945, 561, 116, 372, 881, 625, 244, 753, 1009, 513, 12, 268, - 777, 396, 140, 649, 905, 460, 76, 332, 841, 585, 204, 713, 969, - 492, 44, 300, 809, 428, 172, 681, 937, 553, 108, 364, 873, 617, - 236, 745, 1001, 521, 28, 284, 793, 412, 156, 665, 921, 476, 92, - 348, 857, 601, 220, 729, 985, 537, 60, 316, 825, 444, 188, 697, - 953, 569, 124, 380, 889, 633, 252, 761, 1017, 2, 258, 767, 386, - 130, 639, 895, 450, 66, 322, 831, 575, 194, 703, 959, 482, 34, - 290, 799, 418, 162, 671, 927, 543, 98, 354, 863, 607, 226, 735, - 991, 498, 18, 274, 783, 402, 146, 655, 911, 466, 82, 338, 847, - 591, 210, 719, 975, 527, 50, 306, 815, 434, 178, 687, 943, 559, - 114, 370, 879, 623, 242, 751, 1007, 506, 10, 266, 775, 394, - 138, 647, 903, 458, 74, 330, 839, 583, 202, 711, 967, 490, 42, - 298, 807, 426, 170, 679, 935, 551, 106, 362, 871, 615, 234, - 743, 999, 519, 26, 282, 791, 410, 154, 663, 919, 474, 90, 346, - 855, 599, 218, 727, 983, 535, 58, 314, 823, 442, 186, 695, 951, - 567, 122, 378, 887, 631, 250, 759, 1015, 511, 6, 262, 771, 390, - 134, 643, 899, 454, 70, 326, 835, 579, 198, 707, 963, 486, 38, - 294, 803, 422, 166, 675, 931, 547, 102, 358, 867, 611, 230, - 739, 995, 502, 22, 278, 787, 406, 150, 659, 915, 470, 86, 342, - 851, 595, 214, 723, 979, 531, 54, 310, 819, 438, 182, 691, 947, - 563, 118, 374, 883, 627, 246, 755, 1011, 515, 14, 270, 779, - 398, 142, 651, 907, 462, 78, 334, 843, 587, 206, 715, 971, 494, - 46, 302, 811, 430, 174, 683, 939, 555, 110, 366, 875, 619, 238, - 747, 1003, 523, 30, 286, 795, 414, 158, 667, 923, 478, 94, 350, - 859, 603, 222, 731, 987, 539, 62, 318, 827, 446, 190, 699, 955, - 571, 126, 382, 891, 635, 254, 763, 1019, 510, 1, 257, 766, 385, - 129, 638, 894, 449, 65, 321, 830, 574, 193, 702, 958, 481, 33, - 289, 798, 417, 161, 670, 926, 542, 97, 353, 862, 606, 225, 734, - 990, 497, 17, 273, 782, 401, 145, 654, 910, 465, 81, 337, 846, - 590, 209, 718, 974, 526, 49, 305, 814, 433, 177, 686, 942, 558, - 113, 369, 878, 622, 241, 750, 1006, 505, 9, 265, 774, 393, 137, - 646, 902, 457, 73, 329, 838, 582, 201, 710, 966, 489, 41, 297, - 806, 425, 169, 678, 934, 550, 105, 361, 870, 614, 233, 742, - 998, 518, 25, 281, 790, 409, 153, 662, 918, 473, 89, 345, 854, - 598, 217, 726, 982, 534, 57, 313, 822, 441, 185, 694, 950, 566, - 121, 377, 886, 630, 249, 758, 1014, 509, 5, 261, 770, 389, 133, - 642, 898, 453, 69, 325, 834, 578, 197, 706, 962, 485, 37, 293, - 802, 421, 165, 674, 930, 546, 101, 357, 866, 610, 229, 738, - 994, 501, 21, 277, 786, 405, 149, 658, 914, 469, 85, 341, 850, - 594, 213, 722, 978, 530, 53, 309, 818, 437, 181, 690, 946, 562, - 117, 373, 882, 626, 245, 754, 1010, 514, 13, 269, 778, 397, - 141, 650, 906, 461, 77, 333, 842, 586, 205, 714, 970, 493, 45, - 301, 810, 429, 173, 682, 938, 554, 109, 365, 874, 618, 237, - 746, 1002, 522, 29, 285, 794, 413, 157, 666, 922, 477, 93, 349, - 858, 602, 221, 730, 986, 538, 61, 317, 826, 445, 189, 698, 954, - 570, 125, 381, 890, 634, 253, 762, 1018, 3, 259, 768, 387, 131, - 640, 896, 451, 67, 323, 832, 576, 195, 704, 960, 483, 35, 291, - 800, 419, 163, 672, 928, 544, 99, 355, 864, 608, 227, 736, 992, - 499, 19, 275, 784, 403, 147, 656, 912, 467, 83, 339, 848, 592, - 211, 720, 976, 528, 51, 307, 816, 435, 179, 688, 944, 560, 115, - 371, 880, 624, 243, 752, 1008, 507, 11, 267, 776, 395, 139, - 648, 904, 459, 75, 331, 840, 584, 203, 712, 968, 491, 43, 299, - 808, 427, 171, 680, 936, 552, 107, 363, 872, 616, 235, 744, - 1000, 520, 27, 283, 792, 411, 155, 664, 920, 475, 91, 347, 856, - 600, 219, 728, 984, 536, 59, 315, 824, 443, 187, 696, 952, 568, - 123, 379, 888, 632, 251, 760, 1016, 512, 7, 263, 772, 391, 135, - 644, 900, 455, 71, 327, 836, 580, 199, 708, 964, 487, 39, 295, - 804, 423, 167, 676, 932, 548, 103, 359, 868, 612, 231, 740, - 996, 503, 23, 279, 788, 407, 151, 660, 916, 471, 87, 343, 852, - 596, 215, 724, 980, 532, 55, 311, 820, 439, 183, 692, 948, 564, - 119, 375, 884, 628, 247, 756, 1012, 516, 15, 271, 780, 399, - 143, 652, 908, 463, 79, 335, 844, 588, 207, 716, 972, 495, 47, - 303, 812, 431, 175, 684, 940, 556, 111, 367, 876, 620, 239, - 748, 1004, 524, 31, 287, 796, 415, 159, 668, 924, 479, 95, 351, - 860, 604, 223, 732, 988, 540, 63, 319, 828, 447, 191, 700, 956, - 572, 127, 383, 892, 636, 255, 764, 1020]; - - return (unsafe { *PERM1021.get_unchecked((index % 1021) as usize) } as u32 * 1042441 + - unsafe { *PERM1021.get_unchecked(((index / 1021) % 1021) as usize) } as u32 * 1021 + - unsafe { - *PERM1021.get_unchecked(((index / 1042441) % 1021) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1064332261u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1031(index: u32) -> f32 { - const PERM1031: [u16; 1031] = [0, 519, 256, 775, 128, 647, 384, 903, 64, 583, 320, 839, 192, - 711, 448, 967, 32, 551, 288, 807, 160, 679, 416, 935, 96, 615, - 352, 871, 224, 743, 480, 999, 16, 535, 272, 791, 144, 663, 400, - 919, 80, 599, 336, 855, 208, 727, 464, 983, 48, 567, 304, 823, - 176, 695, 432, 951, 112, 631, 368, 887, 240, 759, 496, 1015, 8, - 527, 264, 783, 136, 655, 392, 911, 72, 591, 328, 847, 200, 719, - 456, 975, 40, 559, 296, 815, 168, 687, 424, 943, 104, 623, 360, - 879, 232, 751, 488, 1007, 24, 543, 280, 799, 152, 671, 408, - 927, 88, 607, 344, 863, 216, 735, 472, 991, 56, 575, 312, 831, - 184, 703, 440, 959, 120, 639, 376, 895, 248, 767, 504, 1023, - 512, 4, 523, 260, 779, 132, 651, 388, 907, 68, 587, 324, 843, - 196, 715, 452, 971, 36, 555, 292, 811, 164, 683, 420, 939, 100, - 619, 356, 875, 228, 747, 484, 1003, 20, 539, 276, 795, 148, - 667, 404, 923, 84, 603, 340, 859, 212, 731, 468, 987, 52, 571, - 308, 827, 180, 699, 436, 955, 116, 635, 372, 891, 244, 763, - 500, 1019, 12, 531, 268, 787, 140, 659, 396, 915, 76, 595, 332, - 851, 204, 723, 460, 979, 44, 563, 300, 819, 172, 691, 428, 947, - 108, 627, 364, 883, 236, 755, 492, 1011, 28, 547, 284, 803, - 156, 675, 412, 931, 92, 611, 348, 867, 220, 739, 476, 995, 60, - 579, 316, 835, 188, 707, 444, 963, 124, 643, 380, 899, 252, - 771, 508, 1027, 514, 2, 521, 258, 777, 130, 649, 386, 905, 66, - 585, 322, 841, 194, 713, 450, 969, 34, 553, 290, 809, 162, 681, - 418, 937, 98, 617, 354, 873, 226, 745, 482, 1001, 18, 537, 274, - 793, 146, 665, 402, 921, 82, 601, 338, 857, 210, 729, 466, 985, - 50, 569, 306, 825, 178, 697, 434, 953, 114, 633, 370, 889, 242, - 761, 498, 1017, 10, 529, 266, 785, 138, 657, 394, 913, 74, 593, - 330, 849, 202, 721, 458, 977, 42, 561, 298, 817, 170, 689, 426, - 945, 106, 625, 362, 881, 234, 753, 490, 1009, 26, 545, 282, - 801, 154, 673, 410, 929, 90, 609, 346, 865, 218, 737, 474, 993, - 58, 577, 314, 833, 186, 705, 442, 961, 122, 641, 378, 897, 250, - 769, 506, 1025, 517, 6, 525, 262, 781, 134, 653, 390, 909, 70, - 589, 326, 845, 198, 717, 454, 973, 38, 557, 294, 813, 166, 685, - 422, 941, 102, 621, 358, 877, 230, 749, 486, 1005, 22, 541, - 278, 797, 150, 669, 406, 925, 86, 605, 342, 861, 214, 733, 470, - 989, 54, 573, 310, 829, 182, 701, 438, 957, 118, 637, 374, 893, - 246, 765, 502, 1021, 14, 533, 270, 789, 142, 661, 398, 917, 78, - 597, 334, 853, 206, 725, 462, 981, 46, 565, 302, 821, 174, 693, - 430, 949, 110, 629, 366, 885, 238, 757, 494, 1013, 30, 549, - 286, 805, 158, 677, 414, 933, 94, 613, 350, 869, 222, 741, 478, - 997, 62, 581, 318, 837, 190, 709, 446, 965, 126, 645, 382, 901, - 254, 773, 510, 1029, 515, 1, 520, 257, 776, 129, 648, 385, 904, - 65, 584, 321, 840, 193, 712, 449, 968, 33, 552, 289, 808, 161, - 680, 417, 936, 97, 616, 353, 872, 225, 744, 481, 1000, 17, 536, - 273, 792, 145, 664, 401, 920, 81, 600, 337, 856, 209, 728, 465, - 984, 49, 568, 305, 824, 177, 696, 433, 952, 113, 632, 369, 888, - 241, 760, 497, 1016, 9, 528, 265, 784, 137, 656, 393, 912, 73, - 592, 329, 848, 201, 720, 457, 976, 41, 560, 297, 816, 169, 688, - 425, 944, 105, 624, 361, 880, 233, 752, 489, 1008, 25, 544, - 281, 800, 153, 672, 409, 928, 89, 608, 345, 864, 217, 736, 473, - 992, 57, 576, 313, 832, 185, 704, 441, 960, 121, 640, 377, 896, - 249, 768, 505, 1024, 513, 5, 524, 261, 780, 133, 652, 389, 908, - 69, 588, 325, 844, 197, 716, 453, 972, 37, 556, 293, 812, 165, - 684, 421, 940, 101, 620, 357, 876, 229, 748, 485, 1004, 21, - 540, 277, 796, 149, 668, 405, 924, 85, 604, 341, 860, 213, 732, - 469, 988, 53, 572, 309, 828, 181, 700, 437, 956, 117, 636, 373, - 892, 245, 764, 501, 1020, 13, 532, 269, 788, 141, 660, 397, - 916, 77, 596, 333, 852, 205, 724, 461, 980, 45, 564, 301, 820, - 173, 692, 429, 948, 109, 628, 365, 884, 237, 756, 493, 1012, - 29, 548, 285, 804, 157, 676, 413, 932, 93, 612, 349, 868, 221, - 740, 477, 996, 61, 580, 317, 836, 189, 708, 445, 964, 125, 644, - 381, 900, 253, 772, 509, 1028, 516, 3, 522, 259, 778, 131, 650, - 387, 906, 67, 586, 323, 842, 195, 714, 451, 970, 35, 554, 291, - 810, 163, 682, 419, 938, 99, 618, 355, 874, 227, 746, 483, - 1002, 19, 538, 275, 794, 147, 666, 403, 922, 83, 602, 339, 858, - 211, 730, 467, 986, 51, 570, 307, 826, 179, 698, 435, 954, 115, - 634, 371, 890, 243, 762, 499, 1018, 11, 530, 267, 786, 139, - 658, 395, 914, 75, 594, 331, 850, 203, 722, 459, 978, 43, 562, - 299, 818, 171, 690, 427, 946, 107, 626, 363, 882, 235, 754, - 491, 1010, 27, 546, 283, 802, 155, 674, 411, 930, 91, 610, 347, - 866, 219, 738, 475, 994, 59, 578, 315, 834, 187, 706, 443, 962, - 123, 642, 379, 898, 251, 770, 507, 1026, 518, 7, 526, 263, 782, - 135, 654, 391, 910, 71, 590, 327, 846, 199, 718, 455, 974, 39, - 558, 295, 814, 167, 686, 423, 942, 103, 622, 359, 878, 231, - 750, 487, 1006, 23, 542, 279, 798, 151, 670, 407, 926, 87, 606, - 343, 862, 215, 734, 471, 990, 55, 574, 311, 830, 183, 702, 439, - 958, 119, 638, 375, 894, 247, 766, 503, 1022, 15, 534, 271, - 790, 143, 662, 399, 918, 79, 598, 335, 854, 207, 726, 463, 982, - 47, 566, 303, 822, 175, 694, 431, 950, 111, 630, 367, 886, 239, - 758, 495, 1014, 31, 550, 287, 806, 159, 678, 415, 934, 95, 614, - 351, 870, 223, 742, 479, 998, 63, 582, 319, 838, 191, 710, 447, - 966, 127, 646, 383, 902, 255, 774, 511, 1030]; - - return (unsafe { *PERM1031.get_unchecked((index % 1031) as usize) } as u32 * 1062961 + - unsafe { *PERM1031.get_unchecked(((index / 1031) % 1031) as usize) } as u32 * 1031 + - unsafe { - *PERM1031.get_unchecked(((index / 1062961) % 1031) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1095912791u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1033(index: u32) -> f32 { - const PERM1033: [u16; 1033] = [0, 521, 256, 777, 128, 649, 384, 905, 64, 585, 320, 841, 192, - 713, 448, 969, 32, 553, 288, 809, 160, 681, 416, 937, 96, 617, - 352, 873, 224, 745, 480, 1001, 16, 537, 272, 793, 144, 665, - 400, 921, 80, 601, 336, 857, 208, 729, 464, 985, 48, 569, 304, - 825, 176, 697, 432, 953, 112, 633, 368, 889, 240, 761, 496, - 1017, 512, 8, 529, 264, 785, 136, 657, 392, 913, 72, 593, 328, - 849, 200, 721, 456, 977, 40, 561, 296, 817, 168, 689, 424, 945, - 104, 625, 360, 881, 232, 753, 488, 1009, 24, 545, 280, 801, - 152, 673, 408, 929, 88, 609, 344, 865, 216, 737, 472, 993, 56, - 577, 312, 833, 184, 705, 440, 961, 120, 641, 376, 897, 248, - 769, 504, 1025, 4, 525, 260, 781, 132, 653, 388, 909, 68, 589, - 324, 845, 196, 717, 452, 973, 36, 557, 292, 813, 164, 685, 420, - 941, 100, 621, 356, 877, 228, 749, 484, 1005, 20, 541, 276, - 797, 148, 669, 404, 925, 84, 605, 340, 861, 212, 733, 468, 989, - 52, 573, 308, 829, 180, 701, 436, 957, 116, 637, 372, 893, 244, - 765, 500, 1021, 517, 12, 533, 268, 789, 140, 661, 396, 917, 76, - 597, 332, 853, 204, 725, 460, 981, 44, 565, 300, 821, 172, 693, - 428, 949, 108, 629, 364, 885, 236, 757, 492, 1013, 28, 549, - 284, 805, 156, 677, 412, 933, 92, 613, 348, 869, 220, 741, 476, - 997, 60, 581, 316, 837, 188, 709, 444, 965, 124, 645, 380, 901, - 252, 773, 508, 1029, 2, 523, 258, 779, 130, 651, 386, 907, 66, - 587, 322, 843, 194, 715, 450, 971, 34, 555, 290, 811, 162, 683, - 418, 939, 98, 619, 354, 875, 226, 747, 482, 1003, 18, 539, 274, - 795, 146, 667, 402, 923, 82, 603, 338, 859, 210, 731, 466, 987, - 50, 571, 306, 827, 178, 699, 434, 955, 114, 635, 370, 891, 242, - 763, 498, 1019, 514, 10, 531, 266, 787, 138, 659, 394, 915, 74, - 595, 330, 851, 202, 723, 458, 979, 42, 563, 298, 819, 170, 691, - 426, 947, 106, 627, 362, 883, 234, 755, 490, 1011, 26, 547, - 282, 803, 154, 675, 410, 931, 90, 611, 346, 867, 218, 739, 474, - 995, 58, 579, 314, 835, 186, 707, 442, 963, 122, 643, 378, 899, - 250, 771, 506, 1027, 6, 527, 262, 783, 134, 655, 390, 911, 70, - 591, 326, 847, 198, 719, 454, 975, 38, 559, 294, 815, 166, 687, - 422, 943, 102, 623, 358, 879, 230, 751, 486, 1007, 22, 543, - 278, 799, 150, 671, 406, 927, 86, 607, 342, 863, 214, 735, 470, - 991, 54, 575, 310, 831, 182, 703, 438, 959, 118, 639, 374, 895, - 246, 767, 502, 1023, 519, 14, 535, 270, 791, 142, 663, 398, - 919, 78, 599, 334, 855, 206, 727, 462, 983, 46, 567, 302, 823, - 174, 695, 430, 951, 110, 631, 366, 887, 238, 759, 494, 1015, - 30, 551, 286, 807, 158, 679, 414, 935, 94, 615, 350, 871, 222, - 743, 478, 999, 62, 583, 318, 839, 190, 711, 446, 967, 126, 647, - 382, 903, 254, 775, 510, 1031, 516, 1, 522, 257, 778, 129, 650, - 385, 906, 65, 586, 321, 842, 193, 714, 449, 970, 33, 554, 289, - 810, 161, 682, 417, 938, 97, 618, 353, 874, 225, 746, 481, - 1002, 17, 538, 273, 794, 145, 666, 401, 922, 81, 602, 337, 858, - 209, 730, 465, 986, 49, 570, 305, 826, 177, 698, 433, 954, 113, - 634, 369, 890, 241, 762, 497, 1018, 513, 9, 530, 265, 786, 137, - 658, 393, 914, 73, 594, 329, 850, 201, 722, 457, 978, 41, 562, - 297, 818, 169, 690, 425, 946, 105, 626, 361, 882, 233, 754, - 489, 1010, 25, 546, 281, 802, 153, 674, 409, 930, 89, 610, 345, - 866, 217, 738, 473, 994, 57, 578, 313, 834, 185, 706, 441, 962, - 121, 642, 377, 898, 249, 770, 505, 1026, 5, 526, 261, 782, 133, - 654, 389, 910, 69, 590, 325, 846, 197, 718, 453, 974, 37, 558, - 293, 814, 165, 686, 421, 942, 101, 622, 357, 878, 229, 750, - 485, 1006, 21, 542, 277, 798, 149, 670, 405, 926, 85, 606, 341, - 862, 213, 734, 469, 990, 53, 574, 309, 830, 181, 702, 437, 958, - 117, 638, 373, 894, 245, 766, 501, 1022, 518, 13, 534, 269, - 790, 141, 662, 397, 918, 77, 598, 333, 854, 205, 726, 461, 982, - 45, 566, 301, 822, 173, 694, 429, 950, 109, 630, 365, 886, 237, - 758, 493, 1014, 29, 550, 285, 806, 157, 678, 413, 934, 93, 614, - 349, 870, 221, 742, 477, 998, 61, 582, 317, 838, 189, 710, 445, - 966, 125, 646, 381, 902, 253, 774, 509, 1030, 3, 524, 259, 780, - 131, 652, 387, 908, 67, 588, 323, 844, 195, 716, 451, 972, 35, - 556, 291, 812, 163, 684, 419, 940, 99, 620, 355, 876, 227, 748, - 483, 1004, 19, 540, 275, 796, 147, 668, 403, 924, 83, 604, 339, - 860, 211, 732, 467, 988, 51, 572, 307, 828, 179, 700, 435, 956, - 115, 636, 371, 892, 243, 764, 499, 1020, 515, 11, 532, 267, - 788, 139, 660, 395, 916, 75, 596, 331, 852, 203, 724, 459, 980, - 43, 564, 299, 820, 171, 692, 427, 948, 107, 628, 363, 884, 235, - 756, 491, 1012, 27, 548, 283, 804, 155, 676, 411, 932, 91, 612, - 347, 868, 219, 740, 475, 996, 59, 580, 315, 836, 187, 708, 443, - 964, 123, 644, 379, 900, 251, 772, 507, 1028, 7, 528, 263, 784, - 135, 656, 391, 912, 71, 592, 327, 848, 199, 720, 455, 976, 39, - 560, 295, 816, 167, 688, 423, 944, 103, 624, 359, 880, 231, - 752, 487, 1008, 23, 544, 279, 800, 151, 672, 407, 928, 87, 608, - 343, 864, 215, 736, 471, 992, 55, 576, 311, 832, 183, 704, 439, - 960, 119, 640, 375, 896, 247, 768, 503, 1024, 520, 15, 536, - 271, 792, 143, 664, 399, 920, 79, 600, 335, 856, 207, 728, 463, - 984, 47, 568, 303, 824, 175, 696, 431, 952, 111, 632, 367, 888, - 239, 760, 495, 1016, 31, 552, 287, 808, 159, 680, 415, 936, 95, - 616, 351, 872, 223, 744, 479, 1000, 63, 584, 319, 840, 191, - 712, 447, 968, 127, 648, 383, 904, 255, 776, 511, 1032]; - - return (unsafe { *PERM1033.get_unchecked((index % 1033) as usize) } as u32 * 1067089 + - unsafe { *PERM1033.get_unchecked(((index / 1033) % 1033) as usize) } as u32 * 1033 + - unsafe { - *PERM1033.get_unchecked(((index / 1067089) % 1033) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1102302937u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1039(index: u32) -> f32 { - const PERM1039: [u16; 1039] = [0, 527, 256, 783, 128, 655, 384, 911, 64, 591, 320, 847, 192, - 719, 448, 975, 32, 559, 288, 815, 160, 687, 416, 943, 96, 623, - 352, 879, 224, 751, 480, 1007, 16, 543, 272, 799, 144, 671, - 400, 927, 80, 607, 336, 863, 208, 735, 464, 991, 48, 575, 304, - 831, 176, 703, 432, 959, 112, 639, 368, 895, 240, 767, 496, - 1023, 512, 8, 535, 264, 791, 136, 663, 392, 919, 72, 599, 328, - 855, 200, 727, 456, 983, 40, 567, 296, 823, 168, 695, 424, 951, - 104, 631, 360, 887, 232, 759, 488, 1015, 24, 551, 280, 807, - 152, 679, 408, 935, 88, 615, 344, 871, 216, 743, 472, 999, 56, - 583, 312, 839, 184, 711, 440, 967, 120, 647, 376, 903, 248, - 775, 504, 1031, 516, 4, 531, 260, 787, 132, 659, 388, 915, 68, - 595, 324, 851, 196, 723, 452, 979, 36, 563, 292, 819, 164, 691, - 420, 947, 100, 627, 356, 883, 228, 755, 484, 1011, 20, 547, - 276, 803, 148, 675, 404, 931, 84, 611, 340, 867, 212, 739, 468, - 995, 52, 579, 308, 835, 180, 707, 436, 963, 116, 643, 372, 899, - 244, 771, 500, 1027, 523, 12, 539, 268, 795, 140, 667, 396, - 923, 76, 603, 332, 859, 204, 731, 460, 987, 44, 571, 300, 827, - 172, 699, 428, 955, 108, 635, 364, 891, 236, 763, 492, 1019, - 28, 555, 284, 811, 156, 683, 412, 939, 92, 619, 348, 875, 220, - 747, 476, 1003, 60, 587, 316, 843, 188, 715, 444, 971, 124, - 651, 380, 907, 252, 779, 508, 1035, 518, 2, 529, 258, 785, 130, - 657, 386, 913, 66, 593, 322, 849, 194, 721, 450, 977, 34, 561, - 290, 817, 162, 689, 418, 945, 98, 625, 354, 881, 226, 753, 482, - 1009, 18, 545, 274, 801, 146, 673, 402, 929, 82, 609, 338, 865, - 210, 737, 466, 993, 50, 577, 306, 833, 178, 705, 434, 961, 114, - 641, 370, 897, 242, 769, 498, 1025, 514, 10, 537, 266, 793, - 138, 665, 394, 921, 74, 601, 330, 857, 202, 729, 458, 985, 42, - 569, 298, 825, 170, 697, 426, 953, 106, 633, 362, 889, 234, - 761, 490, 1017, 26, 553, 282, 809, 154, 681, 410, 937, 90, 617, - 346, 873, 218, 745, 474, 1001, 58, 585, 314, 841, 186, 713, - 442, 969, 122, 649, 378, 905, 250, 777, 506, 1033, 521, 6, 533, - 262, 789, 134, 661, 390, 917, 70, 597, 326, 853, 198, 725, 454, - 981, 38, 565, 294, 821, 166, 693, 422, 949, 102, 629, 358, 885, - 230, 757, 486, 1013, 22, 549, 278, 805, 150, 677, 406, 933, 86, - 613, 342, 869, 214, 741, 470, 997, 54, 581, 310, 837, 182, 709, - 438, 965, 118, 645, 374, 901, 246, 773, 502, 1029, 525, 14, - 541, 270, 797, 142, 669, 398, 925, 78, 605, 334, 861, 206, 733, - 462, 989, 46, 573, 302, 829, 174, 701, 430, 957, 110, 637, 366, - 893, 238, 765, 494, 1021, 30, 557, 286, 813, 158, 685, 414, - 941, 94, 621, 350, 877, 222, 749, 478, 1005, 62, 589, 318, 845, - 190, 717, 446, 973, 126, 653, 382, 909, 254, 781, 510, 1037, - 519, 1, 528, 257, 784, 129, 656, 385, 912, 65, 592, 321, 848, - 193, 720, 449, 976, 33, 560, 289, 816, 161, 688, 417, 944, 97, - 624, 353, 880, 225, 752, 481, 1008, 17, 544, 273, 800, 145, - 672, 401, 928, 81, 608, 337, 864, 209, 736, 465, 992, 49, 576, - 305, 832, 177, 704, 433, 960, 113, 640, 369, 896, 241, 768, - 497, 1024, 513, 9, 536, 265, 792, 137, 664, 393, 920, 73, 600, - 329, 856, 201, 728, 457, 984, 41, 568, 297, 824, 169, 696, 425, - 952, 105, 632, 361, 888, 233, 760, 489, 1016, 25, 552, 281, - 808, 153, 680, 409, 936, 89, 616, 345, 872, 217, 744, 473, - 1000, 57, 584, 313, 840, 185, 712, 441, 968, 121, 648, 377, - 904, 249, 776, 505, 1032, 517, 5, 532, 261, 788, 133, 660, 389, - 916, 69, 596, 325, 852, 197, 724, 453, 980, 37, 564, 293, 820, - 165, 692, 421, 948, 101, 628, 357, 884, 229, 756, 485, 1012, - 21, 548, 277, 804, 149, 676, 405, 932, 85, 612, 341, 868, 213, - 740, 469, 996, 53, 580, 309, 836, 181, 708, 437, 964, 117, 644, - 373, 900, 245, 772, 501, 1028, 524, 13, 540, 269, 796, 141, - 668, 397, 924, 77, 604, 333, 860, 205, 732, 461, 988, 45, 572, - 301, 828, 173, 700, 429, 956, 109, 636, 365, 892, 237, 764, - 493, 1020, 29, 556, 285, 812, 157, 684, 413, 940, 93, 620, 349, - 876, 221, 748, 477, 1004, 61, 588, 317, 844, 189, 716, 445, - 972, 125, 652, 381, 908, 253, 780, 509, 1036, 520, 3, 530, 259, - 786, 131, 658, 387, 914, 67, 594, 323, 850, 195, 722, 451, 978, - 35, 562, 291, 818, 163, 690, 419, 946, 99, 626, 355, 882, 227, - 754, 483, 1010, 19, 546, 275, 802, 147, 674, 403, 930, 83, 610, - 339, 866, 211, 738, 467, 994, 51, 578, 307, 834, 179, 706, 435, - 962, 115, 642, 371, 898, 243, 770, 499, 1026, 515, 11, 538, - 267, 794, 139, 666, 395, 922, 75, 602, 331, 858, 203, 730, 459, - 986, 43, 570, 299, 826, 171, 698, 427, 954, 107, 634, 363, 890, - 235, 762, 491, 1018, 27, 554, 283, 810, 155, 682, 411, 938, 91, - 618, 347, 874, 219, 746, 475, 1002, 59, 586, 315, 842, 187, - 714, 443, 970, 123, 650, 379, 906, 251, 778, 507, 1034, 522, 7, - 534, 263, 790, 135, 662, 391, 918, 71, 598, 327, 854, 199, 726, - 455, 982, 39, 566, 295, 822, 167, 694, 423, 950, 103, 630, 359, - 886, 231, 758, 487, 1014, 23, 550, 279, 806, 151, 678, 407, - 934, 87, 614, 343, 870, 215, 742, 471, 998, 55, 582, 311, 838, - 183, 710, 439, 966, 119, 646, 375, 902, 247, 774, 503, 1030, - 526, 15, 542, 271, 798, 143, 670, 399, 926, 79, 606, 335, 862, - 207, 734, 463, 990, 47, 574, 303, 830, 175, 702, 431, 958, 111, - 638, 367, 894, 239, 766, 495, 1022, 31, 558, 287, 814, 159, - 686, 415, 942, 95, 622, 351, 878, 223, 750, 479, 1006, 63, 590, - 319, 846, 191, 718, 447, 974, 127, 654, 383, 910, 255, 782, - 511, 1038]; - - return (unsafe { *PERM1039.get_unchecked((index % 1039) as usize) } as u32 * 1079521 + - unsafe { *PERM1039.get_unchecked(((index / 1039) % 1039) as usize) } as u32 * 1039 + - unsafe { - *PERM1039.get_unchecked(((index / 1079521) % 1039) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1121622319u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1049(index: u32) -> f32 { - const PERM1049: [u16; 1049] = [0, 537, 256, 793, 128, 665, 384, 921, 64, 601, 320, 857, 192, - 729, 448, 985, 32, 569, 288, 825, 160, 697, 416, 953, 96, 633, - 352, 889, 224, 761, 480, 1017, 512, 16, 553, 272, 809, 144, - 681, 400, 937, 80, 617, 336, 873, 208, 745, 464, 1001, 48, 585, - 304, 841, 176, 713, 432, 969, 112, 649, 368, 905, 240, 777, - 496, 1033, 520, 8, 545, 264, 801, 136, 673, 392, 929, 72, 609, - 328, 865, 200, 737, 456, 993, 40, 577, 296, 833, 168, 705, 424, - 961, 104, 641, 360, 897, 232, 769, 488, 1025, 529, 24, 561, - 280, 817, 152, 689, 408, 945, 88, 625, 344, 881, 216, 753, 472, - 1009, 56, 593, 312, 849, 184, 721, 440, 977, 120, 657, 376, - 913, 248, 785, 504, 1041, 4, 541, 260, 797, 132, 669, 388, 925, - 68, 605, 324, 861, 196, 733, 452, 989, 36, 573, 292, 829, 164, - 701, 420, 957, 100, 637, 356, 893, 228, 765, 484, 1021, 516, - 20, 557, 276, 813, 148, 685, 404, 941, 84, 621, 340, 877, 212, - 749, 468, 1005, 52, 589, 308, 845, 180, 717, 436, 973, 116, - 653, 372, 909, 244, 781, 500, 1037, 525, 12, 549, 268, 805, - 140, 677, 396, 933, 76, 613, 332, 869, 204, 741, 460, 997, 44, - 581, 300, 837, 172, 709, 428, 965, 108, 645, 364, 901, 236, - 773, 492, 1029, 533, 28, 565, 284, 821, 156, 693, 412, 949, 92, - 629, 348, 885, 220, 757, 476, 1013, 60, 597, 316, 853, 188, - 725, 444, 981, 124, 661, 380, 917, 252, 789, 508, 1045, 2, 539, - 258, 795, 130, 667, 386, 923, 66, 603, 322, 859, 194, 731, 450, - 987, 34, 571, 290, 827, 162, 699, 418, 955, 98, 635, 354, 891, - 226, 763, 482, 1019, 514, 18, 555, 274, 811, 146, 683, 402, - 939, 82, 619, 338, 875, 210, 747, 466, 1003, 50, 587, 306, 843, - 178, 715, 434, 971, 114, 651, 370, 907, 242, 779, 498, 1035, - 522, 10, 547, 266, 803, 138, 675, 394, 931, 74, 611, 330, 867, - 202, 739, 458, 995, 42, 579, 298, 835, 170, 707, 426, 963, 106, - 643, 362, 899, 234, 771, 490, 1027, 531, 26, 563, 282, 819, - 154, 691, 410, 947, 90, 627, 346, 883, 218, 755, 474, 1011, 58, - 595, 314, 851, 186, 723, 442, 979, 122, 659, 378, 915, 250, - 787, 506, 1043, 6, 543, 262, 799, 134, 671, 390, 927, 70, 607, - 326, 863, 198, 735, 454, 991, 38, 575, 294, 831, 166, 703, 422, - 959, 102, 639, 358, 895, 230, 767, 486, 1023, 518, 22, 559, - 278, 815, 150, 687, 406, 943, 86, 623, 342, 879, 214, 751, 470, - 1007, 54, 591, 310, 847, 182, 719, 438, 975, 118, 655, 374, - 911, 246, 783, 502, 1039, 527, 14, 551, 270, 807, 142, 679, - 398, 935, 78, 615, 334, 871, 206, 743, 462, 999, 46, 583, 302, - 839, 174, 711, 430, 967, 110, 647, 366, 903, 238, 775, 494, - 1031, 535, 30, 567, 286, 823, 158, 695, 414, 951, 94, 631, 350, - 887, 222, 759, 478, 1015, 62, 599, 318, 855, 190, 727, 446, - 983, 126, 663, 382, 919, 254, 791, 510, 1047, 524, 1, 538, 257, - 794, 129, 666, 385, 922, 65, 602, 321, 858, 193, 730, 449, 986, - 33, 570, 289, 826, 161, 698, 417, 954, 97, 634, 353, 890, 225, - 762, 481, 1018, 513, 17, 554, 273, 810, 145, 682, 401, 938, 81, - 618, 337, 874, 209, 746, 465, 1002, 49, 586, 305, 842, 177, - 714, 433, 970, 113, 650, 369, 906, 241, 778, 497, 1034, 521, 9, - 546, 265, 802, 137, 674, 393, 930, 73, 610, 329, 866, 201, 738, - 457, 994, 41, 578, 297, 834, 169, 706, 425, 962, 105, 642, 361, - 898, 233, 770, 489, 1026, 530, 25, 562, 281, 818, 153, 690, - 409, 946, 89, 626, 345, 882, 217, 754, 473, 1010, 57, 594, 313, - 850, 185, 722, 441, 978, 121, 658, 377, 914, 249, 786, 505, - 1042, 5, 542, 261, 798, 133, 670, 389, 926, 69, 606, 325, 862, - 197, 734, 453, 990, 37, 574, 293, 830, 165, 702, 421, 958, 101, - 638, 357, 894, 229, 766, 485, 1022, 517, 21, 558, 277, 814, - 149, 686, 405, 942, 85, 622, 341, 878, 213, 750, 469, 1006, 53, - 590, 309, 846, 181, 718, 437, 974, 117, 654, 373, 910, 245, - 782, 501, 1038, 526, 13, 550, 269, 806, 141, 678, 397, 934, 77, - 614, 333, 870, 205, 742, 461, 998, 45, 582, 301, 838, 173, 710, - 429, 966, 109, 646, 365, 902, 237, 774, 493, 1030, 534, 29, - 566, 285, 822, 157, 694, 413, 950, 93, 630, 349, 886, 221, 758, - 477, 1014, 61, 598, 317, 854, 189, 726, 445, 982, 125, 662, - 381, 918, 253, 790, 509, 1046, 3, 540, 259, 796, 131, 668, 387, - 924, 67, 604, 323, 860, 195, 732, 451, 988, 35, 572, 291, 828, - 163, 700, 419, 956, 99, 636, 355, 892, 227, 764, 483, 1020, - 515, 19, 556, 275, 812, 147, 684, 403, 940, 83, 620, 339, 876, - 211, 748, 467, 1004, 51, 588, 307, 844, 179, 716, 435, 972, - 115, 652, 371, 908, 243, 780, 499, 1036, 523, 11, 548, 267, - 804, 139, 676, 395, 932, 75, 612, 331, 868, 203, 740, 459, 996, - 43, 580, 299, 836, 171, 708, 427, 964, 107, 644, 363, 900, 235, - 772, 491, 1028, 532, 27, 564, 283, 820, 155, 692, 411, 948, 91, - 628, 347, 884, 219, 756, 475, 1012, 59, 596, 315, 852, 187, - 724, 443, 980, 123, 660, 379, 916, 251, 788, 507, 1044, 7, 544, - 263, 800, 135, 672, 391, 928, 71, 608, 327, 864, 199, 736, 455, - 992, 39, 576, 295, 832, 167, 704, 423, 960, 103, 640, 359, 896, - 231, 768, 487, 1024, 519, 23, 560, 279, 816, 151, 688, 407, - 944, 87, 624, 343, 880, 215, 752, 471, 1008, 55, 592, 311, 848, - 183, 720, 439, 976, 119, 656, 375, 912, 247, 784, 503, 1040, - 528, 15, 552, 271, 808, 143, 680, 399, 936, 79, 616, 335, 872, - 207, 744, 463, 1000, 47, 584, 303, 840, 175, 712, 431, 968, - 111, 648, 367, 904, 239, 776, 495, 1032, 536, 31, 568, 287, - 824, 159, 696, 415, 952, 95, 632, 351, 888, 223, 760, 479, - 1016, 63, 600, 319, 856, 191, 728, 447, 984, 127, 664, 383, - 920, 255, 792, 511, 1048]; - - return (unsafe { *PERM1049.get_unchecked((index % 1049) as usize) } as u32 * 1100401 + - unsafe { *PERM1049.get_unchecked(((index / 1049) % 1049) as usize) } as u32 * 1049 + - unsafe { - *PERM1049.get_unchecked(((index / 1100401) % 1049) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1154320649u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1051(index: u32) -> f32 { - const PERM1051: [u16; 1051] = [0, 539, 256, 795, 128, 667, 384, 923, 64, 603, 320, 859, 192, - 731, 448, 987, 32, 571, 288, 827, 160, 699, 416, 955, 96, 635, - 352, 891, 224, 763, 480, 1019, 512, 16, 555, 272, 811, 144, - 683, 400, 939, 80, 619, 336, 875, 208, 747, 464, 1003, 48, 587, - 304, 843, 176, 715, 432, 971, 112, 651, 368, 907, 240, 779, - 496, 1035, 520, 8, 547, 264, 803, 136, 675, 392, 931, 72, 611, - 328, 867, 200, 739, 456, 995, 40, 579, 296, 835, 168, 707, 424, - 963, 104, 643, 360, 899, 232, 771, 488, 1027, 531, 24, 563, - 280, 819, 152, 691, 408, 947, 88, 627, 344, 883, 216, 755, 472, - 1011, 56, 595, 312, 851, 184, 723, 440, 979, 120, 659, 376, - 915, 248, 787, 504, 1043, 4, 543, 260, 799, 132, 671, 388, 927, - 68, 607, 324, 863, 196, 735, 452, 991, 36, 575, 292, 831, 164, - 703, 420, 959, 100, 639, 356, 895, 228, 767, 484, 1023, 516, - 20, 559, 276, 815, 148, 687, 404, 943, 84, 623, 340, 879, 212, - 751, 468, 1007, 52, 591, 308, 847, 180, 719, 436, 975, 116, - 655, 372, 911, 244, 783, 500, 1039, 527, 12, 551, 268, 807, - 140, 679, 396, 935, 76, 615, 332, 871, 204, 743, 460, 999, 44, - 583, 300, 839, 172, 711, 428, 967, 108, 647, 364, 903, 236, - 775, 492, 1031, 535, 28, 567, 284, 823, 156, 695, 412, 951, 92, - 631, 348, 887, 220, 759, 476, 1015, 60, 599, 316, 855, 188, - 727, 444, 983, 124, 663, 380, 919, 252, 791, 508, 1047, 524, 2, - 541, 258, 797, 130, 669, 386, 925, 66, 605, 322, 861, 194, 733, - 450, 989, 34, 573, 290, 829, 162, 701, 418, 957, 98, 637, 354, - 893, 226, 765, 482, 1021, 514, 18, 557, 274, 813, 146, 685, - 402, 941, 82, 621, 338, 877, 210, 749, 466, 1005, 50, 589, 306, - 845, 178, 717, 434, 973, 114, 653, 370, 909, 242, 781, 498, - 1037, 522, 10, 549, 266, 805, 138, 677, 394, 933, 74, 613, 330, - 869, 202, 741, 458, 997, 42, 581, 298, 837, 170, 709, 426, 965, - 106, 645, 362, 901, 234, 773, 490, 1029, 533, 26, 565, 282, - 821, 154, 693, 410, 949, 90, 629, 346, 885, 218, 757, 474, - 1013, 58, 597, 314, 853, 186, 725, 442, 981, 122, 661, 378, - 917, 250, 789, 506, 1045, 6, 545, 262, 801, 134, 673, 390, 929, - 70, 609, 326, 865, 198, 737, 454, 993, 38, 577, 294, 833, 166, - 705, 422, 961, 102, 641, 358, 897, 230, 769, 486, 1025, 518, - 22, 561, 278, 817, 150, 689, 406, 945, 86, 625, 342, 881, 214, - 753, 470, 1009, 54, 593, 310, 849, 182, 721, 438, 977, 118, - 657, 374, 913, 246, 785, 502, 1041, 529, 14, 553, 270, 809, - 142, 681, 398, 937, 78, 617, 334, 873, 206, 745, 462, 1001, 46, - 585, 302, 841, 174, 713, 430, 969, 110, 649, 366, 905, 238, - 777, 494, 1033, 537, 30, 569, 286, 825, 158, 697, 414, 953, 94, - 633, 350, 889, 222, 761, 478, 1017, 62, 601, 318, 857, 190, - 729, 446, 985, 126, 665, 382, 921, 254, 793, 510, 1049, 525, 1, - 540, 257, 796, 129, 668, 385, 924, 65, 604, 321, 860, 193, 732, - 449, 988, 33, 572, 289, 828, 161, 700, 417, 956, 97, 636, 353, - 892, 225, 764, 481, 1020, 513, 17, 556, 273, 812, 145, 684, - 401, 940, 81, 620, 337, 876, 209, 748, 465, 1004, 49, 588, 305, - 844, 177, 716, 433, 972, 113, 652, 369, 908, 241, 780, 497, - 1036, 521, 9, 548, 265, 804, 137, 676, 393, 932, 73, 612, 329, - 868, 201, 740, 457, 996, 41, 580, 297, 836, 169, 708, 425, 964, - 105, 644, 361, 900, 233, 772, 489, 1028, 532, 25, 564, 281, - 820, 153, 692, 409, 948, 89, 628, 345, 884, 217, 756, 473, - 1012, 57, 596, 313, 852, 185, 724, 441, 980, 121, 660, 377, - 916, 249, 788, 505, 1044, 5, 544, 261, 800, 133, 672, 389, 928, - 69, 608, 325, 864, 197, 736, 453, 992, 37, 576, 293, 832, 165, - 704, 421, 960, 101, 640, 357, 896, 229, 768, 485, 1024, 517, - 21, 560, 277, 816, 149, 688, 405, 944, 85, 624, 341, 880, 213, - 752, 469, 1008, 53, 592, 309, 848, 181, 720, 437, 976, 117, - 656, 373, 912, 245, 784, 501, 1040, 528, 13, 552, 269, 808, - 141, 680, 397, 936, 77, 616, 333, 872, 205, 744, 461, 1000, 45, - 584, 301, 840, 173, 712, 429, 968, 109, 648, 365, 904, 237, - 776, 493, 1032, 536, 29, 568, 285, 824, 157, 696, 413, 952, 93, - 632, 349, 888, 221, 760, 477, 1016, 61, 600, 317, 856, 189, - 728, 445, 984, 125, 664, 381, 920, 253, 792, 509, 1048, 526, 3, - 542, 259, 798, 131, 670, 387, 926, 67, 606, 323, 862, 195, 734, - 451, 990, 35, 574, 291, 830, 163, 702, 419, 958, 99, 638, 355, - 894, 227, 766, 483, 1022, 515, 19, 558, 275, 814, 147, 686, - 403, 942, 83, 622, 339, 878, 211, 750, 467, 1006, 51, 590, 307, - 846, 179, 718, 435, 974, 115, 654, 371, 910, 243, 782, 499, - 1038, 523, 11, 550, 267, 806, 139, 678, 395, 934, 75, 614, 331, - 870, 203, 742, 459, 998, 43, 582, 299, 838, 171, 710, 427, 966, - 107, 646, 363, 902, 235, 774, 491, 1030, 534, 27, 566, 283, - 822, 155, 694, 411, 950, 91, 630, 347, 886, 219, 758, 475, - 1014, 59, 598, 315, 854, 187, 726, 443, 982, 123, 662, 379, - 918, 251, 790, 507, 1046, 7, 546, 263, 802, 135, 674, 391, 930, - 71, 610, 327, 866, 199, 738, 455, 994, 39, 578, 295, 834, 167, - 706, 423, 962, 103, 642, 359, 898, 231, 770, 487, 1026, 519, - 23, 562, 279, 818, 151, 690, 407, 946, 87, 626, 343, 882, 215, - 754, 471, 1010, 55, 594, 311, 850, 183, 722, 439, 978, 119, - 658, 375, 914, 247, 786, 503, 1042, 530, 15, 554, 271, 810, - 143, 682, 399, 938, 79, 618, 335, 874, 207, 746, 463, 1002, 47, - 586, 303, 842, 175, 714, 431, 970, 111, 650, 367, 906, 239, - 778, 495, 1034, 538, 31, 570, 287, 826, 159, 698, 415, 954, 95, - 634, 351, 890, 223, 762, 479, 1018, 63, 602, 319, 858, 191, - 730, 447, 986, 127, 666, 383, 922, 255, 794, 511, 1050]; - - return (unsafe { *PERM1051.get_unchecked((index % 1051) as usize) } as u32 * 1104601 + - unsafe { *PERM1051.get_unchecked(((index / 1051) % 1051) as usize) } as u32 * 1051 + - unsafe { - *PERM1051.get_unchecked(((index / 1104601) % 1051) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1160935651u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1061(index: u32) -> f32 { - const PERM1061: [u16; 1061] = [0, 549, 256, 805, 128, 677, 384, 933, 64, 613, 320, 869, 192, - 741, 448, 997, 512, 32, 581, 288, 837, 160, 709, 416, 965, 96, - 645, 352, 901, 224, 773, 480, 1029, 16, 565, 272, 821, 144, - 693, 400, 949, 80, 629, 336, 885, 208, 757, 464, 1013, 533, 48, - 597, 304, 853, 176, 725, 432, 981, 112, 661, 368, 917, 240, - 789, 496, 1045, 8, 557, 264, 813, 136, 685, 392, 941, 72, 621, - 328, 877, 200, 749, 456, 1005, 520, 40, 589, 296, 845, 168, - 717, 424, 973, 104, 653, 360, 909, 232, 781, 488, 1037, 24, - 573, 280, 829, 152, 701, 408, 957, 88, 637, 344, 893, 216, 765, - 472, 1021, 541, 56, 605, 312, 861, 184, 733, 440, 989, 120, - 669, 376, 925, 248, 797, 504, 1053, 528, 4, 553, 260, 809, 132, - 681, 388, 937, 68, 617, 324, 873, 196, 745, 452, 1001, 516, 36, - 585, 292, 841, 164, 713, 420, 969, 100, 649, 356, 905, 228, - 777, 484, 1033, 20, 569, 276, 825, 148, 697, 404, 953, 84, 633, - 340, 889, 212, 761, 468, 1017, 537, 52, 601, 308, 857, 180, - 729, 436, 985, 116, 665, 372, 921, 244, 793, 500, 1049, 12, - 561, 268, 817, 140, 689, 396, 945, 76, 625, 332, 881, 204, 753, - 460, 1009, 524, 44, 593, 300, 849, 172, 721, 428, 977, 108, - 657, 364, 913, 236, 785, 492, 1041, 28, 577, 284, 833, 156, - 705, 412, 961, 92, 641, 348, 897, 220, 769, 476, 1025, 545, 60, - 609, 316, 865, 188, 737, 444, 993, 124, 673, 380, 929, 252, - 801, 508, 1057, 2, 551, 258, 807, 130, 679, 386, 935, 66, 615, - 322, 871, 194, 743, 450, 999, 514, 34, 583, 290, 839, 162, 711, - 418, 967, 98, 647, 354, 903, 226, 775, 482, 1031, 18, 567, 274, - 823, 146, 695, 402, 951, 82, 631, 338, 887, 210, 759, 466, - 1015, 535, 50, 599, 306, 855, 178, 727, 434, 983, 114, 663, - 370, 919, 242, 791, 498, 1047, 10, 559, 266, 815, 138, 687, - 394, 943, 74, 623, 330, 879, 202, 751, 458, 1007, 522, 42, 591, - 298, 847, 170, 719, 426, 975, 106, 655, 362, 911, 234, 783, - 490, 1039, 26, 575, 282, 831, 154, 703, 410, 959, 90, 639, 346, - 895, 218, 767, 474, 1023, 543, 58, 607, 314, 863, 186, 735, - 442, 991, 122, 671, 378, 927, 250, 799, 506, 1055, 531, 6, 555, - 262, 811, 134, 683, 390, 939, 70, 619, 326, 875, 198, 747, 454, - 1003, 518, 38, 587, 294, 843, 166, 715, 422, 971, 102, 651, - 358, 907, 230, 779, 486, 1035, 22, 571, 278, 827, 150, 699, - 406, 955, 86, 635, 342, 891, 214, 763, 470, 1019, 539, 54, 603, - 310, 859, 182, 731, 438, 987, 118, 667, 374, 923, 246, 795, - 502, 1051, 14, 563, 270, 819, 142, 691, 398, 947, 78, 627, 334, - 883, 206, 755, 462, 1011, 526, 46, 595, 302, 851, 174, 723, - 430, 979, 110, 659, 366, 915, 238, 787, 494, 1043, 30, 579, - 286, 835, 158, 707, 414, 963, 94, 643, 350, 899, 222, 771, 478, - 1027, 547, 62, 611, 318, 867, 190, 739, 446, 995, 126, 675, - 382, 931, 254, 803, 510, 1059, 530, 1, 550, 257, 806, 129, 678, - 385, 934, 65, 614, 321, 870, 193, 742, 449, 998, 513, 33, 582, - 289, 838, 161, 710, 417, 966, 97, 646, 353, 902, 225, 774, 481, - 1030, 17, 566, 273, 822, 145, 694, 401, 950, 81, 630, 337, 886, - 209, 758, 465, 1014, 534, 49, 598, 305, 854, 177, 726, 433, - 982, 113, 662, 369, 918, 241, 790, 497, 1046, 9, 558, 265, 814, - 137, 686, 393, 942, 73, 622, 329, 878, 201, 750, 457, 1006, - 521, 41, 590, 297, 846, 169, 718, 425, 974, 105, 654, 361, 910, - 233, 782, 489, 1038, 25, 574, 281, 830, 153, 702, 409, 958, 89, - 638, 345, 894, 217, 766, 473, 1022, 542, 57, 606, 313, 862, - 185, 734, 441, 990, 121, 670, 377, 926, 249, 798, 505, 1054, - 529, 5, 554, 261, 810, 133, 682, 389, 938, 69, 618, 325, 874, - 197, 746, 453, 1002, 517, 37, 586, 293, 842, 165, 714, 421, - 970, 101, 650, 357, 906, 229, 778, 485, 1034, 21, 570, 277, - 826, 149, 698, 405, 954, 85, 634, 341, 890, 213, 762, 469, - 1018, 538, 53, 602, 309, 858, 181, 730, 437, 986, 117, 666, - 373, 922, 245, 794, 501, 1050, 13, 562, 269, 818, 141, 690, - 397, 946, 77, 626, 333, 882, 205, 754, 461, 1010, 525, 45, 594, - 301, 850, 173, 722, 429, 978, 109, 658, 365, 914, 237, 786, - 493, 1042, 29, 578, 285, 834, 157, 706, 413, 962, 93, 642, 349, - 898, 221, 770, 477, 1026, 546, 61, 610, 317, 866, 189, 738, - 445, 994, 125, 674, 381, 930, 253, 802, 509, 1058, 3, 552, 259, - 808, 131, 680, 387, 936, 67, 616, 323, 872, 195, 744, 451, - 1000, 515, 35, 584, 291, 840, 163, 712, 419, 968, 99, 648, 355, - 904, 227, 776, 483, 1032, 19, 568, 275, 824, 147, 696, 403, - 952, 83, 632, 339, 888, 211, 760, 467, 1016, 536, 51, 600, 307, - 856, 179, 728, 435, 984, 115, 664, 371, 920, 243, 792, 499, - 1048, 11, 560, 267, 816, 139, 688, 395, 944, 75, 624, 331, 880, - 203, 752, 459, 1008, 523, 43, 592, 299, 848, 171, 720, 427, - 976, 107, 656, 363, 912, 235, 784, 491, 1040, 27, 576, 283, - 832, 155, 704, 411, 960, 91, 640, 347, 896, 219, 768, 475, - 1024, 544, 59, 608, 315, 864, 187, 736, 443, 992, 123, 672, - 379, 928, 251, 800, 507, 1056, 532, 7, 556, 263, 812, 135, 684, - 391, 940, 71, 620, 327, 876, 199, 748, 455, 1004, 519, 39, 588, - 295, 844, 167, 716, 423, 972, 103, 652, 359, 908, 231, 780, - 487, 1036, 23, 572, 279, 828, 151, 700, 407, 956, 87, 636, 343, - 892, 215, 764, 471, 1020, 540, 55, 604, 311, 860, 183, 732, - 439, 988, 119, 668, 375, 924, 247, 796, 503, 1052, 15, 564, - 271, 820, 143, 692, 399, 948, 79, 628, 335, 884, 207, 756, 463, - 1012, 527, 47, 596, 303, 852, 175, 724, 431, 980, 111, 660, - 367, 916, 239, 788, 495, 1044, 31, 580, 287, 836, 159, 708, - 415, 964, 95, 644, 351, 900, 223, 772, 479, 1028, 548, 63, 612, - 319, 868, 191, 740, 447, 996, 127, 676, 383, 932, 255, 804, - 511, 1060]; - - return (unsafe { *PERM1061.get_unchecked((index % 1061) as usize) } as u32 * 1125721 + - unsafe { *PERM1061.get_unchecked(((index / 1061) % 1061) as usize) } as u32 * 1061 + - unsafe { - *PERM1061.get_unchecked(((index / 1125721) % 1061) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1194389981u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1063(index: u32) -> f32 { - const PERM1063: [u16; 1063] = [0, 551, 256, 807, 128, 679, 384, 935, 64, 615, 320, 871, 192, - 743, 448, 999, 512, 32, 583, 288, 839, 160, 711, 416, 967, 96, - 647, 352, 903, 224, 775, 480, 1031, 16, 567, 272, 823, 144, - 695, 400, 951, 80, 631, 336, 887, 208, 759, 464, 1015, 535, 48, - 599, 304, 855, 176, 727, 432, 983, 112, 663, 368, 919, 240, - 791, 496, 1047, 8, 559, 264, 815, 136, 687, 392, 943, 72, 623, - 328, 879, 200, 751, 456, 1007, 520, 40, 591, 296, 847, 168, - 719, 424, 975, 104, 655, 360, 911, 232, 783, 488, 1039, 24, - 575, 280, 831, 152, 703, 408, 959, 88, 639, 344, 895, 216, 767, - 472, 1023, 543, 56, 607, 312, 863, 184, 735, 440, 991, 120, - 671, 376, 927, 248, 799, 504, 1055, 528, 4, 555, 260, 811, 132, - 683, 388, 939, 68, 619, 324, 875, 196, 747, 452, 1003, 516, 36, - 587, 292, 843, 164, 715, 420, 971, 100, 651, 356, 907, 228, - 779, 484, 1035, 20, 571, 276, 827, 148, 699, 404, 955, 84, 635, - 340, 891, 212, 763, 468, 1019, 539, 52, 603, 308, 859, 180, - 731, 436, 987, 116, 667, 372, 923, 244, 795, 500, 1051, 12, - 563, 268, 819, 140, 691, 396, 947, 76, 627, 332, 883, 204, 755, - 460, 1011, 524, 44, 595, 300, 851, 172, 723, 428, 979, 108, - 659, 364, 915, 236, 787, 492, 1043, 28, 579, 284, 835, 156, - 707, 412, 963, 92, 643, 348, 899, 220, 771, 476, 1027, 547, 60, - 611, 316, 867, 188, 739, 444, 995, 124, 675, 380, 931, 252, - 803, 508, 1059, 530, 2, 553, 258, 809, 130, 681, 386, 937, 66, - 617, 322, 873, 194, 745, 450, 1001, 514, 34, 585, 290, 841, - 162, 713, 418, 969, 98, 649, 354, 905, 226, 777, 482, 1033, 18, - 569, 274, 825, 146, 697, 402, 953, 82, 633, 338, 889, 210, 761, - 466, 1017, 537, 50, 601, 306, 857, 178, 729, 434, 985, 114, - 665, 370, 921, 242, 793, 498, 1049, 10, 561, 266, 817, 138, - 689, 394, 945, 74, 625, 330, 881, 202, 753, 458, 1009, 522, 42, - 593, 298, 849, 170, 721, 426, 977, 106, 657, 362, 913, 234, - 785, 490, 1041, 26, 577, 282, 833, 154, 705, 410, 961, 90, 641, - 346, 897, 218, 769, 474, 1025, 545, 58, 609, 314, 865, 186, - 737, 442, 993, 122, 673, 378, 929, 250, 801, 506, 1057, 533, 6, - 557, 262, 813, 134, 685, 390, 941, 70, 621, 326, 877, 198, 749, - 454, 1005, 518, 38, 589, 294, 845, 166, 717, 422, 973, 102, - 653, 358, 909, 230, 781, 486, 1037, 22, 573, 278, 829, 150, - 701, 406, 957, 86, 637, 342, 893, 214, 765, 470, 1021, 541, 54, - 605, 310, 861, 182, 733, 438, 989, 118, 669, 374, 925, 246, - 797, 502, 1053, 14, 565, 270, 821, 142, 693, 398, 949, 78, 629, - 334, 885, 206, 757, 462, 1013, 526, 46, 597, 302, 853, 174, - 725, 430, 981, 110, 661, 366, 917, 238, 789, 494, 1045, 30, - 581, 286, 837, 158, 709, 414, 965, 94, 645, 350, 901, 222, 773, - 478, 1029, 549, 62, 613, 318, 869, 190, 741, 446, 997, 126, - 677, 382, 933, 254, 805, 510, 1061, 531, 1, 552, 257, 808, 129, - 680, 385, 936, 65, 616, 321, 872, 193, 744, 449, 1000, 513, 33, - 584, 289, 840, 161, 712, 417, 968, 97, 648, 353, 904, 225, 776, - 481, 1032, 17, 568, 273, 824, 145, 696, 401, 952, 81, 632, 337, - 888, 209, 760, 465, 1016, 536, 49, 600, 305, 856, 177, 728, - 433, 984, 113, 664, 369, 920, 241, 792, 497, 1048, 9, 560, 265, - 816, 137, 688, 393, 944, 73, 624, 329, 880, 201, 752, 457, - 1008, 521, 41, 592, 297, 848, 169, 720, 425, 976, 105, 656, - 361, 912, 233, 784, 489, 1040, 25, 576, 281, 832, 153, 704, - 409, 960, 89, 640, 345, 896, 217, 768, 473, 1024, 544, 57, 608, - 313, 864, 185, 736, 441, 992, 121, 672, 377, 928, 249, 800, - 505, 1056, 529, 5, 556, 261, 812, 133, 684, 389, 940, 69, 620, - 325, 876, 197, 748, 453, 1004, 517, 37, 588, 293, 844, 165, - 716, 421, 972, 101, 652, 357, 908, 229, 780, 485, 1036, 21, - 572, 277, 828, 149, 700, 405, 956, 85, 636, 341, 892, 213, 764, - 469, 1020, 540, 53, 604, 309, 860, 181, 732, 437, 988, 117, - 668, 373, 924, 245, 796, 501, 1052, 13, 564, 269, 820, 141, - 692, 397, 948, 77, 628, 333, 884, 205, 756, 461, 1012, 525, 45, - 596, 301, 852, 173, 724, 429, 980, 109, 660, 365, 916, 237, - 788, 493, 1044, 29, 580, 285, 836, 157, 708, 413, 964, 93, 644, - 349, 900, 221, 772, 477, 1028, 548, 61, 612, 317, 868, 189, - 740, 445, 996, 125, 676, 381, 932, 253, 804, 509, 1060, 532, 3, - 554, 259, 810, 131, 682, 387, 938, 67, 618, 323, 874, 195, 746, - 451, 1002, 515, 35, 586, 291, 842, 163, 714, 419, 970, 99, 650, - 355, 906, 227, 778, 483, 1034, 19, 570, 275, 826, 147, 698, - 403, 954, 83, 634, 339, 890, 211, 762, 467, 1018, 538, 51, 602, - 307, 858, 179, 730, 435, 986, 115, 666, 371, 922, 243, 794, - 499, 1050, 11, 562, 267, 818, 139, 690, 395, 946, 75, 626, 331, - 882, 203, 754, 459, 1010, 523, 43, 594, 299, 850, 171, 722, - 427, 978, 107, 658, 363, 914, 235, 786, 491, 1042, 27, 578, - 283, 834, 155, 706, 411, 962, 91, 642, 347, 898, 219, 770, 475, - 1026, 546, 59, 610, 315, 866, 187, 738, 443, 994, 123, 674, - 379, 930, 251, 802, 507, 1058, 534, 7, 558, 263, 814, 135, 686, - 391, 942, 71, 622, 327, 878, 199, 750, 455, 1006, 519, 39, 590, - 295, 846, 167, 718, 423, 974, 103, 654, 359, 910, 231, 782, - 487, 1038, 23, 574, 279, 830, 151, 702, 407, 958, 87, 638, 343, - 894, 215, 766, 471, 1022, 542, 55, 606, 311, 862, 183, 734, - 439, 990, 119, 670, 375, 926, 247, 798, 503, 1054, 15, 566, - 271, 822, 143, 694, 399, 950, 79, 630, 335, 886, 207, 758, 463, - 1014, 527, 47, 598, 303, 854, 175, 726, 431, 982, 111, 662, - 367, 918, 239, 790, 495, 1046, 31, 582, 287, 838, 159, 710, - 415, 966, 95, 646, 351, 902, 223, 774, 479, 1030, 550, 63, 614, - 319, 870, 191, 742, 447, 998, 127, 678, 383, 934, 255, 806, - 511, 1062]; - - return (unsafe { *PERM1063.get_unchecked((index % 1063) as usize) } as u32 * 1129969 + - unsafe { *PERM1063.get_unchecked(((index / 1063) % 1063) as usize) } as u32 * 1063 + - unsafe { - *PERM1063.get_unchecked(((index / 1129969) % 1063) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1201157047u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1069(index: u32) -> f32 { - const PERM1069: [u16; 1069] = [0, 557, 256, 813, 128, 685, 384, 941, 64, 621, 320, 877, 192, - 749, 448, 1005, 512, 32, 589, 288, 845, 160, 717, 416, 973, 96, - 653, 352, 909, 224, 781, 480, 1037, 16, 573, 272, 829, 144, - 701, 400, 957, 80, 637, 336, 893, 208, 765, 464, 1021, 541, 48, - 605, 304, 861, 176, 733, 432, 989, 112, 669, 368, 925, 240, - 797, 496, 1053, 528, 8, 565, 264, 821, 136, 693, 392, 949, 72, - 629, 328, 885, 200, 757, 456, 1013, 520, 40, 597, 296, 853, - 168, 725, 424, 981, 104, 661, 360, 917, 232, 789, 488, 1045, - 24, 581, 280, 837, 152, 709, 408, 965, 88, 645, 344, 901, 216, - 773, 472, 1029, 549, 56, 613, 312, 869, 184, 741, 440, 997, - 120, 677, 376, 933, 248, 805, 504, 1061, 532, 4, 561, 260, 817, - 132, 689, 388, 945, 68, 625, 324, 881, 196, 753, 452, 1009, - 516, 36, 593, 292, 849, 164, 721, 420, 977, 100, 657, 356, 913, - 228, 785, 484, 1041, 20, 577, 276, 833, 148, 705, 404, 961, 84, - 641, 340, 897, 212, 769, 468, 1025, 545, 52, 609, 308, 865, - 180, 737, 436, 993, 116, 673, 372, 929, 244, 801, 500, 1057, - 537, 12, 569, 268, 825, 140, 697, 396, 953, 76, 633, 332, 889, - 204, 761, 460, 1017, 524, 44, 601, 300, 857, 172, 729, 428, - 985, 108, 665, 364, 921, 236, 793, 492, 1049, 28, 585, 284, - 841, 156, 713, 412, 969, 92, 649, 348, 905, 220, 777, 476, - 1033, 553, 60, 617, 316, 873, 188, 745, 444, 1001, 124, 681, - 380, 937, 252, 809, 508, 1065, 2, 559, 258, 815, 130, 687, 386, - 943, 66, 623, 322, 879, 194, 751, 450, 1007, 514, 34, 591, 290, - 847, 162, 719, 418, 975, 98, 655, 354, 911, 226, 783, 482, - 1039, 18, 575, 274, 831, 146, 703, 402, 959, 82, 639, 338, 895, - 210, 767, 466, 1023, 543, 50, 607, 306, 863, 178, 735, 434, - 991, 114, 671, 370, 927, 242, 799, 498, 1055, 530, 10, 567, - 266, 823, 138, 695, 394, 951, 74, 631, 330, 887, 202, 759, 458, - 1015, 522, 42, 599, 298, 855, 170, 727, 426, 983, 106, 663, - 362, 919, 234, 791, 490, 1047, 26, 583, 282, 839, 154, 711, - 410, 967, 90, 647, 346, 903, 218, 775, 474, 1031, 551, 58, 615, - 314, 871, 186, 743, 442, 999, 122, 679, 378, 935, 250, 807, - 506, 1063, 535, 6, 563, 262, 819, 134, 691, 390, 947, 70, 627, - 326, 883, 198, 755, 454, 1011, 518, 38, 595, 294, 851, 166, - 723, 422, 979, 102, 659, 358, 915, 230, 787, 486, 1043, 22, - 579, 278, 835, 150, 707, 406, 963, 86, 643, 342, 899, 214, 771, - 470, 1027, 547, 54, 611, 310, 867, 182, 739, 438, 995, 118, - 675, 374, 931, 246, 803, 502, 1059, 539, 14, 571, 270, 827, - 142, 699, 398, 955, 78, 635, 334, 891, 206, 763, 462, 1019, - 526, 46, 603, 302, 859, 174, 731, 430, 987, 110, 667, 366, 923, - 238, 795, 494, 1051, 30, 587, 286, 843, 158, 715, 414, 971, 94, - 651, 350, 907, 222, 779, 478, 1035, 555, 62, 619, 318, 875, - 190, 747, 446, 1003, 126, 683, 382, 939, 254, 811, 510, 1067, - 534, 1, 558, 257, 814, 129, 686, 385, 942, 65, 622, 321, 878, - 193, 750, 449, 1006, 513, 33, 590, 289, 846, 161, 718, 417, - 974, 97, 654, 353, 910, 225, 782, 481, 1038, 17, 574, 273, 830, - 145, 702, 401, 958, 81, 638, 337, 894, 209, 766, 465, 1022, - 542, 49, 606, 305, 862, 177, 734, 433, 990, 113, 670, 369, 926, - 241, 798, 497, 1054, 529, 9, 566, 265, 822, 137, 694, 393, 950, - 73, 630, 329, 886, 201, 758, 457, 1014, 521, 41, 598, 297, 854, - 169, 726, 425, 982, 105, 662, 361, 918, 233, 790, 489, 1046, - 25, 582, 281, 838, 153, 710, 409, 966, 89, 646, 345, 902, 217, - 774, 473, 1030, 550, 57, 614, 313, 870, 185, 742, 441, 998, - 121, 678, 377, 934, 249, 806, 505, 1062, 533, 5, 562, 261, 818, - 133, 690, 389, 946, 69, 626, 325, 882, 197, 754, 453, 1010, - 517, 37, 594, 293, 850, 165, 722, 421, 978, 101, 658, 357, 914, - 229, 786, 485, 1042, 21, 578, 277, 834, 149, 706, 405, 962, 85, - 642, 341, 898, 213, 770, 469, 1026, 546, 53, 610, 309, 866, - 181, 738, 437, 994, 117, 674, 373, 930, 245, 802, 501, 1058, - 538, 13, 570, 269, 826, 141, 698, 397, 954, 77, 634, 333, 890, - 205, 762, 461, 1018, 525, 45, 602, 301, 858, 173, 730, 429, - 986, 109, 666, 365, 922, 237, 794, 493, 1050, 29, 586, 285, - 842, 157, 714, 413, 970, 93, 650, 349, 906, 221, 778, 477, - 1034, 554, 61, 618, 317, 874, 189, 746, 445, 1002, 125, 682, - 381, 938, 253, 810, 509, 1066, 3, 560, 259, 816, 131, 688, 387, - 944, 67, 624, 323, 880, 195, 752, 451, 1008, 515, 35, 592, 291, - 848, 163, 720, 419, 976, 99, 656, 355, 912, 227, 784, 483, - 1040, 19, 576, 275, 832, 147, 704, 403, 960, 83, 640, 339, 896, - 211, 768, 467, 1024, 544, 51, 608, 307, 864, 179, 736, 435, - 992, 115, 672, 371, 928, 243, 800, 499, 1056, 531, 11, 568, - 267, 824, 139, 696, 395, 952, 75, 632, 331, 888, 203, 760, 459, - 1016, 523, 43, 600, 299, 856, 171, 728, 427, 984, 107, 664, - 363, 920, 235, 792, 491, 1048, 27, 584, 283, 840, 155, 712, - 411, 968, 91, 648, 347, 904, 219, 776, 475, 1032, 552, 59, 616, - 315, 872, 187, 744, 443, 1000, 123, 680, 379, 936, 251, 808, - 507, 1064, 536, 7, 564, 263, 820, 135, 692, 391, 948, 71, 628, - 327, 884, 199, 756, 455, 1012, 519, 39, 596, 295, 852, 167, - 724, 423, 980, 103, 660, 359, 916, 231, 788, 487, 1044, 23, - 580, 279, 836, 151, 708, 407, 964, 87, 644, 343, 900, 215, 772, - 471, 1028, 548, 55, 612, 311, 868, 183, 740, 439, 996, 119, - 676, 375, 932, 247, 804, 503, 1060, 540, 15, 572, 271, 828, - 143, 700, 399, 956, 79, 636, 335, 892, 207, 764, 463, 1020, - 527, 47, 604, 303, 860, 175, 732, 431, 988, 111, 668, 367, 924, - 239, 796, 495, 1052, 31, 588, 287, 844, 159, 716, 415, 972, 95, - 652, 351, 908, 223, 780, 479, 1036, 556, 63, 620, 319, 876, - 191, 748, 447, 1004, 127, 684, 383, 940, 255, 812, 511, 1068]; - - return (unsafe { *PERM1069.get_unchecked((index % 1069) as usize) } as u32 * 1142761 + - unsafe { *PERM1069.get_unchecked(((index / 1069) % 1069) as usize) } as u32 * 1069 + - unsafe { - *PERM1069.get_unchecked(((index / 1142761) % 1069) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1221611509u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1087(index: u32) -> f32 { - const PERM1087: [u16; 1087] = [0, 575, 256, 831, 128, 703, 384, 959, 64, 639, 320, 895, 192, - 767, 448, 1023, 512, 32, 607, 288, 863, 160, 735, 416, 991, 96, - 671, 352, 927, 224, 799, 480, 1055, 528, 16, 591, 272, 847, - 144, 719, 400, 975, 80, 655, 336, 911, 208, 783, 464, 1039, - 559, 48, 623, 304, 879, 176, 751, 432, 1007, 112, 687, 368, - 943, 240, 815, 496, 1071, 536, 8, 583, 264, 839, 136, 711, 392, - 967, 72, 647, 328, 903, 200, 775, 456, 1031, 520, 40, 615, 296, - 871, 168, 743, 424, 999, 104, 679, 360, 935, 232, 807, 488, - 1063, 551, 24, 599, 280, 855, 152, 727, 408, 983, 88, 663, 344, - 919, 216, 791, 472, 1047, 567, 56, 631, 312, 887, 184, 759, - 440, 1015, 120, 695, 376, 951, 248, 823, 504, 1079, 540, 4, - 579, 260, 835, 132, 707, 388, 963, 68, 643, 324, 899, 196, 771, - 452, 1027, 516, 36, 611, 292, 867, 164, 739, 420, 995, 100, - 675, 356, 931, 228, 803, 484, 1059, 532, 20, 595, 276, 851, - 148, 723, 404, 979, 84, 659, 340, 915, 212, 787, 468, 1043, - 563, 52, 627, 308, 883, 180, 755, 436, 1011, 116, 691, 372, - 947, 244, 819, 500, 1075, 547, 12, 587, 268, 843, 140, 715, - 396, 971, 76, 651, 332, 907, 204, 779, 460, 1035, 524, 44, 619, - 300, 875, 172, 747, 428, 1003, 108, 683, 364, 939, 236, 811, - 492, 1067, 555, 28, 603, 284, 859, 156, 731, 412, 987, 92, 667, - 348, 923, 220, 795, 476, 1051, 571, 60, 635, 316, 891, 188, - 763, 444, 1019, 124, 699, 380, 955, 252, 827, 508, 1083, 542, - 2, 577, 258, 833, 130, 705, 386, 961, 66, 641, 322, 897, 194, - 769, 450, 1025, 514, 34, 609, 290, 865, 162, 737, 418, 993, 98, - 673, 354, 929, 226, 801, 482, 1057, 530, 18, 593, 274, 849, - 146, 721, 402, 977, 82, 657, 338, 913, 210, 785, 466, 1041, - 561, 50, 625, 306, 881, 178, 753, 434, 1009, 114, 689, 370, - 945, 242, 817, 498, 1073, 538, 10, 585, 266, 841, 138, 713, - 394, 969, 74, 649, 330, 905, 202, 777, 458, 1033, 522, 42, 617, - 298, 873, 170, 745, 426, 1001, 106, 681, 362, 937, 234, 809, - 490, 1065, 553, 26, 601, 282, 857, 154, 729, 410, 985, 90, 665, - 346, 921, 218, 793, 474, 1049, 569, 58, 633, 314, 889, 186, - 761, 442, 1017, 122, 697, 378, 953, 250, 825, 506, 1081, 545, - 6, 581, 262, 837, 134, 709, 390, 965, 70, 645, 326, 901, 198, - 773, 454, 1029, 518, 38, 613, 294, 869, 166, 741, 422, 997, - 102, 677, 358, 933, 230, 805, 486, 1061, 534, 22, 597, 278, - 853, 150, 725, 406, 981, 86, 661, 342, 917, 214, 789, 470, - 1045, 565, 54, 629, 310, 885, 182, 757, 438, 1013, 118, 693, - 374, 949, 246, 821, 502, 1077, 549, 14, 589, 270, 845, 142, - 717, 398, 973, 78, 653, 334, 909, 206, 781, 462, 1037, 526, 46, - 621, 302, 877, 174, 749, 430, 1005, 110, 685, 366, 941, 238, - 813, 494, 1069, 557, 30, 605, 286, 861, 158, 733, 414, 989, 94, - 669, 350, 925, 222, 797, 478, 1053, 573, 62, 637, 318, 893, - 190, 765, 446, 1021, 126, 701, 382, 957, 254, 829, 510, 1085, - 543, 1, 576, 257, 832, 129, 704, 385, 960, 65, 640, 321, 896, - 193, 768, 449, 1024, 513, 33, 608, 289, 864, 161, 736, 417, - 992, 97, 672, 353, 928, 225, 800, 481, 1056, 529, 17, 592, 273, - 848, 145, 720, 401, 976, 81, 656, 337, 912, 209, 784, 465, - 1040, 560, 49, 624, 305, 880, 177, 752, 433, 1008, 113, 688, - 369, 944, 241, 816, 497, 1072, 537, 9, 584, 265, 840, 137, 712, - 393, 968, 73, 648, 329, 904, 201, 776, 457, 1032, 521, 41, 616, - 297, 872, 169, 744, 425, 1000, 105, 680, 361, 936, 233, 808, - 489, 1064, 552, 25, 600, 281, 856, 153, 728, 409, 984, 89, 664, - 345, 920, 217, 792, 473, 1048, 568, 57, 632, 313, 888, 185, - 760, 441, 1016, 121, 696, 377, 952, 249, 824, 505, 1080, 541, - 5, 580, 261, 836, 133, 708, 389, 964, 69, 644, 325, 900, 197, - 772, 453, 1028, 517, 37, 612, 293, 868, 165, 740, 421, 996, - 101, 676, 357, 932, 229, 804, 485, 1060, 533, 21, 596, 277, - 852, 149, 724, 405, 980, 85, 660, 341, 916, 213, 788, 469, - 1044, 564, 53, 628, 309, 884, 181, 756, 437, 1012, 117, 692, - 373, 948, 245, 820, 501, 1076, 548, 13, 588, 269, 844, 141, - 716, 397, 972, 77, 652, 333, 908, 205, 780, 461, 1036, 525, 45, - 620, 301, 876, 173, 748, 429, 1004, 109, 684, 365, 940, 237, - 812, 493, 1068, 556, 29, 604, 285, 860, 157, 732, 413, 988, 93, - 668, 349, 924, 221, 796, 477, 1052, 572, 61, 636, 317, 892, - 189, 764, 445, 1020, 125, 700, 381, 956, 253, 828, 509, 1084, - 544, 3, 578, 259, 834, 131, 706, 387, 962, 67, 642, 323, 898, - 195, 770, 451, 1026, 515, 35, 610, 291, 866, 163, 738, 419, - 994, 99, 674, 355, 930, 227, 802, 483, 1058, 531, 19, 594, 275, - 850, 147, 722, 403, 978, 83, 658, 339, 914, 211, 786, 467, - 1042, 562, 51, 626, 307, 882, 179, 754, 435, 1010, 115, 690, - 371, 946, 243, 818, 499, 1074, 539, 11, 586, 267, 842, 139, - 714, 395, 970, 75, 650, 331, 906, 203, 778, 459, 1034, 523, 43, - 618, 299, 874, 171, 746, 427, 1002, 107, 682, 363, 938, 235, - 810, 491, 1066, 554, 27, 602, 283, 858, 155, 730, 411, 986, 91, - 666, 347, 922, 219, 794, 475, 1050, 570, 59, 634, 315, 890, - 187, 762, 443, 1018, 123, 698, 379, 954, 251, 826, 507, 1082, - 546, 7, 582, 263, 838, 135, 710, 391, 966, 71, 646, 327, 902, - 199, 774, 455, 1030, 519, 39, 614, 295, 870, 167, 742, 423, - 998, 103, 678, 359, 934, 231, 806, 487, 1062, 535, 23, 598, - 279, 854, 151, 726, 407, 982, 87, 662, 343, 918, 215, 790, 471, - 1046, 566, 55, 630, 311, 886, 183, 758, 439, 1014, 119, 694, - 375, 950, 247, 822, 503, 1078, 550, 15, 590, 271, 846, 143, - 718, 399, 974, 79, 654, 335, 910, 207, 782, 463, 1038, 527, 47, - 622, 303, 878, 175, 750, 431, 1006, 111, 686, 367, 942, 239, - 814, 495, 1070, 558, 31, 606, 287, 862, 159, 734, 415, 990, 95, - 670, 351, 926, 223, 798, 479, 1054, 574, 63, 638, 319, 894, - 191, 766, 447, 1022, 127, 702, 383, 958, 255, 830, 511, 1086]; - - return (unsafe { *PERM1087.get_unchecked((index % 1087) as usize) } as u32 * 1181569 + - unsafe { *PERM1087.get_unchecked(((index / 1087) % 1087) as usize) } as u32 * 1087 + - unsafe { - *PERM1087.get_unchecked(((index / 1181569) % 1087) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1284365503u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1091(index: u32) -> f32 { - const PERM1091: [u16; 1091] = [0, 579, 256, 835, 128, 707, 384, 963, 512, 64, 643, 320, 899, - 192, 771, 448, 1027, 32, 611, 288, 867, 160, 739, 416, 995, - 547, 96, 675, 352, 931, 224, 803, 480, 1059, 16, 595, 272, 851, - 144, 723, 400, 979, 528, 80, 659, 336, 915, 208, 787, 464, - 1043, 48, 627, 304, 883, 176, 755, 432, 1011, 563, 112, 691, - 368, 947, 240, 819, 496, 1075, 8, 587, 264, 843, 136, 715, 392, - 971, 520, 72, 651, 328, 907, 200, 779, 456, 1035, 40, 619, 296, - 875, 168, 747, 424, 1003, 555, 104, 683, 360, 939, 232, 811, - 488, 1067, 24, 603, 280, 859, 152, 731, 408, 987, 536, 88, 667, - 344, 923, 216, 795, 472, 1051, 56, 635, 312, 891, 184, 763, - 440, 1019, 571, 120, 699, 376, 955, 248, 827, 504, 1083, 4, - 583, 260, 839, 132, 711, 388, 967, 516, 68, 647, 324, 903, 196, - 775, 452, 1031, 36, 615, 292, 871, 164, 743, 420, 999, 551, - 100, 679, 356, 935, 228, 807, 484, 1063, 20, 599, 276, 855, - 148, 727, 404, 983, 532, 84, 663, 340, 919, 212, 791, 468, - 1047, 52, 631, 308, 887, 180, 759, 436, 1015, 567, 116, 695, - 372, 951, 244, 823, 500, 1079, 12, 591, 268, 847, 140, 719, - 396, 975, 524, 76, 655, 332, 911, 204, 783, 460, 1039, 44, 623, - 300, 879, 172, 751, 428, 1007, 559, 108, 687, 364, 943, 236, - 815, 492, 1071, 28, 607, 284, 863, 156, 735, 412, 991, 540, 92, - 671, 348, 927, 220, 799, 476, 1055, 60, 639, 316, 895, 188, - 767, 444, 1023, 575, 124, 703, 380, 959, 252, 831, 508, 1087, - 544, 2, 581, 258, 837, 130, 709, 386, 965, 514, 66, 645, 322, - 901, 194, 773, 450, 1029, 34, 613, 290, 869, 162, 741, 418, - 997, 549, 98, 677, 354, 933, 226, 805, 482, 1061, 18, 597, 274, - 853, 146, 725, 402, 981, 530, 82, 661, 338, 917, 210, 789, 466, - 1045, 50, 629, 306, 885, 178, 757, 434, 1013, 565, 114, 693, - 370, 949, 242, 821, 498, 1077, 10, 589, 266, 845, 138, 717, - 394, 973, 522, 74, 653, 330, 909, 202, 781, 458, 1037, 42, 621, - 298, 877, 170, 749, 426, 1005, 557, 106, 685, 362, 941, 234, - 813, 490, 1069, 26, 605, 282, 861, 154, 733, 410, 989, 538, 90, - 669, 346, 925, 218, 797, 474, 1053, 58, 637, 314, 893, 186, - 765, 442, 1021, 573, 122, 701, 378, 957, 250, 829, 506, 1085, - 6, 585, 262, 841, 134, 713, 390, 969, 518, 70, 649, 326, 905, - 198, 777, 454, 1033, 38, 617, 294, 873, 166, 745, 422, 1001, - 553, 102, 681, 358, 937, 230, 809, 486, 1065, 22, 601, 278, - 857, 150, 729, 406, 985, 534, 86, 665, 342, 921, 214, 793, 470, - 1049, 54, 633, 310, 889, 182, 761, 438, 1017, 569, 118, 697, - 374, 953, 246, 825, 502, 1081, 14, 593, 270, 849, 142, 721, - 398, 977, 526, 78, 657, 334, 913, 206, 785, 462, 1041, 46, 625, - 302, 881, 174, 753, 430, 1009, 561, 110, 689, 366, 945, 238, - 817, 494, 1073, 30, 609, 286, 865, 158, 737, 414, 993, 542, 94, - 673, 350, 929, 222, 801, 478, 1057, 62, 641, 318, 897, 190, - 769, 446, 1025, 577, 126, 705, 382, 961, 254, 833, 510, 1089, - 545, 1, 580, 257, 836, 129, 708, 385, 964, 513, 65, 644, 321, - 900, 193, 772, 449, 1028, 33, 612, 289, 868, 161, 740, 417, - 996, 548, 97, 676, 353, 932, 225, 804, 481, 1060, 17, 596, 273, - 852, 145, 724, 401, 980, 529, 81, 660, 337, 916, 209, 788, 465, - 1044, 49, 628, 305, 884, 177, 756, 433, 1012, 564, 113, 692, - 369, 948, 241, 820, 497, 1076, 9, 588, 265, 844, 137, 716, 393, - 972, 521, 73, 652, 329, 908, 201, 780, 457, 1036, 41, 620, 297, - 876, 169, 748, 425, 1004, 556, 105, 684, 361, 940, 233, 812, - 489, 1068, 25, 604, 281, 860, 153, 732, 409, 988, 537, 89, 668, - 345, 924, 217, 796, 473, 1052, 57, 636, 313, 892, 185, 764, - 441, 1020, 572, 121, 700, 377, 956, 249, 828, 505, 1084, 5, - 584, 261, 840, 133, 712, 389, 968, 517, 69, 648, 325, 904, 197, - 776, 453, 1032, 37, 616, 293, 872, 165, 744, 421, 1000, 552, - 101, 680, 357, 936, 229, 808, 485, 1064, 21, 600, 277, 856, - 149, 728, 405, 984, 533, 85, 664, 341, 920, 213, 792, 469, - 1048, 53, 632, 309, 888, 181, 760, 437, 1016, 568, 117, 696, - 373, 952, 245, 824, 501, 1080, 13, 592, 269, 848, 141, 720, - 397, 976, 525, 77, 656, 333, 912, 205, 784, 461, 1040, 45, 624, - 301, 880, 173, 752, 429, 1008, 560, 109, 688, 365, 944, 237, - 816, 493, 1072, 29, 608, 285, 864, 157, 736, 413, 992, 541, 93, - 672, 349, 928, 221, 800, 477, 1056, 61, 640, 317, 896, 189, - 768, 445, 1024, 576, 125, 704, 381, 960, 253, 832, 509, 1088, - 546, 3, 582, 259, 838, 131, 710, 387, 966, 515, 67, 646, 323, - 902, 195, 774, 451, 1030, 35, 614, 291, 870, 163, 742, 419, - 998, 550, 99, 678, 355, 934, 227, 806, 483, 1062, 19, 598, 275, - 854, 147, 726, 403, 982, 531, 83, 662, 339, 918, 211, 790, 467, - 1046, 51, 630, 307, 886, 179, 758, 435, 1014, 566, 115, 694, - 371, 950, 243, 822, 499, 1078, 11, 590, 267, 846, 139, 718, - 395, 974, 523, 75, 654, 331, 910, 203, 782, 459, 1038, 43, 622, - 299, 878, 171, 750, 427, 1006, 558, 107, 686, 363, 942, 235, - 814, 491, 1070, 27, 606, 283, 862, 155, 734, 411, 990, 539, 91, - 670, 347, 926, 219, 798, 475, 1054, 59, 638, 315, 894, 187, - 766, 443, 1022, 574, 123, 702, 379, 958, 251, 830, 507, 1086, - 7, 586, 263, 842, 135, 714, 391, 970, 519, 71, 650, 327, 906, - 199, 778, 455, 1034, 39, 618, 295, 874, 167, 746, 423, 1002, - 554, 103, 682, 359, 938, 231, 810, 487, 1066, 23, 602, 279, - 858, 151, 730, 407, 986, 535, 87, 666, 343, 922, 215, 794, 471, - 1050, 55, 634, 311, 890, 183, 762, 439, 1018, 570, 119, 698, - 375, 954, 247, 826, 503, 1082, 15, 594, 271, 850, 143, 722, - 399, 978, 527, 79, 658, 335, 914, 207, 786, 463, 1042, 47, 626, - 303, 882, 175, 754, 431, 1010, 562, 111, 690, 367, 946, 239, - 818, 495, 1074, 31, 610, 287, 866, 159, 738, 415, 994, 543, 95, - 674, 351, 930, 223, 802, 479, 1058, 63, 642, 319, 898, 191, - 770, 447, 1026, 578, 127, 706, 383, 962, 255, 834, 511, 1090]; - - return (unsafe { *PERM1091.get_unchecked((index % 1091) as usize) } as u32 * 1190281 + - unsafe { *PERM1091.get_unchecked(((index / 1091) % 1091) as usize) } as u32 * 1091 + - unsafe { - *PERM1091.get_unchecked(((index / 1190281) % 1091) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1298596571u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1093(index: u32) -> f32 { - const PERM1093: [u16; 1093] = [0, 581, 256, 837, 128, 709, 384, 965, 512, 64, 645, 320, 901, - 192, 773, 448, 1029, 32, 613, 288, 869, 160, 741, 416, 997, - 549, 96, 677, 352, 933, 224, 805, 480, 1061, 16, 597, 272, 853, - 144, 725, 400, 981, 528, 80, 661, 336, 917, 208, 789, 464, - 1045, 48, 629, 304, 885, 176, 757, 432, 1013, 565, 112, 693, - 368, 949, 240, 821, 496, 1077, 8, 589, 264, 845, 136, 717, 392, - 973, 520, 72, 653, 328, 909, 200, 781, 456, 1037, 40, 621, 296, - 877, 168, 749, 424, 1005, 557, 104, 685, 360, 941, 232, 813, - 488, 1069, 24, 605, 280, 861, 152, 733, 408, 989, 536, 88, 669, - 344, 925, 216, 797, 472, 1053, 56, 637, 312, 893, 184, 765, - 440, 1021, 573, 120, 701, 376, 957, 248, 829, 504, 1085, 544, - 4, 585, 260, 841, 132, 713, 388, 969, 516, 68, 649, 324, 905, - 196, 777, 452, 1033, 36, 617, 292, 873, 164, 745, 420, 1001, - 553, 100, 681, 356, 937, 228, 809, 484, 1065, 20, 601, 276, - 857, 148, 729, 404, 985, 532, 84, 665, 340, 921, 212, 793, 468, - 1049, 52, 633, 308, 889, 180, 761, 436, 1017, 569, 116, 697, - 372, 953, 244, 825, 500, 1081, 12, 593, 268, 849, 140, 721, - 396, 977, 524, 76, 657, 332, 913, 204, 785, 460, 1041, 44, 625, - 300, 881, 172, 753, 428, 1009, 561, 108, 689, 364, 945, 236, - 817, 492, 1073, 28, 609, 284, 865, 156, 737, 412, 993, 540, 92, - 673, 348, 929, 220, 801, 476, 1057, 60, 641, 316, 897, 188, - 769, 444, 1025, 577, 124, 705, 380, 961, 252, 833, 508, 1089, - 2, 583, 258, 839, 130, 711, 386, 967, 514, 66, 647, 322, 903, - 194, 775, 450, 1031, 34, 615, 290, 871, 162, 743, 418, 999, - 551, 98, 679, 354, 935, 226, 807, 482, 1063, 18, 599, 274, 855, - 146, 727, 402, 983, 530, 82, 663, 338, 919, 210, 791, 466, - 1047, 50, 631, 306, 887, 178, 759, 434, 1015, 567, 114, 695, - 370, 951, 242, 823, 498, 1079, 10, 591, 266, 847, 138, 719, - 394, 975, 522, 74, 655, 330, 911, 202, 783, 458, 1039, 42, 623, - 298, 879, 170, 751, 426, 1007, 559, 106, 687, 362, 943, 234, - 815, 490, 1071, 26, 607, 282, 863, 154, 735, 410, 991, 538, 90, - 671, 346, 927, 218, 799, 474, 1055, 58, 639, 314, 895, 186, - 767, 442, 1023, 575, 122, 703, 378, 959, 250, 831, 506, 1087, - 547, 6, 587, 262, 843, 134, 715, 390, 971, 518, 70, 651, 326, - 907, 198, 779, 454, 1035, 38, 619, 294, 875, 166, 747, 422, - 1003, 555, 102, 683, 358, 939, 230, 811, 486, 1067, 22, 603, - 278, 859, 150, 731, 406, 987, 534, 86, 667, 342, 923, 214, 795, - 470, 1051, 54, 635, 310, 891, 182, 763, 438, 1019, 571, 118, - 699, 374, 955, 246, 827, 502, 1083, 14, 595, 270, 851, 142, - 723, 398, 979, 526, 78, 659, 334, 915, 206, 787, 462, 1043, 46, - 627, 302, 883, 174, 755, 430, 1011, 563, 110, 691, 366, 947, - 238, 819, 494, 1075, 30, 611, 286, 867, 158, 739, 414, 995, - 542, 94, 675, 350, 931, 222, 803, 478, 1059, 62, 643, 318, 899, - 190, 771, 446, 1027, 579, 126, 707, 382, 963, 254, 835, 510, - 1091, 546, 1, 582, 257, 838, 129, 710, 385, 966, 513, 65, 646, - 321, 902, 193, 774, 449, 1030, 33, 614, 289, 870, 161, 742, - 417, 998, 550, 97, 678, 353, 934, 225, 806, 481, 1062, 17, 598, - 273, 854, 145, 726, 401, 982, 529, 81, 662, 337, 918, 209, 790, - 465, 1046, 49, 630, 305, 886, 177, 758, 433, 1014, 566, 113, - 694, 369, 950, 241, 822, 497, 1078, 9, 590, 265, 846, 137, 718, - 393, 974, 521, 73, 654, 329, 910, 201, 782, 457, 1038, 41, 622, - 297, 878, 169, 750, 425, 1006, 558, 105, 686, 361, 942, 233, - 814, 489, 1070, 25, 606, 281, 862, 153, 734, 409, 990, 537, 89, - 670, 345, 926, 217, 798, 473, 1054, 57, 638, 313, 894, 185, - 766, 441, 1022, 574, 121, 702, 377, 958, 249, 830, 505, 1086, - 545, 5, 586, 261, 842, 133, 714, 389, 970, 517, 69, 650, 325, - 906, 197, 778, 453, 1034, 37, 618, 293, 874, 165, 746, 421, - 1002, 554, 101, 682, 357, 938, 229, 810, 485, 1066, 21, 602, - 277, 858, 149, 730, 405, 986, 533, 85, 666, 341, 922, 213, 794, - 469, 1050, 53, 634, 309, 890, 181, 762, 437, 1018, 570, 117, - 698, 373, 954, 245, 826, 501, 1082, 13, 594, 269, 850, 141, - 722, 397, 978, 525, 77, 658, 333, 914, 205, 786, 461, 1042, 45, - 626, 301, 882, 173, 754, 429, 1010, 562, 109, 690, 365, 946, - 237, 818, 493, 1074, 29, 610, 285, 866, 157, 738, 413, 994, - 541, 93, 674, 349, 930, 221, 802, 477, 1058, 61, 642, 317, 898, - 189, 770, 445, 1026, 578, 125, 706, 381, 962, 253, 834, 509, - 1090, 3, 584, 259, 840, 131, 712, 387, 968, 515, 67, 648, 323, - 904, 195, 776, 451, 1032, 35, 616, 291, 872, 163, 744, 419, - 1000, 552, 99, 680, 355, 936, 227, 808, 483, 1064, 19, 600, - 275, 856, 147, 728, 403, 984, 531, 83, 664, 339, 920, 211, 792, - 467, 1048, 51, 632, 307, 888, 179, 760, 435, 1016, 568, 115, - 696, 371, 952, 243, 824, 499, 1080, 11, 592, 267, 848, 139, - 720, 395, 976, 523, 75, 656, 331, 912, 203, 784, 459, 1040, 43, - 624, 299, 880, 171, 752, 427, 1008, 560, 107, 688, 363, 944, - 235, 816, 491, 1072, 27, 608, 283, 864, 155, 736, 411, 992, - 539, 91, 672, 347, 928, 219, 800, 475, 1056, 59, 640, 315, 896, - 187, 768, 443, 1024, 576, 123, 704, 379, 960, 251, 832, 507, - 1088, 548, 7, 588, 263, 844, 135, 716, 391, 972, 519, 71, 652, - 327, 908, 199, 780, 455, 1036, 39, 620, 295, 876, 167, 748, - 423, 1004, 556, 103, 684, 359, 940, 231, 812, 487, 1068, 23, - 604, 279, 860, 151, 732, 407, 988, 535, 87, 668, 343, 924, 215, - 796, 471, 1052, 55, 636, 311, 892, 183, 764, 439, 1020, 572, - 119, 700, 375, 956, 247, 828, 503, 1084, 15, 596, 271, 852, - 143, 724, 399, 980, 527, 79, 660, 335, 916, 207, 788, 463, - 1044, 47, 628, 303, 884, 175, 756, 431, 1012, 564, 111, 692, - 367, 948, 239, 820, 495, 1076, 31, 612, 287, 868, 159, 740, - 415, 996, 543, 95, 676, 351, 932, 223, 804, 479, 1060, 63, 644, - 319, 900, 191, 772, 447, 1028, 580, 127, 708, 383, 964, 255, - 836, 511, 1092]; - - return (unsafe { *PERM1093.get_unchecked((index % 1093) as usize) } as u32 * 1194649 + - unsafe { *PERM1093.get_unchecked(((index / 1093) % 1093) as usize) } as u32 * 1093 + - unsafe { - *PERM1093.get_unchecked(((index / 1194649) % 1093) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1305751357u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1097(index: u32) -> f32 { - const PERM1097: [u16; 1097] = [0, 585, 256, 841, 128, 713, 384, 969, 512, 64, 649, 320, 905, - 192, 777, 448, 1033, 32, 617, 288, 873, 160, 745, 416, 1001, - 553, 96, 681, 352, 937, 224, 809, 480, 1065, 16, 601, 272, 857, - 144, 729, 400, 985, 528, 80, 665, 336, 921, 208, 793, 464, - 1049, 48, 633, 304, 889, 176, 761, 432, 1017, 569, 112, 697, - 368, 953, 240, 825, 496, 1081, 544, 8, 593, 264, 849, 136, 721, - 392, 977, 520, 72, 657, 328, 913, 200, 785, 456, 1041, 40, 625, - 296, 881, 168, 753, 424, 1009, 561, 104, 689, 360, 945, 232, - 817, 488, 1073, 24, 609, 280, 865, 152, 737, 408, 993, 536, 88, - 673, 344, 929, 216, 801, 472, 1057, 56, 641, 312, 897, 184, - 769, 440, 1025, 577, 120, 705, 376, 961, 248, 833, 504, 1089, - 4, 589, 260, 845, 132, 717, 388, 973, 516, 68, 653, 324, 909, - 196, 781, 452, 1037, 36, 621, 292, 877, 164, 749, 420, 1005, - 557, 100, 685, 356, 941, 228, 813, 484, 1069, 20, 605, 276, - 861, 148, 733, 404, 989, 532, 84, 669, 340, 925, 212, 797, 468, - 1053, 52, 637, 308, 893, 180, 765, 436, 1021, 573, 116, 701, - 372, 957, 244, 829, 500, 1085, 549, 12, 597, 268, 853, 140, - 725, 396, 981, 524, 76, 661, 332, 917, 204, 789, 460, 1045, 44, - 629, 300, 885, 172, 757, 428, 1013, 565, 108, 693, 364, 949, - 236, 821, 492, 1077, 28, 613, 284, 869, 156, 741, 412, 997, - 540, 92, 677, 348, 933, 220, 805, 476, 1061, 60, 645, 316, 901, - 188, 773, 444, 1029, 581, 124, 709, 380, 965, 252, 837, 508, - 1093, 2, 587, 258, 843, 130, 715, 386, 971, 514, 66, 651, 322, - 907, 194, 779, 450, 1035, 34, 619, 290, 875, 162, 747, 418, - 1003, 555, 98, 683, 354, 939, 226, 811, 482, 1067, 18, 603, - 274, 859, 146, 731, 402, 987, 530, 82, 667, 338, 923, 210, 795, - 466, 1051, 50, 635, 306, 891, 178, 763, 434, 1019, 571, 114, - 699, 370, 955, 242, 827, 498, 1083, 546, 10, 595, 266, 851, - 138, 723, 394, 979, 522, 74, 659, 330, 915, 202, 787, 458, - 1043, 42, 627, 298, 883, 170, 755, 426, 1011, 563, 106, 691, - 362, 947, 234, 819, 490, 1075, 26, 611, 282, 867, 154, 739, - 410, 995, 538, 90, 675, 346, 931, 218, 803, 474, 1059, 58, 643, - 314, 899, 186, 771, 442, 1027, 579, 122, 707, 378, 963, 250, - 835, 506, 1091, 6, 591, 262, 847, 134, 719, 390, 975, 518, 70, - 655, 326, 911, 198, 783, 454, 1039, 38, 623, 294, 879, 166, - 751, 422, 1007, 559, 102, 687, 358, 943, 230, 815, 486, 1071, - 22, 607, 278, 863, 150, 735, 406, 991, 534, 86, 671, 342, 927, - 214, 799, 470, 1055, 54, 639, 310, 895, 182, 767, 438, 1023, - 575, 118, 703, 374, 959, 246, 831, 502, 1087, 551, 14, 599, - 270, 855, 142, 727, 398, 983, 526, 78, 663, 334, 919, 206, 791, - 462, 1047, 46, 631, 302, 887, 174, 759, 430, 1015, 567, 110, - 695, 366, 951, 238, 823, 494, 1079, 30, 615, 286, 871, 158, - 743, 414, 999, 542, 94, 679, 350, 935, 222, 807, 478, 1063, 62, - 647, 318, 903, 190, 775, 446, 1031, 583, 126, 711, 382, 967, - 254, 839, 510, 1095, 548, 1, 586, 257, 842, 129, 714, 385, 970, - 513, 65, 650, 321, 906, 193, 778, 449, 1034, 33, 618, 289, 874, - 161, 746, 417, 1002, 554, 97, 682, 353, 938, 225, 810, 481, - 1066, 17, 602, 273, 858, 145, 730, 401, 986, 529, 81, 666, 337, - 922, 209, 794, 465, 1050, 49, 634, 305, 890, 177, 762, 433, - 1018, 570, 113, 698, 369, 954, 241, 826, 497, 1082, 545, 9, - 594, 265, 850, 137, 722, 393, 978, 521, 73, 658, 329, 914, 201, - 786, 457, 1042, 41, 626, 297, 882, 169, 754, 425, 1010, 562, - 105, 690, 361, 946, 233, 818, 489, 1074, 25, 610, 281, 866, - 153, 738, 409, 994, 537, 89, 674, 345, 930, 217, 802, 473, - 1058, 57, 642, 313, 898, 185, 770, 441, 1026, 578, 121, 706, - 377, 962, 249, 834, 505, 1090, 5, 590, 261, 846, 133, 718, 389, - 974, 517, 69, 654, 325, 910, 197, 782, 453, 1038, 37, 622, 293, - 878, 165, 750, 421, 1006, 558, 101, 686, 357, 942, 229, 814, - 485, 1070, 21, 606, 277, 862, 149, 734, 405, 990, 533, 85, 670, - 341, 926, 213, 798, 469, 1054, 53, 638, 309, 894, 181, 766, - 437, 1022, 574, 117, 702, 373, 958, 245, 830, 501, 1086, 550, - 13, 598, 269, 854, 141, 726, 397, 982, 525, 77, 662, 333, 918, - 205, 790, 461, 1046, 45, 630, 301, 886, 173, 758, 429, 1014, - 566, 109, 694, 365, 950, 237, 822, 493, 1078, 29, 614, 285, - 870, 157, 742, 413, 998, 541, 93, 678, 349, 934, 221, 806, 477, - 1062, 61, 646, 317, 902, 189, 774, 445, 1030, 582, 125, 710, - 381, 966, 253, 838, 509, 1094, 3, 588, 259, 844, 131, 716, 387, - 972, 515, 67, 652, 323, 908, 195, 780, 451, 1036, 35, 620, 291, - 876, 163, 748, 419, 1004, 556, 99, 684, 355, 940, 227, 812, - 483, 1068, 19, 604, 275, 860, 147, 732, 403, 988, 531, 83, 668, - 339, 924, 211, 796, 467, 1052, 51, 636, 307, 892, 179, 764, - 435, 1020, 572, 115, 700, 371, 956, 243, 828, 499, 1084, 547, - 11, 596, 267, 852, 139, 724, 395, 980, 523, 75, 660, 331, 916, - 203, 788, 459, 1044, 43, 628, 299, 884, 171, 756, 427, 1012, - 564, 107, 692, 363, 948, 235, 820, 491, 1076, 27, 612, 283, - 868, 155, 740, 411, 996, 539, 91, 676, 347, 932, 219, 804, 475, - 1060, 59, 644, 315, 900, 187, 772, 443, 1028, 580, 123, 708, - 379, 964, 251, 836, 507, 1092, 7, 592, 263, 848, 135, 720, 391, - 976, 519, 71, 656, 327, 912, 199, 784, 455, 1040, 39, 624, 295, - 880, 167, 752, 423, 1008, 560, 103, 688, 359, 944, 231, 816, - 487, 1072, 23, 608, 279, 864, 151, 736, 407, 992, 535, 87, 672, - 343, 928, 215, 800, 471, 1056, 55, 640, 311, 896, 183, 768, - 439, 1024, 576, 119, 704, 375, 960, 247, 832, 503, 1088, 552, - 15, 600, 271, 856, 143, 728, 399, 984, 527, 79, 664, 335, 920, - 207, 792, 463, 1048, 47, 632, 303, 888, 175, 760, 431, 1016, - 568, 111, 696, 367, 952, 239, 824, 495, 1080, 31, 616, 287, - 872, 159, 744, 415, 1000, 543, 95, 680, 351, 936, 223, 808, - 479, 1064, 63, 648, 319, 904, 191, 776, 447, 1032, 584, 127, - 712, 383, 968, 255, 840, 511, 1096]; - - return (unsafe { *PERM1097.get_unchecked((index % 1097) as usize) } as u32 * 1203409 + - unsafe { *PERM1097.get_unchecked(((index / 1097) % 1097) as usize) } as u32 * 1097 + - unsafe { - *PERM1097.get_unchecked(((index / 1203409) % 1097) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1320139673u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1103(index: u32) -> f32 { - const PERM1103: [u16; 1103] = [0, 591, 256, 847, 128, 719, 384, 975, 512, 64, 655, 320, 911, - 192, 783, 448, 1039, 32, 623, 288, 879, 160, 751, 416, 1007, - 559, 96, 687, 352, 943, 224, 815, 480, 1071, 16, 607, 272, 863, - 144, 735, 400, 991, 528, 80, 671, 336, 927, 208, 799, 464, - 1055, 48, 639, 304, 895, 176, 767, 432, 1023, 575, 112, 703, - 368, 959, 240, 831, 496, 1087, 544, 8, 599, 264, 855, 136, 727, - 392, 983, 520, 72, 663, 328, 919, 200, 791, 456, 1047, 40, 631, - 296, 887, 168, 759, 424, 1015, 567, 104, 695, 360, 951, 232, - 823, 488, 1079, 24, 615, 280, 871, 152, 743, 408, 999, 536, 88, - 679, 344, 935, 216, 807, 472, 1063, 56, 647, 312, 903, 184, - 775, 440, 1031, 583, 120, 711, 376, 967, 248, 839, 504, 1095, - 548, 4, 595, 260, 851, 132, 723, 388, 979, 516, 68, 659, 324, - 915, 196, 787, 452, 1043, 36, 627, 292, 883, 164, 755, 420, - 1011, 563, 100, 691, 356, 947, 228, 819, 484, 1075, 20, 611, - 276, 867, 148, 739, 404, 995, 532, 84, 675, 340, 931, 212, 803, - 468, 1059, 52, 643, 308, 899, 180, 771, 436, 1027, 579, 116, - 707, 372, 963, 244, 835, 500, 1091, 555, 12, 603, 268, 859, - 140, 731, 396, 987, 524, 76, 667, 332, 923, 204, 795, 460, - 1051, 44, 635, 300, 891, 172, 763, 428, 1019, 571, 108, 699, - 364, 955, 236, 827, 492, 1083, 28, 619, 284, 875, 156, 747, - 412, 1003, 540, 92, 683, 348, 939, 220, 811, 476, 1067, 60, - 651, 316, 907, 188, 779, 444, 1035, 587, 124, 715, 380, 971, - 252, 843, 508, 1099, 550, 2, 593, 258, 849, 130, 721, 386, 977, - 514, 66, 657, 322, 913, 194, 785, 450, 1041, 34, 625, 290, 881, - 162, 753, 418, 1009, 561, 98, 689, 354, 945, 226, 817, 482, - 1073, 18, 609, 274, 865, 146, 737, 402, 993, 530, 82, 673, 338, - 929, 210, 801, 466, 1057, 50, 641, 306, 897, 178, 769, 434, - 1025, 577, 114, 705, 370, 961, 242, 833, 498, 1089, 546, 10, - 601, 266, 857, 138, 729, 394, 985, 522, 74, 665, 330, 921, 202, - 793, 458, 1049, 42, 633, 298, 889, 170, 761, 426, 1017, 569, - 106, 697, 362, 953, 234, 825, 490, 1081, 26, 617, 282, 873, - 154, 745, 410, 1001, 538, 90, 681, 346, 937, 218, 809, 474, - 1065, 58, 649, 314, 905, 186, 777, 442, 1033, 585, 122, 713, - 378, 969, 250, 841, 506, 1097, 553, 6, 597, 262, 853, 134, 725, - 390, 981, 518, 70, 661, 326, 917, 198, 789, 454, 1045, 38, 629, - 294, 885, 166, 757, 422, 1013, 565, 102, 693, 358, 949, 230, - 821, 486, 1077, 22, 613, 278, 869, 150, 741, 406, 997, 534, 86, - 677, 342, 933, 214, 805, 470, 1061, 54, 645, 310, 901, 182, - 773, 438, 1029, 581, 118, 709, 374, 965, 246, 837, 502, 1093, - 557, 14, 605, 270, 861, 142, 733, 398, 989, 526, 78, 669, 334, - 925, 206, 797, 462, 1053, 46, 637, 302, 893, 174, 765, 430, - 1021, 573, 110, 701, 366, 957, 238, 829, 494, 1085, 30, 621, - 286, 877, 158, 749, 414, 1005, 542, 94, 685, 350, 941, 222, - 813, 478, 1069, 62, 653, 318, 909, 190, 781, 446, 1037, 589, - 126, 717, 382, 973, 254, 845, 510, 1101, 551, 1, 592, 257, 848, - 129, 720, 385, 976, 513, 65, 656, 321, 912, 193, 784, 449, - 1040, 33, 624, 289, 880, 161, 752, 417, 1008, 560, 97, 688, - 353, 944, 225, 816, 481, 1072, 17, 608, 273, 864, 145, 736, - 401, 992, 529, 81, 672, 337, 928, 209, 800, 465, 1056, 49, 640, - 305, 896, 177, 768, 433, 1024, 576, 113, 704, 369, 960, 241, - 832, 497, 1088, 545, 9, 600, 265, 856, 137, 728, 393, 984, 521, - 73, 664, 329, 920, 201, 792, 457, 1048, 41, 632, 297, 888, 169, - 760, 425, 1016, 568, 105, 696, 361, 952, 233, 824, 489, 1080, - 25, 616, 281, 872, 153, 744, 409, 1000, 537, 89, 680, 345, 936, - 217, 808, 473, 1064, 57, 648, 313, 904, 185, 776, 441, 1032, - 584, 121, 712, 377, 968, 249, 840, 505, 1096, 549, 5, 596, 261, - 852, 133, 724, 389, 980, 517, 69, 660, 325, 916, 197, 788, 453, - 1044, 37, 628, 293, 884, 165, 756, 421, 1012, 564, 101, 692, - 357, 948, 229, 820, 485, 1076, 21, 612, 277, 868, 149, 740, - 405, 996, 533, 85, 676, 341, 932, 213, 804, 469, 1060, 53, 644, - 309, 900, 181, 772, 437, 1028, 580, 117, 708, 373, 964, 245, - 836, 501, 1092, 556, 13, 604, 269, 860, 141, 732, 397, 988, - 525, 77, 668, 333, 924, 205, 796, 461, 1052, 45, 636, 301, 892, - 173, 764, 429, 1020, 572, 109, 700, 365, 956, 237, 828, 493, - 1084, 29, 620, 285, 876, 157, 748, 413, 1004, 541, 93, 684, - 349, 940, 221, 812, 477, 1068, 61, 652, 317, 908, 189, 780, - 445, 1036, 588, 125, 716, 381, 972, 253, 844, 509, 1100, 552, - 3, 594, 259, 850, 131, 722, 387, 978, 515, 67, 658, 323, 914, - 195, 786, 451, 1042, 35, 626, 291, 882, 163, 754, 419, 1010, - 562, 99, 690, 355, 946, 227, 818, 483, 1074, 19, 610, 275, 866, - 147, 738, 403, 994, 531, 83, 674, 339, 930, 211, 802, 467, - 1058, 51, 642, 307, 898, 179, 770, 435, 1026, 578, 115, 706, - 371, 962, 243, 834, 499, 1090, 547, 11, 602, 267, 858, 139, - 730, 395, 986, 523, 75, 666, 331, 922, 203, 794, 459, 1050, 43, - 634, 299, 890, 171, 762, 427, 1018, 570, 107, 698, 363, 954, - 235, 826, 491, 1082, 27, 618, 283, 874, 155, 746, 411, 1002, - 539, 91, 682, 347, 938, 219, 810, 475, 1066, 59, 650, 315, 906, - 187, 778, 443, 1034, 586, 123, 714, 379, 970, 251, 842, 507, - 1098, 554, 7, 598, 263, 854, 135, 726, 391, 982, 519, 71, 662, - 327, 918, 199, 790, 455, 1046, 39, 630, 295, 886, 167, 758, - 423, 1014, 566, 103, 694, 359, 950, 231, 822, 487, 1078, 23, - 614, 279, 870, 151, 742, 407, 998, 535, 87, 678, 343, 934, 215, - 806, 471, 1062, 55, 646, 311, 902, 183, 774, 439, 1030, 582, - 119, 710, 375, 966, 247, 838, 503, 1094, 558, 15, 606, 271, - 862, 143, 734, 399, 990, 527, 79, 670, 335, 926, 207, 798, 463, - 1054, 47, 638, 303, 894, 175, 766, 431, 1022, 574, 111, 702, - 367, 958, 239, 830, 495, 1086, 31, 622, 287, 878, 159, 750, - 415, 1006, 543, 95, 686, 351, 942, 223, 814, 479, 1070, 63, - 654, 319, 910, 191, 782, 447, 1038, 590, 127, 718, 383, 974, - 255, 846, 511, 1102]; - - return (unsafe { *PERM1103.get_unchecked((index % 1103) as usize) } as u32 * 1216609 + - unsafe { *PERM1103.get_unchecked(((index / 1103) % 1103) as usize) } as u32 * 1103 + - unsafe { - *PERM1103.get_unchecked(((index / 1216609) % 1103) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1341919727u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1109(index: u32) -> f32 { - const PERM1109: [u16; 1109] = [0, 597, 256, 853, 128, 725, 384, 981, 512, 64, 661, 320, 917, - 192, 789, 448, 1045, 32, 629, 288, 885, 160, 757, 416, 1013, - 565, 96, 693, 352, 949, 224, 821, 480, 1077, 544, 16, 613, 272, - 869, 144, 741, 400, 997, 528, 80, 677, 336, 933, 208, 805, 464, - 1061, 48, 645, 304, 901, 176, 773, 432, 1029, 581, 112, 709, - 368, 965, 240, 837, 496, 1093, 8, 605, 264, 861, 136, 733, 392, - 989, 520, 72, 669, 328, 925, 200, 797, 456, 1053, 40, 637, 296, - 893, 168, 765, 424, 1021, 573, 104, 701, 360, 957, 232, 829, - 488, 1085, 557, 24, 621, 280, 877, 152, 749, 408, 1005, 536, - 88, 685, 344, 941, 216, 813, 472, 1069, 56, 653, 312, 909, 184, - 781, 440, 1037, 589, 120, 717, 376, 973, 248, 845, 504, 1101, - 552, 4, 601, 260, 857, 132, 729, 388, 985, 516, 68, 665, 324, - 921, 196, 793, 452, 1049, 36, 633, 292, 889, 164, 761, 420, - 1017, 569, 100, 697, 356, 953, 228, 825, 484, 1081, 548, 20, - 617, 276, 873, 148, 745, 404, 1001, 532, 84, 681, 340, 937, - 212, 809, 468, 1065, 52, 649, 308, 905, 180, 777, 436, 1033, - 585, 116, 713, 372, 969, 244, 841, 500, 1097, 12, 609, 268, - 865, 140, 737, 396, 993, 524, 76, 673, 332, 929, 204, 801, 460, - 1057, 44, 641, 300, 897, 172, 769, 428, 1025, 577, 108, 705, - 364, 961, 236, 833, 492, 1089, 561, 28, 625, 284, 881, 156, - 753, 412, 1009, 540, 92, 689, 348, 945, 220, 817, 476, 1073, - 60, 657, 316, 913, 188, 785, 444, 1041, 593, 124, 721, 380, - 977, 252, 849, 508, 1105, 2, 599, 258, 855, 130, 727, 386, 983, - 514, 66, 663, 322, 919, 194, 791, 450, 1047, 34, 631, 290, 887, - 162, 759, 418, 1015, 567, 98, 695, 354, 951, 226, 823, 482, - 1079, 546, 18, 615, 274, 871, 146, 743, 402, 999, 530, 82, 679, - 338, 935, 210, 807, 466, 1063, 50, 647, 306, 903, 178, 775, - 434, 1031, 583, 114, 711, 370, 967, 242, 839, 498, 1095, 10, - 607, 266, 863, 138, 735, 394, 991, 522, 74, 671, 330, 927, 202, - 799, 458, 1055, 42, 639, 298, 895, 170, 767, 426, 1023, 575, - 106, 703, 362, 959, 234, 831, 490, 1087, 559, 26, 623, 282, - 879, 154, 751, 410, 1007, 538, 90, 687, 346, 943, 218, 815, - 474, 1071, 58, 655, 314, 911, 186, 783, 442, 1039, 591, 122, - 719, 378, 975, 250, 847, 506, 1103, 555, 6, 603, 262, 859, 134, - 731, 390, 987, 518, 70, 667, 326, 923, 198, 795, 454, 1051, 38, - 635, 294, 891, 166, 763, 422, 1019, 571, 102, 699, 358, 955, - 230, 827, 486, 1083, 550, 22, 619, 278, 875, 150, 747, 406, - 1003, 534, 86, 683, 342, 939, 214, 811, 470, 1067, 54, 651, - 310, 907, 182, 779, 438, 1035, 587, 118, 715, 374, 971, 246, - 843, 502, 1099, 14, 611, 270, 867, 142, 739, 398, 995, 526, 78, - 675, 334, 931, 206, 803, 462, 1059, 46, 643, 302, 899, 174, - 771, 430, 1027, 579, 110, 707, 366, 963, 238, 835, 494, 1091, - 563, 30, 627, 286, 883, 158, 755, 414, 1011, 542, 94, 691, 350, - 947, 222, 819, 478, 1075, 62, 659, 318, 915, 190, 787, 446, - 1043, 595, 126, 723, 382, 979, 254, 851, 510, 1107, 554, 1, - 598, 257, 854, 129, 726, 385, 982, 513, 65, 662, 321, 918, 193, - 790, 449, 1046, 33, 630, 289, 886, 161, 758, 417, 1014, 566, - 97, 694, 353, 950, 225, 822, 481, 1078, 545, 17, 614, 273, 870, - 145, 742, 401, 998, 529, 81, 678, 337, 934, 209, 806, 465, - 1062, 49, 646, 305, 902, 177, 774, 433, 1030, 582, 113, 710, - 369, 966, 241, 838, 497, 1094, 9, 606, 265, 862, 137, 734, 393, - 990, 521, 73, 670, 329, 926, 201, 798, 457, 1054, 41, 638, 297, - 894, 169, 766, 425, 1022, 574, 105, 702, 361, 958, 233, 830, - 489, 1086, 558, 25, 622, 281, 878, 153, 750, 409, 1006, 537, - 89, 686, 345, 942, 217, 814, 473, 1070, 57, 654, 313, 910, 185, - 782, 441, 1038, 590, 121, 718, 377, 974, 249, 846, 505, 1102, - 553, 5, 602, 261, 858, 133, 730, 389, 986, 517, 69, 666, 325, - 922, 197, 794, 453, 1050, 37, 634, 293, 890, 165, 762, 421, - 1018, 570, 101, 698, 357, 954, 229, 826, 485, 1082, 549, 21, - 618, 277, 874, 149, 746, 405, 1002, 533, 85, 682, 341, 938, - 213, 810, 469, 1066, 53, 650, 309, 906, 181, 778, 437, 1034, - 586, 117, 714, 373, 970, 245, 842, 501, 1098, 13, 610, 269, - 866, 141, 738, 397, 994, 525, 77, 674, 333, 930, 205, 802, 461, - 1058, 45, 642, 301, 898, 173, 770, 429, 1026, 578, 109, 706, - 365, 962, 237, 834, 493, 1090, 562, 29, 626, 285, 882, 157, - 754, 413, 1010, 541, 93, 690, 349, 946, 221, 818, 477, 1074, - 61, 658, 317, 914, 189, 786, 445, 1042, 594, 125, 722, 381, - 978, 253, 850, 509, 1106, 3, 600, 259, 856, 131, 728, 387, 984, - 515, 67, 664, 323, 920, 195, 792, 451, 1048, 35, 632, 291, 888, - 163, 760, 419, 1016, 568, 99, 696, 355, 952, 227, 824, 483, - 1080, 547, 19, 616, 275, 872, 147, 744, 403, 1000, 531, 83, - 680, 339, 936, 211, 808, 467, 1064, 51, 648, 307, 904, 179, - 776, 435, 1032, 584, 115, 712, 371, 968, 243, 840, 499, 1096, - 11, 608, 267, 864, 139, 736, 395, 992, 523, 75, 672, 331, 928, - 203, 800, 459, 1056, 43, 640, 299, 896, 171, 768, 427, 1024, - 576, 107, 704, 363, 960, 235, 832, 491, 1088, 560, 27, 624, - 283, 880, 155, 752, 411, 1008, 539, 91, 688, 347, 944, 219, - 816, 475, 1072, 59, 656, 315, 912, 187, 784, 443, 1040, 592, - 123, 720, 379, 976, 251, 848, 507, 1104, 556, 7, 604, 263, 860, - 135, 732, 391, 988, 519, 71, 668, 327, 924, 199, 796, 455, - 1052, 39, 636, 295, 892, 167, 764, 423, 1020, 572, 103, 700, - 359, 956, 231, 828, 487, 1084, 551, 23, 620, 279, 876, 151, - 748, 407, 1004, 535, 87, 684, 343, 940, 215, 812, 471, 1068, - 55, 652, 311, 908, 183, 780, 439, 1036, 588, 119, 716, 375, - 972, 247, 844, 503, 1100, 15, 612, 271, 868, 143, 740, 399, - 996, 527, 79, 676, 335, 932, 207, 804, 463, 1060, 47, 644, 303, - 900, 175, 772, 431, 1028, 580, 111, 708, 367, 964, 239, 836, - 495, 1092, 564, 31, 628, 287, 884, 159, 756, 415, 1012, 543, - 95, 692, 351, 948, 223, 820, 479, 1076, 63, 660, 319, 916, 191, - 788, 447, 1044, 596, 127, 724, 383, 980, 255, 852, 511, 1108]; - - return (unsafe { *PERM1109.get_unchecked((index % 1109) as usize) } as u32 * 1229881 + - unsafe { *PERM1109.get_unchecked(((index / 1109) % 1109) as usize) } as u32 * 1109 + - unsafe { - *PERM1109.get_unchecked(((index / 1229881) % 1109) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1363938029u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1117(index: u32) -> f32 { - const PERM1117: [u16; 1117] = [0, 605, 256, 861, 128, 733, 384, 989, 512, 64, 669, 320, 925, - 192, 797, 448, 1053, 32, 637, 288, 893, 160, 765, 416, 1021, - 573, 96, 701, 352, 957, 224, 829, 480, 1085, 544, 16, 621, 272, - 877, 144, 749, 400, 1005, 528, 80, 685, 336, 941, 208, 813, - 464, 1069, 48, 653, 304, 909, 176, 781, 432, 1037, 589, 112, - 717, 368, 973, 240, 845, 496, 1101, 552, 8, 613, 264, 869, 136, - 741, 392, 997, 520, 72, 677, 328, 933, 200, 805, 456, 1061, 40, - 645, 296, 901, 168, 773, 424, 1029, 581, 104, 709, 360, 965, - 232, 837, 488, 1093, 565, 24, 629, 280, 885, 152, 757, 408, - 1013, 536, 88, 693, 344, 949, 216, 821, 472, 1077, 56, 661, - 312, 917, 184, 789, 440, 1045, 597, 120, 725, 376, 981, 248, - 853, 504, 1109, 556, 4, 609, 260, 865, 132, 737, 388, 993, 516, - 68, 673, 324, 929, 196, 801, 452, 1057, 36, 641, 292, 897, 164, - 769, 420, 1025, 577, 100, 705, 356, 961, 228, 833, 484, 1089, - 548, 20, 625, 276, 881, 148, 753, 404, 1009, 532, 84, 689, 340, - 945, 212, 817, 468, 1073, 52, 657, 308, 913, 180, 785, 436, - 1041, 593, 116, 721, 372, 977, 244, 849, 500, 1105, 561, 12, - 617, 268, 873, 140, 745, 396, 1001, 524, 76, 681, 332, 937, - 204, 809, 460, 1065, 44, 649, 300, 905, 172, 777, 428, 1033, - 585, 108, 713, 364, 969, 236, 841, 492, 1097, 569, 28, 633, - 284, 889, 156, 761, 412, 1017, 540, 92, 697, 348, 953, 220, - 825, 476, 1081, 60, 665, 316, 921, 188, 793, 444, 1049, 601, - 124, 729, 380, 985, 252, 857, 508, 1113, 2, 607, 258, 863, 130, - 735, 386, 991, 514, 66, 671, 322, 927, 194, 799, 450, 1055, 34, - 639, 290, 895, 162, 767, 418, 1023, 575, 98, 703, 354, 959, - 226, 831, 482, 1087, 546, 18, 623, 274, 879, 146, 751, 402, - 1007, 530, 82, 687, 338, 943, 210, 815, 466, 1071, 50, 655, - 306, 911, 178, 783, 434, 1039, 591, 114, 719, 370, 975, 242, - 847, 498, 1103, 554, 10, 615, 266, 871, 138, 743, 394, 999, - 522, 74, 679, 330, 935, 202, 807, 458, 1063, 42, 647, 298, 903, - 170, 775, 426, 1031, 583, 106, 711, 362, 967, 234, 839, 490, - 1095, 567, 26, 631, 282, 887, 154, 759, 410, 1015, 538, 90, - 695, 346, 951, 218, 823, 474, 1079, 58, 663, 314, 919, 186, - 791, 442, 1047, 599, 122, 727, 378, 983, 250, 855, 506, 1111, - 559, 6, 611, 262, 867, 134, 739, 390, 995, 518, 70, 675, 326, - 931, 198, 803, 454, 1059, 38, 643, 294, 899, 166, 771, 422, - 1027, 579, 102, 707, 358, 963, 230, 835, 486, 1091, 550, 22, - 627, 278, 883, 150, 755, 406, 1011, 534, 86, 691, 342, 947, - 214, 819, 470, 1075, 54, 659, 310, 915, 182, 787, 438, 1043, - 595, 118, 723, 374, 979, 246, 851, 502, 1107, 563, 14, 619, - 270, 875, 142, 747, 398, 1003, 526, 78, 683, 334, 939, 206, - 811, 462, 1067, 46, 651, 302, 907, 174, 779, 430, 1035, 587, - 110, 715, 366, 971, 238, 843, 494, 1099, 571, 30, 635, 286, - 891, 158, 763, 414, 1019, 542, 94, 699, 350, 955, 222, 827, - 478, 1083, 62, 667, 318, 923, 190, 795, 446, 1051, 603, 126, - 731, 382, 987, 254, 859, 510, 1115, 558, 1, 606, 257, 862, 129, - 734, 385, 990, 513, 65, 670, 321, 926, 193, 798, 449, 1054, 33, - 638, 289, 894, 161, 766, 417, 1022, 574, 97, 702, 353, 958, - 225, 830, 481, 1086, 545, 17, 622, 273, 878, 145, 750, 401, - 1006, 529, 81, 686, 337, 942, 209, 814, 465, 1070, 49, 654, - 305, 910, 177, 782, 433, 1038, 590, 113, 718, 369, 974, 241, - 846, 497, 1102, 553, 9, 614, 265, 870, 137, 742, 393, 998, 521, - 73, 678, 329, 934, 201, 806, 457, 1062, 41, 646, 297, 902, 169, - 774, 425, 1030, 582, 105, 710, 361, 966, 233, 838, 489, 1094, - 566, 25, 630, 281, 886, 153, 758, 409, 1014, 537, 89, 694, 345, - 950, 217, 822, 473, 1078, 57, 662, 313, 918, 185, 790, 441, - 1046, 598, 121, 726, 377, 982, 249, 854, 505, 1110, 557, 5, - 610, 261, 866, 133, 738, 389, 994, 517, 69, 674, 325, 930, 197, - 802, 453, 1058, 37, 642, 293, 898, 165, 770, 421, 1026, 578, - 101, 706, 357, 962, 229, 834, 485, 1090, 549, 21, 626, 277, - 882, 149, 754, 405, 1010, 533, 85, 690, 341, 946, 213, 818, - 469, 1074, 53, 658, 309, 914, 181, 786, 437, 1042, 594, 117, - 722, 373, 978, 245, 850, 501, 1106, 562, 13, 618, 269, 874, - 141, 746, 397, 1002, 525, 77, 682, 333, 938, 205, 810, 461, - 1066, 45, 650, 301, 906, 173, 778, 429, 1034, 586, 109, 714, - 365, 970, 237, 842, 493, 1098, 570, 29, 634, 285, 890, 157, - 762, 413, 1018, 541, 93, 698, 349, 954, 221, 826, 477, 1082, - 61, 666, 317, 922, 189, 794, 445, 1050, 602, 125, 730, 381, - 986, 253, 858, 509, 1114, 3, 608, 259, 864, 131, 736, 387, 992, - 515, 67, 672, 323, 928, 195, 800, 451, 1056, 35, 640, 291, 896, - 163, 768, 419, 1024, 576, 99, 704, 355, 960, 227, 832, 483, - 1088, 547, 19, 624, 275, 880, 147, 752, 403, 1008, 531, 83, - 688, 339, 944, 211, 816, 467, 1072, 51, 656, 307, 912, 179, - 784, 435, 1040, 592, 115, 720, 371, 976, 243, 848, 499, 1104, - 555, 11, 616, 267, 872, 139, 744, 395, 1000, 523, 75, 680, 331, - 936, 203, 808, 459, 1064, 43, 648, 299, 904, 171, 776, 427, - 1032, 584, 107, 712, 363, 968, 235, 840, 491, 1096, 568, 27, - 632, 283, 888, 155, 760, 411, 1016, 539, 91, 696, 347, 952, - 219, 824, 475, 1080, 59, 664, 315, 920, 187, 792, 443, 1048, - 600, 123, 728, 379, 984, 251, 856, 507, 1112, 560, 7, 612, 263, - 868, 135, 740, 391, 996, 519, 71, 676, 327, 932, 199, 804, 455, - 1060, 39, 644, 295, 900, 167, 772, 423, 1028, 580, 103, 708, - 359, 964, 231, 836, 487, 1092, 551, 23, 628, 279, 884, 151, - 756, 407, 1012, 535, 87, 692, 343, 948, 215, 820, 471, 1076, - 55, 660, 311, 916, 183, 788, 439, 1044, 596, 119, 724, 375, - 980, 247, 852, 503, 1108, 564, 15, 620, 271, 876, 143, 748, - 399, 1004, 527, 79, 684, 335, 940, 207, 812, 463, 1068, 47, - 652, 303, 908, 175, 780, 431, 1036, 588, 111, 716, 367, 972, - 239, 844, 495, 1100, 572, 31, 636, 287, 892, 159, 764, 415, - 1020, 543, 95, 700, 351, 956, 223, 828, 479, 1084, 63, 668, - 319, 924, 191, 796, 447, 1052, 604, 127, 732, 383, 988, 255, - 860, 511, 1116]; - - return (unsafe { *PERM1117.get_unchecked((index % 1117) as usize) } as u32 * 1247689 + - unsafe { *PERM1117.get_unchecked(((index / 1117) % 1117) as usize) } as u32 * 1117 + - unsafe { - *PERM1117.get_unchecked(((index / 1247689) % 1117) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1393668613u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1123(index: u32) -> f32 { - const PERM1123: [u16; 1123] = [0, 611, 256, 867, 128, 739, 384, 995, 512, 64, 675, 320, 931, - 192, 803, 448, 1059, 544, 32, 643, 288, 899, 160, 771, 416, - 1027, 579, 96, 707, 352, 963, 224, 835, 480, 1091, 16, 627, - 272, 883, 144, 755, 400, 1011, 528, 80, 691, 336, 947, 208, - 819, 464, 1075, 563, 48, 659, 304, 915, 176, 787, 432, 1043, - 595, 112, 723, 368, 979, 240, 851, 496, 1107, 8, 619, 264, 875, - 136, 747, 392, 1003, 520, 72, 683, 328, 939, 200, 811, 456, - 1067, 552, 40, 651, 296, 907, 168, 779, 424, 1035, 587, 104, - 715, 360, 971, 232, 843, 488, 1099, 24, 635, 280, 891, 152, - 763, 408, 1019, 536, 88, 699, 344, 955, 216, 827, 472, 1083, - 571, 56, 667, 312, 923, 184, 795, 440, 1051, 603, 120, 731, - 376, 987, 248, 859, 504, 1115, 4, 615, 260, 871, 132, 743, 388, - 999, 516, 68, 679, 324, 935, 196, 807, 452, 1063, 548, 36, 647, - 292, 903, 164, 775, 420, 1031, 583, 100, 711, 356, 967, 228, - 839, 484, 1095, 20, 631, 276, 887, 148, 759, 404, 1015, 532, - 84, 695, 340, 951, 212, 823, 468, 1079, 567, 52, 663, 308, 919, - 180, 791, 436, 1047, 599, 116, 727, 372, 983, 244, 855, 500, - 1111, 12, 623, 268, 879, 140, 751, 396, 1007, 524, 76, 687, - 332, 943, 204, 815, 460, 1071, 556, 44, 655, 300, 911, 172, - 783, 428, 1039, 591, 108, 719, 364, 975, 236, 847, 492, 1103, - 28, 639, 284, 895, 156, 767, 412, 1023, 540, 92, 703, 348, 959, - 220, 831, 476, 1087, 575, 60, 671, 316, 927, 188, 799, 444, - 1055, 607, 124, 735, 380, 991, 252, 863, 508, 1119, 560, 2, - 613, 258, 869, 130, 741, 386, 997, 514, 66, 677, 322, 933, 194, - 805, 450, 1061, 546, 34, 645, 290, 901, 162, 773, 418, 1029, - 581, 98, 709, 354, 965, 226, 837, 482, 1093, 18, 629, 274, 885, - 146, 757, 402, 1013, 530, 82, 693, 338, 949, 210, 821, 466, - 1077, 565, 50, 661, 306, 917, 178, 789, 434, 1045, 597, 114, - 725, 370, 981, 242, 853, 498, 1109, 10, 621, 266, 877, 138, - 749, 394, 1005, 522, 74, 685, 330, 941, 202, 813, 458, 1069, - 554, 42, 653, 298, 909, 170, 781, 426, 1037, 589, 106, 717, - 362, 973, 234, 845, 490, 1101, 26, 637, 282, 893, 154, 765, - 410, 1021, 538, 90, 701, 346, 957, 218, 829, 474, 1085, 573, - 58, 669, 314, 925, 186, 797, 442, 1053, 605, 122, 733, 378, - 989, 250, 861, 506, 1117, 6, 617, 262, 873, 134, 745, 390, - 1001, 518, 70, 681, 326, 937, 198, 809, 454, 1065, 550, 38, - 649, 294, 905, 166, 777, 422, 1033, 585, 102, 713, 358, 969, - 230, 841, 486, 1097, 22, 633, 278, 889, 150, 761, 406, 1017, - 534, 86, 697, 342, 953, 214, 825, 470, 1081, 569, 54, 665, 310, - 921, 182, 793, 438, 1049, 601, 118, 729, 374, 985, 246, 857, - 502, 1113, 14, 625, 270, 881, 142, 753, 398, 1009, 526, 78, - 689, 334, 945, 206, 817, 462, 1073, 558, 46, 657, 302, 913, - 174, 785, 430, 1041, 593, 110, 721, 366, 977, 238, 849, 494, - 1105, 30, 641, 286, 897, 158, 769, 414, 1025, 542, 94, 705, - 350, 961, 222, 833, 478, 1089, 577, 62, 673, 318, 929, 190, - 801, 446, 1057, 609, 126, 737, 382, 993, 254, 865, 510, 1121, - 561, 1, 612, 257, 868, 129, 740, 385, 996, 513, 65, 676, 321, - 932, 193, 804, 449, 1060, 545, 33, 644, 289, 900, 161, 772, - 417, 1028, 580, 97, 708, 353, 964, 225, 836, 481, 1092, 17, - 628, 273, 884, 145, 756, 401, 1012, 529, 81, 692, 337, 948, - 209, 820, 465, 1076, 564, 49, 660, 305, 916, 177, 788, 433, - 1044, 596, 113, 724, 369, 980, 241, 852, 497, 1108, 9, 620, - 265, 876, 137, 748, 393, 1004, 521, 73, 684, 329, 940, 201, - 812, 457, 1068, 553, 41, 652, 297, 908, 169, 780, 425, 1036, - 588, 105, 716, 361, 972, 233, 844, 489, 1100, 25, 636, 281, - 892, 153, 764, 409, 1020, 537, 89, 700, 345, 956, 217, 828, - 473, 1084, 572, 57, 668, 313, 924, 185, 796, 441, 1052, 604, - 121, 732, 377, 988, 249, 860, 505, 1116, 5, 616, 261, 872, 133, - 744, 389, 1000, 517, 69, 680, 325, 936, 197, 808, 453, 1064, - 549, 37, 648, 293, 904, 165, 776, 421, 1032, 584, 101, 712, - 357, 968, 229, 840, 485, 1096, 21, 632, 277, 888, 149, 760, - 405, 1016, 533, 85, 696, 341, 952, 213, 824, 469, 1080, 568, - 53, 664, 309, 920, 181, 792, 437, 1048, 600, 117, 728, 373, - 984, 245, 856, 501, 1112, 13, 624, 269, 880, 141, 752, 397, - 1008, 525, 77, 688, 333, 944, 205, 816, 461, 1072, 557, 45, - 656, 301, 912, 173, 784, 429, 1040, 592, 109, 720, 365, 976, - 237, 848, 493, 1104, 29, 640, 285, 896, 157, 768, 413, 1024, - 541, 93, 704, 349, 960, 221, 832, 477, 1088, 576, 61, 672, 317, - 928, 189, 800, 445, 1056, 608, 125, 736, 381, 992, 253, 864, - 509, 1120, 562, 3, 614, 259, 870, 131, 742, 387, 998, 515, 67, - 678, 323, 934, 195, 806, 451, 1062, 547, 35, 646, 291, 902, - 163, 774, 419, 1030, 582, 99, 710, 355, 966, 227, 838, 483, - 1094, 19, 630, 275, 886, 147, 758, 403, 1014, 531, 83, 694, - 339, 950, 211, 822, 467, 1078, 566, 51, 662, 307, 918, 179, - 790, 435, 1046, 598, 115, 726, 371, 982, 243, 854, 499, 1110, - 11, 622, 267, 878, 139, 750, 395, 1006, 523, 75, 686, 331, 942, - 203, 814, 459, 1070, 555, 43, 654, 299, 910, 171, 782, 427, - 1038, 590, 107, 718, 363, 974, 235, 846, 491, 1102, 27, 638, - 283, 894, 155, 766, 411, 1022, 539, 91, 702, 347, 958, 219, - 830, 475, 1086, 574, 59, 670, 315, 926, 187, 798, 443, 1054, - 606, 123, 734, 379, 990, 251, 862, 507, 1118, 7, 618, 263, 874, - 135, 746, 391, 1002, 519, 71, 682, 327, 938, 199, 810, 455, - 1066, 551, 39, 650, 295, 906, 167, 778, 423, 1034, 586, 103, - 714, 359, 970, 231, 842, 487, 1098, 23, 634, 279, 890, 151, - 762, 407, 1018, 535, 87, 698, 343, 954, 215, 826, 471, 1082, - 570, 55, 666, 311, 922, 183, 794, 439, 1050, 602, 119, 730, - 375, 986, 247, 858, 503, 1114, 15, 626, 271, 882, 143, 754, - 399, 1010, 527, 79, 690, 335, 946, 207, 818, 463, 1074, 559, - 47, 658, 303, 914, 175, 786, 431, 1042, 594, 111, 722, 367, - 978, 239, 850, 495, 1106, 31, 642, 287, 898, 159, 770, 415, - 1026, 543, 95, 706, 351, 962, 223, 834, 479, 1090, 578, 63, - 674, 319, 930, 191, 802, 447, 1058, 610, 127, 738, 383, 994, - 255, 866, 511, 1122]; - - return (unsafe { *PERM1123.get_unchecked((index % 1123) as usize) } as u32 * 1261129 + - unsafe { *PERM1123.get_unchecked(((index / 1123) % 1123) as usize) } as u32 * 1123 + - unsafe { - *PERM1123.get_unchecked(((index / 1261129) % 1123) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1416247867u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1129(index: u32) -> f32 { - const PERM1129: [u16; 1129] = [0, 617, 256, 873, 128, 745, 384, 1001, 512, 64, 681, 320, 937, - 192, 809, 448, 1065, 544, 32, 649, 288, 905, 160, 777, 416, - 1033, 585, 96, 713, 352, 969, 224, 841, 480, 1097, 16, 633, - 272, 889, 144, 761, 400, 1017, 528, 80, 697, 336, 953, 208, - 825, 464, 1081, 569, 48, 665, 304, 921, 176, 793, 432, 1049, - 601, 112, 729, 368, 985, 240, 857, 496, 1113, 560, 8, 625, 264, - 881, 136, 753, 392, 1009, 520, 72, 689, 328, 945, 200, 817, - 456, 1073, 552, 40, 657, 296, 913, 168, 785, 424, 1041, 593, - 104, 721, 360, 977, 232, 849, 488, 1105, 24, 641, 280, 897, - 152, 769, 408, 1025, 536, 88, 705, 344, 961, 216, 833, 472, - 1089, 577, 56, 673, 312, 929, 184, 801, 440, 1057, 609, 120, - 737, 376, 993, 248, 865, 504, 1121, 4, 621, 260, 877, 132, 749, - 388, 1005, 516, 68, 685, 324, 941, 196, 813, 452, 1069, 548, - 36, 653, 292, 909, 164, 781, 420, 1037, 589, 100, 717, 356, - 973, 228, 845, 484, 1101, 20, 637, 276, 893, 148, 765, 404, - 1021, 532, 84, 701, 340, 957, 212, 829, 468, 1085, 573, 52, - 669, 308, 925, 180, 797, 436, 1053, 605, 116, 733, 372, 989, - 244, 861, 500, 1117, 565, 12, 629, 268, 885, 140, 757, 396, - 1013, 524, 76, 693, 332, 949, 204, 821, 460, 1077, 556, 44, - 661, 300, 917, 172, 789, 428, 1045, 597, 108, 725, 364, 981, - 236, 853, 492, 1109, 28, 645, 284, 901, 156, 773, 412, 1029, - 540, 92, 709, 348, 965, 220, 837, 476, 1093, 581, 60, 677, 316, - 933, 188, 805, 444, 1061, 613, 124, 741, 380, 997, 252, 869, - 508, 1125, 2, 619, 258, 875, 130, 747, 386, 1003, 514, 66, 683, - 322, 939, 194, 811, 450, 1067, 546, 34, 651, 290, 907, 162, - 779, 418, 1035, 587, 98, 715, 354, 971, 226, 843, 482, 1099, - 18, 635, 274, 891, 146, 763, 402, 1019, 530, 82, 699, 338, 955, - 210, 827, 466, 1083, 571, 50, 667, 306, 923, 178, 795, 434, - 1051, 603, 114, 731, 370, 987, 242, 859, 498, 1115, 562, 10, - 627, 266, 883, 138, 755, 394, 1011, 522, 74, 691, 330, 947, - 202, 819, 458, 1075, 554, 42, 659, 298, 915, 170, 787, 426, - 1043, 595, 106, 723, 362, 979, 234, 851, 490, 1107, 26, 643, - 282, 899, 154, 771, 410, 1027, 538, 90, 707, 346, 963, 218, - 835, 474, 1091, 579, 58, 675, 314, 931, 186, 803, 442, 1059, - 611, 122, 739, 378, 995, 250, 867, 506, 1123, 6, 623, 262, 879, - 134, 751, 390, 1007, 518, 70, 687, 326, 943, 198, 815, 454, - 1071, 550, 38, 655, 294, 911, 166, 783, 422, 1039, 591, 102, - 719, 358, 975, 230, 847, 486, 1103, 22, 639, 278, 895, 150, - 767, 406, 1023, 534, 86, 703, 342, 959, 214, 831, 470, 1087, - 575, 54, 671, 310, 927, 182, 799, 438, 1055, 607, 118, 735, - 374, 991, 246, 863, 502, 1119, 567, 14, 631, 270, 887, 142, - 759, 398, 1015, 526, 78, 695, 334, 951, 206, 823, 462, 1079, - 558, 46, 663, 302, 919, 174, 791, 430, 1047, 599, 110, 727, - 366, 983, 238, 855, 494, 1111, 30, 647, 286, 903, 158, 775, - 414, 1031, 542, 94, 711, 350, 967, 222, 839, 478, 1095, 583, - 62, 679, 318, 935, 190, 807, 446, 1063, 615, 126, 743, 382, - 999, 254, 871, 510, 1127, 564, 1, 618, 257, 874, 129, 746, 385, - 1002, 513, 65, 682, 321, 938, 193, 810, 449, 1066, 545, 33, - 650, 289, 906, 161, 778, 417, 1034, 586, 97, 714, 353, 970, - 225, 842, 481, 1098, 17, 634, 273, 890, 145, 762, 401, 1018, - 529, 81, 698, 337, 954, 209, 826, 465, 1082, 570, 49, 666, 305, - 922, 177, 794, 433, 1050, 602, 113, 730, 369, 986, 241, 858, - 497, 1114, 561, 9, 626, 265, 882, 137, 754, 393, 1010, 521, 73, - 690, 329, 946, 201, 818, 457, 1074, 553, 41, 658, 297, 914, - 169, 786, 425, 1042, 594, 105, 722, 361, 978, 233, 850, 489, - 1106, 25, 642, 281, 898, 153, 770, 409, 1026, 537, 89, 706, - 345, 962, 217, 834, 473, 1090, 578, 57, 674, 313, 930, 185, - 802, 441, 1058, 610, 121, 738, 377, 994, 249, 866, 505, 1122, - 5, 622, 261, 878, 133, 750, 389, 1006, 517, 69, 686, 325, 942, - 197, 814, 453, 1070, 549, 37, 654, 293, 910, 165, 782, 421, - 1038, 590, 101, 718, 357, 974, 229, 846, 485, 1102, 21, 638, - 277, 894, 149, 766, 405, 1022, 533, 85, 702, 341, 958, 213, - 830, 469, 1086, 574, 53, 670, 309, 926, 181, 798, 437, 1054, - 606, 117, 734, 373, 990, 245, 862, 501, 1118, 566, 13, 630, - 269, 886, 141, 758, 397, 1014, 525, 77, 694, 333, 950, 205, - 822, 461, 1078, 557, 45, 662, 301, 918, 173, 790, 429, 1046, - 598, 109, 726, 365, 982, 237, 854, 493, 1110, 29, 646, 285, - 902, 157, 774, 413, 1030, 541, 93, 710, 349, 966, 221, 838, - 477, 1094, 582, 61, 678, 317, 934, 189, 806, 445, 1062, 614, - 125, 742, 381, 998, 253, 870, 509, 1126, 3, 620, 259, 876, 131, - 748, 387, 1004, 515, 67, 684, 323, 940, 195, 812, 451, 1068, - 547, 35, 652, 291, 908, 163, 780, 419, 1036, 588, 99, 716, 355, - 972, 227, 844, 483, 1100, 19, 636, 275, 892, 147, 764, 403, - 1020, 531, 83, 700, 339, 956, 211, 828, 467, 1084, 572, 51, - 668, 307, 924, 179, 796, 435, 1052, 604, 115, 732, 371, 988, - 243, 860, 499, 1116, 563, 11, 628, 267, 884, 139, 756, 395, - 1012, 523, 75, 692, 331, 948, 203, 820, 459, 1076, 555, 43, - 660, 299, 916, 171, 788, 427, 1044, 596, 107, 724, 363, 980, - 235, 852, 491, 1108, 27, 644, 283, 900, 155, 772, 411, 1028, - 539, 91, 708, 347, 964, 219, 836, 475, 1092, 580, 59, 676, 315, - 932, 187, 804, 443, 1060, 612, 123, 740, 379, 996, 251, 868, - 507, 1124, 7, 624, 263, 880, 135, 752, 391, 1008, 519, 71, 688, - 327, 944, 199, 816, 455, 1072, 551, 39, 656, 295, 912, 167, - 784, 423, 1040, 592, 103, 720, 359, 976, 231, 848, 487, 1104, - 23, 640, 279, 896, 151, 768, 407, 1024, 535, 87, 704, 343, 960, - 215, 832, 471, 1088, 576, 55, 672, 311, 928, 183, 800, 439, - 1056, 608, 119, 736, 375, 992, 247, 864, 503, 1120, 568, 15, - 632, 271, 888, 143, 760, 399, 1016, 527, 79, 696, 335, 952, - 207, 824, 463, 1080, 559, 47, 664, 303, 920, 175, 792, 431, - 1048, 600, 111, 728, 367, 984, 239, 856, 495, 1112, 31, 648, - 287, 904, 159, 776, 415, 1032, 543, 95, 712, 351, 968, 223, - 840, 479, 1096, 584, 63, 680, 319, 936, 191, 808, 447, 1064, - 616, 127, 744, 383, 1000, 255, 872, 511, 1128]; - - return (unsafe { *PERM1129.get_unchecked((index % 1129) as usize) } as u32 * 1274641 + - unsafe { *PERM1129.get_unchecked(((index / 1129) % 1129) as usize) } as u32 * 1129 + - unsafe { - *PERM1129.get_unchecked(((index / 1274641) % 1129) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1439069689u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1151(index: u32) -> f32 { - const PERM1151: [u16; 1151] = [0, 639, 256, 895, 128, 767, 384, 1023, 512, 64, 703, 320, 959, - 192, 831, 448, 1087, 544, 32, 671, 288, 927, 160, 799, 416, - 1055, 607, 96, 735, 352, 991, 224, 863, 480, 1119, 560, 16, - 655, 272, 911, 144, 783, 400, 1039, 528, 80, 719, 336, 975, - 208, 847, 464, 1103, 591, 48, 687, 304, 943, 176, 815, 432, - 1071, 623, 112, 751, 368, 1007, 240, 879, 496, 1135, 568, 8, - 647, 264, 903, 136, 775, 392, 1031, 520, 72, 711, 328, 967, - 200, 839, 456, 1095, 552, 40, 679, 296, 935, 168, 807, 424, - 1063, 615, 104, 743, 360, 999, 232, 871, 488, 1127, 583, 24, - 663, 280, 919, 152, 791, 408, 1047, 536, 88, 727, 344, 983, - 216, 855, 472, 1111, 599, 56, 695, 312, 951, 184, 823, 440, - 1079, 631, 120, 759, 376, 1015, 248, 887, 504, 1143, 572, 4, - 643, 260, 899, 132, 771, 388, 1027, 516, 68, 707, 324, 963, - 196, 835, 452, 1091, 548, 36, 675, 292, 931, 164, 803, 420, - 1059, 611, 100, 739, 356, 995, 228, 867, 484, 1123, 564, 20, - 659, 276, 915, 148, 787, 404, 1043, 532, 84, 723, 340, 979, - 212, 851, 468, 1107, 595, 52, 691, 308, 947, 180, 819, 436, - 1075, 627, 116, 755, 372, 1011, 244, 883, 500, 1139, 579, 12, - 651, 268, 907, 140, 779, 396, 1035, 524, 76, 715, 332, 971, - 204, 843, 460, 1099, 556, 44, 683, 300, 939, 172, 811, 428, - 1067, 619, 108, 747, 364, 1003, 236, 875, 492, 1131, 587, 28, - 667, 284, 923, 156, 795, 412, 1051, 540, 92, 731, 348, 987, - 220, 859, 476, 1115, 603, 60, 699, 316, 955, 188, 827, 444, - 1083, 635, 124, 763, 380, 1019, 252, 891, 508, 1147, 574, 2, - 641, 258, 897, 130, 769, 386, 1025, 514, 66, 705, 322, 961, - 194, 833, 450, 1089, 546, 34, 673, 290, 929, 162, 801, 418, - 1057, 609, 98, 737, 354, 993, 226, 865, 482, 1121, 562, 18, - 657, 274, 913, 146, 785, 402, 1041, 530, 82, 721, 338, 977, - 210, 849, 466, 1105, 593, 50, 689, 306, 945, 178, 817, 434, - 1073, 625, 114, 753, 370, 1009, 242, 881, 498, 1137, 570, 10, - 649, 266, 905, 138, 777, 394, 1033, 522, 74, 713, 330, 969, - 202, 841, 458, 1097, 554, 42, 681, 298, 937, 170, 809, 426, - 1065, 617, 106, 745, 362, 1001, 234, 873, 490, 1129, 585, 26, - 665, 282, 921, 154, 793, 410, 1049, 538, 90, 729, 346, 985, - 218, 857, 474, 1113, 601, 58, 697, 314, 953, 186, 825, 442, - 1081, 633, 122, 761, 378, 1017, 250, 889, 506, 1145, 577, 6, - 645, 262, 901, 134, 773, 390, 1029, 518, 70, 709, 326, 965, - 198, 837, 454, 1093, 550, 38, 677, 294, 933, 166, 805, 422, - 1061, 613, 102, 741, 358, 997, 230, 869, 486, 1125, 566, 22, - 661, 278, 917, 150, 789, 406, 1045, 534, 86, 725, 342, 981, - 214, 853, 470, 1109, 597, 54, 693, 310, 949, 182, 821, 438, - 1077, 629, 118, 757, 374, 1013, 246, 885, 502, 1141, 581, 14, - 653, 270, 909, 142, 781, 398, 1037, 526, 78, 717, 334, 973, - 206, 845, 462, 1101, 558, 46, 685, 302, 941, 174, 813, 430, - 1069, 621, 110, 749, 366, 1005, 238, 877, 494, 1133, 589, 30, - 669, 286, 925, 158, 797, 414, 1053, 542, 94, 733, 350, 989, - 222, 861, 478, 1117, 605, 62, 701, 318, 957, 190, 829, 446, - 1085, 637, 126, 765, 382, 1021, 254, 893, 510, 1149, 575, 1, - 640, 257, 896, 129, 768, 385, 1024, 513, 65, 704, 321, 960, - 193, 832, 449, 1088, 545, 33, 672, 289, 928, 161, 800, 417, - 1056, 608, 97, 736, 353, 992, 225, 864, 481, 1120, 561, 17, - 656, 273, 912, 145, 784, 401, 1040, 529, 81, 720, 337, 976, - 209, 848, 465, 1104, 592, 49, 688, 305, 944, 177, 816, 433, - 1072, 624, 113, 752, 369, 1008, 241, 880, 497, 1136, 569, 9, - 648, 265, 904, 137, 776, 393, 1032, 521, 73, 712, 329, 968, - 201, 840, 457, 1096, 553, 41, 680, 297, 936, 169, 808, 425, - 1064, 616, 105, 744, 361, 1000, 233, 872, 489, 1128, 584, 25, - 664, 281, 920, 153, 792, 409, 1048, 537, 89, 728, 345, 984, - 217, 856, 473, 1112, 600, 57, 696, 313, 952, 185, 824, 441, - 1080, 632, 121, 760, 377, 1016, 249, 888, 505, 1144, 573, 5, - 644, 261, 900, 133, 772, 389, 1028, 517, 69, 708, 325, 964, - 197, 836, 453, 1092, 549, 37, 676, 293, 932, 165, 804, 421, - 1060, 612, 101, 740, 357, 996, 229, 868, 485, 1124, 565, 21, - 660, 277, 916, 149, 788, 405, 1044, 533, 85, 724, 341, 980, - 213, 852, 469, 1108, 596, 53, 692, 309, 948, 181, 820, 437, - 1076, 628, 117, 756, 373, 1012, 245, 884, 501, 1140, 580, 13, - 652, 269, 908, 141, 780, 397, 1036, 525, 77, 716, 333, 972, - 205, 844, 461, 1100, 557, 45, 684, 301, 940, 173, 812, 429, - 1068, 620, 109, 748, 365, 1004, 237, 876, 493, 1132, 588, 29, - 668, 285, 924, 157, 796, 413, 1052, 541, 93, 732, 349, 988, - 221, 860, 477, 1116, 604, 61, 700, 317, 956, 189, 828, 445, - 1084, 636, 125, 764, 381, 1020, 253, 892, 509, 1148, 576, 3, - 642, 259, 898, 131, 770, 387, 1026, 515, 67, 706, 323, 962, - 195, 834, 451, 1090, 547, 35, 674, 291, 930, 163, 802, 419, - 1058, 610, 99, 738, 355, 994, 227, 866, 483, 1122, 563, 19, - 658, 275, 914, 147, 786, 403, 1042, 531, 83, 722, 339, 978, - 211, 850, 467, 1106, 594, 51, 690, 307, 946, 179, 818, 435, - 1074, 626, 115, 754, 371, 1010, 243, 882, 499, 1138, 571, 11, - 650, 267, 906, 139, 778, 395, 1034, 523, 75, 714, 331, 970, - 203, 842, 459, 1098, 555, 43, 682, 299, 938, 171, 810, 427, - 1066, 618, 107, 746, 363, 1002, 235, 874, 491, 1130, 586, 27, - 666, 283, 922, 155, 794, 411, 1050, 539, 91, 730, 347, 986, - 219, 858, 475, 1114, 602, 59, 698, 315, 954, 187, 826, 443, - 1082, 634, 123, 762, 379, 1018, 251, 890, 507, 1146, 578, 7, - 646, 263, 902, 135, 774, 391, 1030, 519, 71, 710, 327, 966, - 199, 838, 455, 1094, 551, 39, 678, 295, 934, 167, 806, 423, - 1062, 614, 103, 742, 359, 998, 231, 870, 487, 1126, 567, 23, - 662, 279, 918, 151, 790, 407, 1046, 535, 87, 726, 343, 982, - 215, 854, 471, 1110, 598, 55, 694, 311, 950, 183, 822, 439, - 1078, 630, 119, 758, 375, 1014, 247, 886, 503, 1142, 582, 15, - 654, 271, 910, 143, 782, 399, 1038, 527, 79, 718, 335, 974, - 207, 846, 463, 1102, 559, 47, 686, 303, 942, 175, 814, 431, - 1070, 622, 111, 750, 367, 1006, 239, 878, 495, 1134, 590, 31, - 670, 287, 926, 159, 798, 415, 1054, 543, 95, 734, 351, 990, - 223, 862, 479, 1118, 606, 63, 702, 319, 958, 191, 830, 447, - 1086, 638, 127, 766, 383, 1022, 255, 894, 511, 1150]; - - return (unsafe { *PERM1151.get_unchecked((index % 1151) as usize) } as u32 * 1324801 + - unsafe { *PERM1151.get_unchecked(((index / 1151) % 1151) as usize) } as u32 * 1151 + - unsafe { - *PERM1151.get_unchecked(((index / 1324801) % 1151) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1524845951u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1153(index: u32) -> f32 { - const PERM1153: [u16; 1153] = [0, 641, 256, 897, 512, 128, 769, 384, 1025, 64, 705, 320, 961, - 577, 192, 833, 448, 1089, 32, 673, 288, 929, 544, 160, 801, - 416, 1057, 96, 737, 352, 993, 609, 224, 865, 480, 1121, 16, - 657, 272, 913, 528, 144, 785, 400, 1041, 80, 721, 336, 977, - 593, 208, 849, 464, 1105, 48, 689, 304, 945, 560, 176, 817, - 432, 1073, 112, 753, 368, 1009, 625, 240, 881, 496, 1137, 8, - 649, 264, 905, 520, 136, 777, 392, 1033, 72, 713, 328, 969, - 585, 200, 841, 456, 1097, 40, 681, 296, 937, 552, 168, 809, - 424, 1065, 104, 745, 360, 1001, 617, 232, 873, 488, 1129, 24, - 665, 280, 921, 536, 152, 793, 408, 1049, 88, 729, 344, 985, - 601, 216, 857, 472, 1113, 56, 697, 312, 953, 568, 184, 825, - 440, 1081, 120, 761, 376, 1017, 633, 248, 889, 504, 1145, 4, - 645, 260, 901, 516, 132, 773, 388, 1029, 68, 709, 324, 965, - 581, 196, 837, 452, 1093, 36, 677, 292, 933, 548, 164, 805, - 420, 1061, 100, 741, 356, 997, 613, 228, 869, 484, 1125, 20, - 661, 276, 917, 532, 148, 789, 404, 1045, 84, 725, 340, 981, - 597, 212, 853, 468, 1109, 52, 693, 308, 949, 564, 180, 821, - 436, 1077, 116, 757, 372, 1013, 629, 244, 885, 500, 1141, 12, - 653, 268, 909, 524, 140, 781, 396, 1037, 76, 717, 332, 973, - 589, 204, 845, 460, 1101, 44, 685, 300, 941, 556, 172, 813, - 428, 1069, 108, 749, 364, 1005, 621, 236, 877, 492, 1133, 28, - 669, 284, 925, 540, 156, 797, 412, 1053, 92, 733, 348, 989, - 605, 220, 861, 476, 1117, 60, 701, 316, 957, 572, 188, 829, - 444, 1085, 124, 765, 380, 1021, 637, 252, 893, 508, 1149, 2, - 643, 258, 899, 514, 130, 771, 386, 1027, 66, 707, 322, 963, - 579, 194, 835, 450, 1091, 34, 675, 290, 931, 546, 162, 803, - 418, 1059, 98, 739, 354, 995, 611, 226, 867, 482, 1123, 18, - 659, 274, 915, 530, 146, 787, 402, 1043, 82, 723, 338, 979, - 595, 210, 851, 466, 1107, 50, 691, 306, 947, 562, 178, 819, - 434, 1075, 114, 755, 370, 1011, 627, 242, 883, 498, 1139, 10, - 651, 266, 907, 522, 138, 779, 394, 1035, 74, 715, 330, 971, - 587, 202, 843, 458, 1099, 42, 683, 298, 939, 554, 170, 811, - 426, 1067, 106, 747, 362, 1003, 619, 234, 875, 490, 1131, 26, - 667, 282, 923, 538, 154, 795, 410, 1051, 90, 731, 346, 987, - 603, 218, 859, 474, 1115, 58, 699, 314, 955, 570, 186, 827, - 442, 1083, 122, 763, 378, 1019, 635, 250, 891, 506, 1147, 6, - 647, 262, 903, 518, 134, 775, 390, 1031, 70, 711, 326, 967, - 583, 198, 839, 454, 1095, 38, 679, 294, 935, 550, 166, 807, - 422, 1063, 102, 743, 358, 999, 615, 230, 871, 486, 1127, 22, - 663, 278, 919, 534, 150, 791, 406, 1047, 86, 727, 342, 983, - 599, 214, 855, 470, 1111, 54, 695, 310, 951, 566, 182, 823, - 438, 1079, 118, 759, 374, 1015, 631, 246, 887, 502, 1143, 14, - 655, 270, 911, 526, 142, 783, 398, 1039, 78, 719, 334, 975, - 591, 206, 847, 462, 1103, 46, 687, 302, 943, 558, 174, 815, - 430, 1071, 110, 751, 366, 1007, 623, 238, 879, 494, 1135, 30, - 671, 286, 927, 542, 158, 799, 414, 1055, 94, 735, 350, 991, - 607, 222, 863, 478, 1119, 62, 703, 318, 959, 574, 190, 831, - 446, 1087, 126, 767, 382, 1023, 639, 254, 895, 510, 1151, 576, - 1, 642, 257, 898, 513, 129, 770, 385, 1026, 65, 706, 321, 962, - 578, 193, 834, 449, 1090, 33, 674, 289, 930, 545, 161, 802, - 417, 1058, 97, 738, 353, 994, 610, 225, 866, 481, 1122, 17, - 658, 273, 914, 529, 145, 786, 401, 1042, 81, 722, 337, 978, - 594, 209, 850, 465, 1106, 49, 690, 305, 946, 561, 177, 818, - 433, 1074, 113, 754, 369, 1010, 626, 241, 882, 497, 1138, 9, - 650, 265, 906, 521, 137, 778, 393, 1034, 73, 714, 329, 970, - 586, 201, 842, 457, 1098, 41, 682, 297, 938, 553, 169, 810, - 425, 1066, 105, 746, 361, 1002, 618, 233, 874, 489, 1130, 25, - 666, 281, 922, 537, 153, 794, 409, 1050, 89, 730, 345, 986, - 602, 217, 858, 473, 1114, 57, 698, 313, 954, 569, 185, 826, - 441, 1082, 121, 762, 377, 1018, 634, 249, 890, 505, 1146, 5, - 646, 261, 902, 517, 133, 774, 389, 1030, 69, 710, 325, 966, - 582, 197, 838, 453, 1094, 37, 678, 293, 934, 549, 165, 806, - 421, 1062, 101, 742, 357, 998, 614, 229, 870, 485, 1126, 21, - 662, 277, 918, 533, 149, 790, 405, 1046, 85, 726, 341, 982, - 598, 213, 854, 469, 1110, 53, 694, 309, 950, 565, 181, 822, - 437, 1078, 117, 758, 373, 1014, 630, 245, 886, 501, 1142, 13, - 654, 269, 910, 525, 141, 782, 397, 1038, 77, 718, 333, 974, - 590, 205, 846, 461, 1102, 45, 686, 301, 942, 557, 173, 814, - 429, 1070, 109, 750, 365, 1006, 622, 237, 878, 493, 1134, 29, - 670, 285, 926, 541, 157, 798, 413, 1054, 93, 734, 349, 990, - 606, 221, 862, 477, 1118, 61, 702, 317, 958, 573, 189, 830, - 445, 1086, 125, 766, 381, 1022, 638, 253, 894, 509, 1150, 3, - 644, 259, 900, 515, 131, 772, 387, 1028, 67, 708, 323, 964, - 580, 195, 836, 451, 1092, 35, 676, 291, 932, 547, 163, 804, - 419, 1060, 99, 740, 355, 996, 612, 227, 868, 483, 1124, 19, - 660, 275, 916, 531, 147, 788, 403, 1044, 83, 724, 339, 980, - 596, 211, 852, 467, 1108, 51, 692, 307, 948, 563, 179, 820, - 435, 1076, 115, 756, 371, 1012, 628, 243, 884, 499, 1140, 11, - 652, 267, 908, 523, 139, 780, 395, 1036, 75, 716, 331, 972, - 588, 203, 844, 459, 1100, 43, 684, 299, 940, 555, 171, 812, - 427, 1068, 107, 748, 363, 1004, 620, 235, 876, 491, 1132, 27, - 668, 283, 924, 539, 155, 796, 411, 1052, 91, 732, 347, 988, - 604, 219, 860, 475, 1116, 59, 700, 315, 956, 571, 187, 828, - 443, 1084, 123, 764, 379, 1020, 636, 251, 892, 507, 1148, 7, - 648, 263, 904, 519, 135, 776, 391, 1032, 71, 712, 327, 968, - 584, 199, 840, 455, 1096, 39, 680, 295, 936, 551, 167, 808, - 423, 1064, 103, 744, 359, 1000, 616, 231, 872, 487, 1128, 23, - 664, 279, 920, 535, 151, 792, 407, 1048, 87, 728, 343, 984, - 600, 215, 856, 471, 1112, 55, 696, 311, 952, 567, 183, 824, - 439, 1080, 119, 760, 375, 1016, 632, 247, 888, 503, 1144, 15, - 656, 271, 912, 527, 143, 784, 399, 1040, 79, 720, 335, 976, - 592, 207, 848, 463, 1104, 47, 688, 303, 944, 559, 175, 816, - 431, 1072, 111, 752, 367, 1008, 624, 239, 880, 495, 1136, 31, - 672, 287, 928, 543, 159, 800, 415, 1056, 95, 736, 351, 992, - 608, 223, 864, 479, 1120, 63, 704, 319, 960, 575, 191, 832, - 447, 1088, 127, 768, 383, 1024, 640, 255, 896, 511, 1152]; - - return (unsafe { *PERM1153.get_unchecked((index % 1153) as usize) } as u32 * 1329409 + - unsafe { *PERM1153.get_unchecked(((index / 1153) % 1153) as usize) } as u32 * 1153 + - unsafe { - *PERM1153.get_unchecked(((index / 1329409) % 1153) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1532808577u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1163(index: u32) -> f32 { - const PERM1163: [u16; 1163] = [0, 651, 256, 907, 512, 128, 779, 384, 1035, 64, 715, 320, 971, - 587, 192, 843, 448, 1099, 32, 683, 288, 939, 544, 160, 811, - 416, 1067, 96, 747, 352, 1003, 619, 224, 875, 480, 1131, 16, - 667, 272, 923, 528, 144, 795, 400, 1051, 80, 731, 336, 987, - 603, 208, 859, 464, 1115, 48, 699, 304, 955, 560, 176, 827, - 432, 1083, 112, 763, 368, 1019, 635, 240, 891, 496, 1147, 576, - 8, 659, 264, 915, 520, 136, 787, 392, 1043, 72, 723, 328, 979, - 595, 200, 851, 456, 1107, 40, 691, 296, 947, 552, 168, 819, - 424, 1075, 104, 755, 360, 1011, 627, 232, 883, 488, 1139, 24, - 675, 280, 931, 536, 152, 803, 408, 1059, 88, 739, 344, 995, - 611, 216, 867, 472, 1123, 56, 707, 312, 963, 568, 184, 835, - 440, 1091, 120, 771, 376, 1027, 643, 248, 899, 504, 1155, 4, - 655, 260, 911, 516, 132, 783, 388, 1039, 68, 719, 324, 975, - 591, 196, 847, 452, 1103, 36, 687, 292, 943, 548, 164, 815, - 420, 1071, 100, 751, 356, 1007, 623, 228, 879, 484, 1135, 20, - 671, 276, 927, 532, 148, 799, 404, 1055, 84, 735, 340, 991, - 607, 212, 863, 468, 1119, 52, 703, 308, 959, 564, 180, 831, - 436, 1087, 116, 767, 372, 1023, 639, 244, 895, 500, 1151, 583, - 12, 663, 268, 919, 524, 140, 791, 396, 1047, 76, 727, 332, 983, - 599, 204, 855, 460, 1111, 44, 695, 300, 951, 556, 172, 823, - 428, 1079, 108, 759, 364, 1015, 631, 236, 887, 492, 1143, 28, - 679, 284, 935, 540, 156, 807, 412, 1063, 92, 743, 348, 999, - 615, 220, 871, 476, 1127, 60, 711, 316, 967, 572, 188, 839, - 444, 1095, 124, 775, 380, 1031, 647, 252, 903, 508, 1159, 580, - 2, 653, 258, 909, 514, 130, 781, 386, 1037, 66, 717, 322, 973, - 589, 194, 845, 450, 1101, 34, 685, 290, 941, 546, 162, 813, - 418, 1069, 98, 749, 354, 1005, 621, 226, 877, 482, 1133, 18, - 669, 274, 925, 530, 146, 797, 402, 1053, 82, 733, 338, 989, - 605, 210, 861, 466, 1117, 50, 701, 306, 957, 562, 178, 829, - 434, 1085, 114, 765, 370, 1021, 637, 242, 893, 498, 1149, 578, - 10, 661, 266, 917, 522, 138, 789, 394, 1045, 74, 725, 330, 981, - 597, 202, 853, 458, 1109, 42, 693, 298, 949, 554, 170, 821, - 426, 1077, 106, 757, 362, 1013, 629, 234, 885, 490, 1141, 26, - 677, 282, 933, 538, 154, 805, 410, 1061, 90, 741, 346, 997, - 613, 218, 869, 474, 1125, 58, 709, 314, 965, 570, 186, 837, - 442, 1093, 122, 773, 378, 1029, 645, 250, 901, 506, 1157, 6, - 657, 262, 913, 518, 134, 785, 390, 1041, 70, 721, 326, 977, - 593, 198, 849, 454, 1105, 38, 689, 294, 945, 550, 166, 817, - 422, 1073, 102, 753, 358, 1009, 625, 230, 881, 486, 1137, 22, - 673, 278, 929, 534, 150, 801, 406, 1057, 86, 737, 342, 993, - 609, 214, 865, 470, 1121, 54, 705, 310, 961, 566, 182, 833, - 438, 1089, 118, 769, 374, 1025, 641, 246, 897, 502, 1153, 585, - 14, 665, 270, 921, 526, 142, 793, 398, 1049, 78, 729, 334, 985, - 601, 206, 857, 462, 1113, 46, 697, 302, 953, 558, 174, 825, - 430, 1081, 110, 761, 366, 1017, 633, 238, 889, 494, 1145, 30, - 681, 286, 937, 542, 158, 809, 414, 1065, 94, 745, 350, 1001, - 617, 222, 873, 478, 1129, 62, 713, 318, 969, 574, 190, 841, - 446, 1097, 126, 777, 382, 1033, 649, 254, 905, 510, 1161, 581, - 1, 652, 257, 908, 513, 129, 780, 385, 1036, 65, 716, 321, 972, - 588, 193, 844, 449, 1100, 33, 684, 289, 940, 545, 161, 812, - 417, 1068, 97, 748, 353, 1004, 620, 225, 876, 481, 1132, 17, - 668, 273, 924, 529, 145, 796, 401, 1052, 81, 732, 337, 988, - 604, 209, 860, 465, 1116, 49, 700, 305, 956, 561, 177, 828, - 433, 1084, 113, 764, 369, 1020, 636, 241, 892, 497, 1148, 577, - 9, 660, 265, 916, 521, 137, 788, 393, 1044, 73, 724, 329, 980, - 596, 201, 852, 457, 1108, 41, 692, 297, 948, 553, 169, 820, - 425, 1076, 105, 756, 361, 1012, 628, 233, 884, 489, 1140, 25, - 676, 281, 932, 537, 153, 804, 409, 1060, 89, 740, 345, 996, - 612, 217, 868, 473, 1124, 57, 708, 313, 964, 569, 185, 836, - 441, 1092, 121, 772, 377, 1028, 644, 249, 900, 505, 1156, 5, - 656, 261, 912, 517, 133, 784, 389, 1040, 69, 720, 325, 976, - 592, 197, 848, 453, 1104, 37, 688, 293, 944, 549, 165, 816, - 421, 1072, 101, 752, 357, 1008, 624, 229, 880, 485, 1136, 21, - 672, 277, 928, 533, 149, 800, 405, 1056, 85, 736, 341, 992, - 608, 213, 864, 469, 1120, 53, 704, 309, 960, 565, 181, 832, - 437, 1088, 117, 768, 373, 1024, 640, 245, 896, 501, 1152, 584, - 13, 664, 269, 920, 525, 141, 792, 397, 1048, 77, 728, 333, 984, - 600, 205, 856, 461, 1112, 45, 696, 301, 952, 557, 173, 824, - 429, 1080, 109, 760, 365, 1016, 632, 237, 888, 493, 1144, 29, - 680, 285, 936, 541, 157, 808, 413, 1064, 93, 744, 349, 1000, - 616, 221, 872, 477, 1128, 61, 712, 317, 968, 573, 189, 840, - 445, 1096, 125, 776, 381, 1032, 648, 253, 904, 509, 1160, 582, - 3, 654, 259, 910, 515, 131, 782, 387, 1038, 67, 718, 323, 974, - 590, 195, 846, 451, 1102, 35, 686, 291, 942, 547, 163, 814, - 419, 1070, 99, 750, 355, 1006, 622, 227, 878, 483, 1134, 19, - 670, 275, 926, 531, 147, 798, 403, 1054, 83, 734, 339, 990, - 606, 211, 862, 467, 1118, 51, 702, 307, 958, 563, 179, 830, - 435, 1086, 115, 766, 371, 1022, 638, 243, 894, 499, 1150, 579, - 11, 662, 267, 918, 523, 139, 790, 395, 1046, 75, 726, 331, 982, - 598, 203, 854, 459, 1110, 43, 694, 299, 950, 555, 171, 822, - 427, 1078, 107, 758, 363, 1014, 630, 235, 886, 491, 1142, 27, - 678, 283, 934, 539, 155, 806, 411, 1062, 91, 742, 347, 998, - 614, 219, 870, 475, 1126, 59, 710, 315, 966, 571, 187, 838, - 443, 1094, 123, 774, 379, 1030, 646, 251, 902, 507, 1158, 7, - 658, 263, 914, 519, 135, 786, 391, 1042, 71, 722, 327, 978, - 594, 199, 850, 455, 1106, 39, 690, 295, 946, 551, 167, 818, - 423, 1074, 103, 754, 359, 1010, 626, 231, 882, 487, 1138, 23, - 674, 279, 930, 535, 151, 802, 407, 1058, 87, 738, 343, 994, - 610, 215, 866, 471, 1122, 55, 706, 311, 962, 567, 183, 834, - 439, 1090, 119, 770, 375, 1026, 642, 247, 898, 503, 1154, 586, - 15, 666, 271, 922, 527, 143, 794, 399, 1050, 79, 730, 335, 986, - 602, 207, 858, 463, 1114, 47, 698, 303, 954, 559, 175, 826, - 431, 1082, 111, 762, 367, 1018, 634, 239, 890, 495, 1146, 31, - 682, 287, 938, 543, 159, 810, 415, 1066, 95, 746, 351, 1002, - 618, 223, 874, 479, 1130, 63, 714, 319, 970, 575, 191, 842, - 447, 1098, 127, 778, 383, 1034, 650, 255, 906, 511, 1162]; - - return (unsafe { *PERM1163.get_unchecked((index % 1163) as usize) } as u32 * 1352569 + - unsafe { *PERM1163.get_unchecked(((index / 1163) % 1163) as usize) } as u32 * 1163 + - unsafe { - *PERM1163.get_unchecked(((index / 1352569) % 1163) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1573037747u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1171(index: u32) -> f32 { - const PERM1171: [u16; 1171] = [0, 659, 256, 915, 512, 128, 787, 384, 1043, 64, 723, 320, 979, - 595, 192, 851, 448, 1107, 32, 691, 288, 947, 544, 160, 819, - 416, 1075, 96, 755, 352, 1011, 627, 224, 883, 480, 1139, 576, - 16, 675, 272, 931, 528, 144, 803, 400, 1059, 80, 739, 336, 995, - 611, 208, 867, 464, 1123, 48, 707, 304, 963, 560, 176, 835, - 432, 1091, 112, 771, 368, 1027, 643, 240, 899, 496, 1155, 8, - 667, 264, 923, 520, 136, 795, 392, 1051, 72, 731, 328, 987, - 603, 200, 859, 456, 1115, 40, 699, 296, 955, 552, 168, 827, - 424, 1083, 104, 763, 360, 1019, 635, 232, 891, 488, 1147, 587, - 24, 683, 280, 939, 536, 152, 811, 408, 1067, 88, 747, 344, - 1003, 619, 216, 875, 472, 1131, 56, 715, 312, 971, 568, 184, - 843, 440, 1099, 120, 779, 376, 1035, 651, 248, 907, 504, 1163, - 4, 663, 260, 919, 516, 132, 791, 388, 1047, 68, 727, 324, 983, - 599, 196, 855, 452, 1111, 36, 695, 292, 951, 548, 164, 823, - 420, 1079, 100, 759, 356, 1015, 631, 228, 887, 484, 1143, 580, - 20, 679, 276, 935, 532, 148, 807, 404, 1063, 84, 743, 340, 999, - 615, 212, 871, 468, 1127, 52, 711, 308, 967, 564, 180, 839, - 436, 1095, 116, 775, 372, 1031, 647, 244, 903, 500, 1159, 12, - 671, 268, 927, 524, 140, 799, 396, 1055, 76, 735, 332, 991, - 607, 204, 863, 460, 1119, 44, 703, 300, 959, 556, 172, 831, - 428, 1087, 108, 767, 364, 1023, 639, 236, 895, 492, 1151, 591, - 28, 687, 284, 943, 540, 156, 815, 412, 1071, 92, 751, 348, - 1007, 623, 220, 879, 476, 1135, 60, 719, 316, 975, 572, 188, - 847, 444, 1103, 124, 783, 380, 1039, 655, 252, 911, 508, 1167, - 584, 2, 661, 258, 917, 514, 130, 789, 386, 1045, 66, 725, 322, - 981, 597, 194, 853, 450, 1109, 34, 693, 290, 949, 546, 162, - 821, 418, 1077, 98, 757, 354, 1013, 629, 226, 885, 482, 1141, - 578, 18, 677, 274, 933, 530, 146, 805, 402, 1061, 82, 741, 338, - 997, 613, 210, 869, 466, 1125, 50, 709, 306, 965, 562, 178, - 837, 434, 1093, 114, 773, 370, 1029, 645, 242, 901, 498, 1157, - 10, 669, 266, 925, 522, 138, 797, 394, 1053, 74, 733, 330, 989, - 605, 202, 861, 458, 1117, 42, 701, 298, 957, 554, 170, 829, - 426, 1085, 106, 765, 362, 1021, 637, 234, 893, 490, 1149, 589, - 26, 685, 282, 941, 538, 154, 813, 410, 1069, 90, 749, 346, - 1005, 621, 218, 877, 474, 1133, 58, 717, 314, 973, 570, 186, - 845, 442, 1101, 122, 781, 378, 1037, 653, 250, 909, 506, 1165, - 6, 665, 262, 921, 518, 134, 793, 390, 1049, 70, 729, 326, 985, - 601, 198, 857, 454, 1113, 38, 697, 294, 953, 550, 166, 825, - 422, 1081, 102, 761, 358, 1017, 633, 230, 889, 486, 1145, 582, - 22, 681, 278, 937, 534, 150, 809, 406, 1065, 86, 745, 342, - 1001, 617, 214, 873, 470, 1129, 54, 713, 310, 969, 566, 182, - 841, 438, 1097, 118, 777, 374, 1033, 649, 246, 905, 502, 1161, - 14, 673, 270, 929, 526, 142, 801, 398, 1057, 78, 737, 334, 993, - 609, 206, 865, 462, 1121, 46, 705, 302, 961, 558, 174, 833, - 430, 1089, 110, 769, 366, 1025, 641, 238, 897, 494, 1153, 593, - 30, 689, 286, 945, 542, 158, 817, 414, 1073, 94, 753, 350, - 1009, 625, 222, 881, 478, 1137, 62, 721, 318, 977, 574, 190, - 849, 446, 1105, 126, 785, 382, 1041, 657, 254, 913, 510, 1169, - 585, 1, 660, 257, 916, 513, 129, 788, 385, 1044, 65, 724, 321, - 980, 596, 193, 852, 449, 1108, 33, 692, 289, 948, 545, 161, - 820, 417, 1076, 97, 756, 353, 1012, 628, 225, 884, 481, 1140, - 577, 17, 676, 273, 932, 529, 145, 804, 401, 1060, 81, 740, 337, - 996, 612, 209, 868, 465, 1124, 49, 708, 305, 964, 561, 177, - 836, 433, 1092, 113, 772, 369, 1028, 644, 241, 900, 497, 1156, - 9, 668, 265, 924, 521, 137, 796, 393, 1052, 73, 732, 329, 988, - 604, 201, 860, 457, 1116, 41, 700, 297, 956, 553, 169, 828, - 425, 1084, 105, 764, 361, 1020, 636, 233, 892, 489, 1148, 588, - 25, 684, 281, 940, 537, 153, 812, 409, 1068, 89, 748, 345, - 1004, 620, 217, 876, 473, 1132, 57, 716, 313, 972, 569, 185, - 844, 441, 1100, 121, 780, 377, 1036, 652, 249, 908, 505, 1164, - 5, 664, 261, 920, 517, 133, 792, 389, 1048, 69, 728, 325, 984, - 600, 197, 856, 453, 1112, 37, 696, 293, 952, 549, 165, 824, - 421, 1080, 101, 760, 357, 1016, 632, 229, 888, 485, 1144, 581, - 21, 680, 277, 936, 533, 149, 808, 405, 1064, 85, 744, 341, - 1000, 616, 213, 872, 469, 1128, 53, 712, 309, 968, 565, 181, - 840, 437, 1096, 117, 776, 373, 1032, 648, 245, 904, 501, 1160, - 13, 672, 269, 928, 525, 141, 800, 397, 1056, 77, 736, 333, 992, - 608, 205, 864, 461, 1120, 45, 704, 301, 960, 557, 173, 832, - 429, 1088, 109, 768, 365, 1024, 640, 237, 896, 493, 1152, 592, - 29, 688, 285, 944, 541, 157, 816, 413, 1072, 93, 752, 349, - 1008, 624, 221, 880, 477, 1136, 61, 720, 317, 976, 573, 189, - 848, 445, 1104, 125, 784, 381, 1040, 656, 253, 912, 509, 1168, - 586, 3, 662, 259, 918, 515, 131, 790, 387, 1046, 67, 726, 323, - 982, 598, 195, 854, 451, 1110, 35, 694, 291, 950, 547, 163, - 822, 419, 1078, 99, 758, 355, 1014, 630, 227, 886, 483, 1142, - 579, 19, 678, 275, 934, 531, 147, 806, 403, 1062, 83, 742, 339, - 998, 614, 211, 870, 467, 1126, 51, 710, 307, 966, 563, 179, - 838, 435, 1094, 115, 774, 371, 1030, 646, 243, 902, 499, 1158, - 11, 670, 267, 926, 523, 139, 798, 395, 1054, 75, 734, 331, 990, - 606, 203, 862, 459, 1118, 43, 702, 299, 958, 555, 171, 830, - 427, 1086, 107, 766, 363, 1022, 638, 235, 894, 491, 1150, 590, - 27, 686, 283, 942, 539, 155, 814, 411, 1070, 91, 750, 347, - 1006, 622, 219, 878, 475, 1134, 59, 718, 315, 974, 571, 187, - 846, 443, 1102, 123, 782, 379, 1038, 654, 251, 910, 507, 1166, - 7, 666, 263, 922, 519, 135, 794, 391, 1050, 71, 730, 327, 986, - 602, 199, 858, 455, 1114, 39, 698, 295, 954, 551, 167, 826, - 423, 1082, 103, 762, 359, 1018, 634, 231, 890, 487, 1146, 583, - 23, 682, 279, 938, 535, 151, 810, 407, 1066, 87, 746, 343, - 1002, 618, 215, 874, 471, 1130, 55, 714, 311, 970, 567, 183, - 842, 439, 1098, 119, 778, 375, 1034, 650, 247, 906, 503, 1162, - 15, 674, 271, 930, 527, 143, 802, 399, 1058, 79, 738, 335, 994, - 610, 207, 866, 463, 1122, 47, 706, 303, 962, 559, 175, 834, - 431, 1090, 111, 770, 367, 1026, 642, 239, 898, 495, 1154, 594, - 31, 690, 287, 946, 543, 159, 818, 415, 1074, 95, 754, 351, - 1010, 626, 223, 882, 479, 1138, 63, 722, 319, 978, 575, 191, - 850, 447, 1106, 127, 786, 383, 1042, 658, 255, 914, 511, 1170]; - - return (unsafe { *PERM1171.get_unchecked((index % 1171) as usize) } as u32 * 1371241 + - unsafe { *PERM1171.get_unchecked(((index / 1171) % 1171) as usize) } as u32 * 1171 + - unsafe { - *PERM1171.get_unchecked(((index / 1371241) % 1171) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1605723211u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1181(index: u32) -> f32 { - const PERM1181: [u16; 1181] = [0, 669, 256, 925, 512, 128, 797, 384, 1053, 64, 733, 320, 989, - 605, 192, 861, 448, 1117, 32, 701, 288, 957, 544, 160, 829, - 416, 1085, 96, 765, 352, 1021, 637, 224, 893, 480, 1149, 576, - 16, 685, 272, 941, 528, 144, 813, 400, 1069, 80, 749, 336, - 1005, 621, 208, 877, 464, 1133, 48, 717, 304, 973, 560, 176, - 845, 432, 1101, 112, 781, 368, 1037, 653, 240, 909, 496, 1165, - 584, 8, 677, 264, 933, 520, 136, 805, 392, 1061, 72, 741, 328, - 997, 613, 200, 869, 456, 1125, 40, 709, 296, 965, 552, 168, - 837, 424, 1093, 104, 773, 360, 1029, 645, 232, 901, 488, 1157, - 597, 24, 693, 280, 949, 536, 152, 821, 408, 1077, 88, 757, 344, - 1013, 629, 216, 885, 472, 1141, 56, 725, 312, 981, 568, 184, - 853, 440, 1109, 120, 789, 376, 1045, 661, 248, 917, 504, 1173, - 588, 4, 673, 260, 929, 516, 132, 801, 388, 1057, 68, 737, 324, - 993, 609, 196, 865, 452, 1121, 36, 705, 292, 961, 548, 164, - 833, 420, 1089, 100, 769, 356, 1025, 641, 228, 897, 484, 1153, - 580, 20, 689, 276, 945, 532, 148, 817, 404, 1073, 84, 753, 340, - 1009, 625, 212, 881, 468, 1137, 52, 721, 308, 977, 564, 180, - 849, 436, 1105, 116, 785, 372, 1041, 657, 244, 913, 500, 1169, - 593, 12, 681, 268, 937, 524, 140, 809, 396, 1065, 76, 745, 332, - 1001, 617, 204, 873, 460, 1129, 44, 713, 300, 969, 556, 172, - 841, 428, 1097, 108, 777, 364, 1033, 649, 236, 905, 492, 1161, - 601, 28, 697, 284, 953, 540, 156, 825, 412, 1081, 92, 761, 348, - 1017, 633, 220, 889, 476, 1145, 60, 729, 316, 985, 572, 188, - 857, 444, 1113, 124, 793, 380, 1049, 665, 252, 921, 508, 1177, - 2, 671, 258, 927, 514, 130, 799, 386, 1055, 66, 735, 322, 991, - 607, 194, 863, 450, 1119, 34, 703, 290, 959, 546, 162, 831, - 418, 1087, 98, 767, 354, 1023, 639, 226, 895, 482, 1151, 578, - 18, 687, 274, 943, 530, 146, 815, 402, 1071, 82, 751, 338, - 1007, 623, 210, 879, 466, 1135, 50, 719, 306, 975, 562, 178, - 847, 434, 1103, 114, 783, 370, 1039, 655, 242, 911, 498, 1167, - 586, 10, 679, 266, 935, 522, 138, 807, 394, 1063, 74, 743, 330, - 999, 615, 202, 871, 458, 1127, 42, 711, 298, 967, 554, 170, - 839, 426, 1095, 106, 775, 362, 1031, 647, 234, 903, 490, 1159, - 599, 26, 695, 282, 951, 538, 154, 823, 410, 1079, 90, 759, 346, - 1015, 631, 218, 887, 474, 1143, 58, 727, 314, 983, 570, 186, - 855, 442, 1111, 122, 791, 378, 1047, 663, 250, 919, 506, 1175, - 591, 6, 675, 262, 931, 518, 134, 803, 390, 1059, 70, 739, 326, - 995, 611, 198, 867, 454, 1123, 38, 707, 294, 963, 550, 166, - 835, 422, 1091, 102, 771, 358, 1027, 643, 230, 899, 486, 1155, - 582, 22, 691, 278, 947, 534, 150, 819, 406, 1075, 86, 755, 342, - 1011, 627, 214, 883, 470, 1139, 54, 723, 310, 979, 566, 182, - 851, 438, 1107, 118, 787, 374, 1043, 659, 246, 915, 502, 1171, - 595, 14, 683, 270, 939, 526, 142, 811, 398, 1067, 78, 747, 334, - 1003, 619, 206, 875, 462, 1131, 46, 715, 302, 971, 558, 174, - 843, 430, 1099, 110, 779, 366, 1035, 651, 238, 907, 494, 1163, - 603, 30, 699, 286, 955, 542, 158, 827, 414, 1083, 94, 763, 350, - 1019, 635, 222, 891, 478, 1147, 62, 731, 318, 987, 574, 190, - 859, 446, 1115, 126, 795, 382, 1051, 667, 254, 923, 510, 1179, - 590, 1, 670, 257, 926, 513, 129, 798, 385, 1054, 65, 734, 321, - 990, 606, 193, 862, 449, 1118, 33, 702, 289, 958, 545, 161, - 830, 417, 1086, 97, 766, 353, 1022, 638, 225, 894, 481, 1150, - 577, 17, 686, 273, 942, 529, 145, 814, 401, 1070, 81, 750, 337, - 1006, 622, 209, 878, 465, 1134, 49, 718, 305, 974, 561, 177, - 846, 433, 1102, 113, 782, 369, 1038, 654, 241, 910, 497, 1166, - 585, 9, 678, 265, 934, 521, 137, 806, 393, 1062, 73, 742, 329, - 998, 614, 201, 870, 457, 1126, 41, 710, 297, 966, 553, 169, - 838, 425, 1094, 105, 774, 361, 1030, 646, 233, 902, 489, 1158, - 598, 25, 694, 281, 950, 537, 153, 822, 409, 1078, 89, 758, 345, - 1014, 630, 217, 886, 473, 1142, 57, 726, 313, 982, 569, 185, - 854, 441, 1110, 121, 790, 377, 1046, 662, 249, 918, 505, 1174, - 589, 5, 674, 261, 930, 517, 133, 802, 389, 1058, 69, 738, 325, - 994, 610, 197, 866, 453, 1122, 37, 706, 293, 962, 549, 165, - 834, 421, 1090, 101, 770, 357, 1026, 642, 229, 898, 485, 1154, - 581, 21, 690, 277, 946, 533, 149, 818, 405, 1074, 85, 754, 341, - 1010, 626, 213, 882, 469, 1138, 53, 722, 309, 978, 565, 181, - 850, 437, 1106, 117, 786, 373, 1042, 658, 245, 914, 501, 1170, - 594, 13, 682, 269, 938, 525, 141, 810, 397, 1066, 77, 746, 333, - 1002, 618, 205, 874, 461, 1130, 45, 714, 301, 970, 557, 173, - 842, 429, 1098, 109, 778, 365, 1034, 650, 237, 906, 493, 1162, - 602, 29, 698, 285, 954, 541, 157, 826, 413, 1082, 93, 762, 349, - 1018, 634, 221, 890, 477, 1146, 61, 730, 317, 986, 573, 189, - 858, 445, 1114, 125, 794, 381, 1050, 666, 253, 922, 509, 1178, - 3, 672, 259, 928, 515, 131, 800, 387, 1056, 67, 736, 323, 992, - 608, 195, 864, 451, 1120, 35, 704, 291, 960, 547, 163, 832, - 419, 1088, 99, 768, 355, 1024, 640, 227, 896, 483, 1152, 579, - 19, 688, 275, 944, 531, 147, 816, 403, 1072, 83, 752, 339, - 1008, 624, 211, 880, 467, 1136, 51, 720, 307, 976, 563, 179, - 848, 435, 1104, 115, 784, 371, 1040, 656, 243, 912, 499, 1168, - 587, 11, 680, 267, 936, 523, 139, 808, 395, 1064, 75, 744, 331, - 1000, 616, 203, 872, 459, 1128, 43, 712, 299, 968, 555, 171, - 840, 427, 1096, 107, 776, 363, 1032, 648, 235, 904, 491, 1160, - 600, 27, 696, 283, 952, 539, 155, 824, 411, 1080, 91, 760, 347, - 1016, 632, 219, 888, 475, 1144, 59, 728, 315, 984, 571, 187, - 856, 443, 1112, 123, 792, 379, 1048, 664, 251, 920, 507, 1176, - 592, 7, 676, 263, 932, 519, 135, 804, 391, 1060, 71, 740, 327, - 996, 612, 199, 868, 455, 1124, 39, 708, 295, 964, 551, 167, - 836, 423, 1092, 103, 772, 359, 1028, 644, 231, 900, 487, 1156, - 583, 23, 692, 279, 948, 535, 151, 820, 407, 1076, 87, 756, 343, - 1012, 628, 215, 884, 471, 1140, 55, 724, 311, 980, 567, 183, - 852, 439, 1108, 119, 788, 375, 1044, 660, 247, 916, 503, 1172, - 596, 15, 684, 271, 940, 527, 143, 812, 399, 1068, 79, 748, 335, - 1004, 620, 207, 876, 463, 1132, 47, 716, 303, 972, 559, 175, - 844, 431, 1100, 111, 780, 367, 1036, 652, 239, 908, 495, 1164, - 604, 31, 700, 287, 956, 543, 159, 828, 415, 1084, 95, 764, 351, - 1020, 636, 223, 892, 479, 1148, 63, 732, 319, 988, 575, 191, - 860, 447, 1116, 127, 796, 383, 1052, 668, 255, 924, 511, 1180]; - - return (unsafe { *PERM1181.get_unchecked((index % 1181) as usize) } as u32 * 1394761 + - unsafe { *PERM1181.get_unchecked(((index / 1181) % 1181) as usize) } as u32 * 1181 + - unsafe { - *PERM1181.get_unchecked(((index / 1394761) % 1181) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1647212741u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1187(index: u32) -> f32 { - const PERM1187: [u16; 1187] = [0, 675, 256, 931, 512, 128, 803, 384, 1059, 64, 739, 320, 995, - 611, 192, 867, 448, 1123, 576, 32, 707, 288, 963, 544, 160, - 835, 416, 1091, 96, 771, 352, 1027, 643, 224, 899, 480, 1155, - 16, 691, 272, 947, 528, 144, 819, 400, 1075, 80, 755, 336, - 1011, 627, 208, 883, 464, 1139, 595, 48, 723, 304, 979, 560, - 176, 851, 432, 1107, 112, 787, 368, 1043, 659, 240, 915, 496, - 1171, 8, 683, 264, 939, 520, 136, 811, 392, 1067, 72, 747, 328, - 1003, 619, 200, 875, 456, 1131, 584, 40, 715, 296, 971, 552, - 168, 843, 424, 1099, 104, 779, 360, 1035, 651, 232, 907, 488, - 1163, 24, 699, 280, 955, 536, 152, 827, 408, 1083, 88, 763, - 344, 1019, 635, 216, 891, 472, 1147, 603, 56, 731, 312, 987, - 568, 184, 859, 440, 1115, 120, 795, 376, 1051, 667, 248, 923, - 504, 1179, 4, 679, 260, 935, 516, 132, 807, 388, 1063, 68, 743, - 324, 999, 615, 196, 871, 452, 1127, 580, 36, 711, 292, 967, - 548, 164, 839, 420, 1095, 100, 775, 356, 1031, 647, 228, 903, - 484, 1159, 20, 695, 276, 951, 532, 148, 823, 404, 1079, 84, - 759, 340, 1015, 631, 212, 887, 468, 1143, 599, 52, 727, 308, - 983, 564, 180, 855, 436, 1111, 116, 791, 372, 1047, 663, 244, - 919, 500, 1175, 12, 687, 268, 943, 524, 140, 815, 396, 1071, - 76, 751, 332, 1007, 623, 204, 879, 460, 1135, 588, 44, 719, - 300, 975, 556, 172, 847, 428, 1103, 108, 783, 364, 1039, 655, - 236, 911, 492, 1167, 28, 703, 284, 959, 540, 156, 831, 412, - 1087, 92, 767, 348, 1023, 639, 220, 895, 476, 1151, 607, 60, - 735, 316, 991, 572, 188, 863, 444, 1119, 124, 799, 380, 1055, - 671, 252, 927, 508, 1183, 592, 2, 677, 258, 933, 514, 130, 805, - 386, 1061, 66, 741, 322, 997, 613, 194, 869, 450, 1125, 578, - 34, 709, 290, 965, 546, 162, 837, 418, 1093, 98, 773, 354, - 1029, 645, 226, 901, 482, 1157, 18, 693, 274, 949, 530, 146, - 821, 402, 1077, 82, 757, 338, 1013, 629, 210, 885, 466, 1141, - 597, 50, 725, 306, 981, 562, 178, 853, 434, 1109, 114, 789, - 370, 1045, 661, 242, 917, 498, 1173, 10, 685, 266, 941, 522, - 138, 813, 394, 1069, 74, 749, 330, 1005, 621, 202, 877, 458, - 1133, 586, 42, 717, 298, 973, 554, 170, 845, 426, 1101, 106, - 781, 362, 1037, 653, 234, 909, 490, 1165, 26, 701, 282, 957, - 538, 154, 829, 410, 1085, 90, 765, 346, 1021, 637, 218, 893, - 474, 1149, 605, 58, 733, 314, 989, 570, 186, 861, 442, 1117, - 122, 797, 378, 1053, 669, 250, 925, 506, 1181, 6, 681, 262, - 937, 518, 134, 809, 390, 1065, 70, 745, 326, 1001, 617, 198, - 873, 454, 1129, 582, 38, 713, 294, 969, 550, 166, 841, 422, - 1097, 102, 777, 358, 1033, 649, 230, 905, 486, 1161, 22, 697, - 278, 953, 534, 150, 825, 406, 1081, 86, 761, 342, 1017, 633, - 214, 889, 470, 1145, 601, 54, 729, 310, 985, 566, 182, 857, - 438, 1113, 118, 793, 374, 1049, 665, 246, 921, 502, 1177, 14, - 689, 270, 945, 526, 142, 817, 398, 1073, 78, 753, 334, 1009, - 625, 206, 881, 462, 1137, 590, 46, 721, 302, 977, 558, 174, - 849, 430, 1105, 110, 785, 366, 1041, 657, 238, 913, 494, 1169, - 30, 705, 286, 961, 542, 158, 833, 414, 1089, 94, 769, 350, - 1025, 641, 222, 897, 478, 1153, 609, 62, 737, 318, 993, 574, - 190, 865, 446, 1121, 126, 801, 382, 1057, 673, 254, 929, 510, - 1185, 593, 1, 676, 257, 932, 513, 129, 804, 385, 1060, 65, 740, - 321, 996, 612, 193, 868, 449, 1124, 577, 33, 708, 289, 964, - 545, 161, 836, 417, 1092, 97, 772, 353, 1028, 644, 225, 900, - 481, 1156, 17, 692, 273, 948, 529, 145, 820, 401, 1076, 81, - 756, 337, 1012, 628, 209, 884, 465, 1140, 596, 49, 724, 305, - 980, 561, 177, 852, 433, 1108, 113, 788, 369, 1044, 660, 241, - 916, 497, 1172, 9, 684, 265, 940, 521, 137, 812, 393, 1068, 73, - 748, 329, 1004, 620, 201, 876, 457, 1132, 585, 41, 716, 297, - 972, 553, 169, 844, 425, 1100, 105, 780, 361, 1036, 652, 233, - 908, 489, 1164, 25, 700, 281, 956, 537, 153, 828, 409, 1084, - 89, 764, 345, 1020, 636, 217, 892, 473, 1148, 604, 57, 732, - 313, 988, 569, 185, 860, 441, 1116, 121, 796, 377, 1052, 668, - 249, 924, 505, 1180, 5, 680, 261, 936, 517, 133, 808, 389, - 1064, 69, 744, 325, 1000, 616, 197, 872, 453, 1128, 581, 37, - 712, 293, 968, 549, 165, 840, 421, 1096, 101, 776, 357, 1032, - 648, 229, 904, 485, 1160, 21, 696, 277, 952, 533, 149, 824, - 405, 1080, 85, 760, 341, 1016, 632, 213, 888, 469, 1144, 600, - 53, 728, 309, 984, 565, 181, 856, 437, 1112, 117, 792, 373, - 1048, 664, 245, 920, 501, 1176, 13, 688, 269, 944, 525, 141, - 816, 397, 1072, 77, 752, 333, 1008, 624, 205, 880, 461, 1136, - 589, 45, 720, 301, 976, 557, 173, 848, 429, 1104, 109, 784, - 365, 1040, 656, 237, 912, 493, 1168, 29, 704, 285, 960, 541, - 157, 832, 413, 1088, 93, 768, 349, 1024, 640, 221, 896, 477, - 1152, 608, 61, 736, 317, 992, 573, 189, 864, 445, 1120, 125, - 800, 381, 1056, 672, 253, 928, 509, 1184, 594, 3, 678, 259, - 934, 515, 131, 806, 387, 1062, 67, 742, 323, 998, 614, 195, - 870, 451, 1126, 579, 35, 710, 291, 966, 547, 163, 838, 419, - 1094, 99, 774, 355, 1030, 646, 227, 902, 483, 1158, 19, 694, - 275, 950, 531, 147, 822, 403, 1078, 83, 758, 339, 1014, 630, - 211, 886, 467, 1142, 598, 51, 726, 307, 982, 563, 179, 854, - 435, 1110, 115, 790, 371, 1046, 662, 243, 918, 499, 1174, 11, - 686, 267, 942, 523, 139, 814, 395, 1070, 75, 750, 331, 1006, - 622, 203, 878, 459, 1134, 587, 43, 718, 299, 974, 555, 171, - 846, 427, 1102, 107, 782, 363, 1038, 654, 235, 910, 491, 1166, - 27, 702, 283, 958, 539, 155, 830, 411, 1086, 91, 766, 347, - 1022, 638, 219, 894, 475, 1150, 606, 59, 734, 315, 990, 571, - 187, 862, 443, 1118, 123, 798, 379, 1054, 670, 251, 926, 507, - 1182, 7, 682, 263, 938, 519, 135, 810, 391, 1066, 71, 746, 327, - 1002, 618, 199, 874, 455, 1130, 583, 39, 714, 295, 970, 551, - 167, 842, 423, 1098, 103, 778, 359, 1034, 650, 231, 906, 487, - 1162, 23, 698, 279, 954, 535, 151, 826, 407, 1082, 87, 762, - 343, 1018, 634, 215, 890, 471, 1146, 602, 55, 730, 311, 986, - 567, 183, 858, 439, 1114, 119, 794, 375, 1050, 666, 247, 922, - 503, 1178, 15, 690, 271, 946, 527, 143, 818, 399, 1074, 79, - 754, 335, 1010, 626, 207, 882, 463, 1138, 591, 47, 722, 303, - 978, 559, 175, 850, 431, 1106, 111, 786, 367, 1042, 658, 239, - 914, 495, 1170, 31, 706, 287, 962, 543, 159, 834, 415, 1090, - 95, 770, 351, 1026, 642, 223, 898, 479, 1154, 610, 63, 738, - 319, 994, 575, 191, 866, 447, 1122, 127, 802, 383, 1058, 674, - 255, 930, 511, 1186]; - - return (unsafe { *PERM1187.get_unchecked((index % 1187) as usize) } as u32 * 1408969 + - unsafe { *PERM1187.get_unchecked(((index / 1187) % 1187) as usize) } as u32 * 1187 + - unsafe { - *PERM1187.get_unchecked(((index / 1408969) % 1187) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1672446203u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1193(index: u32) -> f32 { - const PERM1193: [u16; 1193] = [0, 681, 256, 937, 512, 128, 809, 384, 1065, 64, 745, 320, 1001, - 617, 192, 873, 448, 1129, 576, 32, 713, 288, 969, 544, 160, - 841, 416, 1097, 96, 777, 352, 1033, 649, 224, 905, 480, 1161, - 16, 697, 272, 953, 528, 144, 825, 400, 1081, 80, 761, 336, - 1017, 633, 208, 889, 464, 1145, 601, 48, 729, 304, 985, 560, - 176, 857, 432, 1113, 112, 793, 368, 1049, 665, 240, 921, 496, - 1177, 592, 8, 689, 264, 945, 520, 136, 817, 392, 1073, 72, 753, - 328, 1009, 625, 200, 881, 456, 1137, 584, 40, 721, 296, 977, - 552, 168, 849, 424, 1105, 104, 785, 360, 1041, 657, 232, 913, - 488, 1169, 24, 705, 280, 961, 536, 152, 833, 408, 1089, 88, - 769, 344, 1025, 641, 216, 897, 472, 1153, 609, 56, 737, 312, - 993, 568, 184, 865, 440, 1121, 120, 801, 376, 1057, 673, 248, - 929, 504, 1185, 4, 685, 260, 941, 516, 132, 813, 388, 1069, 68, - 749, 324, 1005, 621, 196, 877, 452, 1133, 580, 36, 717, 292, - 973, 548, 164, 845, 420, 1101, 100, 781, 356, 1037, 653, 228, - 909, 484, 1165, 20, 701, 276, 957, 532, 148, 829, 404, 1085, - 84, 765, 340, 1021, 637, 212, 893, 468, 1149, 605, 52, 733, - 308, 989, 564, 180, 861, 436, 1117, 116, 797, 372, 1053, 669, - 244, 925, 500, 1181, 597, 12, 693, 268, 949, 524, 140, 821, - 396, 1077, 76, 757, 332, 1013, 629, 204, 885, 460, 1141, 588, - 44, 725, 300, 981, 556, 172, 853, 428, 1109, 108, 789, 364, - 1045, 661, 236, 917, 492, 1173, 28, 709, 284, 965, 540, 156, - 837, 412, 1093, 92, 773, 348, 1029, 645, 220, 901, 476, 1157, - 613, 60, 741, 316, 997, 572, 188, 869, 444, 1125, 124, 805, - 380, 1061, 677, 252, 933, 508, 1189, 2, 683, 258, 939, 514, - 130, 811, 386, 1067, 66, 747, 322, 1003, 619, 194, 875, 450, - 1131, 578, 34, 715, 290, 971, 546, 162, 843, 418, 1099, 98, - 779, 354, 1035, 651, 226, 907, 482, 1163, 18, 699, 274, 955, - 530, 146, 827, 402, 1083, 82, 763, 338, 1019, 635, 210, 891, - 466, 1147, 603, 50, 731, 306, 987, 562, 178, 859, 434, 1115, - 114, 795, 370, 1051, 667, 242, 923, 498, 1179, 594, 10, 691, - 266, 947, 522, 138, 819, 394, 1075, 74, 755, 330, 1011, 627, - 202, 883, 458, 1139, 586, 42, 723, 298, 979, 554, 170, 851, - 426, 1107, 106, 787, 362, 1043, 659, 234, 915, 490, 1171, 26, - 707, 282, 963, 538, 154, 835, 410, 1091, 90, 771, 346, 1027, - 643, 218, 899, 474, 1155, 611, 58, 739, 314, 995, 570, 186, - 867, 442, 1123, 122, 803, 378, 1059, 675, 250, 931, 506, 1187, - 6, 687, 262, 943, 518, 134, 815, 390, 1071, 70, 751, 326, 1007, - 623, 198, 879, 454, 1135, 582, 38, 719, 294, 975, 550, 166, - 847, 422, 1103, 102, 783, 358, 1039, 655, 230, 911, 486, 1167, - 22, 703, 278, 959, 534, 150, 831, 406, 1087, 86, 767, 342, - 1023, 639, 214, 895, 470, 1151, 607, 54, 735, 310, 991, 566, - 182, 863, 438, 1119, 118, 799, 374, 1055, 671, 246, 927, 502, - 1183, 599, 14, 695, 270, 951, 526, 142, 823, 398, 1079, 78, - 759, 334, 1015, 631, 206, 887, 462, 1143, 590, 46, 727, 302, - 983, 558, 174, 855, 430, 1111, 110, 791, 366, 1047, 663, 238, - 919, 494, 1175, 30, 711, 286, 967, 542, 158, 839, 414, 1095, - 94, 775, 350, 1031, 647, 222, 903, 478, 1159, 615, 62, 743, - 318, 999, 574, 190, 871, 446, 1127, 126, 807, 382, 1063, 679, - 254, 935, 510, 1191, 596, 1, 682, 257, 938, 513, 129, 810, 385, - 1066, 65, 746, 321, 1002, 618, 193, 874, 449, 1130, 577, 33, - 714, 289, 970, 545, 161, 842, 417, 1098, 97, 778, 353, 1034, - 650, 225, 906, 481, 1162, 17, 698, 273, 954, 529, 145, 826, - 401, 1082, 81, 762, 337, 1018, 634, 209, 890, 465, 1146, 602, - 49, 730, 305, 986, 561, 177, 858, 433, 1114, 113, 794, 369, - 1050, 666, 241, 922, 497, 1178, 593, 9, 690, 265, 946, 521, - 137, 818, 393, 1074, 73, 754, 329, 1010, 626, 201, 882, 457, - 1138, 585, 41, 722, 297, 978, 553, 169, 850, 425, 1106, 105, - 786, 361, 1042, 658, 233, 914, 489, 1170, 25, 706, 281, 962, - 537, 153, 834, 409, 1090, 89, 770, 345, 1026, 642, 217, 898, - 473, 1154, 610, 57, 738, 313, 994, 569, 185, 866, 441, 1122, - 121, 802, 377, 1058, 674, 249, 930, 505, 1186, 5, 686, 261, - 942, 517, 133, 814, 389, 1070, 69, 750, 325, 1006, 622, 197, - 878, 453, 1134, 581, 37, 718, 293, 974, 549, 165, 846, 421, - 1102, 101, 782, 357, 1038, 654, 229, 910, 485, 1166, 21, 702, - 277, 958, 533, 149, 830, 405, 1086, 85, 766, 341, 1022, 638, - 213, 894, 469, 1150, 606, 53, 734, 309, 990, 565, 181, 862, - 437, 1118, 117, 798, 373, 1054, 670, 245, 926, 501, 1182, 598, - 13, 694, 269, 950, 525, 141, 822, 397, 1078, 77, 758, 333, - 1014, 630, 205, 886, 461, 1142, 589, 45, 726, 301, 982, 557, - 173, 854, 429, 1110, 109, 790, 365, 1046, 662, 237, 918, 493, - 1174, 29, 710, 285, 966, 541, 157, 838, 413, 1094, 93, 774, - 349, 1030, 646, 221, 902, 477, 1158, 614, 61, 742, 317, 998, - 573, 189, 870, 445, 1126, 125, 806, 381, 1062, 678, 253, 934, - 509, 1190, 3, 684, 259, 940, 515, 131, 812, 387, 1068, 67, 748, - 323, 1004, 620, 195, 876, 451, 1132, 579, 35, 716, 291, 972, - 547, 163, 844, 419, 1100, 99, 780, 355, 1036, 652, 227, 908, - 483, 1164, 19, 700, 275, 956, 531, 147, 828, 403, 1084, 83, - 764, 339, 1020, 636, 211, 892, 467, 1148, 604, 51, 732, 307, - 988, 563, 179, 860, 435, 1116, 115, 796, 371, 1052, 668, 243, - 924, 499, 1180, 595, 11, 692, 267, 948, 523, 139, 820, 395, - 1076, 75, 756, 331, 1012, 628, 203, 884, 459, 1140, 587, 43, - 724, 299, 980, 555, 171, 852, 427, 1108, 107, 788, 363, 1044, - 660, 235, 916, 491, 1172, 27, 708, 283, 964, 539, 155, 836, - 411, 1092, 91, 772, 347, 1028, 644, 219, 900, 475, 1156, 612, - 59, 740, 315, 996, 571, 187, 868, 443, 1124, 123, 804, 379, - 1060, 676, 251, 932, 507, 1188, 7, 688, 263, 944, 519, 135, - 816, 391, 1072, 71, 752, 327, 1008, 624, 199, 880, 455, 1136, - 583, 39, 720, 295, 976, 551, 167, 848, 423, 1104, 103, 784, - 359, 1040, 656, 231, 912, 487, 1168, 23, 704, 279, 960, 535, - 151, 832, 407, 1088, 87, 768, 343, 1024, 640, 215, 896, 471, - 1152, 608, 55, 736, 311, 992, 567, 183, 864, 439, 1120, 119, - 800, 375, 1056, 672, 247, 928, 503, 1184, 600, 15, 696, 271, - 952, 527, 143, 824, 399, 1080, 79, 760, 335, 1016, 632, 207, - 888, 463, 1144, 591, 47, 728, 303, 984, 559, 175, 856, 431, - 1112, 111, 792, 367, 1048, 664, 239, 920, 495, 1176, 31, 712, - 287, 968, 543, 159, 840, 415, 1096, 95, 776, 351, 1032, 648, - 223, 904, 479, 1160, 616, 63, 744, 319, 1000, 575, 191, 872, - 447, 1128, 127, 808, 383, 1064, 680, 255, 936, 511, 1192]; - - return (unsafe { *PERM1193.get_unchecked((index % 1193) as usize) } as u32 * 1423249 + - unsafe { *PERM1193.get_unchecked(((index / 1193) % 1193) as usize) } as u32 * 1193 + - unsafe { - *PERM1193.get_unchecked(((index / 1423249) % 1193) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1697936057u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1201(index: u32) -> f32 { - const PERM1201: [u16; 1201] = [0, 689, 256, 945, 512, 128, 817, 384, 1073, 64, 753, 320, 1009, - 625, 192, 881, 448, 1137, 576, 32, 721, 288, 977, 544, 160, - 849, 416, 1105, 96, 785, 352, 1041, 657, 224, 913, 480, 1169, - 592, 16, 705, 272, 961, 528, 144, 833, 400, 1089, 80, 769, 336, - 1025, 641, 208, 897, 464, 1153, 609, 48, 737, 304, 993, 560, - 176, 865, 432, 1121, 112, 801, 368, 1057, 673, 240, 929, 496, - 1185, 8, 697, 264, 953, 520, 136, 825, 392, 1081, 72, 761, 328, - 1017, 633, 200, 889, 456, 1145, 584, 40, 729, 296, 985, 552, - 168, 857, 424, 1113, 104, 793, 360, 1049, 665, 232, 921, 488, - 1177, 601, 24, 713, 280, 969, 536, 152, 841, 408, 1097, 88, - 777, 344, 1033, 649, 216, 905, 472, 1161, 617, 56, 745, 312, - 1001, 568, 184, 873, 440, 1129, 120, 809, 376, 1065, 681, 248, - 937, 504, 1193, 4, 693, 260, 949, 516, 132, 821, 388, 1077, 68, - 757, 324, 1013, 629, 196, 885, 452, 1141, 580, 36, 725, 292, - 981, 548, 164, 853, 420, 1109, 100, 789, 356, 1045, 661, 228, - 917, 484, 1173, 596, 20, 709, 276, 965, 532, 148, 837, 404, - 1093, 84, 773, 340, 1029, 645, 212, 901, 468, 1157, 613, 52, - 741, 308, 997, 564, 180, 869, 436, 1125, 116, 805, 372, 1061, - 677, 244, 933, 500, 1189, 12, 701, 268, 957, 524, 140, 829, - 396, 1085, 76, 765, 332, 1021, 637, 204, 893, 460, 1149, 588, - 44, 733, 300, 989, 556, 172, 861, 428, 1117, 108, 797, 364, - 1053, 669, 236, 925, 492, 1181, 605, 28, 717, 284, 973, 540, - 156, 845, 412, 1101, 92, 781, 348, 1037, 653, 220, 909, 476, - 1165, 621, 60, 749, 316, 1005, 572, 188, 877, 444, 1133, 124, - 813, 380, 1069, 685, 252, 941, 508, 1197, 2, 691, 258, 947, - 514, 130, 819, 386, 1075, 66, 755, 322, 1011, 627, 194, 883, - 450, 1139, 578, 34, 723, 290, 979, 546, 162, 851, 418, 1107, - 98, 787, 354, 1043, 659, 226, 915, 482, 1171, 594, 18, 707, - 274, 963, 530, 146, 835, 402, 1091, 82, 771, 338, 1027, 643, - 210, 899, 466, 1155, 611, 50, 739, 306, 995, 562, 178, 867, - 434, 1123, 114, 803, 370, 1059, 675, 242, 931, 498, 1187, 10, - 699, 266, 955, 522, 138, 827, 394, 1083, 74, 763, 330, 1019, - 635, 202, 891, 458, 1147, 586, 42, 731, 298, 987, 554, 170, - 859, 426, 1115, 106, 795, 362, 1051, 667, 234, 923, 490, 1179, - 603, 26, 715, 282, 971, 538, 154, 843, 410, 1099, 90, 779, 346, - 1035, 651, 218, 907, 474, 1163, 619, 58, 747, 314, 1003, 570, - 186, 875, 442, 1131, 122, 811, 378, 1067, 683, 250, 939, 506, - 1195, 6, 695, 262, 951, 518, 134, 823, 390, 1079, 70, 759, 326, - 1015, 631, 198, 887, 454, 1143, 582, 38, 727, 294, 983, 550, - 166, 855, 422, 1111, 102, 791, 358, 1047, 663, 230, 919, 486, - 1175, 598, 22, 711, 278, 967, 534, 150, 839, 406, 1095, 86, - 775, 342, 1031, 647, 214, 903, 470, 1159, 615, 54, 743, 310, - 999, 566, 182, 871, 438, 1127, 118, 807, 374, 1063, 679, 246, - 935, 502, 1191, 14, 703, 270, 959, 526, 142, 831, 398, 1087, - 78, 767, 334, 1023, 639, 206, 895, 462, 1151, 590, 46, 735, - 302, 991, 558, 174, 863, 430, 1119, 110, 799, 366, 1055, 671, - 238, 927, 494, 1183, 607, 30, 719, 286, 975, 542, 158, 847, - 414, 1103, 94, 783, 350, 1039, 655, 222, 911, 478, 1167, 623, - 62, 751, 318, 1007, 574, 190, 879, 446, 1135, 126, 815, 382, - 1071, 687, 254, 943, 510, 1199, 600, 1, 690, 257, 946, 513, - 129, 818, 385, 1074, 65, 754, 321, 1010, 626, 193, 882, 449, - 1138, 577, 33, 722, 289, 978, 545, 161, 850, 417, 1106, 97, - 786, 353, 1042, 658, 225, 914, 481, 1170, 593, 17, 706, 273, - 962, 529, 145, 834, 401, 1090, 81, 770, 337, 1026, 642, 209, - 898, 465, 1154, 610, 49, 738, 305, 994, 561, 177, 866, 433, - 1122, 113, 802, 369, 1058, 674, 241, 930, 497, 1186, 9, 698, - 265, 954, 521, 137, 826, 393, 1082, 73, 762, 329, 1018, 634, - 201, 890, 457, 1146, 585, 41, 730, 297, 986, 553, 169, 858, - 425, 1114, 105, 794, 361, 1050, 666, 233, 922, 489, 1178, 602, - 25, 714, 281, 970, 537, 153, 842, 409, 1098, 89, 778, 345, - 1034, 650, 217, 906, 473, 1162, 618, 57, 746, 313, 1002, 569, - 185, 874, 441, 1130, 121, 810, 377, 1066, 682, 249, 938, 505, - 1194, 5, 694, 261, 950, 517, 133, 822, 389, 1078, 69, 758, 325, - 1014, 630, 197, 886, 453, 1142, 581, 37, 726, 293, 982, 549, - 165, 854, 421, 1110, 101, 790, 357, 1046, 662, 229, 918, 485, - 1174, 597, 21, 710, 277, 966, 533, 149, 838, 405, 1094, 85, - 774, 341, 1030, 646, 213, 902, 469, 1158, 614, 53, 742, 309, - 998, 565, 181, 870, 437, 1126, 117, 806, 373, 1062, 678, 245, - 934, 501, 1190, 13, 702, 269, 958, 525, 141, 830, 397, 1086, - 77, 766, 333, 1022, 638, 205, 894, 461, 1150, 589, 45, 734, - 301, 990, 557, 173, 862, 429, 1118, 109, 798, 365, 1054, 670, - 237, 926, 493, 1182, 606, 29, 718, 285, 974, 541, 157, 846, - 413, 1102, 93, 782, 349, 1038, 654, 221, 910, 477, 1166, 622, - 61, 750, 317, 1006, 573, 189, 878, 445, 1134, 125, 814, 381, - 1070, 686, 253, 942, 509, 1198, 3, 692, 259, 948, 515, 131, - 820, 387, 1076, 67, 756, 323, 1012, 628, 195, 884, 451, 1140, - 579, 35, 724, 291, 980, 547, 163, 852, 419, 1108, 99, 788, 355, - 1044, 660, 227, 916, 483, 1172, 595, 19, 708, 275, 964, 531, - 147, 836, 403, 1092, 83, 772, 339, 1028, 644, 211, 900, 467, - 1156, 612, 51, 740, 307, 996, 563, 179, 868, 435, 1124, 115, - 804, 371, 1060, 676, 243, 932, 499, 1188, 11, 700, 267, 956, - 523, 139, 828, 395, 1084, 75, 764, 331, 1020, 636, 203, 892, - 459, 1148, 587, 43, 732, 299, 988, 555, 171, 860, 427, 1116, - 107, 796, 363, 1052, 668, 235, 924, 491, 1180, 604, 27, 716, - 283, 972, 539, 155, 844, 411, 1100, 91, 780, 347, 1036, 652, - 219, 908, 475, 1164, 620, 59, 748, 315, 1004, 571, 187, 876, - 443, 1132, 123, 812, 379, 1068, 684, 251, 940, 507, 1196, 7, - 696, 263, 952, 519, 135, 824, 391, 1080, 71, 760, 327, 1016, - 632, 199, 888, 455, 1144, 583, 39, 728, 295, 984, 551, 167, - 856, 423, 1112, 103, 792, 359, 1048, 664, 231, 920, 487, 1176, - 599, 23, 712, 279, 968, 535, 151, 840, 407, 1096, 87, 776, 343, - 1032, 648, 215, 904, 471, 1160, 616, 55, 744, 311, 1000, 567, - 183, 872, 439, 1128, 119, 808, 375, 1064, 680, 247, 936, 503, - 1192, 15, 704, 271, 960, 527, 143, 832, 399, 1088, 79, 768, - 335, 1024, 640, 207, 896, 463, 1152, 591, 47, 736, 303, 992, - 559, 175, 864, 431, 1120, 111, 800, 367, 1056, 672, 239, 928, - 495, 1184, 608, 31, 720, 287, 976, 543, 159, 848, 415, 1104, - 95, 784, 351, 1040, 656, 223, 912, 479, 1168, 624, 63, 752, - 319, 1008, 575, 191, 880, 447, 1136, 127, 816, 383, 1072, 688, - 255, 944, 511, 1200]; - - return (unsafe { *PERM1201.get_unchecked((index % 1201) as usize) } as u32 * 1442401 + - unsafe { *PERM1201.get_unchecked(((index / 1201) % 1201) as usize) } as u32 * 1201 + - unsafe { - *PERM1201.get_unchecked(((index / 1442401) % 1201) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1732323601u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1213(index: u32) -> f32 { - const PERM1213: [u16; 1213] = [0, 701, 256, 957, 512, 128, 829, 384, 1085, 64, 765, 320, 1021, - 637, 192, 893, 448, 1149, 576, 32, 733, 288, 989, 544, 160, - 861, 416, 1117, 96, 797, 352, 1053, 669, 224, 925, 480, 1181, - 592, 16, 717, 272, 973, 528, 144, 845, 400, 1101, 80, 781, 336, - 1037, 653, 208, 909, 464, 1165, 621, 48, 749, 304, 1005, 560, - 176, 877, 432, 1133, 112, 813, 368, 1069, 685, 240, 941, 496, - 1197, 600, 8, 709, 264, 965, 520, 136, 837, 392, 1093, 72, 773, - 328, 1029, 645, 200, 901, 456, 1157, 584, 40, 741, 296, 997, - 552, 168, 869, 424, 1125, 104, 805, 360, 1061, 677, 232, 933, - 488, 1189, 613, 24, 725, 280, 981, 536, 152, 853, 408, 1109, - 88, 789, 344, 1045, 661, 216, 917, 472, 1173, 629, 56, 757, - 312, 1013, 568, 184, 885, 440, 1141, 120, 821, 376, 1077, 693, - 248, 949, 504, 1205, 604, 4, 705, 260, 961, 516, 132, 833, 388, - 1089, 68, 769, 324, 1025, 641, 196, 897, 452, 1153, 580, 36, - 737, 292, 993, 548, 164, 865, 420, 1121, 100, 801, 356, 1057, - 673, 228, 929, 484, 1185, 596, 20, 721, 276, 977, 532, 148, - 849, 404, 1105, 84, 785, 340, 1041, 657, 212, 913, 468, 1169, - 625, 52, 753, 308, 1009, 564, 180, 881, 436, 1137, 116, 817, - 372, 1073, 689, 244, 945, 500, 1201, 609, 12, 713, 268, 969, - 524, 140, 841, 396, 1097, 76, 777, 332, 1033, 649, 204, 905, - 460, 1161, 588, 44, 745, 300, 1001, 556, 172, 873, 428, 1129, - 108, 809, 364, 1065, 681, 236, 937, 492, 1193, 617, 28, 729, - 284, 985, 540, 156, 857, 412, 1113, 92, 793, 348, 1049, 665, - 220, 921, 476, 1177, 633, 60, 761, 316, 1017, 572, 188, 889, - 444, 1145, 124, 825, 380, 1081, 697, 252, 953, 508, 1209, 2, - 703, 258, 959, 514, 130, 831, 386, 1087, 66, 767, 322, 1023, - 639, 194, 895, 450, 1151, 578, 34, 735, 290, 991, 546, 162, - 863, 418, 1119, 98, 799, 354, 1055, 671, 226, 927, 482, 1183, - 594, 18, 719, 274, 975, 530, 146, 847, 402, 1103, 82, 783, 338, - 1039, 655, 210, 911, 466, 1167, 623, 50, 751, 306, 1007, 562, - 178, 879, 434, 1135, 114, 815, 370, 1071, 687, 242, 943, 498, - 1199, 602, 10, 711, 266, 967, 522, 138, 839, 394, 1095, 74, - 775, 330, 1031, 647, 202, 903, 458, 1159, 586, 42, 743, 298, - 999, 554, 170, 871, 426, 1127, 106, 807, 362, 1063, 679, 234, - 935, 490, 1191, 615, 26, 727, 282, 983, 538, 154, 855, 410, - 1111, 90, 791, 346, 1047, 663, 218, 919, 474, 1175, 631, 58, - 759, 314, 1015, 570, 186, 887, 442, 1143, 122, 823, 378, 1079, - 695, 250, 951, 506, 1207, 607, 6, 707, 262, 963, 518, 134, 835, - 390, 1091, 70, 771, 326, 1027, 643, 198, 899, 454, 1155, 582, - 38, 739, 294, 995, 550, 166, 867, 422, 1123, 102, 803, 358, - 1059, 675, 230, 931, 486, 1187, 598, 22, 723, 278, 979, 534, - 150, 851, 406, 1107, 86, 787, 342, 1043, 659, 214, 915, 470, - 1171, 627, 54, 755, 310, 1011, 566, 182, 883, 438, 1139, 118, - 819, 374, 1075, 691, 246, 947, 502, 1203, 611, 14, 715, 270, - 971, 526, 142, 843, 398, 1099, 78, 779, 334, 1035, 651, 206, - 907, 462, 1163, 590, 46, 747, 302, 1003, 558, 174, 875, 430, - 1131, 110, 811, 366, 1067, 683, 238, 939, 494, 1195, 619, 30, - 731, 286, 987, 542, 158, 859, 414, 1115, 94, 795, 350, 1051, - 667, 222, 923, 478, 1179, 635, 62, 763, 318, 1019, 574, 190, - 891, 446, 1147, 126, 827, 382, 1083, 699, 254, 955, 510, 1211, - 606, 1, 702, 257, 958, 513, 129, 830, 385, 1086, 65, 766, 321, - 1022, 638, 193, 894, 449, 1150, 577, 33, 734, 289, 990, 545, - 161, 862, 417, 1118, 97, 798, 353, 1054, 670, 225, 926, 481, - 1182, 593, 17, 718, 273, 974, 529, 145, 846, 401, 1102, 81, - 782, 337, 1038, 654, 209, 910, 465, 1166, 622, 49, 750, 305, - 1006, 561, 177, 878, 433, 1134, 113, 814, 369, 1070, 686, 241, - 942, 497, 1198, 601, 9, 710, 265, 966, 521, 137, 838, 393, - 1094, 73, 774, 329, 1030, 646, 201, 902, 457, 1158, 585, 41, - 742, 297, 998, 553, 169, 870, 425, 1126, 105, 806, 361, 1062, - 678, 233, 934, 489, 1190, 614, 25, 726, 281, 982, 537, 153, - 854, 409, 1110, 89, 790, 345, 1046, 662, 217, 918, 473, 1174, - 630, 57, 758, 313, 1014, 569, 185, 886, 441, 1142, 121, 822, - 377, 1078, 694, 249, 950, 505, 1206, 605, 5, 706, 261, 962, - 517, 133, 834, 389, 1090, 69, 770, 325, 1026, 642, 197, 898, - 453, 1154, 581, 37, 738, 293, 994, 549, 165, 866, 421, 1122, - 101, 802, 357, 1058, 674, 229, 930, 485, 1186, 597, 21, 722, - 277, 978, 533, 149, 850, 405, 1106, 85, 786, 341, 1042, 658, - 213, 914, 469, 1170, 626, 53, 754, 309, 1010, 565, 181, 882, - 437, 1138, 117, 818, 373, 1074, 690, 245, 946, 501, 1202, 610, - 13, 714, 269, 970, 525, 141, 842, 397, 1098, 77, 778, 333, - 1034, 650, 205, 906, 461, 1162, 589, 45, 746, 301, 1002, 557, - 173, 874, 429, 1130, 109, 810, 365, 1066, 682, 237, 938, 493, - 1194, 618, 29, 730, 285, 986, 541, 157, 858, 413, 1114, 93, - 794, 349, 1050, 666, 221, 922, 477, 1178, 634, 61, 762, 317, - 1018, 573, 189, 890, 445, 1146, 125, 826, 381, 1082, 698, 253, - 954, 509, 1210, 3, 704, 259, 960, 515, 131, 832, 387, 1088, 67, - 768, 323, 1024, 640, 195, 896, 451, 1152, 579, 35, 736, 291, - 992, 547, 163, 864, 419, 1120, 99, 800, 355, 1056, 672, 227, - 928, 483, 1184, 595, 19, 720, 275, 976, 531, 147, 848, 403, - 1104, 83, 784, 339, 1040, 656, 211, 912, 467, 1168, 624, 51, - 752, 307, 1008, 563, 179, 880, 435, 1136, 115, 816, 371, 1072, - 688, 243, 944, 499, 1200, 603, 11, 712, 267, 968, 523, 139, - 840, 395, 1096, 75, 776, 331, 1032, 648, 203, 904, 459, 1160, - 587, 43, 744, 299, 1000, 555, 171, 872, 427, 1128, 107, 808, - 363, 1064, 680, 235, 936, 491, 1192, 616, 27, 728, 283, 984, - 539, 155, 856, 411, 1112, 91, 792, 347, 1048, 664, 219, 920, - 475, 1176, 632, 59, 760, 315, 1016, 571, 187, 888, 443, 1144, - 123, 824, 379, 1080, 696, 251, 952, 507, 1208, 608, 7, 708, - 263, 964, 519, 135, 836, 391, 1092, 71, 772, 327, 1028, 644, - 199, 900, 455, 1156, 583, 39, 740, 295, 996, 551, 167, 868, - 423, 1124, 103, 804, 359, 1060, 676, 231, 932, 487, 1188, 599, - 23, 724, 279, 980, 535, 151, 852, 407, 1108, 87, 788, 343, - 1044, 660, 215, 916, 471, 1172, 628, 55, 756, 311, 1012, 567, - 183, 884, 439, 1140, 119, 820, 375, 1076, 692, 247, 948, 503, - 1204, 612, 15, 716, 271, 972, 527, 143, 844, 399, 1100, 79, - 780, 335, 1036, 652, 207, 908, 463, 1164, 591, 47, 748, 303, - 1004, 559, 175, 876, 431, 1132, 111, 812, 367, 1068, 684, 239, - 940, 495, 1196, 620, 31, 732, 287, 988, 543, 159, 860, 415, - 1116, 95, 796, 351, 1052, 668, 223, 924, 479, 1180, 636, 63, - 764, 319, 1020, 575, 191, 892, 447, 1148, 127, 828, 383, 1084, - 700, 255, 956, 511, 1212]; - - return (unsafe { *PERM1213.get_unchecked((index % 1213) as usize) } as u32 * 1471369 + - unsafe { *PERM1213.get_unchecked(((index / 1213) % 1213) as usize) } as u32 * 1213 + - unsafe { - *PERM1213.get_unchecked(((index / 1471369) % 1213) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1784770597u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1217(index: u32) -> f32 { - const PERM1217: [u16; 1217] = [0, 705, 256, 961, 512, 128, 833, 384, 1089, 576, 64, 769, 320, - 1025, 641, 192, 897, 448, 1153, 32, 737, 288, 993, 544, 160, - 865, 416, 1121, 609, 96, 801, 352, 1057, 673, 224, 929, 480, - 1185, 16, 721, 272, 977, 528, 144, 849, 400, 1105, 592, 80, - 785, 336, 1041, 657, 208, 913, 464, 1169, 48, 753, 304, 1009, - 560, 176, 881, 432, 1137, 625, 112, 817, 368, 1073, 689, 240, - 945, 496, 1201, 8, 713, 264, 969, 520, 136, 841, 392, 1097, - 584, 72, 777, 328, 1033, 649, 200, 905, 456, 1161, 40, 745, - 296, 1001, 552, 168, 873, 424, 1129, 617, 104, 809, 360, 1065, - 681, 232, 937, 488, 1193, 24, 729, 280, 985, 536, 152, 857, - 408, 1113, 600, 88, 793, 344, 1049, 665, 216, 921, 472, 1177, - 56, 761, 312, 1017, 568, 184, 889, 440, 1145, 633, 120, 825, - 376, 1081, 697, 248, 953, 504, 1209, 4, 709, 260, 965, 516, - 132, 837, 388, 1093, 580, 68, 773, 324, 1029, 645, 196, 901, - 452, 1157, 36, 741, 292, 997, 548, 164, 869, 420, 1125, 613, - 100, 805, 356, 1061, 677, 228, 933, 484, 1189, 20, 725, 276, - 981, 532, 148, 853, 404, 1109, 596, 84, 789, 340, 1045, 661, - 212, 917, 468, 1173, 52, 757, 308, 1013, 564, 180, 885, 436, - 1141, 629, 116, 821, 372, 1077, 693, 244, 949, 500, 1205, 12, - 717, 268, 973, 524, 140, 845, 396, 1101, 588, 76, 781, 332, - 1037, 653, 204, 909, 460, 1165, 44, 749, 300, 1005, 556, 172, - 877, 428, 1133, 621, 108, 813, 364, 1069, 685, 236, 941, 492, - 1197, 28, 733, 284, 989, 540, 156, 861, 412, 1117, 604, 92, - 797, 348, 1053, 669, 220, 925, 476, 1181, 60, 765, 316, 1021, - 572, 188, 893, 444, 1149, 637, 124, 829, 380, 1085, 701, 252, - 957, 508, 1213, 2, 707, 258, 963, 514, 130, 835, 386, 1091, - 578, 66, 771, 322, 1027, 643, 194, 899, 450, 1155, 34, 739, - 290, 995, 546, 162, 867, 418, 1123, 611, 98, 803, 354, 1059, - 675, 226, 931, 482, 1187, 18, 723, 274, 979, 530, 146, 851, - 402, 1107, 594, 82, 787, 338, 1043, 659, 210, 915, 466, 1171, - 50, 755, 306, 1011, 562, 178, 883, 434, 1139, 627, 114, 819, - 370, 1075, 691, 242, 947, 498, 1203, 10, 715, 266, 971, 522, - 138, 843, 394, 1099, 586, 74, 779, 330, 1035, 651, 202, 907, - 458, 1163, 42, 747, 298, 1003, 554, 170, 875, 426, 1131, 619, - 106, 811, 362, 1067, 683, 234, 939, 490, 1195, 26, 731, 282, - 987, 538, 154, 859, 410, 1115, 602, 90, 795, 346, 1051, 667, - 218, 923, 474, 1179, 58, 763, 314, 1019, 570, 186, 891, 442, - 1147, 635, 122, 827, 378, 1083, 699, 250, 955, 506, 1211, 6, - 711, 262, 967, 518, 134, 839, 390, 1095, 582, 70, 775, 326, - 1031, 647, 198, 903, 454, 1159, 38, 743, 294, 999, 550, 166, - 871, 422, 1127, 615, 102, 807, 358, 1063, 679, 230, 935, 486, - 1191, 22, 727, 278, 983, 534, 150, 855, 406, 1111, 598, 86, - 791, 342, 1047, 663, 214, 919, 470, 1175, 54, 759, 310, 1015, - 566, 182, 887, 438, 1143, 631, 118, 823, 374, 1079, 695, 246, - 951, 502, 1207, 14, 719, 270, 975, 526, 142, 847, 398, 1103, - 590, 78, 783, 334, 1039, 655, 206, 911, 462, 1167, 46, 751, - 302, 1007, 558, 174, 879, 430, 1135, 623, 110, 815, 366, 1071, - 687, 238, 943, 494, 1199, 30, 735, 286, 991, 542, 158, 863, - 414, 1119, 606, 94, 799, 350, 1055, 671, 222, 927, 478, 1183, - 62, 767, 318, 1023, 574, 190, 895, 446, 1151, 639, 126, 831, - 382, 1087, 703, 254, 959, 510, 1215, 608, 1, 706, 257, 962, - 513, 129, 834, 385, 1090, 577, 65, 770, 321, 1026, 642, 193, - 898, 449, 1154, 33, 738, 289, 994, 545, 161, 866, 417, 1122, - 610, 97, 802, 353, 1058, 674, 225, 930, 481, 1186, 17, 722, - 273, 978, 529, 145, 850, 401, 1106, 593, 81, 786, 337, 1042, - 658, 209, 914, 465, 1170, 49, 754, 305, 1010, 561, 177, 882, - 433, 1138, 626, 113, 818, 369, 1074, 690, 241, 946, 497, 1202, - 9, 714, 265, 970, 521, 137, 842, 393, 1098, 585, 73, 778, 329, - 1034, 650, 201, 906, 457, 1162, 41, 746, 297, 1002, 553, 169, - 874, 425, 1130, 618, 105, 810, 361, 1066, 682, 233, 938, 489, - 1194, 25, 730, 281, 986, 537, 153, 858, 409, 1114, 601, 89, - 794, 345, 1050, 666, 217, 922, 473, 1178, 57, 762, 313, 1018, - 569, 185, 890, 441, 1146, 634, 121, 826, 377, 1082, 698, 249, - 954, 505, 1210, 5, 710, 261, 966, 517, 133, 838, 389, 1094, - 581, 69, 774, 325, 1030, 646, 197, 902, 453, 1158, 37, 742, - 293, 998, 549, 165, 870, 421, 1126, 614, 101, 806, 357, 1062, - 678, 229, 934, 485, 1190, 21, 726, 277, 982, 533, 149, 854, - 405, 1110, 597, 85, 790, 341, 1046, 662, 213, 918, 469, 1174, - 53, 758, 309, 1014, 565, 181, 886, 437, 1142, 630, 117, 822, - 373, 1078, 694, 245, 950, 501, 1206, 13, 718, 269, 974, 525, - 141, 846, 397, 1102, 589, 77, 782, 333, 1038, 654, 205, 910, - 461, 1166, 45, 750, 301, 1006, 557, 173, 878, 429, 1134, 622, - 109, 814, 365, 1070, 686, 237, 942, 493, 1198, 29, 734, 285, - 990, 541, 157, 862, 413, 1118, 605, 93, 798, 349, 1054, 670, - 221, 926, 477, 1182, 61, 766, 317, 1022, 573, 189, 894, 445, - 1150, 638, 125, 830, 381, 1086, 702, 253, 958, 509, 1214, 3, - 708, 259, 964, 515, 131, 836, 387, 1092, 579, 67, 772, 323, - 1028, 644, 195, 900, 451, 1156, 35, 740, 291, 996, 547, 163, - 868, 419, 1124, 612, 99, 804, 355, 1060, 676, 227, 932, 483, - 1188, 19, 724, 275, 980, 531, 147, 852, 403, 1108, 595, 83, - 788, 339, 1044, 660, 211, 916, 467, 1172, 51, 756, 307, 1012, - 563, 179, 884, 435, 1140, 628, 115, 820, 371, 1076, 692, 243, - 948, 499, 1204, 11, 716, 267, 972, 523, 139, 844, 395, 1100, - 587, 75, 780, 331, 1036, 652, 203, 908, 459, 1164, 43, 748, - 299, 1004, 555, 171, 876, 427, 1132, 620, 107, 812, 363, 1068, - 684, 235, 940, 491, 1196, 27, 732, 283, 988, 539, 155, 860, - 411, 1116, 603, 91, 796, 347, 1052, 668, 219, 924, 475, 1180, - 59, 764, 315, 1020, 571, 187, 892, 443, 1148, 636, 123, 828, - 379, 1084, 700, 251, 956, 507, 1212, 7, 712, 263, 968, 519, - 135, 840, 391, 1096, 583, 71, 776, 327, 1032, 648, 199, 904, - 455, 1160, 39, 744, 295, 1000, 551, 167, 872, 423, 1128, 616, - 103, 808, 359, 1064, 680, 231, 936, 487, 1192, 23, 728, 279, - 984, 535, 151, 856, 407, 1112, 599, 87, 792, 343, 1048, 664, - 215, 920, 471, 1176, 55, 760, 311, 1016, 567, 183, 888, 439, - 1144, 632, 119, 824, 375, 1080, 696, 247, 952, 503, 1208, 15, - 720, 271, 976, 527, 143, 848, 399, 1104, 591, 79, 784, 335, - 1040, 656, 207, 912, 463, 1168, 47, 752, 303, 1008, 559, 175, - 880, 431, 1136, 624, 111, 816, 367, 1072, 688, 239, 944, 495, - 1200, 31, 736, 287, 992, 543, 159, 864, 415, 1120, 607, 95, - 800, 351, 1056, 672, 223, 928, 479, 1184, 63, 768, 319, 1024, - 575, 191, 896, 447, 1152, 640, 127, 832, 383, 1088, 704, 255, - 960, 511, 1216]; - - return (unsafe { *PERM1217.get_unchecked((index % 1217) as usize) } as u32 * 1481089 + - unsafe { *PERM1217.get_unchecked(((index / 1217) % 1217) as usize) } as u32 * 1217 + - unsafe { - *PERM1217.get_unchecked(((index / 1481089) % 1217) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1802485313u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1223(index: u32) -> f32 { - const PERM1223: [u16; 1223] = [0, 711, 256, 967, 512, 128, 839, 384, 1095, 576, 64, 775, 320, - 1031, 647, 192, 903, 448, 1159, 32, 743, 288, 999, 544, 160, - 871, 416, 1127, 615, 96, 807, 352, 1063, 679, 224, 935, 480, - 1191, 16, 727, 272, 983, 528, 144, 855, 400, 1111, 592, 80, - 791, 336, 1047, 663, 208, 919, 464, 1175, 48, 759, 304, 1015, - 560, 176, 887, 432, 1143, 631, 112, 823, 368, 1079, 695, 240, - 951, 496, 1207, 8, 719, 264, 975, 520, 136, 847, 392, 1103, - 584, 72, 783, 328, 1039, 655, 200, 911, 456, 1167, 40, 751, - 296, 1007, 552, 168, 879, 424, 1135, 623, 104, 815, 360, 1071, - 687, 232, 943, 488, 1199, 24, 735, 280, 991, 536, 152, 863, - 408, 1119, 600, 88, 799, 344, 1055, 671, 216, 927, 472, 1183, - 56, 767, 312, 1023, 568, 184, 895, 440, 1151, 639, 120, 831, - 376, 1087, 703, 248, 959, 504, 1215, 608, 4, 715, 260, 971, - 516, 132, 843, 388, 1099, 580, 68, 779, 324, 1035, 651, 196, - 907, 452, 1163, 36, 747, 292, 1003, 548, 164, 875, 420, 1131, - 619, 100, 811, 356, 1067, 683, 228, 939, 484, 1195, 20, 731, - 276, 987, 532, 148, 859, 404, 1115, 596, 84, 795, 340, 1051, - 667, 212, 923, 468, 1179, 52, 763, 308, 1019, 564, 180, 891, - 436, 1147, 635, 116, 827, 372, 1083, 699, 244, 955, 500, 1211, - 12, 723, 268, 979, 524, 140, 851, 396, 1107, 588, 76, 787, 332, - 1043, 659, 204, 915, 460, 1171, 44, 755, 300, 1011, 556, 172, - 883, 428, 1139, 627, 108, 819, 364, 1075, 691, 236, 947, 492, - 1203, 28, 739, 284, 995, 540, 156, 867, 412, 1123, 604, 92, - 803, 348, 1059, 675, 220, 931, 476, 1187, 60, 771, 316, 1027, - 572, 188, 899, 444, 1155, 643, 124, 835, 380, 1091, 707, 252, - 963, 508, 1219, 610, 2, 713, 258, 969, 514, 130, 841, 386, - 1097, 578, 66, 777, 322, 1033, 649, 194, 905, 450, 1161, 34, - 745, 290, 1001, 546, 162, 873, 418, 1129, 617, 98, 809, 354, - 1065, 681, 226, 937, 482, 1193, 18, 729, 274, 985, 530, 146, - 857, 402, 1113, 594, 82, 793, 338, 1049, 665, 210, 921, 466, - 1177, 50, 761, 306, 1017, 562, 178, 889, 434, 1145, 633, 114, - 825, 370, 1081, 697, 242, 953, 498, 1209, 10, 721, 266, 977, - 522, 138, 849, 394, 1105, 586, 74, 785, 330, 1041, 657, 202, - 913, 458, 1169, 42, 753, 298, 1009, 554, 170, 881, 426, 1137, - 625, 106, 817, 362, 1073, 689, 234, 945, 490, 1201, 26, 737, - 282, 993, 538, 154, 865, 410, 1121, 602, 90, 801, 346, 1057, - 673, 218, 929, 474, 1185, 58, 769, 314, 1025, 570, 186, 897, - 442, 1153, 641, 122, 833, 378, 1089, 705, 250, 961, 506, 1217, - 613, 6, 717, 262, 973, 518, 134, 845, 390, 1101, 582, 70, 781, - 326, 1037, 653, 198, 909, 454, 1165, 38, 749, 294, 1005, 550, - 166, 877, 422, 1133, 621, 102, 813, 358, 1069, 685, 230, 941, - 486, 1197, 22, 733, 278, 989, 534, 150, 861, 406, 1117, 598, - 86, 797, 342, 1053, 669, 214, 925, 470, 1181, 54, 765, 310, - 1021, 566, 182, 893, 438, 1149, 637, 118, 829, 374, 1085, 701, - 246, 957, 502, 1213, 14, 725, 270, 981, 526, 142, 853, 398, - 1109, 590, 78, 789, 334, 1045, 661, 206, 917, 462, 1173, 46, - 757, 302, 1013, 558, 174, 885, 430, 1141, 629, 110, 821, 366, - 1077, 693, 238, 949, 494, 1205, 30, 741, 286, 997, 542, 158, - 869, 414, 1125, 606, 94, 805, 350, 1061, 677, 222, 933, 478, - 1189, 62, 773, 318, 1029, 574, 190, 901, 446, 1157, 645, 126, - 837, 382, 1093, 709, 254, 965, 510, 1221, 611, 1, 712, 257, - 968, 513, 129, 840, 385, 1096, 577, 65, 776, 321, 1032, 648, - 193, 904, 449, 1160, 33, 744, 289, 1000, 545, 161, 872, 417, - 1128, 616, 97, 808, 353, 1064, 680, 225, 936, 481, 1192, 17, - 728, 273, 984, 529, 145, 856, 401, 1112, 593, 81, 792, 337, - 1048, 664, 209, 920, 465, 1176, 49, 760, 305, 1016, 561, 177, - 888, 433, 1144, 632, 113, 824, 369, 1080, 696, 241, 952, 497, - 1208, 9, 720, 265, 976, 521, 137, 848, 393, 1104, 585, 73, 784, - 329, 1040, 656, 201, 912, 457, 1168, 41, 752, 297, 1008, 553, - 169, 880, 425, 1136, 624, 105, 816, 361, 1072, 688, 233, 944, - 489, 1200, 25, 736, 281, 992, 537, 153, 864, 409, 1120, 601, - 89, 800, 345, 1056, 672, 217, 928, 473, 1184, 57, 768, 313, - 1024, 569, 185, 896, 441, 1152, 640, 121, 832, 377, 1088, 704, - 249, 960, 505, 1216, 609, 5, 716, 261, 972, 517, 133, 844, 389, - 1100, 581, 69, 780, 325, 1036, 652, 197, 908, 453, 1164, 37, - 748, 293, 1004, 549, 165, 876, 421, 1132, 620, 101, 812, 357, - 1068, 684, 229, 940, 485, 1196, 21, 732, 277, 988, 533, 149, - 860, 405, 1116, 597, 85, 796, 341, 1052, 668, 213, 924, 469, - 1180, 53, 764, 309, 1020, 565, 181, 892, 437, 1148, 636, 117, - 828, 373, 1084, 700, 245, 956, 501, 1212, 13, 724, 269, 980, - 525, 141, 852, 397, 1108, 589, 77, 788, 333, 1044, 660, 205, - 916, 461, 1172, 45, 756, 301, 1012, 557, 173, 884, 429, 1140, - 628, 109, 820, 365, 1076, 692, 237, 948, 493, 1204, 29, 740, - 285, 996, 541, 157, 868, 413, 1124, 605, 93, 804, 349, 1060, - 676, 221, 932, 477, 1188, 61, 772, 317, 1028, 573, 189, 900, - 445, 1156, 644, 125, 836, 381, 1092, 708, 253, 964, 509, 1220, - 612, 3, 714, 259, 970, 515, 131, 842, 387, 1098, 579, 67, 778, - 323, 1034, 650, 195, 906, 451, 1162, 35, 746, 291, 1002, 547, - 163, 874, 419, 1130, 618, 99, 810, 355, 1066, 682, 227, 938, - 483, 1194, 19, 730, 275, 986, 531, 147, 858, 403, 1114, 595, - 83, 794, 339, 1050, 666, 211, 922, 467, 1178, 51, 762, 307, - 1018, 563, 179, 890, 435, 1146, 634, 115, 826, 371, 1082, 698, - 243, 954, 499, 1210, 11, 722, 267, 978, 523, 139, 850, 395, - 1106, 587, 75, 786, 331, 1042, 658, 203, 914, 459, 1170, 43, - 754, 299, 1010, 555, 171, 882, 427, 1138, 626, 107, 818, 363, - 1074, 690, 235, 946, 491, 1202, 27, 738, 283, 994, 539, 155, - 866, 411, 1122, 603, 91, 802, 347, 1058, 674, 219, 930, 475, - 1186, 59, 770, 315, 1026, 571, 187, 898, 443, 1154, 642, 123, - 834, 379, 1090, 706, 251, 962, 507, 1218, 614, 7, 718, 263, - 974, 519, 135, 846, 391, 1102, 583, 71, 782, 327, 1038, 654, - 199, 910, 455, 1166, 39, 750, 295, 1006, 551, 167, 878, 423, - 1134, 622, 103, 814, 359, 1070, 686, 231, 942, 487, 1198, 23, - 734, 279, 990, 535, 151, 862, 407, 1118, 599, 87, 798, 343, - 1054, 670, 215, 926, 471, 1182, 55, 766, 311, 1022, 567, 183, - 894, 439, 1150, 638, 119, 830, 375, 1086, 702, 247, 958, 503, - 1214, 15, 726, 271, 982, 527, 143, 854, 399, 1110, 591, 79, - 790, 335, 1046, 662, 207, 918, 463, 1174, 47, 758, 303, 1014, - 559, 175, 886, 431, 1142, 630, 111, 822, 367, 1078, 694, 239, - 950, 495, 1206, 31, 742, 287, 998, 543, 159, 870, 415, 1126, - 607, 95, 806, 351, 1062, 678, 223, 934, 479, 1190, 63, 774, - 319, 1030, 575, 191, 902, 447, 1158, 646, 127, 838, 383, 1094, - 710, 255, 966, 511, 1222]; - - return (unsafe { *PERM1223.get_unchecked((index % 1223) as usize) } as u32 * 1495729 + - unsafe { *PERM1223.get_unchecked(((index / 1223) % 1223) as usize) } as u32 * 1223 + - unsafe { - *PERM1223.get_unchecked(((index / 1495729) % 1223) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1829276567u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1229(index: u32) -> f32 { - const PERM1229: [u16; 1229] = [0, 717, 256, 973, 512, 128, 845, 384, 1101, 576, 64, 781, 320, - 1037, 653, 192, 909, 448, 1165, 32, 749, 288, 1005, 544, 160, - 877, 416, 1133, 621, 96, 813, 352, 1069, 685, 224, 941, 480, - 1197, 16, 733, 272, 989, 528, 144, 861, 400, 1117, 592, 80, - 797, 336, 1053, 669, 208, 925, 464, 1181, 48, 765, 304, 1021, - 560, 176, 893, 432, 1149, 637, 112, 829, 368, 1085, 701, 240, - 957, 496, 1213, 608, 8, 725, 264, 981, 520, 136, 853, 392, - 1109, 584, 72, 789, 328, 1045, 661, 200, 917, 456, 1173, 40, - 757, 296, 1013, 552, 168, 885, 424, 1141, 629, 104, 821, 360, - 1077, 693, 232, 949, 488, 1205, 24, 741, 280, 997, 536, 152, - 869, 408, 1125, 600, 88, 805, 344, 1061, 677, 216, 933, 472, - 1189, 56, 773, 312, 1029, 568, 184, 901, 440, 1157, 645, 120, - 837, 376, 1093, 709, 248, 965, 504, 1221, 612, 4, 721, 260, - 977, 516, 132, 849, 388, 1105, 580, 68, 785, 324, 1041, 657, - 196, 913, 452, 1169, 36, 753, 292, 1009, 548, 164, 881, 420, - 1137, 625, 100, 817, 356, 1073, 689, 228, 945, 484, 1201, 20, - 737, 276, 993, 532, 148, 865, 404, 1121, 596, 84, 801, 340, - 1057, 673, 212, 929, 468, 1185, 52, 769, 308, 1025, 564, 180, - 897, 436, 1153, 641, 116, 833, 372, 1089, 705, 244, 961, 500, - 1217, 617, 12, 729, 268, 985, 524, 140, 857, 396, 1113, 588, - 76, 793, 332, 1049, 665, 204, 921, 460, 1177, 44, 761, 300, - 1017, 556, 172, 889, 428, 1145, 633, 108, 825, 364, 1081, 697, - 236, 953, 492, 1209, 28, 745, 284, 1001, 540, 156, 873, 412, - 1129, 604, 92, 809, 348, 1065, 681, 220, 937, 476, 1193, 60, - 777, 316, 1033, 572, 188, 905, 444, 1161, 649, 124, 841, 380, - 1097, 713, 252, 969, 508, 1225, 2, 719, 258, 975, 514, 130, - 847, 386, 1103, 578, 66, 783, 322, 1039, 655, 194, 911, 450, - 1167, 34, 751, 290, 1007, 546, 162, 879, 418, 1135, 623, 98, - 815, 354, 1071, 687, 226, 943, 482, 1199, 18, 735, 274, 991, - 530, 146, 863, 402, 1119, 594, 82, 799, 338, 1055, 671, 210, - 927, 466, 1183, 50, 767, 306, 1023, 562, 178, 895, 434, 1151, - 639, 114, 831, 370, 1087, 703, 242, 959, 498, 1215, 610, 10, - 727, 266, 983, 522, 138, 855, 394, 1111, 586, 74, 791, 330, - 1047, 663, 202, 919, 458, 1175, 42, 759, 298, 1015, 554, 170, - 887, 426, 1143, 631, 106, 823, 362, 1079, 695, 234, 951, 490, - 1207, 26, 743, 282, 999, 538, 154, 871, 410, 1127, 602, 90, - 807, 346, 1063, 679, 218, 935, 474, 1191, 58, 775, 314, 1031, - 570, 186, 903, 442, 1159, 647, 122, 839, 378, 1095, 711, 250, - 967, 506, 1223, 615, 6, 723, 262, 979, 518, 134, 851, 390, - 1107, 582, 70, 787, 326, 1043, 659, 198, 915, 454, 1171, 38, - 755, 294, 1011, 550, 166, 883, 422, 1139, 627, 102, 819, 358, - 1075, 691, 230, 947, 486, 1203, 22, 739, 278, 995, 534, 150, - 867, 406, 1123, 598, 86, 803, 342, 1059, 675, 214, 931, 470, - 1187, 54, 771, 310, 1027, 566, 182, 899, 438, 1155, 643, 118, - 835, 374, 1091, 707, 246, 963, 502, 1219, 619, 14, 731, 270, - 987, 526, 142, 859, 398, 1115, 590, 78, 795, 334, 1051, 667, - 206, 923, 462, 1179, 46, 763, 302, 1019, 558, 174, 891, 430, - 1147, 635, 110, 827, 366, 1083, 699, 238, 955, 494, 1211, 30, - 747, 286, 1003, 542, 158, 875, 414, 1131, 606, 94, 811, 350, - 1067, 683, 222, 939, 478, 1195, 62, 779, 318, 1035, 574, 190, - 907, 446, 1163, 651, 126, 843, 382, 1099, 715, 254, 971, 510, - 1227, 614, 1, 718, 257, 974, 513, 129, 846, 385, 1102, 577, 65, - 782, 321, 1038, 654, 193, 910, 449, 1166, 33, 750, 289, 1006, - 545, 161, 878, 417, 1134, 622, 97, 814, 353, 1070, 686, 225, - 942, 481, 1198, 17, 734, 273, 990, 529, 145, 862, 401, 1118, - 593, 81, 798, 337, 1054, 670, 209, 926, 465, 1182, 49, 766, - 305, 1022, 561, 177, 894, 433, 1150, 638, 113, 830, 369, 1086, - 702, 241, 958, 497, 1214, 609, 9, 726, 265, 982, 521, 137, 854, - 393, 1110, 585, 73, 790, 329, 1046, 662, 201, 918, 457, 1174, - 41, 758, 297, 1014, 553, 169, 886, 425, 1142, 630, 105, 822, - 361, 1078, 694, 233, 950, 489, 1206, 25, 742, 281, 998, 537, - 153, 870, 409, 1126, 601, 89, 806, 345, 1062, 678, 217, 934, - 473, 1190, 57, 774, 313, 1030, 569, 185, 902, 441, 1158, 646, - 121, 838, 377, 1094, 710, 249, 966, 505, 1222, 613, 5, 722, - 261, 978, 517, 133, 850, 389, 1106, 581, 69, 786, 325, 1042, - 658, 197, 914, 453, 1170, 37, 754, 293, 1010, 549, 165, 882, - 421, 1138, 626, 101, 818, 357, 1074, 690, 229, 946, 485, 1202, - 21, 738, 277, 994, 533, 149, 866, 405, 1122, 597, 85, 802, 341, - 1058, 674, 213, 930, 469, 1186, 53, 770, 309, 1026, 565, 181, - 898, 437, 1154, 642, 117, 834, 373, 1090, 706, 245, 962, 501, - 1218, 618, 13, 730, 269, 986, 525, 141, 858, 397, 1114, 589, - 77, 794, 333, 1050, 666, 205, 922, 461, 1178, 45, 762, 301, - 1018, 557, 173, 890, 429, 1146, 634, 109, 826, 365, 1082, 698, - 237, 954, 493, 1210, 29, 746, 285, 1002, 541, 157, 874, 413, - 1130, 605, 93, 810, 349, 1066, 682, 221, 938, 477, 1194, 61, - 778, 317, 1034, 573, 189, 906, 445, 1162, 650, 125, 842, 381, - 1098, 714, 253, 970, 509, 1226, 3, 720, 259, 976, 515, 131, - 848, 387, 1104, 579, 67, 784, 323, 1040, 656, 195, 912, 451, - 1168, 35, 752, 291, 1008, 547, 163, 880, 419, 1136, 624, 99, - 816, 355, 1072, 688, 227, 944, 483, 1200, 19, 736, 275, 992, - 531, 147, 864, 403, 1120, 595, 83, 800, 339, 1056, 672, 211, - 928, 467, 1184, 51, 768, 307, 1024, 563, 179, 896, 435, 1152, - 640, 115, 832, 371, 1088, 704, 243, 960, 499, 1216, 611, 11, - 728, 267, 984, 523, 139, 856, 395, 1112, 587, 75, 792, 331, - 1048, 664, 203, 920, 459, 1176, 43, 760, 299, 1016, 555, 171, - 888, 427, 1144, 632, 107, 824, 363, 1080, 696, 235, 952, 491, - 1208, 27, 744, 283, 1000, 539, 155, 872, 411, 1128, 603, 91, - 808, 347, 1064, 680, 219, 936, 475, 1192, 59, 776, 315, 1032, - 571, 187, 904, 443, 1160, 648, 123, 840, 379, 1096, 712, 251, - 968, 507, 1224, 616, 7, 724, 263, 980, 519, 135, 852, 391, - 1108, 583, 71, 788, 327, 1044, 660, 199, 916, 455, 1172, 39, - 756, 295, 1012, 551, 167, 884, 423, 1140, 628, 103, 820, 359, - 1076, 692, 231, 948, 487, 1204, 23, 740, 279, 996, 535, 151, - 868, 407, 1124, 599, 87, 804, 343, 1060, 676, 215, 932, 471, - 1188, 55, 772, 311, 1028, 567, 183, 900, 439, 1156, 644, 119, - 836, 375, 1092, 708, 247, 964, 503, 1220, 620, 15, 732, 271, - 988, 527, 143, 860, 399, 1116, 591, 79, 796, 335, 1052, 668, - 207, 924, 463, 1180, 47, 764, 303, 1020, 559, 175, 892, 431, - 1148, 636, 111, 828, 367, 1084, 700, 239, 956, 495, 1212, 31, - 748, 287, 1004, 543, 159, 876, 415, 1132, 607, 95, 812, 351, - 1068, 684, 223, 940, 479, 1196, 63, 780, 319, 1036, 575, 191, - 908, 447, 1164, 652, 127, 844, 383, 1100, 716, 255, 972, 511, - 1228]; - - return (unsafe { *PERM1229.get_unchecked((index % 1229) as usize) } as u32 * 1510441 + - unsafe { *PERM1229.get_unchecked(((index / 1229) % 1229) as usize) } as u32 * 1229 + - unsafe { - *PERM1229.get_unchecked(((index / 1510441) % 1229) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1856331989u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1231(index: u32) -> f32 { - const PERM1231: [u16; 1231] = [0, 719, 256, 975, 512, 128, 847, 384, 1103, 576, 64, 783, 320, - 1039, 655, 192, 911, 448, 1167, 32, 751, 288, 1007, 544, 160, - 879, 416, 1135, 623, 96, 815, 352, 1071, 687, 224, 943, 480, - 1199, 16, 735, 272, 991, 528, 144, 863, 400, 1119, 592, 80, - 799, 336, 1055, 671, 208, 927, 464, 1183, 48, 767, 304, 1023, - 560, 176, 895, 432, 1151, 639, 112, 831, 368, 1087, 703, 240, - 959, 496, 1215, 608, 8, 727, 264, 983, 520, 136, 855, 392, - 1111, 584, 72, 791, 328, 1047, 663, 200, 919, 456, 1175, 40, - 759, 296, 1015, 552, 168, 887, 424, 1143, 631, 104, 823, 360, - 1079, 695, 232, 951, 488, 1207, 24, 743, 280, 999, 536, 152, - 871, 408, 1127, 600, 88, 807, 344, 1063, 679, 216, 935, 472, - 1191, 56, 775, 312, 1031, 568, 184, 903, 440, 1159, 647, 120, - 839, 376, 1095, 711, 248, 967, 504, 1223, 612, 4, 723, 260, - 979, 516, 132, 851, 388, 1107, 580, 68, 787, 324, 1043, 659, - 196, 915, 452, 1171, 36, 755, 292, 1011, 548, 164, 883, 420, - 1139, 627, 100, 819, 356, 1075, 691, 228, 947, 484, 1203, 20, - 739, 276, 995, 532, 148, 867, 404, 1123, 596, 84, 803, 340, - 1059, 675, 212, 931, 468, 1187, 52, 771, 308, 1027, 564, 180, - 899, 436, 1155, 643, 116, 835, 372, 1091, 707, 244, 963, 500, - 1219, 619, 12, 731, 268, 987, 524, 140, 859, 396, 1115, 588, - 76, 795, 332, 1051, 667, 204, 923, 460, 1179, 44, 763, 300, - 1019, 556, 172, 891, 428, 1147, 635, 108, 827, 364, 1083, 699, - 236, 955, 492, 1211, 28, 747, 284, 1003, 540, 156, 875, 412, - 1131, 604, 92, 811, 348, 1067, 683, 220, 939, 476, 1195, 60, - 779, 316, 1035, 572, 188, 907, 444, 1163, 651, 124, 843, 380, - 1099, 715, 252, 971, 508, 1227, 614, 2, 721, 258, 977, 514, - 130, 849, 386, 1105, 578, 66, 785, 322, 1041, 657, 194, 913, - 450, 1169, 34, 753, 290, 1009, 546, 162, 881, 418, 1137, 625, - 98, 817, 354, 1073, 689, 226, 945, 482, 1201, 18, 737, 274, - 993, 530, 146, 865, 402, 1121, 594, 82, 801, 338, 1057, 673, - 210, 929, 466, 1185, 50, 769, 306, 1025, 562, 178, 897, 434, - 1153, 641, 114, 833, 370, 1089, 705, 242, 961, 498, 1217, 610, - 10, 729, 266, 985, 522, 138, 857, 394, 1113, 586, 74, 793, 330, - 1049, 665, 202, 921, 458, 1177, 42, 761, 298, 1017, 554, 170, - 889, 426, 1145, 633, 106, 825, 362, 1081, 697, 234, 953, 490, - 1209, 26, 745, 282, 1001, 538, 154, 873, 410, 1129, 602, 90, - 809, 346, 1065, 681, 218, 937, 474, 1193, 58, 777, 314, 1033, - 570, 186, 905, 442, 1161, 649, 122, 841, 378, 1097, 713, 250, - 969, 506, 1225, 617, 6, 725, 262, 981, 518, 134, 853, 390, - 1109, 582, 70, 789, 326, 1045, 661, 198, 917, 454, 1173, 38, - 757, 294, 1013, 550, 166, 885, 422, 1141, 629, 102, 821, 358, - 1077, 693, 230, 949, 486, 1205, 22, 741, 278, 997, 534, 150, - 869, 406, 1125, 598, 86, 805, 342, 1061, 677, 214, 933, 470, - 1189, 54, 773, 310, 1029, 566, 182, 901, 438, 1157, 645, 118, - 837, 374, 1093, 709, 246, 965, 502, 1221, 621, 14, 733, 270, - 989, 526, 142, 861, 398, 1117, 590, 78, 797, 334, 1053, 669, - 206, 925, 462, 1181, 46, 765, 302, 1021, 558, 174, 893, 430, - 1149, 637, 110, 829, 366, 1085, 701, 238, 957, 494, 1213, 30, - 749, 286, 1005, 542, 158, 877, 414, 1133, 606, 94, 813, 350, - 1069, 685, 222, 941, 478, 1197, 62, 781, 318, 1037, 574, 190, - 909, 446, 1165, 653, 126, 845, 382, 1101, 717, 254, 973, 510, - 1229, 615, 1, 720, 257, 976, 513, 129, 848, 385, 1104, 577, 65, - 784, 321, 1040, 656, 193, 912, 449, 1168, 33, 752, 289, 1008, - 545, 161, 880, 417, 1136, 624, 97, 816, 353, 1072, 688, 225, - 944, 481, 1200, 17, 736, 273, 992, 529, 145, 864, 401, 1120, - 593, 81, 800, 337, 1056, 672, 209, 928, 465, 1184, 49, 768, - 305, 1024, 561, 177, 896, 433, 1152, 640, 113, 832, 369, 1088, - 704, 241, 960, 497, 1216, 609, 9, 728, 265, 984, 521, 137, 856, - 393, 1112, 585, 73, 792, 329, 1048, 664, 201, 920, 457, 1176, - 41, 760, 297, 1016, 553, 169, 888, 425, 1144, 632, 105, 824, - 361, 1080, 696, 233, 952, 489, 1208, 25, 744, 281, 1000, 537, - 153, 872, 409, 1128, 601, 89, 808, 345, 1064, 680, 217, 936, - 473, 1192, 57, 776, 313, 1032, 569, 185, 904, 441, 1160, 648, - 121, 840, 377, 1096, 712, 249, 968, 505, 1224, 613, 5, 724, - 261, 980, 517, 133, 852, 389, 1108, 581, 69, 788, 325, 1044, - 660, 197, 916, 453, 1172, 37, 756, 293, 1012, 549, 165, 884, - 421, 1140, 628, 101, 820, 357, 1076, 692, 229, 948, 485, 1204, - 21, 740, 277, 996, 533, 149, 868, 405, 1124, 597, 85, 804, 341, - 1060, 676, 213, 932, 469, 1188, 53, 772, 309, 1028, 565, 181, - 900, 437, 1156, 644, 117, 836, 373, 1092, 708, 245, 964, 501, - 1220, 620, 13, 732, 269, 988, 525, 141, 860, 397, 1116, 589, - 77, 796, 333, 1052, 668, 205, 924, 461, 1180, 45, 764, 301, - 1020, 557, 173, 892, 429, 1148, 636, 109, 828, 365, 1084, 700, - 237, 956, 493, 1212, 29, 748, 285, 1004, 541, 157, 876, 413, - 1132, 605, 93, 812, 349, 1068, 684, 221, 940, 477, 1196, 61, - 780, 317, 1036, 573, 189, 908, 445, 1164, 652, 125, 844, 381, - 1100, 716, 253, 972, 509, 1228, 616, 3, 722, 259, 978, 515, - 131, 850, 387, 1106, 579, 67, 786, 323, 1042, 658, 195, 914, - 451, 1170, 35, 754, 291, 1010, 547, 163, 882, 419, 1138, 626, - 99, 818, 355, 1074, 690, 227, 946, 483, 1202, 19, 738, 275, - 994, 531, 147, 866, 403, 1122, 595, 83, 802, 339, 1058, 674, - 211, 930, 467, 1186, 51, 770, 307, 1026, 563, 179, 898, 435, - 1154, 642, 115, 834, 371, 1090, 706, 243, 962, 499, 1218, 611, - 11, 730, 267, 986, 523, 139, 858, 395, 1114, 587, 75, 794, 331, - 1050, 666, 203, 922, 459, 1178, 43, 762, 299, 1018, 555, 171, - 890, 427, 1146, 634, 107, 826, 363, 1082, 698, 235, 954, 491, - 1210, 27, 746, 283, 1002, 539, 155, 874, 411, 1130, 603, 91, - 810, 347, 1066, 682, 219, 938, 475, 1194, 59, 778, 315, 1034, - 571, 187, 906, 443, 1162, 650, 123, 842, 379, 1098, 714, 251, - 970, 507, 1226, 618, 7, 726, 263, 982, 519, 135, 854, 391, - 1110, 583, 71, 790, 327, 1046, 662, 199, 918, 455, 1174, 39, - 758, 295, 1014, 551, 167, 886, 423, 1142, 630, 103, 822, 359, - 1078, 694, 231, 950, 487, 1206, 23, 742, 279, 998, 535, 151, - 870, 407, 1126, 599, 87, 806, 343, 1062, 678, 215, 934, 471, - 1190, 55, 774, 311, 1030, 567, 183, 902, 439, 1158, 646, 119, - 838, 375, 1094, 710, 247, 966, 503, 1222, 622, 15, 734, 271, - 990, 527, 143, 862, 399, 1118, 591, 79, 798, 335, 1054, 670, - 207, 926, 463, 1182, 47, 766, 303, 1022, 559, 175, 894, 431, - 1150, 638, 111, 830, 367, 1086, 702, 239, 958, 495, 1214, 31, - 750, 287, 1006, 543, 159, 878, 415, 1134, 607, 95, 814, 351, - 1070, 686, 223, 942, 479, 1198, 63, 782, 319, 1038, 575, 191, - 910, 447, 1166, 654, 127, 846, 383, 1102, 718, 255, 974, 511, - 1230]; - - return (unsafe { *PERM1231.get_unchecked((index % 1231) as usize) } as u32 * 1515361 + - unsafe { *PERM1231.get_unchecked(((index / 1231) % 1231) as usize) } as u32 * 1231 + - unsafe { - *PERM1231.get_unchecked(((index / 1515361) % 1231) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1865409391u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1237(index: u32) -> f32 { - const PERM1237: [u16; 1237] = [0, 725, 256, 981, 512, 128, 853, 384, 1109, 576, 64, 789, 320, - 1045, 661, 192, 917, 448, 1173, 32, 757, 288, 1013, 544, 160, - 885, 416, 1141, 629, 96, 821, 352, 1077, 693, 224, 949, 480, - 1205, 608, 16, 741, 272, 997, 528, 144, 869, 400, 1125, 592, - 80, 805, 336, 1061, 677, 208, 933, 464, 1189, 48, 773, 304, - 1029, 560, 176, 901, 432, 1157, 645, 112, 837, 368, 1093, 709, - 240, 965, 496, 1221, 8, 733, 264, 989, 520, 136, 861, 392, - 1117, 584, 72, 797, 328, 1053, 669, 200, 925, 456, 1181, 40, - 765, 296, 1021, 552, 168, 893, 424, 1149, 637, 104, 829, 360, - 1085, 701, 232, 957, 488, 1213, 621, 24, 749, 280, 1005, 536, - 152, 877, 408, 1133, 600, 88, 813, 344, 1069, 685, 216, 941, - 472, 1197, 56, 781, 312, 1037, 568, 184, 909, 440, 1165, 653, - 120, 845, 376, 1101, 717, 248, 973, 504, 1229, 616, 4, 729, - 260, 985, 516, 132, 857, 388, 1113, 580, 68, 793, 324, 1049, - 665, 196, 921, 452, 1177, 36, 761, 292, 1017, 548, 164, 889, - 420, 1145, 633, 100, 825, 356, 1081, 697, 228, 953, 484, 1209, - 612, 20, 745, 276, 1001, 532, 148, 873, 404, 1129, 596, 84, - 809, 340, 1065, 681, 212, 937, 468, 1193, 52, 777, 308, 1033, - 564, 180, 905, 436, 1161, 649, 116, 841, 372, 1097, 713, 244, - 969, 500, 1225, 12, 737, 268, 993, 524, 140, 865, 396, 1121, - 588, 76, 801, 332, 1057, 673, 204, 929, 460, 1185, 44, 769, - 300, 1025, 556, 172, 897, 428, 1153, 641, 108, 833, 364, 1089, - 705, 236, 961, 492, 1217, 625, 28, 753, 284, 1009, 540, 156, - 881, 412, 1137, 604, 92, 817, 348, 1073, 689, 220, 945, 476, - 1201, 60, 785, 316, 1041, 572, 188, 913, 444, 1169, 657, 124, - 849, 380, 1105, 721, 252, 977, 508, 1233, 2, 727, 258, 983, - 514, 130, 855, 386, 1111, 578, 66, 791, 322, 1047, 663, 194, - 919, 450, 1175, 34, 759, 290, 1015, 546, 162, 887, 418, 1143, - 631, 98, 823, 354, 1079, 695, 226, 951, 482, 1207, 610, 18, - 743, 274, 999, 530, 146, 871, 402, 1127, 594, 82, 807, 338, - 1063, 679, 210, 935, 466, 1191, 50, 775, 306, 1031, 562, 178, - 903, 434, 1159, 647, 114, 839, 370, 1095, 711, 242, 967, 498, - 1223, 10, 735, 266, 991, 522, 138, 863, 394, 1119, 586, 74, - 799, 330, 1055, 671, 202, 927, 458, 1183, 42, 767, 298, 1023, - 554, 170, 895, 426, 1151, 639, 106, 831, 362, 1087, 703, 234, - 959, 490, 1215, 623, 26, 751, 282, 1007, 538, 154, 879, 410, - 1135, 602, 90, 815, 346, 1071, 687, 218, 943, 474, 1199, 58, - 783, 314, 1039, 570, 186, 911, 442, 1167, 655, 122, 847, 378, - 1103, 719, 250, 975, 506, 1231, 619, 6, 731, 262, 987, 518, - 134, 859, 390, 1115, 582, 70, 795, 326, 1051, 667, 198, 923, - 454, 1179, 38, 763, 294, 1019, 550, 166, 891, 422, 1147, 635, - 102, 827, 358, 1083, 699, 230, 955, 486, 1211, 614, 22, 747, - 278, 1003, 534, 150, 875, 406, 1131, 598, 86, 811, 342, 1067, - 683, 214, 939, 470, 1195, 54, 779, 310, 1035, 566, 182, 907, - 438, 1163, 651, 118, 843, 374, 1099, 715, 246, 971, 502, 1227, - 14, 739, 270, 995, 526, 142, 867, 398, 1123, 590, 78, 803, 334, - 1059, 675, 206, 931, 462, 1187, 46, 771, 302, 1027, 558, 174, - 899, 430, 1155, 643, 110, 835, 366, 1091, 707, 238, 963, 494, - 1219, 627, 30, 755, 286, 1011, 542, 158, 883, 414, 1139, 606, - 94, 819, 350, 1075, 691, 222, 947, 478, 1203, 62, 787, 318, - 1043, 574, 190, 915, 446, 1171, 659, 126, 851, 382, 1107, 723, - 254, 979, 510, 1235, 618, 1, 726, 257, 982, 513, 129, 854, 385, - 1110, 577, 65, 790, 321, 1046, 662, 193, 918, 449, 1174, 33, - 758, 289, 1014, 545, 161, 886, 417, 1142, 630, 97, 822, 353, - 1078, 694, 225, 950, 481, 1206, 609, 17, 742, 273, 998, 529, - 145, 870, 401, 1126, 593, 81, 806, 337, 1062, 678, 209, 934, - 465, 1190, 49, 774, 305, 1030, 561, 177, 902, 433, 1158, 646, - 113, 838, 369, 1094, 710, 241, 966, 497, 1222, 9, 734, 265, - 990, 521, 137, 862, 393, 1118, 585, 73, 798, 329, 1054, 670, - 201, 926, 457, 1182, 41, 766, 297, 1022, 553, 169, 894, 425, - 1150, 638, 105, 830, 361, 1086, 702, 233, 958, 489, 1214, 622, - 25, 750, 281, 1006, 537, 153, 878, 409, 1134, 601, 89, 814, - 345, 1070, 686, 217, 942, 473, 1198, 57, 782, 313, 1038, 569, - 185, 910, 441, 1166, 654, 121, 846, 377, 1102, 718, 249, 974, - 505, 1230, 617, 5, 730, 261, 986, 517, 133, 858, 389, 1114, - 581, 69, 794, 325, 1050, 666, 197, 922, 453, 1178, 37, 762, - 293, 1018, 549, 165, 890, 421, 1146, 634, 101, 826, 357, 1082, - 698, 229, 954, 485, 1210, 613, 21, 746, 277, 1002, 533, 149, - 874, 405, 1130, 597, 85, 810, 341, 1066, 682, 213, 938, 469, - 1194, 53, 778, 309, 1034, 565, 181, 906, 437, 1162, 650, 117, - 842, 373, 1098, 714, 245, 970, 501, 1226, 13, 738, 269, 994, - 525, 141, 866, 397, 1122, 589, 77, 802, 333, 1058, 674, 205, - 930, 461, 1186, 45, 770, 301, 1026, 557, 173, 898, 429, 1154, - 642, 109, 834, 365, 1090, 706, 237, 962, 493, 1218, 626, 29, - 754, 285, 1010, 541, 157, 882, 413, 1138, 605, 93, 818, 349, - 1074, 690, 221, 946, 477, 1202, 61, 786, 317, 1042, 573, 189, - 914, 445, 1170, 658, 125, 850, 381, 1106, 722, 253, 978, 509, - 1234, 3, 728, 259, 984, 515, 131, 856, 387, 1112, 579, 67, 792, - 323, 1048, 664, 195, 920, 451, 1176, 35, 760, 291, 1016, 547, - 163, 888, 419, 1144, 632, 99, 824, 355, 1080, 696, 227, 952, - 483, 1208, 611, 19, 744, 275, 1000, 531, 147, 872, 403, 1128, - 595, 83, 808, 339, 1064, 680, 211, 936, 467, 1192, 51, 776, - 307, 1032, 563, 179, 904, 435, 1160, 648, 115, 840, 371, 1096, - 712, 243, 968, 499, 1224, 11, 736, 267, 992, 523, 139, 864, - 395, 1120, 587, 75, 800, 331, 1056, 672, 203, 928, 459, 1184, - 43, 768, 299, 1024, 555, 171, 896, 427, 1152, 640, 107, 832, - 363, 1088, 704, 235, 960, 491, 1216, 624, 27, 752, 283, 1008, - 539, 155, 880, 411, 1136, 603, 91, 816, 347, 1072, 688, 219, - 944, 475, 1200, 59, 784, 315, 1040, 571, 187, 912, 443, 1168, - 656, 123, 848, 379, 1104, 720, 251, 976, 507, 1232, 620, 7, - 732, 263, 988, 519, 135, 860, 391, 1116, 583, 71, 796, 327, - 1052, 668, 199, 924, 455, 1180, 39, 764, 295, 1020, 551, 167, - 892, 423, 1148, 636, 103, 828, 359, 1084, 700, 231, 956, 487, - 1212, 615, 23, 748, 279, 1004, 535, 151, 876, 407, 1132, 599, - 87, 812, 343, 1068, 684, 215, 940, 471, 1196, 55, 780, 311, - 1036, 567, 183, 908, 439, 1164, 652, 119, 844, 375, 1100, 716, - 247, 972, 503, 1228, 15, 740, 271, 996, 527, 143, 868, 399, - 1124, 591, 79, 804, 335, 1060, 676, 207, 932, 463, 1188, 47, - 772, 303, 1028, 559, 175, 900, 431, 1156, 644, 111, 836, 367, - 1092, 708, 239, 964, 495, 1220, 628, 31, 756, 287, 1012, 543, - 159, 884, 415, 1140, 607, 95, 820, 351, 1076, 692, 223, 948, - 479, 1204, 63, 788, 319, 1044, 575, 191, 916, 447, 1172, 660, - 127, 852, 383, 1108, 724, 255, 980, 511, 1236]; - - return (unsafe { *PERM1237.get_unchecked((index % 1237) as usize) } as u32 * 1530169 + - unsafe { *PERM1237.get_unchecked(((index / 1237) % 1237) as usize) } as u32 * 1237 + - unsafe { - *PERM1237.get_unchecked(((index / 1530169) % 1237) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1892819053u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1249(index: u32) -> f32 { - const PERM1249: [u16; 1249] = [0, 737, 256, 993, 512, 128, 865, 384, 1121, 576, 64, 801, 320, - 1057, 673, 192, 929, 448, 1185, 608, 32, 769, 288, 1025, 544, - 160, 897, 416, 1153, 641, 96, 833, 352, 1089, 705, 224, 961, - 480, 1217, 16, 753, 272, 1009, 528, 144, 881, 400, 1137, 592, - 80, 817, 336, 1073, 689, 208, 945, 464, 1201, 625, 48, 785, - 304, 1041, 560, 176, 913, 432, 1169, 657, 112, 849, 368, 1105, - 721, 240, 977, 496, 1233, 8, 745, 264, 1001, 520, 136, 873, - 392, 1129, 584, 72, 809, 328, 1065, 681, 200, 937, 456, 1193, - 616, 40, 777, 296, 1033, 552, 168, 905, 424, 1161, 649, 104, - 841, 360, 1097, 713, 232, 969, 488, 1225, 24, 761, 280, 1017, - 536, 152, 889, 408, 1145, 600, 88, 825, 344, 1081, 697, 216, - 953, 472, 1209, 633, 56, 793, 312, 1049, 568, 184, 921, 440, - 1177, 665, 120, 857, 376, 1113, 729, 248, 985, 504, 1241, 4, - 741, 260, 997, 516, 132, 869, 388, 1125, 580, 68, 805, 324, - 1061, 677, 196, 933, 452, 1189, 612, 36, 773, 292, 1029, 548, - 164, 901, 420, 1157, 645, 100, 837, 356, 1093, 709, 228, 965, - 484, 1221, 20, 757, 276, 1013, 532, 148, 885, 404, 1141, 596, - 84, 821, 340, 1077, 693, 212, 949, 468, 1205, 629, 52, 789, - 308, 1045, 564, 180, 917, 436, 1173, 661, 116, 853, 372, 1109, - 725, 244, 981, 500, 1237, 12, 749, 268, 1005, 524, 140, 877, - 396, 1133, 588, 76, 813, 332, 1069, 685, 204, 941, 460, 1197, - 620, 44, 781, 300, 1037, 556, 172, 909, 428, 1165, 653, 108, - 845, 364, 1101, 717, 236, 973, 492, 1229, 28, 765, 284, 1021, - 540, 156, 893, 412, 1149, 604, 92, 829, 348, 1085, 701, 220, - 957, 476, 1213, 637, 60, 797, 316, 1053, 572, 188, 925, 444, - 1181, 669, 124, 861, 380, 1117, 733, 252, 989, 508, 1245, 2, - 739, 258, 995, 514, 130, 867, 386, 1123, 578, 66, 803, 322, - 1059, 675, 194, 931, 450, 1187, 610, 34, 771, 290, 1027, 546, - 162, 899, 418, 1155, 643, 98, 835, 354, 1091, 707, 226, 963, - 482, 1219, 18, 755, 274, 1011, 530, 146, 883, 402, 1139, 594, - 82, 819, 338, 1075, 691, 210, 947, 466, 1203, 627, 50, 787, - 306, 1043, 562, 178, 915, 434, 1171, 659, 114, 851, 370, 1107, - 723, 242, 979, 498, 1235, 10, 747, 266, 1003, 522, 138, 875, - 394, 1131, 586, 74, 811, 330, 1067, 683, 202, 939, 458, 1195, - 618, 42, 779, 298, 1035, 554, 170, 907, 426, 1163, 651, 106, - 843, 362, 1099, 715, 234, 971, 490, 1227, 26, 763, 282, 1019, - 538, 154, 891, 410, 1147, 602, 90, 827, 346, 1083, 699, 218, - 955, 474, 1211, 635, 58, 795, 314, 1051, 570, 186, 923, 442, - 1179, 667, 122, 859, 378, 1115, 731, 250, 987, 506, 1243, 6, - 743, 262, 999, 518, 134, 871, 390, 1127, 582, 70, 807, 326, - 1063, 679, 198, 935, 454, 1191, 614, 38, 775, 294, 1031, 550, - 166, 903, 422, 1159, 647, 102, 839, 358, 1095, 711, 230, 967, - 486, 1223, 22, 759, 278, 1015, 534, 150, 887, 406, 1143, 598, - 86, 823, 342, 1079, 695, 214, 951, 470, 1207, 631, 54, 791, - 310, 1047, 566, 182, 919, 438, 1175, 663, 118, 855, 374, 1111, - 727, 246, 983, 502, 1239, 14, 751, 270, 1007, 526, 142, 879, - 398, 1135, 590, 78, 815, 334, 1071, 687, 206, 943, 462, 1199, - 622, 46, 783, 302, 1039, 558, 174, 911, 430, 1167, 655, 110, - 847, 366, 1103, 719, 238, 975, 494, 1231, 30, 767, 286, 1023, - 542, 158, 895, 414, 1151, 606, 94, 831, 350, 1087, 703, 222, - 959, 478, 1215, 639, 62, 799, 318, 1055, 574, 190, 927, 446, - 1183, 671, 126, 863, 382, 1119, 735, 254, 991, 510, 1247, 624, - 1, 738, 257, 994, 513, 129, 866, 385, 1122, 577, 65, 802, 321, - 1058, 674, 193, 930, 449, 1186, 609, 33, 770, 289, 1026, 545, - 161, 898, 417, 1154, 642, 97, 834, 353, 1090, 706, 225, 962, - 481, 1218, 17, 754, 273, 1010, 529, 145, 882, 401, 1138, 593, - 81, 818, 337, 1074, 690, 209, 946, 465, 1202, 626, 49, 786, - 305, 1042, 561, 177, 914, 433, 1170, 658, 113, 850, 369, 1106, - 722, 241, 978, 497, 1234, 9, 746, 265, 1002, 521, 137, 874, - 393, 1130, 585, 73, 810, 329, 1066, 682, 201, 938, 457, 1194, - 617, 41, 778, 297, 1034, 553, 169, 906, 425, 1162, 650, 105, - 842, 361, 1098, 714, 233, 970, 489, 1226, 25, 762, 281, 1018, - 537, 153, 890, 409, 1146, 601, 89, 826, 345, 1082, 698, 217, - 954, 473, 1210, 634, 57, 794, 313, 1050, 569, 185, 922, 441, - 1178, 666, 121, 858, 377, 1114, 730, 249, 986, 505, 1242, 5, - 742, 261, 998, 517, 133, 870, 389, 1126, 581, 69, 806, 325, - 1062, 678, 197, 934, 453, 1190, 613, 37, 774, 293, 1030, 549, - 165, 902, 421, 1158, 646, 101, 838, 357, 1094, 710, 229, 966, - 485, 1222, 21, 758, 277, 1014, 533, 149, 886, 405, 1142, 597, - 85, 822, 341, 1078, 694, 213, 950, 469, 1206, 630, 53, 790, - 309, 1046, 565, 181, 918, 437, 1174, 662, 117, 854, 373, 1110, - 726, 245, 982, 501, 1238, 13, 750, 269, 1006, 525, 141, 878, - 397, 1134, 589, 77, 814, 333, 1070, 686, 205, 942, 461, 1198, - 621, 45, 782, 301, 1038, 557, 173, 910, 429, 1166, 654, 109, - 846, 365, 1102, 718, 237, 974, 493, 1230, 29, 766, 285, 1022, - 541, 157, 894, 413, 1150, 605, 93, 830, 349, 1086, 702, 221, - 958, 477, 1214, 638, 61, 798, 317, 1054, 573, 189, 926, 445, - 1182, 670, 125, 862, 381, 1118, 734, 253, 990, 509, 1246, 3, - 740, 259, 996, 515, 131, 868, 387, 1124, 579, 67, 804, 323, - 1060, 676, 195, 932, 451, 1188, 611, 35, 772, 291, 1028, 547, - 163, 900, 419, 1156, 644, 99, 836, 355, 1092, 708, 227, 964, - 483, 1220, 19, 756, 275, 1012, 531, 147, 884, 403, 1140, 595, - 83, 820, 339, 1076, 692, 211, 948, 467, 1204, 628, 51, 788, - 307, 1044, 563, 179, 916, 435, 1172, 660, 115, 852, 371, 1108, - 724, 243, 980, 499, 1236, 11, 748, 267, 1004, 523, 139, 876, - 395, 1132, 587, 75, 812, 331, 1068, 684, 203, 940, 459, 1196, - 619, 43, 780, 299, 1036, 555, 171, 908, 427, 1164, 652, 107, - 844, 363, 1100, 716, 235, 972, 491, 1228, 27, 764, 283, 1020, - 539, 155, 892, 411, 1148, 603, 91, 828, 347, 1084, 700, 219, - 956, 475, 1212, 636, 59, 796, 315, 1052, 571, 187, 924, 443, - 1180, 668, 123, 860, 379, 1116, 732, 251, 988, 507, 1244, 7, - 744, 263, 1000, 519, 135, 872, 391, 1128, 583, 71, 808, 327, - 1064, 680, 199, 936, 455, 1192, 615, 39, 776, 295, 1032, 551, - 167, 904, 423, 1160, 648, 103, 840, 359, 1096, 712, 231, 968, - 487, 1224, 23, 760, 279, 1016, 535, 151, 888, 407, 1144, 599, - 87, 824, 343, 1080, 696, 215, 952, 471, 1208, 632, 55, 792, - 311, 1048, 567, 183, 920, 439, 1176, 664, 119, 856, 375, 1112, - 728, 247, 984, 503, 1240, 15, 752, 271, 1008, 527, 143, 880, - 399, 1136, 591, 79, 816, 335, 1072, 688, 207, 944, 463, 1200, - 623, 47, 784, 303, 1040, 559, 175, 912, 431, 1168, 656, 111, - 848, 367, 1104, 720, 239, 976, 495, 1232, 31, 768, 287, 1024, - 543, 159, 896, 415, 1152, 607, 95, 832, 351, 1088, 704, 223, - 960, 479, 1216, 640, 63, 800, 319, 1056, 575, 191, 928, 447, - 1184, 672, 127, 864, 383, 1120, 736, 255, 992, 511, 1248]; - - return (unsafe { *PERM1249.get_unchecked((index % 1249) as usize) } as u32 * 1560001 + - unsafe { *PERM1249.get_unchecked(((index / 1249) % 1249) as usize) } as u32 * 1249 + - unsafe { - *PERM1249.get_unchecked(((index / 1560001) % 1249) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1948441249u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1259(index: u32) -> f32 { - const PERM1259: [u16; 1259] = [0, 747, 256, 1003, 512, 128, 875, 384, 1131, 576, 64, 811, 320, - 1067, 683, 192, 939, 448, 1195, 608, 32, 779, 288, 1035, 544, - 160, 907, 416, 1163, 651, 96, 843, 352, 1099, 715, 224, 971, - 480, 1227, 16, 763, 272, 1019, 528, 144, 891, 400, 1147, 592, - 80, 827, 336, 1083, 699, 208, 955, 464, 1211, 635, 48, 795, - 304, 1051, 560, 176, 923, 432, 1179, 667, 112, 859, 368, 1115, - 731, 240, 987, 496, 1243, 624, 8, 755, 264, 1011, 520, 136, - 883, 392, 1139, 584, 72, 819, 328, 1075, 691, 200, 947, 456, - 1203, 616, 40, 787, 296, 1043, 552, 168, 915, 424, 1171, 659, - 104, 851, 360, 1107, 723, 232, 979, 488, 1235, 24, 771, 280, - 1027, 536, 152, 899, 408, 1155, 600, 88, 835, 344, 1091, 707, - 216, 963, 472, 1219, 643, 56, 803, 312, 1059, 568, 184, 931, - 440, 1187, 675, 120, 867, 376, 1123, 739, 248, 995, 504, 1251, - 4, 751, 260, 1007, 516, 132, 879, 388, 1135, 580, 68, 815, 324, - 1071, 687, 196, 943, 452, 1199, 612, 36, 783, 292, 1039, 548, - 164, 911, 420, 1167, 655, 100, 847, 356, 1103, 719, 228, 975, - 484, 1231, 20, 767, 276, 1023, 532, 148, 895, 404, 1151, 596, - 84, 831, 340, 1087, 703, 212, 959, 468, 1215, 639, 52, 799, - 308, 1055, 564, 180, 927, 436, 1183, 671, 116, 863, 372, 1119, - 735, 244, 991, 500, 1247, 631, 12, 759, 268, 1015, 524, 140, - 887, 396, 1143, 588, 76, 823, 332, 1079, 695, 204, 951, 460, - 1207, 620, 44, 791, 300, 1047, 556, 172, 919, 428, 1175, 663, - 108, 855, 364, 1111, 727, 236, 983, 492, 1239, 28, 775, 284, - 1031, 540, 156, 903, 412, 1159, 604, 92, 839, 348, 1095, 711, - 220, 967, 476, 1223, 647, 60, 807, 316, 1063, 572, 188, 935, - 444, 1191, 679, 124, 871, 380, 1127, 743, 252, 999, 508, 1255, - 628, 2, 749, 258, 1005, 514, 130, 877, 386, 1133, 578, 66, 813, - 322, 1069, 685, 194, 941, 450, 1197, 610, 34, 781, 290, 1037, - 546, 162, 909, 418, 1165, 653, 98, 845, 354, 1101, 717, 226, - 973, 482, 1229, 18, 765, 274, 1021, 530, 146, 893, 402, 1149, - 594, 82, 829, 338, 1085, 701, 210, 957, 466, 1213, 637, 50, - 797, 306, 1053, 562, 178, 925, 434, 1181, 669, 114, 861, 370, - 1117, 733, 242, 989, 498, 1245, 626, 10, 757, 266, 1013, 522, - 138, 885, 394, 1141, 586, 74, 821, 330, 1077, 693, 202, 949, - 458, 1205, 618, 42, 789, 298, 1045, 554, 170, 917, 426, 1173, - 661, 106, 853, 362, 1109, 725, 234, 981, 490, 1237, 26, 773, - 282, 1029, 538, 154, 901, 410, 1157, 602, 90, 837, 346, 1093, - 709, 218, 965, 474, 1221, 645, 58, 805, 314, 1061, 570, 186, - 933, 442, 1189, 677, 122, 869, 378, 1125, 741, 250, 997, 506, - 1253, 6, 753, 262, 1009, 518, 134, 881, 390, 1137, 582, 70, - 817, 326, 1073, 689, 198, 945, 454, 1201, 614, 38, 785, 294, - 1041, 550, 166, 913, 422, 1169, 657, 102, 849, 358, 1105, 721, - 230, 977, 486, 1233, 22, 769, 278, 1025, 534, 150, 897, 406, - 1153, 598, 86, 833, 342, 1089, 705, 214, 961, 470, 1217, 641, - 54, 801, 310, 1057, 566, 182, 929, 438, 1185, 673, 118, 865, - 374, 1121, 737, 246, 993, 502, 1249, 633, 14, 761, 270, 1017, - 526, 142, 889, 398, 1145, 590, 78, 825, 334, 1081, 697, 206, - 953, 462, 1209, 622, 46, 793, 302, 1049, 558, 174, 921, 430, - 1177, 665, 110, 857, 366, 1113, 729, 238, 985, 494, 1241, 30, - 777, 286, 1033, 542, 158, 905, 414, 1161, 606, 94, 841, 350, - 1097, 713, 222, 969, 478, 1225, 649, 62, 809, 318, 1065, 574, - 190, 937, 446, 1193, 681, 126, 873, 382, 1129, 745, 254, 1001, - 510, 1257, 629, 1, 748, 257, 1004, 513, 129, 876, 385, 1132, - 577, 65, 812, 321, 1068, 684, 193, 940, 449, 1196, 609, 33, - 780, 289, 1036, 545, 161, 908, 417, 1164, 652, 97, 844, 353, - 1100, 716, 225, 972, 481, 1228, 17, 764, 273, 1020, 529, 145, - 892, 401, 1148, 593, 81, 828, 337, 1084, 700, 209, 956, 465, - 1212, 636, 49, 796, 305, 1052, 561, 177, 924, 433, 1180, 668, - 113, 860, 369, 1116, 732, 241, 988, 497, 1244, 625, 9, 756, - 265, 1012, 521, 137, 884, 393, 1140, 585, 73, 820, 329, 1076, - 692, 201, 948, 457, 1204, 617, 41, 788, 297, 1044, 553, 169, - 916, 425, 1172, 660, 105, 852, 361, 1108, 724, 233, 980, 489, - 1236, 25, 772, 281, 1028, 537, 153, 900, 409, 1156, 601, 89, - 836, 345, 1092, 708, 217, 964, 473, 1220, 644, 57, 804, 313, - 1060, 569, 185, 932, 441, 1188, 676, 121, 868, 377, 1124, 740, - 249, 996, 505, 1252, 5, 752, 261, 1008, 517, 133, 880, 389, - 1136, 581, 69, 816, 325, 1072, 688, 197, 944, 453, 1200, 613, - 37, 784, 293, 1040, 549, 165, 912, 421, 1168, 656, 101, 848, - 357, 1104, 720, 229, 976, 485, 1232, 21, 768, 277, 1024, 533, - 149, 896, 405, 1152, 597, 85, 832, 341, 1088, 704, 213, 960, - 469, 1216, 640, 53, 800, 309, 1056, 565, 181, 928, 437, 1184, - 672, 117, 864, 373, 1120, 736, 245, 992, 501, 1248, 632, 13, - 760, 269, 1016, 525, 141, 888, 397, 1144, 589, 77, 824, 333, - 1080, 696, 205, 952, 461, 1208, 621, 45, 792, 301, 1048, 557, - 173, 920, 429, 1176, 664, 109, 856, 365, 1112, 728, 237, 984, - 493, 1240, 29, 776, 285, 1032, 541, 157, 904, 413, 1160, 605, - 93, 840, 349, 1096, 712, 221, 968, 477, 1224, 648, 61, 808, - 317, 1064, 573, 189, 936, 445, 1192, 680, 125, 872, 381, 1128, - 744, 253, 1000, 509, 1256, 630, 3, 750, 259, 1006, 515, 131, - 878, 387, 1134, 579, 67, 814, 323, 1070, 686, 195, 942, 451, - 1198, 611, 35, 782, 291, 1038, 547, 163, 910, 419, 1166, 654, - 99, 846, 355, 1102, 718, 227, 974, 483, 1230, 19, 766, 275, - 1022, 531, 147, 894, 403, 1150, 595, 83, 830, 339, 1086, 702, - 211, 958, 467, 1214, 638, 51, 798, 307, 1054, 563, 179, 926, - 435, 1182, 670, 115, 862, 371, 1118, 734, 243, 990, 499, 1246, - 627, 11, 758, 267, 1014, 523, 139, 886, 395, 1142, 587, 75, - 822, 331, 1078, 694, 203, 950, 459, 1206, 619, 43, 790, 299, - 1046, 555, 171, 918, 427, 1174, 662, 107, 854, 363, 1110, 726, - 235, 982, 491, 1238, 27, 774, 283, 1030, 539, 155, 902, 411, - 1158, 603, 91, 838, 347, 1094, 710, 219, 966, 475, 1222, 646, - 59, 806, 315, 1062, 571, 187, 934, 443, 1190, 678, 123, 870, - 379, 1126, 742, 251, 998, 507, 1254, 7, 754, 263, 1010, 519, - 135, 882, 391, 1138, 583, 71, 818, 327, 1074, 690, 199, 946, - 455, 1202, 615, 39, 786, 295, 1042, 551, 167, 914, 423, 1170, - 658, 103, 850, 359, 1106, 722, 231, 978, 487, 1234, 23, 770, - 279, 1026, 535, 151, 898, 407, 1154, 599, 87, 834, 343, 1090, - 706, 215, 962, 471, 1218, 642, 55, 802, 311, 1058, 567, 183, - 930, 439, 1186, 674, 119, 866, 375, 1122, 738, 247, 994, 503, - 1250, 634, 15, 762, 271, 1018, 527, 143, 890, 399, 1146, 591, - 79, 826, 335, 1082, 698, 207, 954, 463, 1210, 623, 47, 794, - 303, 1050, 559, 175, 922, 431, 1178, 666, 111, 858, 367, 1114, - 730, 239, 986, 495, 1242, 31, 778, 287, 1034, 543, 159, 906, - 415, 1162, 607, 95, 842, 351, 1098, 714, 223, 970, 479, 1226, - 650, 63, 810, 319, 1066, 575, 191, 938, 447, 1194, 682, 127, - 874, 383, 1130, 746, 255, 1002, 511, 1258]; - - return (unsafe { *PERM1259.get_unchecked((index % 1259) as usize) } as u32 * 1585081 + - unsafe { *PERM1259.get_unchecked(((index / 1259) % 1259) as usize) } as u32 * 1259 + - unsafe { - *PERM1259.get_unchecked(((index / 1585081) % 1259) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (1995616979u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1277(index: u32) -> f32 { - const PERM1277: [u16; 1277] = [0, 765, 256, 1021, 512, 128, 893, 384, 1149, 576, 64, 829, 320, - 1085, 701, 192, 957, 448, 1213, 608, 32, 797, 288, 1053, 544, - 160, 925, 416, 1181, 669, 96, 861, 352, 1117, 733, 224, 989, - 480, 1245, 624, 16, 781, 272, 1037, 528, 144, 909, 400, 1165, - 592, 80, 845, 336, 1101, 717, 208, 973, 464, 1229, 653, 48, - 813, 304, 1069, 560, 176, 941, 432, 1197, 685, 112, 877, 368, - 1133, 749, 240, 1005, 496, 1261, 632, 8, 773, 264, 1029, 520, - 136, 901, 392, 1157, 584, 72, 837, 328, 1093, 709, 200, 965, - 456, 1221, 616, 40, 805, 296, 1061, 552, 168, 933, 424, 1189, - 677, 104, 869, 360, 1125, 741, 232, 997, 488, 1253, 645, 24, - 789, 280, 1045, 536, 152, 917, 408, 1173, 600, 88, 853, 344, - 1109, 725, 216, 981, 472, 1237, 661, 56, 821, 312, 1077, 568, - 184, 949, 440, 1205, 693, 120, 885, 376, 1141, 757, 248, 1013, - 504, 1269, 636, 4, 769, 260, 1025, 516, 132, 897, 388, 1153, - 580, 68, 833, 324, 1089, 705, 196, 961, 452, 1217, 612, 36, - 801, 292, 1057, 548, 164, 929, 420, 1185, 673, 100, 865, 356, - 1121, 737, 228, 993, 484, 1249, 628, 20, 785, 276, 1041, 532, - 148, 913, 404, 1169, 596, 84, 849, 340, 1105, 721, 212, 977, - 468, 1233, 657, 52, 817, 308, 1073, 564, 180, 945, 436, 1201, - 689, 116, 881, 372, 1137, 753, 244, 1009, 500, 1265, 641, 12, - 777, 268, 1033, 524, 140, 905, 396, 1161, 588, 76, 841, 332, - 1097, 713, 204, 969, 460, 1225, 620, 44, 809, 300, 1065, 556, - 172, 937, 428, 1193, 681, 108, 873, 364, 1129, 745, 236, 1001, - 492, 1257, 649, 28, 793, 284, 1049, 540, 156, 921, 412, 1177, - 604, 92, 857, 348, 1113, 729, 220, 985, 476, 1241, 665, 60, - 825, 316, 1081, 572, 188, 953, 444, 1209, 697, 124, 889, 380, - 1145, 761, 252, 1017, 508, 1273, 2, 767, 258, 1023, 514, 130, - 895, 386, 1151, 578, 66, 831, 322, 1087, 703, 194, 959, 450, - 1215, 610, 34, 799, 290, 1055, 546, 162, 927, 418, 1183, 671, - 98, 863, 354, 1119, 735, 226, 991, 482, 1247, 626, 18, 783, - 274, 1039, 530, 146, 911, 402, 1167, 594, 82, 847, 338, 1103, - 719, 210, 975, 466, 1231, 655, 50, 815, 306, 1071, 562, 178, - 943, 434, 1199, 687, 114, 879, 370, 1135, 751, 242, 1007, 498, - 1263, 634, 10, 775, 266, 1031, 522, 138, 903, 394, 1159, 586, - 74, 839, 330, 1095, 711, 202, 967, 458, 1223, 618, 42, 807, - 298, 1063, 554, 170, 935, 426, 1191, 679, 106, 871, 362, 1127, - 743, 234, 999, 490, 1255, 647, 26, 791, 282, 1047, 538, 154, - 919, 410, 1175, 602, 90, 855, 346, 1111, 727, 218, 983, 474, - 1239, 663, 58, 823, 314, 1079, 570, 186, 951, 442, 1207, 695, - 122, 887, 378, 1143, 759, 250, 1015, 506, 1271, 639, 6, 771, - 262, 1027, 518, 134, 899, 390, 1155, 582, 70, 835, 326, 1091, - 707, 198, 963, 454, 1219, 614, 38, 803, 294, 1059, 550, 166, - 931, 422, 1187, 675, 102, 867, 358, 1123, 739, 230, 995, 486, - 1251, 630, 22, 787, 278, 1043, 534, 150, 915, 406, 1171, 598, - 86, 851, 342, 1107, 723, 214, 979, 470, 1235, 659, 54, 819, - 310, 1075, 566, 182, 947, 438, 1203, 691, 118, 883, 374, 1139, - 755, 246, 1011, 502, 1267, 643, 14, 779, 270, 1035, 526, 142, - 907, 398, 1163, 590, 78, 843, 334, 1099, 715, 206, 971, 462, - 1227, 622, 46, 811, 302, 1067, 558, 174, 939, 430, 1195, 683, - 110, 875, 366, 1131, 747, 238, 1003, 494, 1259, 651, 30, 795, - 286, 1051, 542, 158, 923, 414, 1179, 606, 94, 859, 350, 1115, - 731, 222, 987, 478, 1243, 667, 62, 827, 318, 1083, 574, 190, - 955, 446, 1211, 699, 126, 891, 382, 1147, 763, 254, 1019, 510, - 1275, 638, 1, 766, 257, 1022, 513, 129, 894, 385, 1150, 577, - 65, 830, 321, 1086, 702, 193, 958, 449, 1214, 609, 33, 798, - 289, 1054, 545, 161, 926, 417, 1182, 670, 97, 862, 353, 1118, - 734, 225, 990, 481, 1246, 625, 17, 782, 273, 1038, 529, 145, - 910, 401, 1166, 593, 81, 846, 337, 1102, 718, 209, 974, 465, - 1230, 654, 49, 814, 305, 1070, 561, 177, 942, 433, 1198, 686, - 113, 878, 369, 1134, 750, 241, 1006, 497, 1262, 633, 9, 774, - 265, 1030, 521, 137, 902, 393, 1158, 585, 73, 838, 329, 1094, - 710, 201, 966, 457, 1222, 617, 41, 806, 297, 1062, 553, 169, - 934, 425, 1190, 678, 105, 870, 361, 1126, 742, 233, 998, 489, - 1254, 646, 25, 790, 281, 1046, 537, 153, 918, 409, 1174, 601, - 89, 854, 345, 1110, 726, 217, 982, 473, 1238, 662, 57, 822, - 313, 1078, 569, 185, 950, 441, 1206, 694, 121, 886, 377, 1142, - 758, 249, 1014, 505, 1270, 637, 5, 770, 261, 1026, 517, 133, - 898, 389, 1154, 581, 69, 834, 325, 1090, 706, 197, 962, 453, - 1218, 613, 37, 802, 293, 1058, 549, 165, 930, 421, 1186, 674, - 101, 866, 357, 1122, 738, 229, 994, 485, 1250, 629, 21, 786, - 277, 1042, 533, 149, 914, 405, 1170, 597, 85, 850, 341, 1106, - 722, 213, 978, 469, 1234, 658, 53, 818, 309, 1074, 565, 181, - 946, 437, 1202, 690, 117, 882, 373, 1138, 754, 245, 1010, 501, - 1266, 642, 13, 778, 269, 1034, 525, 141, 906, 397, 1162, 589, - 77, 842, 333, 1098, 714, 205, 970, 461, 1226, 621, 45, 810, - 301, 1066, 557, 173, 938, 429, 1194, 682, 109, 874, 365, 1130, - 746, 237, 1002, 493, 1258, 650, 29, 794, 285, 1050, 541, 157, - 922, 413, 1178, 605, 93, 858, 349, 1114, 730, 221, 986, 477, - 1242, 666, 61, 826, 317, 1082, 573, 189, 954, 445, 1210, 698, - 125, 890, 381, 1146, 762, 253, 1018, 509, 1274, 3, 768, 259, - 1024, 515, 131, 896, 387, 1152, 579, 67, 832, 323, 1088, 704, - 195, 960, 451, 1216, 611, 35, 800, 291, 1056, 547, 163, 928, - 419, 1184, 672, 99, 864, 355, 1120, 736, 227, 992, 483, 1248, - 627, 19, 784, 275, 1040, 531, 147, 912, 403, 1168, 595, 83, - 848, 339, 1104, 720, 211, 976, 467, 1232, 656, 51, 816, 307, - 1072, 563, 179, 944, 435, 1200, 688, 115, 880, 371, 1136, 752, - 243, 1008, 499, 1264, 635, 11, 776, 267, 1032, 523, 139, 904, - 395, 1160, 587, 75, 840, 331, 1096, 712, 203, 968, 459, 1224, - 619, 43, 808, 299, 1064, 555, 171, 936, 427, 1192, 680, 107, - 872, 363, 1128, 744, 235, 1000, 491, 1256, 648, 27, 792, 283, - 1048, 539, 155, 920, 411, 1176, 603, 91, 856, 347, 1112, 728, - 219, 984, 475, 1240, 664, 59, 824, 315, 1080, 571, 187, 952, - 443, 1208, 696, 123, 888, 379, 1144, 760, 251, 1016, 507, 1272, - 640, 7, 772, 263, 1028, 519, 135, 900, 391, 1156, 583, 71, 836, - 327, 1092, 708, 199, 964, 455, 1220, 615, 39, 804, 295, 1060, - 551, 167, 932, 423, 1188, 676, 103, 868, 359, 1124, 740, 231, - 996, 487, 1252, 631, 23, 788, 279, 1044, 535, 151, 916, 407, - 1172, 599, 87, 852, 343, 1108, 724, 215, 980, 471, 1236, 660, - 55, 820, 311, 1076, 567, 183, 948, 439, 1204, 692, 119, 884, - 375, 1140, 756, 247, 1012, 503, 1268, 644, 15, 780, 271, 1036, - 527, 143, 908, 399, 1164, 591, 79, 844, 335, 1100, 716, 207, - 972, 463, 1228, 623, 47, 812, 303, 1068, 559, 175, 940, 431, - 1196, 684, 111, 876, 367, 1132, 748, 239, 1004, 495, 1260, 652, - 31, 796, 287, 1052, 543, 159, 924, 415, 1180, 607, 95, 860, - 351, 1116, 732, 223, 988, 479, 1244, 668, 63, 828, 319, 1084, - 575, 191, 956, 447, 1212, 700, 127, 892, 383, 1148, 764, 255, - 1020, 511, 1276]; - - return (unsafe { *PERM1277.get_unchecked((index % 1277) as usize) } as u32 * 1630729 + - unsafe { *PERM1277.get_unchecked(((index / 1277) % 1277) as usize) } as u32 * 1277 + - unsafe { - *PERM1277.get_unchecked(((index / 1630729) % 1277) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2082440933u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1279(index: u32) -> f32 { - const PERM1279: [u16; 1279] = [0, 767, 256, 1023, 512, 128, 895, 384, 1151, 576, 64, 831, 320, - 1087, 703, 192, 959, 448, 1215, 608, 32, 799, 288, 1055, 544, - 160, 927, 416, 1183, 671, 96, 863, 352, 1119, 735, 224, 991, - 480, 1247, 624, 16, 783, 272, 1039, 528, 144, 911, 400, 1167, - 592, 80, 847, 336, 1103, 719, 208, 975, 464, 1231, 655, 48, - 815, 304, 1071, 560, 176, 943, 432, 1199, 687, 112, 879, 368, - 1135, 751, 240, 1007, 496, 1263, 632, 8, 775, 264, 1031, 520, - 136, 903, 392, 1159, 584, 72, 839, 328, 1095, 711, 200, 967, - 456, 1223, 616, 40, 807, 296, 1063, 552, 168, 935, 424, 1191, - 679, 104, 871, 360, 1127, 743, 232, 999, 488, 1255, 647, 24, - 791, 280, 1047, 536, 152, 919, 408, 1175, 600, 88, 855, 344, - 1111, 727, 216, 983, 472, 1239, 663, 56, 823, 312, 1079, 568, - 184, 951, 440, 1207, 695, 120, 887, 376, 1143, 759, 248, 1015, - 504, 1271, 636, 4, 771, 260, 1027, 516, 132, 899, 388, 1155, - 580, 68, 835, 324, 1091, 707, 196, 963, 452, 1219, 612, 36, - 803, 292, 1059, 548, 164, 931, 420, 1187, 675, 100, 867, 356, - 1123, 739, 228, 995, 484, 1251, 628, 20, 787, 276, 1043, 532, - 148, 915, 404, 1171, 596, 84, 851, 340, 1107, 723, 212, 979, - 468, 1235, 659, 52, 819, 308, 1075, 564, 180, 947, 436, 1203, - 691, 116, 883, 372, 1139, 755, 244, 1011, 500, 1267, 643, 12, - 779, 268, 1035, 524, 140, 907, 396, 1163, 588, 76, 843, 332, - 1099, 715, 204, 971, 460, 1227, 620, 44, 811, 300, 1067, 556, - 172, 939, 428, 1195, 683, 108, 875, 364, 1131, 747, 236, 1003, - 492, 1259, 651, 28, 795, 284, 1051, 540, 156, 923, 412, 1179, - 604, 92, 859, 348, 1115, 731, 220, 987, 476, 1243, 667, 60, - 827, 316, 1083, 572, 188, 955, 444, 1211, 699, 124, 891, 380, - 1147, 763, 252, 1019, 508, 1275, 638, 2, 769, 258, 1025, 514, - 130, 897, 386, 1153, 578, 66, 833, 322, 1089, 705, 194, 961, - 450, 1217, 610, 34, 801, 290, 1057, 546, 162, 929, 418, 1185, - 673, 98, 865, 354, 1121, 737, 226, 993, 482, 1249, 626, 18, - 785, 274, 1041, 530, 146, 913, 402, 1169, 594, 82, 849, 338, - 1105, 721, 210, 977, 466, 1233, 657, 50, 817, 306, 1073, 562, - 178, 945, 434, 1201, 689, 114, 881, 370, 1137, 753, 242, 1009, - 498, 1265, 634, 10, 777, 266, 1033, 522, 138, 905, 394, 1161, - 586, 74, 841, 330, 1097, 713, 202, 969, 458, 1225, 618, 42, - 809, 298, 1065, 554, 170, 937, 426, 1193, 681, 106, 873, 362, - 1129, 745, 234, 1001, 490, 1257, 649, 26, 793, 282, 1049, 538, - 154, 921, 410, 1177, 602, 90, 857, 346, 1113, 729, 218, 985, - 474, 1241, 665, 58, 825, 314, 1081, 570, 186, 953, 442, 1209, - 697, 122, 889, 378, 1145, 761, 250, 1017, 506, 1273, 641, 6, - 773, 262, 1029, 518, 134, 901, 390, 1157, 582, 70, 837, 326, - 1093, 709, 198, 965, 454, 1221, 614, 38, 805, 294, 1061, 550, - 166, 933, 422, 1189, 677, 102, 869, 358, 1125, 741, 230, 997, - 486, 1253, 630, 22, 789, 278, 1045, 534, 150, 917, 406, 1173, - 598, 86, 853, 342, 1109, 725, 214, 981, 470, 1237, 661, 54, - 821, 310, 1077, 566, 182, 949, 438, 1205, 693, 118, 885, 374, - 1141, 757, 246, 1013, 502, 1269, 645, 14, 781, 270, 1037, 526, - 142, 909, 398, 1165, 590, 78, 845, 334, 1101, 717, 206, 973, - 462, 1229, 622, 46, 813, 302, 1069, 558, 174, 941, 430, 1197, - 685, 110, 877, 366, 1133, 749, 238, 1005, 494, 1261, 653, 30, - 797, 286, 1053, 542, 158, 925, 414, 1181, 606, 94, 861, 350, - 1117, 733, 222, 989, 478, 1245, 669, 62, 829, 318, 1085, 574, - 190, 957, 446, 1213, 701, 126, 893, 382, 1149, 765, 254, 1021, - 510, 1277, 639, 1, 768, 257, 1024, 513, 129, 896, 385, 1152, - 577, 65, 832, 321, 1088, 704, 193, 960, 449, 1216, 609, 33, - 800, 289, 1056, 545, 161, 928, 417, 1184, 672, 97, 864, 353, - 1120, 736, 225, 992, 481, 1248, 625, 17, 784, 273, 1040, 529, - 145, 912, 401, 1168, 593, 81, 848, 337, 1104, 720, 209, 976, - 465, 1232, 656, 49, 816, 305, 1072, 561, 177, 944, 433, 1200, - 688, 113, 880, 369, 1136, 752, 241, 1008, 497, 1264, 633, 9, - 776, 265, 1032, 521, 137, 904, 393, 1160, 585, 73, 840, 329, - 1096, 712, 201, 968, 457, 1224, 617, 41, 808, 297, 1064, 553, - 169, 936, 425, 1192, 680, 105, 872, 361, 1128, 744, 233, 1000, - 489, 1256, 648, 25, 792, 281, 1048, 537, 153, 920, 409, 1176, - 601, 89, 856, 345, 1112, 728, 217, 984, 473, 1240, 664, 57, - 824, 313, 1080, 569, 185, 952, 441, 1208, 696, 121, 888, 377, - 1144, 760, 249, 1016, 505, 1272, 637, 5, 772, 261, 1028, 517, - 133, 900, 389, 1156, 581, 69, 836, 325, 1092, 708, 197, 964, - 453, 1220, 613, 37, 804, 293, 1060, 549, 165, 932, 421, 1188, - 676, 101, 868, 357, 1124, 740, 229, 996, 485, 1252, 629, 21, - 788, 277, 1044, 533, 149, 916, 405, 1172, 597, 85, 852, 341, - 1108, 724, 213, 980, 469, 1236, 660, 53, 820, 309, 1076, 565, - 181, 948, 437, 1204, 692, 117, 884, 373, 1140, 756, 245, 1012, - 501, 1268, 644, 13, 780, 269, 1036, 525, 141, 908, 397, 1164, - 589, 77, 844, 333, 1100, 716, 205, 972, 461, 1228, 621, 45, - 812, 301, 1068, 557, 173, 940, 429, 1196, 684, 109, 876, 365, - 1132, 748, 237, 1004, 493, 1260, 652, 29, 796, 285, 1052, 541, - 157, 924, 413, 1180, 605, 93, 860, 349, 1116, 732, 221, 988, - 477, 1244, 668, 61, 828, 317, 1084, 573, 189, 956, 445, 1212, - 700, 125, 892, 381, 1148, 764, 253, 1020, 509, 1276, 640, 3, - 770, 259, 1026, 515, 131, 898, 387, 1154, 579, 67, 834, 323, - 1090, 706, 195, 962, 451, 1218, 611, 35, 802, 291, 1058, 547, - 163, 930, 419, 1186, 674, 99, 866, 355, 1122, 738, 227, 994, - 483, 1250, 627, 19, 786, 275, 1042, 531, 147, 914, 403, 1170, - 595, 83, 850, 339, 1106, 722, 211, 978, 467, 1234, 658, 51, - 818, 307, 1074, 563, 179, 946, 435, 1202, 690, 115, 882, 371, - 1138, 754, 243, 1010, 499, 1266, 635, 11, 778, 267, 1034, 523, - 139, 906, 395, 1162, 587, 75, 842, 331, 1098, 714, 203, 970, - 459, 1226, 619, 43, 810, 299, 1066, 555, 171, 938, 427, 1194, - 682, 107, 874, 363, 1130, 746, 235, 1002, 491, 1258, 650, 27, - 794, 283, 1050, 539, 155, 922, 411, 1178, 603, 91, 858, 347, - 1114, 730, 219, 986, 475, 1242, 666, 59, 826, 315, 1082, 571, - 187, 954, 443, 1210, 698, 123, 890, 379, 1146, 762, 251, 1018, - 507, 1274, 642, 7, 774, 263, 1030, 519, 135, 902, 391, 1158, - 583, 71, 838, 327, 1094, 710, 199, 966, 455, 1222, 615, 39, - 806, 295, 1062, 551, 167, 934, 423, 1190, 678, 103, 870, 359, - 1126, 742, 231, 998, 487, 1254, 631, 23, 790, 279, 1046, 535, - 151, 918, 407, 1174, 599, 87, 854, 343, 1110, 726, 215, 982, - 471, 1238, 662, 55, 822, 311, 1078, 567, 183, 950, 439, 1206, - 694, 119, 886, 375, 1142, 758, 247, 1014, 503, 1270, 646, 15, - 782, 271, 1038, 527, 143, 910, 399, 1166, 591, 79, 846, 335, - 1102, 718, 207, 974, 463, 1230, 623, 47, 814, 303, 1070, 559, - 175, 942, 431, 1198, 686, 111, 878, 367, 1134, 750, 239, 1006, - 495, 1262, 654, 31, 798, 287, 1054, 543, 159, 926, 415, 1182, - 607, 95, 862, 351, 1118, 734, 223, 990, 479, 1246, 670, 63, - 830, 319, 1086, 575, 191, 958, 447, 1214, 702, 127, 894, 383, - 1150, 766, 255, 1022, 511, 1278]; - - return (unsafe { *PERM1279.get_unchecked((index % 1279) as usize) } as u32 * 1635841 + - unsafe { *PERM1279.get_unchecked(((index / 1279) % 1279) as usize) } as u32 * 1279 + - unsafe { - *PERM1279.get_unchecked(((index / 1635841) % 1279) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2092240639u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1283(index: u32) -> f32 { - const PERM1283: [u16; 1283] = [0, 771, 512, 256, 1027, 128, 899, 643, 384, 1155, 64, 835, 576, - 320, 1091, 192, 963, 707, 448, 1219, 32, 803, 544, 288, 1059, - 160, 931, 675, 416, 1187, 96, 867, 608, 352, 1123, 224, 995, - 739, 480, 1251, 16, 787, 528, 272, 1043, 144, 915, 659, 400, - 1171, 80, 851, 592, 336, 1107, 208, 979, 723, 464, 1235, 48, - 819, 560, 304, 1075, 176, 947, 691, 432, 1203, 112, 883, 624, - 368, 1139, 240, 1011, 755, 496, 1267, 8, 779, 520, 264, 1035, - 136, 907, 651, 392, 1163, 72, 843, 584, 328, 1099, 200, 971, - 715, 456, 1227, 40, 811, 552, 296, 1067, 168, 939, 683, 424, - 1195, 104, 875, 616, 360, 1131, 232, 1003, 747, 488, 1259, 24, - 795, 536, 280, 1051, 152, 923, 667, 408, 1179, 88, 859, 600, - 344, 1115, 216, 987, 731, 472, 1243, 56, 827, 568, 312, 1083, - 184, 955, 699, 440, 1211, 120, 891, 632, 376, 1147, 248, 1019, - 763, 504, 1275, 4, 775, 516, 260, 1031, 132, 903, 647, 388, - 1159, 68, 839, 580, 324, 1095, 196, 967, 711, 452, 1223, 36, - 807, 548, 292, 1063, 164, 935, 679, 420, 1191, 100, 871, 612, - 356, 1127, 228, 999, 743, 484, 1255, 20, 791, 532, 276, 1047, - 148, 919, 663, 404, 1175, 84, 855, 596, 340, 1111, 212, 983, - 727, 468, 1239, 52, 823, 564, 308, 1079, 180, 951, 695, 436, - 1207, 116, 887, 628, 372, 1143, 244, 1015, 759, 500, 1271, 12, - 783, 524, 268, 1039, 140, 911, 655, 396, 1167, 76, 847, 588, - 332, 1103, 204, 975, 719, 460, 1231, 44, 815, 556, 300, 1071, - 172, 943, 687, 428, 1199, 108, 879, 620, 364, 1135, 236, 1007, - 751, 492, 1263, 28, 799, 540, 284, 1055, 156, 927, 671, 412, - 1183, 92, 863, 604, 348, 1119, 220, 991, 735, 476, 1247, 60, - 831, 572, 316, 1087, 188, 959, 703, 444, 1215, 124, 895, 636, - 380, 1151, 252, 1023, 767, 508, 1279, 640, 2, 773, 514, 258, - 1029, 130, 901, 645, 386, 1157, 66, 837, 578, 322, 1093, 194, - 965, 709, 450, 1221, 34, 805, 546, 290, 1061, 162, 933, 677, - 418, 1189, 98, 869, 610, 354, 1125, 226, 997, 741, 482, 1253, - 18, 789, 530, 274, 1045, 146, 917, 661, 402, 1173, 82, 853, - 594, 338, 1109, 210, 981, 725, 466, 1237, 50, 821, 562, 306, - 1077, 178, 949, 693, 434, 1205, 114, 885, 626, 370, 1141, 242, - 1013, 757, 498, 1269, 10, 781, 522, 266, 1037, 138, 909, 653, - 394, 1165, 74, 845, 586, 330, 1101, 202, 973, 717, 458, 1229, - 42, 813, 554, 298, 1069, 170, 941, 685, 426, 1197, 106, 877, - 618, 362, 1133, 234, 1005, 749, 490, 1261, 26, 797, 538, 282, - 1053, 154, 925, 669, 410, 1181, 90, 861, 602, 346, 1117, 218, - 989, 733, 474, 1245, 58, 829, 570, 314, 1085, 186, 957, 701, - 442, 1213, 122, 893, 634, 378, 1149, 250, 1021, 765, 506, 1277, - 6, 777, 518, 262, 1033, 134, 905, 649, 390, 1161, 70, 841, 582, - 326, 1097, 198, 969, 713, 454, 1225, 38, 809, 550, 294, 1065, - 166, 937, 681, 422, 1193, 102, 873, 614, 358, 1129, 230, 1001, - 745, 486, 1257, 22, 793, 534, 278, 1049, 150, 921, 665, 406, - 1177, 86, 857, 598, 342, 1113, 214, 985, 729, 470, 1241, 54, - 825, 566, 310, 1081, 182, 953, 697, 438, 1209, 118, 889, 630, - 374, 1145, 246, 1017, 761, 502, 1273, 14, 785, 526, 270, 1041, - 142, 913, 657, 398, 1169, 78, 849, 590, 334, 1105, 206, 977, - 721, 462, 1233, 46, 817, 558, 302, 1073, 174, 945, 689, 430, - 1201, 110, 881, 622, 366, 1137, 238, 1009, 753, 494, 1265, 30, - 801, 542, 286, 1057, 158, 929, 673, 414, 1185, 94, 865, 606, - 350, 1121, 222, 993, 737, 478, 1249, 62, 833, 574, 318, 1089, - 190, 961, 705, 446, 1217, 126, 897, 638, 382, 1153, 254, 1025, - 769, 510, 1281, 641, 1, 772, 513, 257, 1028, 129, 900, 644, - 385, 1156, 65, 836, 577, 321, 1092, 193, 964, 708, 449, 1220, - 33, 804, 545, 289, 1060, 161, 932, 676, 417, 1188, 97, 868, - 609, 353, 1124, 225, 996, 740, 481, 1252, 17, 788, 529, 273, - 1044, 145, 916, 660, 401, 1172, 81, 852, 593, 337, 1108, 209, - 980, 724, 465, 1236, 49, 820, 561, 305, 1076, 177, 948, 692, - 433, 1204, 113, 884, 625, 369, 1140, 241, 1012, 756, 497, 1268, - 9, 780, 521, 265, 1036, 137, 908, 652, 393, 1164, 73, 844, 585, - 329, 1100, 201, 972, 716, 457, 1228, 41, 812, 553, 297, 1068, - 169, 940, 684, 425, 1196, 105, 876, 617, 361, 1132, 233, 1004, - 748, 489, 1260, 25, 796, 537, 281, 1052, 153, 924, 668, 409, - 1180, 89, 860, 601, 345, 1116, 217, 988, 732, 473, 1244, 57, - 828, 569, 313, 1084, 185, 956, 700, 441, 1212, 121, 892, 633, - 377, 1148, 249, 1020, 764, 505, 1276, 5, 776, 517, 261, 1032, - 133, 904, 648, 389, 1160, 69, 840, 581, 325, 1096, 197, 968, - 712, 453, 1224, 37, 808, 549, 293, 1064, 165, 936, 680, 421, - 1192, 101, 872, 613, 357, 1128, 229, 1000, 744, 485, 1256, 21, - 792, 533, 277, 1048, 149, 920, 664, 405, 1176, 85, 856, 597, - 341, 1112, 213, 984, 728, 469, 1240, 53, 824, 565, 309, 1080, - 181, 952, 696, 437, 1208, 117, 888, 629, 373, 1144, 245, 1016, - 760, 501, 1272, 13, 784, 525, 269, 1040, 141, 912, 656, 397, - 1168, 77, 848, 589, 333, 1104, 205, 976, 720, 461, 1232, 45, - 816, 557, 301, 1072, 173, 944, 688, 429, 1200, 109, 880, 621, - 365, 1136, 237, 1008, 752, 493, 1264, 29, 800, 541, 285, 1056, - 157, 928, 672, 413, 1184, 93, 864, 605, 349, 1120, 221, 992, - 736, 477, 1248, 61, 832, 573, 317, 1088, 189, 960, 704, 445, - 1216, 125, 896, 637, 381, 1152, 253, 1024, 768, 509, 1280, 642, - 3, 774, 515, 259, 1030, 131, 902, 646, 387, 1158, 67, 838, 579, - 323, 1094, 195, 966, 710, 451, 1222, 35, 806, 547, 291, 1062, - 163, 934, 678, 419, 1190, 99, 870, 611, 355, 1126, 227, 998, - 742, 483, 1254, 19, 790, 531, 275, 1046, 147, 918, 662, 403, - 1174, 83, 854, 595, 339, 1110, 211, 982, 726, 467, 1238, 51, - 822, 563, 307, 1078, 179, 950, 694, 435, 1206, 115, 886, 627, - 371, 1142, 243, 1014, 758, 499, 1270, 11, 782, 523, 267, 1038, - 139, 910, 654, 395, 1166, 75, 846, 587, 331, 1102, 203, 974, - 718, 459, 1230, 43, 814, 555, 299, 1070, 171, 942, 686, 427, - 1198, 107, 878, 619, 363, 1134, 235, 1006, 750, 491, 1262, 27, - 798, 539, 283, 1054, 155, 926, 670, 411, 1182, 91, 862, 603, - 347, 1118, 219, 990, 734, 475, 1246, 59, 830, 571, 315, 1086, - 187, 958, 702, 443, 1214, 123, 894, 635, 379, 1150, 251, 1022, - 766, 507, 1278, 7, 778, 519, 263, 1034, 135, 906, 650, 391, - 1162, 71, 842, 583, 327, 1098, 199, 970, 714, 455, 1226, 39, - 810, 551, 295, 1066, 167, 938, 682, 423, 1194, 103, 874, 615, - 359, 1130, 231, 1002, 746, 487, 1258, 23, 794, 535, 279, 1050, - 151, 922, 666, 407, 1178, 87, 858, 599, 343, 1114, 215, 986, - 730, 471, 1242, 55, 826, 567, 311, 1082, 183, 954, 698, 439, - 1210, 119, 890, 631, 375, 1146, 247, 1018, 762, 503, 1274, 15, - 786, 527, 271, 1042, 143, 914, 658, 399, 1170, 79, 850, 591, - 335, 1106, 207, 978, 722, 463, 1234, 47, 818, 559, 303, 1074, - 175, 946, 690, 431, 1202, 111, 882, 623, 367, 1138, 239, 1010, - 754, 495, 1266, 31, 802, 543, 287, 1058, 159, 930, 674, 415, - 1186, 95, 866, 607, 351, 1122, 223, 994, 738, 479, 1250, 63, - 834, 575, 319, 1090, 191, 962, 706, 447, 1218, 127, 898, 639, - 383, 1154, 255, 1026, 770, 511, 1282]; - - return (unsafe { *PERM1283.get_unchecked((index % 1283) as usize) } as u32 * 1646089 + - unsafe { *PERM1283.get_unchecked(((index / 1283) % 1283) as usize) } as u32 * 1283 + - unsafe { - *PERM1283.get_unchecked(((index / 1646089) % 1283) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2111932187u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1289(index: u32) -> f32 { - const PERM1289: [u16; 1289] = [0, 777, 512, 256, 1033, 128, 905, 649, 384, 1161, 64, 841, 576, - 320, 1097, 192, 969, 713, 448, 1225, 32, 809, 544, 288, 1065, - 160, 937, 681, 416, 1193, 96, 873, 608, 352, 1129, 224, 1001, - 745, 480, 1257, 16, 793, 528, 272, 1049, 144, 921, 665, 400, - 1177, 80, 857, 592, 336, 1113, 208, 985, 729, 464, 1241, 48, - 825, 560, 304, 1081, 176, 953, 697, 432, 1209, 112, 889, 624, - 368, 1145, 240, 1017, 761, 496, 1273, 640, 8, 785, 520, 264, - 1041, 136, 913, 657, 392, 1169, 72, 849, 584, 328, 1105, 200, - 977, 721, 456, 1233, 40, 817, 552, 296, 1073, 168, 945, 689, - 424, 1201, 104, 881, 616, 360, 1137, 232, 1009, 753, 488, 1265, - 24, 801, 536, 280, 1057, 152, 929, 673, 408, 1185, 88, 865, - 600, 344, 1121, 216, 993, 737, 472, 1249, 56, 833, 568, 312, - 1089, 184, 961, 705, 440, 1217, 120, 897, 632, 376, 1153, 248, - 1025, 769, 504, 1281, 4, 781, 516, 260, 1037, 132, 909, 653, - 388, 1165, 68, 845, 580, 324, 1101, 196, 973, 717, 452, 1229, - 36, 813, 548, 292, 1069, 164, 941, 685, 420, 1197, 100, 877, - 612, 356, 1133, 228, 1005, 749, 484, 1261, 20, 797, 532, 276, - 1053, 148, 925, 669, 404, 1181, 84, 861, 596, 340, 1117, 212, - 989, 733, 468, 1245, 52, 829, 564, 308, 1085, 180, 957, 701, - 436, 1213, 116, 893, 628, 372, 1149, 244, 1021, 765, 500, 1277, - 645, 12, 789, 524, 268, 1045, 140, 917, 661, 396, 1173, 76, - 853, 588, 332, 1109, 204, 981, 725, 460, 1237, 44, 821, 556, - 300, 1077, 172, 949, 693, 428, 1205, 108, 885, 620, 364, 1141, - 236, 1013, 757, 492, 1269, 28, 805, 540, 284, 1061, 156, 933, - 677, 412, 1189, 92, 869, 604, 348, 1125, 220, 997, 741, 476, - 1253, 60, 837, 572, 316, 1093, 188, 965, 709, 444, 1221, 124, - 901, 636, 380, 1157, 252, 1029, 773, 508, 1285, 2, 779, 514, - 258, 1035, 130, 907, 651, 386, 1163, 66, 843, 578, 322, 1099, - 194, 971, 715, 450, 1227, 34, 811, 546, 290, 1067, 162, 939, - 683, 418, 1195, 98, 875, 610, 354, 1131, 226, 1003, 747, 482, - 1259, 18, 795, 530, 274, 1051, 146, 923, 667, 402, 1179, 82, - 859, 594, 338, 1115, 210, 987, 731, 466, 1243, 50, 827, 562, - 306, 1083, 178, 955, 699, 434, 1211, 114, 891, 626, 370, 1147, - 242, 1019, 763, 498, 1275, 642, 10, 787, 522, 266, 1043, 138, - 915, 659, 394, 1171, 74, 851, 586, 330, 1107, 202, 979, 723, - 458, 1235, 42, 819, 554, 298, 1075, 170, 947, 691, 426, 1203, - 106, 883, 618, 362, 1139, 234, 1011, 755, 490, 1267, 26, 803, - 538, 282, 1059, 154, 931, 675, 410, 1187, 90, 867, 602, 346, - 1123, 218, 995, 739, 474, 1251, 58, 835, 570, 314, 1091, 186, - 963, 707, 442, 1219, 122, 899, 634, 378, 1155, 250, 1027, 771, - 506, 1283, 6, 783, 518, 262, 1039, 134, 911, 655, 390, 1167, - 70, 847, 582, 326, 1103, 198, 975, 719, 454, 1231, 38, 815, - 550, 294, 1071, 166, 943, 687, 422, 1199, 102, 879, 614, 358, - 1135, 230, 1007, 751, 486, 1263, 22, 799, 534, 278, 1055, 150, - 927, 671, 406, 1183, 86, 863, 598, 342, 1119, 214, 991, 735, - 470, 1247, 54, 831, 566, 310, 1087, 182, 959, 703, 438, 1215, - 118, 895, 630, 374, 1151, 246, 1023, 767, 502, 1279, 647, 14, - 791, 526, 270, 1047, 142, 919, 663, 398, 1175, 78, 855, 590, - 334, 1111, 206, 983, 727, 462, 1239, 46, 823, 558, 302, 1079, - 174, 951, 695, 430, 1207, 110, 887, 622, 366, 1143, 238, 1015, - 759, 494, 1271, 30, 807, 542, 286, 1063, 158, 935, 679, 414, - 1191, 94, 871, 606, 350, 1127, 222, 999, 743, 478, 1255, 62, - 839, 574, 318, 1095, 190, 967, 711, 446, 1223, 126, 903, 638, - 382, 1159, 254, 1031, 775, 510, 1287, 644, 1, 778, 513, 257, - 1034, 129, 906, 650, 385, 1162, 65, 842, 577, 321, 1098, 193, - 970, 714, 449, 1226, 33, 810, 545, 289, 1066, 161, 938, 682, - 417, 1194, 97, 874, 609, 353, 1130, 225, 1002, 746, 481, 1258, - 17, 794, 529, 273, 1050, 145, 922, 666, 401, 1178, 81, 858, - 593, 337, 1114, 209, 986, 730, 465, 1242, 49, 826, 561, 305, - 1082, 177, 954, 698, 433, 1210, 113, 890, 625, 369, 1146, 241, - 1018, 762, 497, 1274, 641, 9, 786, 521, 265, 1042, 137, 914, - 658, 393, 1170, 73, 850, 585, 329, 1106, 201, 978, 722, 457, - 1234, 41, 818, 553, 297, 1074, 169, 946, 690, 425, 1202, 105, - 882, 617, 361, 1138, 233, 1010, 754, 489, 1266, 25, 802, 537, - 281, 1058, 153, 930, 674, 409, 1186, 89, 866, 601, 345, 1122, - 217, 994, 738, 473, 1250, 57, 834, 569, 313, 1090, 185, 962, - 706, 441, 1218, 121, 898, 633, 377, 1154, 249, 1026, 770, 505, - 1282, 5, 782, 517, 261, 1038, 133, 910, 654, 389, 1166, 69, - 846, 581, 325, 1102, 197, 974, 718, 453, 1230, 37, 814, 549, - 293, 1070, 165, 942, 686, 421, 1198, 101, 878, 613, 357, 1134, - 229, 1006, 750, 485, 1262, 21, 798, 533, 277, 1054, 149, 926, - 670, 405, 1182, 85, 862, 597, 341, 1118, 213, 990, 734, 469, - 1246, 53, 830, 565, 309, 1086, 181, 958, 702, 437, 1214, 117, - 894, 629, 373, 1150, 245, 1022, 766, 501, 1278, 646, 13, 790, - 525, 269, 1046, 141, 918, 662, 397, 1174, 77, 854, 589, 333, - 1110, 205, 982, 726, 461, 1238, 45, 822, 557, 301, 1078, 173, - 950, 694, 429, 1206, 109, 886, 621, 365, 1142, 237, 1014, 758, - 493, 1270, 29, 806, 541, 285, 1062, 157, 934, 678, 413, 1190, - 93, 870, 605, 349, 1126, 221, 998, 742, 477, 1254, 61, 838, - 573, 317, 1094, 189, 966, 710, 445, 1222, 125, 902, 637, 381, - 1158, 253, 1030, 774, 509, 1286, 3, 780, 515, 259, 1036, 131, - 908, 652, 387, 1164, 67, 844, 579, 323, 1100, 195, 972, 716, - 451, 1228, 35, 812, 547, 291, 1068, 163, 940, 684, 419, 1196, - 99, 876, 611, 355, 1132, 227, 1004, 748, 483, 1260, 19, 796, - 531, 275, 1052, 147, 924, 668, 403, 1180, 83, 860, 595, 339, - 1116, 211, 988, 732, 467, 1244, 51, 828, 563, 307, 1084, 179, - 956, 700, 435, 1212, 115, 892, 627, 371, 1148, 243, 1020, 764, - 499, 1276, 643, 11, 788, 523, 267, 1044, 139, 916, 660, 395, - 1172, 75, 852, 587, 331, 1108, 203, 980, 724, 459, 1236, 43, - 820, 555, 299, 1076, 171, 948, 692, 427, 1204, 107, 884, 619, - 363, 1140, 235, 1012, 756, 491, 1268, 27, 804, 539, 283, 1060, - 155, 932, 676, 411, 1188, 91, 868, 603, 347, 1124, 219, 996, - 740, 475, 1252, 59, 836, 571, 315, 1092, 187, 964, 708, 443, - 1220, 123, 900, 635, 379, 1156, 251, 1028, 772, 507, 1284, 7, - 784, 519, 263, 1040, 135, 912, 656, 391, 1168, 71, 848, 583, - 327, 1104, 199, 976, 720, 455, 1232, 39, 816, 551, 295, 1072, - 167, 944, 688, 423, 1200, 103, 880, 615, 359, 1136, 231, 1008, - 752, 487, 1264, 23, 800, 535, 279, 1056, 151, 928, 672, 407, - 1184, 87, 864, 599, 343, 1120, 215, 992, 736, 471, 1248, 55, - 832, 567, 311, 1088, 183, 960, 704, 439, 1216, 119, 896, 631, - 375, 1152, 247, 1024, 768, 503, 1280, 648, 15, 792, 527, 271, - 1048, 143, 920, 664, 399, 1176, 79, 856, 591, 335, 1112, 207, - 984, 728, 463, 1240, 47, 824, 559, 303, 1080, 175, 952, 696, - 431, 1208, 111, 888, 623, 367, 1144, 239, 1016, 760, 495, 1272, - 31, 808, 543, 287, 1064, 159, 936, 680, 415, 1192, 95, 872, - 607, 351, 1128, 223, 1000, 744, 479, 1256, 63, 840, 575, 319, - 1096, 191, 968, 712, 447, 1224, 127, 904, 639, 383, 1160, 255, - 1032, 776, 511, 1288]; - - return (unsafe { *PERM1289.get_unchecked((index % 1289) as usize) } as u32 * 1661521 + - unsafe { *PERM1289.get_unchecked(((index / 1289) % 1289) as usize) } as u32 * 1289 + - unsafe { - *PERM1289.get_unchecked(((index / 1661521) % 1289) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2141700569u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1291(index: u32) -> f32 { - const PERM1291: [u16; 1291] = [0, 779, 512, 256, 1035, 128, 907, 651, 384, 1163, 64, 843, 576, - 320, 1099, 192, 971, 715, 448, 1227, 32, 811, 544, 288, 1067, - 160, 939, 683, 416, 1195, 96, 875, 608, 352, 1131, 224, 1003, - 747, 480, 1259, 16, 795, 528, 272, 1051, 144, 923, 667, 400, - 1179, 80, 859, 592, 336, 1115, 208, 987, 731, 464, 1243, 48, - 827, 560, 304, 1083, 176, 955, 699, 432, 1211, 112, 891, 624, - 368, 1147, 240, 1019, 763, 496, 1275, 640, 8, 787, 520, 264, - 1043, 136, 915, 659, 392, 1171, 72, 851, 584, 328, 1107, 200, - 979, 723, 456, 1235, 40, 819, 552, 296, 1075, 168, 947, 691, - 424, 1203, 104, 883, 616, 360, 1139, 232, 1011, 755, 488, 1267, - 24, 803, 536, 280, 1059, 152, 931, 675, 408, 1187, 88, 867, - 600, 344, 1123, 216, 995, 739, 472, 1251, 56, 835, 568, 312, - 1091, 184, 963, 707, 440, 1219, 120, 899, 632, 376, 1155, 248, - 1027, 771, 504, 1283, 4, 783, 516, 260, 1039, 132, 911, 655, - 388, 1167, 68, 847, 580, 324, 1103, 196, 975, 719, 452, 1231, - 36, 815, 548, 292, 1071, 164, 943, 687, 420, 1199, 100, 879, - 612, 356, 1135, 228, 1007, 751, 484, 1263, 20, 799, 532, 276, - 1055, 148, 927, 671, 404, 1183, 84, 863, 596, 340, 1119, 212, - 991, 735, 468, 1247, 52, 831, 564, 308, 1087, 180, 959, 703, - 436, 1215, 116, 895, 628, 372, 1151, 244, 1023, 767, 500, 1279, - 647, 12, 791, 524, 268, 1047, 140, 919, 663, 396, 1175, 76, - 855, 588, 332, 1111, 204, 983, 727, 460, 1239, 44, 823, 556, - 300, 1079, 172, 951, 695, 428, 1207, 108, 887, 620, 364, 1143, - 236, 1015, 759, 492, 1271, 28, 807, 540, 284, 1063, 156, 935, - 679, 412, 1191, 92, 871, 604, 348, 1127, 220, 999, 743, 476, - 1255, 60, 839, 572, 316, 1095, 188, 967, 711, 444, 1223, 124, - 903, 636, 380, 1159, 252, 1031, 775, 508, 1287, 644, 2, 781, - 514, 258, 1037, 130, 909, 653, 386, 1165, 66, 845, 578, 322, - 1101, 194, 973, 717, 450, 1229, 34, 813, 546, 290, 1069, 162, - 941, 685, 418, 1197, 98, 877, 610, 354, 1133, 226, 1005, 749, - 482, 1261, 18, 797, 530, 274, 1053, 146, 925, 669, 402, 1181, - 82, 861, 594, 338, 1117, 210, 989, 733, 466, 1245, 50, 829, - 562, 306, 1085, 178, 957, 701, 434, 1213, 114, 893, 626, 370, - 1149, 242, 1021, 765, 498, 1277, 642, 10, 789, 522, 266, 1045, - 138, 917, 661, 394, 1173, 74, 853, 586, 330, 1109, 202, 981, - 725, 458, 1237, 42, 821, 554, 298, 1077, 170, 949, 693, 426, - 1205, 106, 885, 618, 362, 1141, 234, 1013, 757, 490, 1269, 26, - 805, 538, 282, 1061, 154, 933, 677, 410, 1189, 90, 869, 602, - 346, 1125, 218, 997, 741, 474, 1253, 58, 837, 570, 314, 1093, - 186, 965, 709, 442, 1221, 122, 901, 634, 378, 1157, 250, 1029, - 773, 506, 1285, 6, 785, 518, 262, 1041, 134, 913, 657, 390, - 1169, 70, 849, 582, 326, 1105, 198, 977, 721, 454, 1233, 38, - 817, 550, 294, 1073, 166, 945, 689, 422, 1201, 102, 881, 614, - 358, 1137, 230, 1009, 753, 486, 1265, 22, 801, 534, 278, 1057, - 150, 929, 673, 406, 1185, 86, 865, 598, 342, 1121, 214, 993, - 737, 470, 1249, 54, 833, 566, 310, 1089, 182, 961, 705, 438, - 1217, 118, 897, 630, 374, 1153, 246, 1025, 769, 502, 1281, 649, - 14, 793, 526, 270, 1049, 142, 921, 665, 398, 1177, 78, 857, - 590, 334, 1113, 206, 985, 729, 462, 1241, 46, 825, 558, 302, - 1081, 174, 953, 697, 430, 1209, 110, 889, 622, 366, 1145, 238, - 1017, 761, 494, 1273, 30, 809, 542, 286, 1065, 158, 937, 681, - 414, 1193, 94, 873, 606, 350, 1129, 222, 1001, 745, 478, 1257, - 62, 841, 574, 318, 1097, 190, 969, 713, 446, 1225, 126, 905, - 638, 382, 1161, 254, 1033, 777, 510, 1289, 645, 1, 780, 513, - 257, 1036, 129, 908, 652, 385, 1164, 65, 844, 577, 321, 1100, - 193, 972, 716, 449, 1228, 33, 812, 545, 289, 1068, 161, 940, - 684, 417, 1196, 97, 876, 609, 353, 1132, 225, 1004, 748, 481, - 1260, 17, 796, 529, 273, 1052, 145, 924, 668, 401, 1180, 81, - 860, 593, 337, 1116, 209, 988, 732, 465, 1244, 49, 828, 561, - 305, 1084, 177, 956, 700, 433, 1212, 113, 892, 625, 369, 1148, - 241, 1020, 764, 497, 1276, 641, 9, 788, 521, 265, 1044, 137, - 916, 660, 393, 1172, 73, 852, 585, 329, 1108, 201, 980, 724, - 457, 1236, 41, 820, 553, 297, 1076, 169, 948, 692, 425, 1204, - 105, 884, 617, 361, 1140, 233, 1012, 756, 489, 1268, 25, 804, - 537, 281, 1060, 153, 932, 676, 409, 1188, 89, 868, 601, 345, - 1124, 217, 996, 740, 473, 1252, 57, 836, 569, 313, 1092, 185, - 964, 708, 441, 1220, 121, 900, 633, 377, 1156, 249, 1028, 772, - 505, 1284, 5, 784, 517, 261, 1040, 133, 912, 656, 389, 1168, - 69, 848, 581, 325, 1104, 197, 976, 720, 453, 1232, 37, 816, - 549, 293, 1072, 165, 944, 688, 421, 1200, 101, 880, 613, 357, - 1136, 229, 1008, 752, 485, 1264, 21, 800, 533, 277, 1056, 149, - 928, 672, 405, 1184, 85, 864, 597, 341, 1120, 213, 992, 736, - 469, 1248, 53, 832, 565, 309, 1088, 181, 960, 704, 437, 1216, - 117, 896, 629, 373, 1152, 245, 1024, 768, 501, 1280, 648, 13, - 792, 525, 269, 1048, 141, 920, 664, 397, 1176, 77, 856, 589, - 333, 1112, 205, 984, 728, 461, 1240, 45, 824, 557, 301, 1080, - 173, 952, 696, 429, 1208, 109, 888, 621, 365, 1144, 237, 1016, - 760, 493, 1272, 29, 808, 541, 285, 1064, 157, 936, 680, 413, - 1192, 93, 872, 605, 349, 1128, 221, 1000, 744, 477, 1256, 61, - 840, 573, 317, 1096, 189, 968, 712, 445, 1224, 125, 904, 637, - 381, 1160, 253, 1032, 776, 509, 1288, 646, 3, 782, 515, 259, - 1038, 131, 910, 654, 387, 1166, 67, 846, 579, 323, 1102, 195, - 974, 718, 451, 1230, 35, 814, 547, 291, 1070, 163, 942, 686, - 419, 1198, 99, 878, 611, 355, 1134, 227, 1006, 750, 483, 1262, - 19, 798, 531, 275, 1054, 147, 926, 670, 403, 1182, 83, 862, - 595, 339, 1118, 211, 990, 734, 467, 1246, 51, 830, 563, 307, - 1086, 179, 958, 702, 435, 1214, 115, 894, 627, 371, 1150, 243, - 1022, 766, 499, 1278, 643, 11, 790, 523, 267, 1046, 139, 918, - 662, 395, 1174, 75, 854, 587, 331, 1110, 203, 982, 726, 459, - 1238, 43, 822, 555, 299, 1078, 171, 950, 694, 427, 1206, 107, - 886, 619, 363, 1142, 235, 1014, 758, 491, 1270, 27, 806, 539, - 283, 1062, 155, 934, 678, 411, 1190, 91, 870, 603, 347, 1126, - 219, 998, 742, 475, 1254, 59, 838, 571, 315, 1094, 187, 966, - 710, 443, 1222, 123, 902, 635, 379, 1158, 251, 1030, 774, 507, - 1286, 7, 786, 519, 263, 1042, 135, 914, 658, 391, 1170, 71, - 850, 583, 327, 1106, 199, 978, 722, 455, 1234, 39, 818, 551, - 295, 1074, 167, 946, 690, 423, 1202, 103, 882, 615, 359, 1138, - 231, 1010, 754, 487, 1266, 23, 802, 535, 279, 1058, 151, 930, - 674, 407, 1186, 87, 866, 599, 343, 1122, 215, 994, 738, 471, - 1250, 55, 834, 567, 311, 1090, 183, 962, 706, 439, 1218, 119, - 898, 631, 375, 1154, 247, 1026, 770, 503, 1282, 650, 15, 794, - 527, 271, 1050, 143, 922, 666, 399, 1178, 79, 858, 591, 335, - 1114, 207, 986, 730, 463, 1242, 47, 826, 559, 303, 1082, 175, - 954, 698, 431, 1210, 111, 890, 623, 367, 1146, 239, 1018, 762, - 495, 1274, 31, 810, 543, 287, 1066, 159, 938, 682, 415, 1194, - 95, 874, 607, 351, 1130, 223, 1002, 746, 479, 1258, 63, 842, - 575, 319, 1098, 191, 970, 714, 447, 1226, 127, 906, 639, 383, - 1162, 255, 1034, 778, 511, 1290]; - - return (unsafe { *PERM1291.get_unchecked((index % 1291) as usize) } as u32 * 1666681 + - unsafe { *PERM1291.get_unchecked(((index / 1291) % 1291) as usize) } as u32 * 1291 + - unsafe { - *PERM1291.get_unchecked(((index / 1666681) % 1291) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2151685171u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1297(index: u32) -> f32 { - const PERM1297: [u16; 1297] = [0, 785, 512, 256, 1041, 128, 913, 657, 384, 1169, 64, 849, 576, - 320, 1105, 192, 977, 721, 448, 1233, 32, 817, 544, 288, 1073, - 160, 945, 689, 416, 1201, 96, 881, 608, 352, 1137, 224, 1009, - 753, 480, 1265, 640, 16, 801, 528, 272, 1057, 144, 929, 673, - 400, 1185, 80, 865, 592, 336, 1121, 208, 993, 737, 464, 1249, - 48, 833, 560, 304, 1089, 176, 961, 705, 432, 1217, 112, 897, - 624, 368, 1153, 240, 1025, 769, 496, 1281, 8, 793, 520, 264, - 1049, 136, 921, 665, 392, 1177, 72, 857, 584, 328, 1113, 200, - 985, 729, 456, 1241, 40, 825, 552, 296, 1081, 168, 953, 697, - 424, 1209, 104, 889, 616, 360, 1145, 232, 1017, 761, 488, 1273, - 649, 24, 809, 536, 280, 1065, 152, 937, 681, 408, 1193, 88, - 873, 600, 344, 1129, 216, 1001, 745, 472, 1257, 56, 841, 568, - 312, 1097, 184, 969, 713, 440, 1225, 120, 905, 632, 376, 1161, - 248, 1033, 777, 504, 1289, 4, 789, 516, 260, 1045, 132, 917, - 661, 388, 1173, 68, 853, 580, 324, 1109, 196, 981, 725, 452, - 1237, 36, 821, 548, 292, 1077, 164, 949, 693, 420, 1205, 100, - 885, 612, 356, 1141, 228, 1013, 757, 484, 1269, 644, 20, 805, - 532, 276, 1061, 148, 933, 677, 404, 1189, 84, 869, 596, 340, - 1125, 212, 997, 741, 468, 1253, 52, 837, 564, 308, 1093, 180, - 965, 709, 436, 1221, 116, 901, 628, 372, 1157, 244, 1029, 773, - 500, 1285, 12, 797, 524, 268, 1053, 140, 925, 669, 396, 1181, - 76, 861, 588, 332, 1117, 204, 989, 733, 460, 1245, 44, 829, - 556, 300, 1085, 172, 957, 701, 428, 1213, 108, 893, 620, 364, - 1149, 236, 1021, 765, 492, 1277, 653, 28, 813, 540, 284, 1069, - 156, 941, 685, 412, 1197, 92, 877, 604, 348, 1133, 220, 1005, - 749, 476, 1261, 60, 845, 572, 316, 1101, 188, 973, 717, 444, - 1229, 124, 909, 636, 380, 1165, 252, 1037, 781, 508, 1293, 2, - 787, 514, 258, 1043, 130, 915, 659, 386, 1171, 66, 851, 578, - 322, 1107, 194, 979, 723, 450, 1235, 34, 819, 546, 290, 1075, - 162, 947, 691, 418, 1203, 98, 883, 610, 354, 1139, 226, 1011, - 755, 482, 1267, 642, 18, 803, 530, 274, 1059, 146, 931, 675, - 402, 1187, 82, 867, 594, 338, 1123, 210, 995, 739, 466, 1251, - 50, 835, 562, 306, 1091, 178, 963, 707, 434, 1219, 114, 899, - 626, 370, 1155, 242, 1027, 771, 498, 1283, 10, 795, 522, 266, - 1051, 138, 923, 667, 394, 1179, 74, 859, 586, 330, 1115, 202, - 987, 731, 458, 1243, 42, 827, 554, 298, 1083, 170, 955, 699, - 426, 1211, 106, 891, 618, 362, 1147, 234, 1019, 763, 490, 1275, - 651, 26, 811, 538, 282, 1067, 154, 939, 683, 410, 1195, 90, - 875, 602, 346, 1131, 218, 1003, 747, 474, 1259, 58, 843, 570, - 314, 1099, 186, 971, 715, 442, 1227, 122, 907, 634, 378, 1163, - 250, 1035, 779, 506, 1291, 6, 791, 518, 262, 1047, 134, 919, - 663, 390, 1175, 70, 855, 582, 326, 1111, 198, 983, 727, 454, - 1239, 38, 823, 550, 294, 1079, 166, 951, 695, 422, 1207, 102, - 887, 614, 358, 1143, 230, 1015, 759, 486, 1271, 646, 22, 807, - 534, 278, 1063, 150, 935, 679, 406, 1191, 86, 871, 598, 342, - 1127, 214, 999, 743, 470, 1255, 54, 839, 566, 310, 1095, 182, - 967, 711, 438, 1223, 118, 903, 630, 374, 1159, 246, 1031, 775, - 502, 1287, 14, 799, 526, 270, 1055, 142, 927, 671, 398, 1183, - 78, 863, 590, 334, 1119, 206, 991, 735, 462, 1247, 46, 831, - 558, 302, 1087, 174, 959, 703, 430, 1215, 110, 895, 622, 366, - 1151, 238, 1023, 767, 494, 1279, 655, 30, 815, 542, 286, 1071, - 158, 943, 687, 414, 1199, 94, 879, 606, 350, 1135, 222, 1007, - 751, 478, 1263, 62, 847, 574, 318, 1103, 190, 975, 719, 446, - 1231, 126, 911, 638, 382, 1167, 254, 1039, 783, 510, 1295, 648, - 1, 786, 513, 257, 1042, 129, 914, 658, 385, 1170, 65, 850, 577, - 321, 1106, 193, 978, 722, 449, 1234, 33, 818, 545, 289, 1074, - 161, 946, 690, 417, 1202, 97, 882, 609, 353, 1138, 225, 1010, - 754, 481, 1266, 641, 17, 802, 529, 273, 1058, 145, 930, 674, - 401, 1186, 81, 866, 593, 337, 1122, 209, 994, 738, 465, 1250, - 49, 834, 561, 305, 1090, 177, 962, 706, 433, 1218, 113, 898, - 625, 369, 1154, 241, 1026, 770, 497, 1282, 9, 794, 521, 265, - 1050, 137, 922, 666, 393, 1178, 73, 858, 585, 329, 1114, 201, - 986, 730, 457, 1242, 41, 826, 553, 297, 1082, 169, 954, 698, - 425, 1210, 105, 890, 617, 361, 1146, 233, 1018, 762, 489, 1274, - 650, 25, 810, 537, 281, 1066, 153, 938, 682, 409, 1194, 89, - 874, 601, 345, 1130, 217, 1002, 746, 473, 1258, 57, 842, 569, - 313, 1098, 185, 970, 714, 441, 1226, 121, 906, 633, 377, 1162, - 249, 1034, 778, 505, 1290, 5, 790, 517, 261, 1046, 133, 918, - 662, 389, 1174, 69, 854, 581, 325, 1110, 197, 982, 726, 453, - 1238, 37, 822, 549, 293, 1078, 165, 950, 694, 421, 1206, 101, - 886, 613, 357, 1142, 229, 1014, 758, 485, 1270, 645, 21, 806, - 533, 277, 1062, 149, 934, 678, 405, 1190, 85, 870, 597, 341, - 1126, 213, 998, 742, 469, 1254, 53, 838, 565, 309, 1094, 181, - 966, 710, 437, 1222, 117, 902, 629, 373, 1158, 245, 1030, 774, - 501, 1286, 13, 798, 525, 269, 1054, 141, 926, 670, 397, 1182, - 77, 862, 589, 333, 1118, 205, 990, 734, 461, 1246, 45, 830, - 557, 301, 1086, 173, 958, 702, 429, 1214, 109, 894, 621, 365, - 1150, 237, 1022, 766, 493, 1278, 654, 29, 814, 541, 285, 1070, - 157, 942, 686, 413, 1198, 93, 878, 605, 349, 1134, 221, 1006, - 750, 477, 1262, 61, 846, 573, 317, 1102, 189, 974, 718, 445, - 1230, 125, 910, 637, 381, 1166, 253, 1038, 782, 509, 1294, 3, - 788, 515, 259, 1044, 131, 916, 660, 387, 1172, 67, 852, 579, - 323, 1108, 195, 980, 724, 451, 1236, 35, 820, 547, 291, 1076, - 163, 948, 692, 419, 1204, 99, 884, 611, 355, 1140, 227, 1012, - 756, 483, 1268, 643, 19, 804, 531, 275, 1060, 147, 932, 676, - 403, 1188, 83, 868, 595, 339, 1124, 211, 996, 740, 467, 1252, - 51, 836, 563, 307, 1092, 179, 964, 708, 435, 1220, 115, 900, - 627, 371, 1156, 243, 1028, 772, 499, 1284, 11, 796, 523, 267, - 1052, 139, 924, 668, 395, 1180, 75, 860, 587, 331, 1116, 203, - 988, 732, 459, 1244, 43, 828, 555, 299, 1084, 171, 956, 700, - 427, 1212, 107, 892, 619, 363, 1148, 235, 1020, 764, 491, 1276, - 652, 27, 812, 539, 283, 1068, 155, 940, 684, 411, 1196, 91, - 876, 603, 347, 1132, 219, 1004, 748, 475, 1260, 59, 844, 571, - 315, 1100, 187, 972, 716, 443, 1228, 123, 908, 635, 379, 1164, - 251, 1036, 780, 507, 1292, 7, 792, 519, 263, 1048, 135, 920, - 664, 391, 1176, 71, 856, 583, 327, 1112, 199, 984, 728, 455, - 1240, 39, 824, 551, 295, 1080, 167, 952, 696, 423, 1208, 103, - 888, 615, 359, 1144, 231, 1016, 760, 487, 1272, 647, 23, 808, - 535, 279, 1064, 151, 936, 680, 407, 1192, 87, 872, 599, 343, - 1128, 215, 1000, 744, 471, 1256, 55, 840, 567, 311, 1096, 183, - 968, 712, 439, 1224, 119, 904, 631, 375, 1160, 247, 1032, 776, - 503, 1288, 15, 800, 527, 271, 1056, 143, 928, 672, 399, 1184, - 79, 864, 591, 335, 1120, 207, 992, 736, 463, 1248, 47, 832, - 559, 303, 1088, 175, 960, 704, 431, 1216, 111, 896, 623, 367, - 1152, 239, 1024, 768, 495, 1280, 656, 31, 816, 543, 287, 1072, - 159, 944, 688, 415, 1200, 95, 880, 607, 351, 1136, 223, 1008, - 752, 479, 1264, 63, 848, 575, 319, 1104, 191, 976, 720, 447, - 1232, 127, 912, 639, 383, 1168, 255, 1040, 784, 511, 1296]; - - return (unsafe { *PERM1297.get_unchecked((index % 1297) as usize) } as u32 * 1682209 + - unsafe { *PERM1297.get_unchecked(((index / 1297) % 1297) as usize) } as u32 * 1297 + - unsafe { - *PERM1297.get_unchecked(((index / 1682209) % 1297) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2181825073u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1301(index: u32) -> f32 { - const PERM1301: [u16; 1301] = [0, 789, 512, 256, 1045, 128, 917, 661, 384, 1173, 64, 853, 576, - 320, 1109, 192, 981, 725, 448, 1237, 32, 821, 544, 288, 1077, - 160, 949, 693, 416, 1205, 96, 885, 608, 352, 1141, 224, 1013, - 757, 480, 1269, 640, 16, 805, 528, 272, 1061, 144, 933, 677, - 400, 1189, 80, 869, 592, 336, 1125, 208, 997, 741, 464, 1253, - 48, 837, 560, 304, 1093, 176, 965, 709, 432, 1221, 112, 901, - 624, 368, 1157, 240, 1029, 773, 496, 1285, 8, 797, 520, 264, - 1053, 136, 925, 669, 392, 1181, 72, 861, 584, 328, 1117, 200, - 989, 733, 456, 1245, 40, 829, 552, 296, 1085, 168, 957, 701, - 424, 1213, 104, 893, 616, 360, 1149, 232, 1021, 765, 488, 1277, - 653, 24, 813, 536, 280, 1069, 152, 941, 685, 408, 1197, 88, - 877, 600, 344, 1133, 216, 1005, 749, 472, 1261, 56, 845, 568, - 312, 1101, 184, 973, 717, 440, 1229, 120, 909, 632, 376, 1165, - 248, 1037, 781, 504, 1293, 648, 4, 793, 516, 260, 1049, 132, - 921, 665, 388, 1177, 68, 857, 580, 324, 1113, 196, 985, 729, - 452, 1241, 36, 825, 548, 292, 1081, 164, 953, 697, 420, 1209, - 100, 889, 612, 356, 1145, 228, 1017, 761, 484, 1273, 644, 20, - 809, 532, 276, 1065, 148, 937, 681, 404, 1193, 84, 873, 596, - 340, 1129, 212, 1001, 745, 468, 1257, 52, 841, 564, 308, 1097, - 180, 969, 713, 436, 1225, 116, 905, 628, 372, 1161, 244, 1033, - 777, 500, 1289, 12, 801, 524, 268, 1057, 140, 929, 673, 396, - 1185, 76, 865, 588, 332, 1121, 204, 993, 737, 460, 1249, 44, - 833, 556, 300, 1089, 172, 961, 705, 428, 1217, 108, 897, 620, - 364, 1153, 236, 1025, 769, 492, 1281, 657, 28, 817, 540, 284, - 1073, 156, 945, 689, 412, 1201, 92, 881, 604, 348, 1137, 220, - 1009, 753, 476, 1265, 60, 849, 572, 316, 1105, 188, 977, 721, - 444, 1233, 124, 913, 636, 380, 1169, 252, 1041, 785, 508, 1297, - 2, 791, 514, 258, 1047, 130, 919, 663, 386, 1175, 66, 855, 578, - 322, 1111, 194, 983, 727, 450, 1239, 34, 823, 546, 290, 1079, - 162, 951, 695, 418, 1207, 98, 887, 610, 354, 1143, 226, 1015, - 759, 482, 1271, 642, 18, 807, 530, 274, 1063, 146, 935, 679, - 402, 1191, 82, 871, 594, 338, 1127, 210, 999, 743, 466, 1255, - 50, 839, 562, 306, 1095, 178, 967, 711, 434, 1223, 114, 903, - 626, 370, 1159, 242, 1031, 775, 498, 1287, 10, 799, 522, 266, - 1055, 138, 927, 671, 394, 1183, 74, 863, 586, 330, 1119, 202, - 991, 735, 458, 1247, 42, 831, 554, 298, 1087, 170, 959, 703, - 426, 1215, 106, 895, 618, 362, 1151, 234, 1023, 767, 490, 1279, - 655, 26, 815, 538, 282, 1071, 154, 943, 687, 410, 1199, 90, - 879, 602, 346, 1135, 218, 1007, 751, 474, 1263, 58, 847, 570, - 314, 1103, 186, 975, 719, 442, 1231, 122, 911, 634, 378, 1167, - 250, 1039, 783, 506, 1295, 651, 6, 795, 518, 262, 1051, 134, - 923, 667, 390, 1179, 70, 859, 582, 326, 1115, 198, 987, 731, - 454, 1243, 38, 827, 550, 294, 1083, 166, 955, 699, 422, 1211, - 102, 891, 614, 358, 1147, 230, 1019, 763, 486, 1275, 646, 22, - 811, 534, 278, 1067, 150, 939, 683, 406, 1195, 86, 875, 598, - 342, 1131, 214, 1003, 747, 470, 1259, 54, 843, 566, 310, 1099, - 182, 971, 715, 438, 1227, 118, 907, 630, 374, 1163, 246, 1035, - 779, 502, 1291, 14, 803, 526, 270, 1059, 142, 931, 675, 398, - 1187, 78, 867, 590, 334, 1123, 206, 995, 739, 462, 1251, 46, - 835, 558, 302, 1091, 174, 963, 707, 430, 1219, 110, 899, 622, - 366, 1155, 238, 1027, 771, 494, 1283, 659, 30, 819, 542, 286, - 1075, 158, 947, 691, 414, 1203, 94, 883, 606, 350, 1139, 222, - 1011, 755, 478, 1267, 62, 851, 574, 318, 1107, 190, 979, 723, - 446, 1235, 126, 915, 638, 382, 1171, 254, 1043, 787, 510, 1299, - 650, 1, 790, 513, 257, 1046, 129, 918, 662, 385, 1174, 65, 854, - 577, 321, 1110, 193, 982, 726, 449, 1238, 33, 822, 545, 289, - 1078, 161, 950, 694, 417, 1206, 97, 886, 609, 353, 1142, 225, - 1014, 758, 481, 1270, 641, 17, 806, 529, 273, 1062, 145, 934, - 678, 401, 1190, 81, 870, 593, 337, 1126, 209, 998, 742, 465, - 1254, 49, 838, 561, 305, 1094, 177, 966, 710, 433, 1222, 113, - 902, 625, 369, 1158, 241, 1030, 774, 497, 1286, 9, 798, 521, - 265, 1054, 137, 926, 670, 393, 1182, 73, 862, 585, 329, 1118, - 201, 990, 734, 457, 1246, 41, 830, 553, 297, 1086, 169, 958, - 702, 425, 1214, 105, 894, 617, 361, 1150, 233, 1022, 766, 489, - 1278, 654, 25, 814, 537, 281, 1070, 153, 942, 686, 409, 1198, - 89, 878, 601, 345, 1134, 217, 1006, 750, 473, 1262, 57, 846, - 569, 313, 1102, 185, 974, 718, 441, 1230, 121, 910, 633, 377, - 1166, 249, 1038, 782, 505, 1294, 649, 5, 794, 517, 261, 1050, - 133, 922, 666, 389, 1178, 69, 858, 581, 325, 1114, 197, 986, - 730, 453, 1242, 37, 826, 549, 293, 1082, 165, 954, 698, 421, - 1210, 101, 890, 613, 357, 1146, 229, 1018, 762, 485, 1274, 645, - 21, 810, 533, 277, 1066, 149, 938, 682, 405, 1194, 85, 874, - 597, 341, 1130, 213, 1002, 746, 469, 1258, 53, 842, 565, 309, - 1098, 181, 970, 714, 437, 1226, 117, 906, 629, 373, 1162, 245, - 1034, 778, 501, 1290, 13, 802, 525, 269, 1058, 141, 930, 674, - 397, 1186, 77, 866, 589, 333, 1122, 205, 994, 738, 461, 1250, - 45, 834, 557, 301, 1090, 173, 962, 706, 429, 1218, 109, 898, - 621, 365, 1154, 237, 1026, 770, 493, 1282, 658, 29, 818, 541, - 285, 1074, 157, 946, 690, 413, 1202, 93, 882, 605, 349, 1138, - 221, 1010, 754, 477, 1266, 61, 850, 573, 317, 1106, 189, 978, - 722, 445, 1234, 125, 914, 637, 381, 1170, 253, 1042, 786, 509, - 1298, 3, 792, 515, 259, 1048, 131, 920, 664, 387, 1176, 67, - 856, 579, 323, 1112, 195, 984, 728, 451, 1240, 35, 824, 547, - 291, 1080, 163, 952, 696, 419, 1208, 99, 888, 611, 355, 1144, - 227, 1016, 760, 483, 1272, 643, 19, 808, 531, 275, 1064, 147, - 936, 680, 403, 1192, 83, 872, 595, 339, 1128, 211, 1000, 744, - 467, 1256, 51, 840, 563, 307, 1096, 179, 968, 712, 435, 1224, - 115, 904, 627, 371, 1160, 243, 1032, 776, 499, 1288, 11, 800, - 523, 267, 1056, 139, 928, 672, 395, 1184, 75, 864, 587, 331, - 1120, 203, 992, 736, 459, 1248, 43, 832, 555, 299, 1088, 171, - 960, 704, 427, 1216, 107, 896, 619, 363, 1152, 235, 1024, 768, - 491, 1280, 656, 27, 816, 539, 283, 1072, 155, 944, 688, 411, - 1200, 91, 880, 603, 347, 1136, 219, 1008, 752, 475, 1264, 59, - 848, 571, 315, 1104, 187, 976, 720, 443, 1232, 123, 912, 635, - 379, 1168, 251, 1040, 784, 507, 1296, 652, 7, 796, 519, 263, - 1052, 135, 924, 668, 391, 1180, 71, 860, 583, 327, 1116, 199, - 988, 732, 455, 1244, 39, 828, 551, 295, 1084, 167, 956, 700, - 423, 1212, 103, 892, 615, 359, 1148, 231, 1020, 764, 487, 1276, - 647, 23, 812, 535, 279, 1068, 151, 940, 684, 407, 1196, 87, - 876, 599, 343, 1132, 215, 1004, 748, 471, 1260, 55, 844, 567, - 311, 1100, 183, 972, 716, 439, 1228, 119, 908, 631, 375, 1164, - 247, 1036, 780, 503, 1292, 15, 804, 527, 271, 1060, 143, 932, - 676, 399, 1188, 79, 868, 591, 335, 1124, 207, 996, 740, 463, - 1252, 47, 836, 559, 303, 1092, 175, 964, 708, 431, 1220, 111, - 900, 623, 367, 1156, 239, 1028, 772, 495, 1284, 660, 31, 820, - 543, 287, 1076, 159, 948, 692, 415, 1204, 95, 884, 607, 351, - 1140, 223, 1012, 756, 479, 1268, 63, 852, 575, 319, 1108, 191, - 980, 724, 447, 1236, 127, 916, 639, 383, 1172, 255, 1044, 788, - 511, 1300]; - - return (unsafe { *PERM1301.get_unchecked((index % 1301) as usize) } as u32 * 1692601 + - unsafe { *PERM1301.get_unchecked(((index / 1301) % 1301) as usize) } as u32 * 1301 + - unsafe { - *PERM1301.get_unchecked(((index / 1692601) % 1301) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2202073901u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1303(index: u32) -> f32 { - const PERM1303: [u16; 1303] = [0, 791, 512, 256, 1047, 128, 919, 663, 384, 1175, 64, 855, 576, - 320, 1111, 192, 983, 727, 448, 1239, 32, 823, 544, 288, 1079, - 160, 951, 695, 416, 1207, 96, 887, 608, 352, 1143, 224, 1015, - 759, 480, 1271, 640, 16, 807, 528, 272, 1063, 144, 935, 679, - 400, 1191, 80, 871, 592, 336, 1127, 208, 999, 743, 464, 1255, - 48, 839, 560, 304, 1095, 176, 967, 711, 432, 1223, 112, 903, - 624, 368, 1159, 240, 1031, 775, 496, 1287, 8, 799, 520, 264, - 1055, 136, 927, 671, 392, 1183, 72, 863, 584, 328, 1119, 200, - 991, 735, 456, 1247, 40, 831, 552, 296, 1087, 168, 959, 703, - 424, 1215, 104, 895, 616, 360, 1151, 232, 1023, 767, 488, 1279, - 655, 24, 815, 536, 280, 1071, 152, 943, 687, 408, 1199, 88, - 879, 600, 344, 1135, 216, 1007, 751, 472, 1263, 56, 847, 568, - 312, 1103, 184, 975, 719, 440, 1231, 120, 911, 632, 376, 1167, - 248, 1039, 783, 504, 1295, 648, 4, 795, 516, 260, 1051, 132, - 923, 667, 388, 1179, 68, 859, 580, 324, 1115, 196, 987, 731, - 452, 1243, 36, 827, 548, 292, 1083, 164, 955, 699, 420, 1211, - 100, 891, 612, 356, 1147, 228, 1019, 763, 484, 1275, 644, 20, - 811, 532, 276, 1067, 148, 939, 683, 404, 1195, 84, 875, 596, - 340, 1131, 212, 1003, 747, 468, 1259, 52, 843, 564, 308, 1099, - 180, 971, 715, 436, 1227, 116, 907, 628, 372, 1163, 244, 1035, - 779, 500, 1291, 12, 803, 524, 268, 1059, 140, 931, 675, 396, - 1187, 76, 867, 588, 332, 1123, 204, 995, 739, 460, 1251, 44, - 835, 556, 300, 1091, 172, 963, 707, 428, 1219, 108, 899, 620, - 364, 1155, 236, 1027, 771, 492, 1283, 659, 28, 819, 540, 284, - 1075, 156, 947, 691, 412, 1203, 92, 883, 604, 348, 1139, 220, - 1011, 755, 476, 1267, 60, 851, 572, 316, 1107, 188, 979, 723, - 444, 1235, 124, 915, 636, 380, 1171, 252, 1043, 787, 508, 1299, - 650, 2, 793, 514, 258, 1049, 130, 921, 665, 386, 1177, 66, 857, - 578, 322, 1113, 194, 985, 729, 450, 1241, 34, 825, 546, 290, - 1081, 162, 953, 697, 418, 1209, 98, 889, 610, 354, 1145, 226, - 1017, 761, 482, 1273, 642, 18, 809, 530, 274, 1065, 146, 937, - 681, 402, 1193, 82, 873, 594, 338, 1129, 210, 1001, 745, 466, - 1257, 50, 841, 562, 306, 1097, 178, 969, 713, 434, 1225, 114, - 905, 626, 370, 1161, 242, 1033, 777, 498, 1289, 10, 801, 522, - 266, 1057, 138, 929, 673, 394, 1185, 74, 865, 586, 330, 1121, - 202, 993, 737, 458, 1249, 42, 833, 554, 298, 1089, 170, 961, - 705, 426, 1217, 106, 897, 618, 362, 1153, 234, 1025, 769, 490, - 1281, 657, 26, 817, 538, 282, 1073, 154, 945, 689, 410, 1201, - 90, 881, 602, 346, 1137, 218, 1009, 753, 474, 1265, 58, 849, - 570, 314, 1105, 186, 977, 721, 442, 1233, 122, 913, 634, 378, - 1169, 250, 1041, 785, 506, 1297, 653, 6, 797, 518, 262, 1053, - 134, 925, 669, 390, 1181, 70, 861, 582, 326, 1117, 198, 989, - 733, 454, 1245, 38, 829, 550, 294, 1085, 166, 957, 701, 422, - 1213, 102, 893, 614, 358, 1149, 230, 1021, 765, 486, 1277, 646, - 22, 813, 534, 278, 1069, 150, 941, 685, 406, 1197, 86, 877, - 598, 342, 1133, 214, 1005, 749, 470, 1261, 54, 845, 566, 310, - 1101, 182, 973, 717, 438, 1229, 118, 909, 630, 374, 1165, 246, - 1037, 781, 502, 1293, 14, 805, 526, 270, 1061, 142, 933, 677, - 398, 1189, 78, 869, 590, 334, 1125, 206, 997, 741, 462, 1253, - 46, 837, 558, 302, 1093, 174, 965, 709, 430, 1221, 110, 901, - 622, 366, 1157, 238, 1029, 773, 494, 1285, 661, 30, 821, 542, - 286, 1077, 158, 949, 693, 414, 1205, 94, 885, 606, 350, 1141, - 222, 1013, 757, 478, 1269, 62, 853, 574, 318, 1109, 190, 981, - 725, 446, 1237, 126, 917, 638, 382, 1173, 254, 1045, 789, 510, - 1301, 651, 1, 792, 513, 257, 1048, 129, 920, 664, 385, 1176, - 65, 856, 577, 321, 1112, 193, 984, 728, 449, 1240, 33, 824, - 545, 289, 1080, 161, 952, 696, 417, 1208, 97, 888, 609, 353, - 1144, 225, 1016, 760, 481, 1272, 641, 17, 808, 529, 273, 1064, - 145, 936, 680, 401, 1192, 81, 872, 593, 337, 1128, 209, 1000, - 744, 465, 1256, 49, 840, 561, 305, 1096, 177, 968, 712, 433, - 1224, 113, 904, 625, 369, 1160, 241, 1032, 776, 497, 1288, 9, - 800, 521, 265, 1056, 137, 928, 672, 393, 1184, 73, 864, 585, - 329, 1120, 201, 992, 736, 457, 1248, 41, 832, 553, 297, 1088, - 169, 960, 704, 425, 1216, 105, 896, 617, 361, 1152, 233, 1024, - 768, 489, 1280, 656, 25, 816, 537, 281, 1072, 153, 944, 688, - 409, 1200, 89, 880, 601, 345, 1136, 217, 1008, 752, 473, 1264, - 57, 848, 569, 313, 1104, 185, 976, 720, 441, 1232, 121, 912, - 633, 377, 1168, 249, 1040, 784, 505, 1296, 649, 5, 796, 517, - 261, 1052, 133, 924, 668, 389, 1180, 69, 860, 581, 325, 1116, - 197, 988, 732, 453, 1244, 37, 828, 549, 293, 1084, 165, 956, - 700, 421, 1212, 101, 892, 613, 357, 1148, 229, 1020, 764, 485, - 1276, 645, 21, 812, 533, 277, 1068, 149, 940, 684, 405, 1196, - 85, 876, 597, 341, 1132, 213, 1004, 748, 469, 1260, 53, 844, - 565, 309, 1100, 181, 972, 716, 437, 1228, 117, 908, 629, 373, - 1164, 245, 1036, 780, 501, 1292, 13, 804, 525, 269, 1060, 141, - 932, 676, 397, 1188, 77, 868, 589, 333, 1124, 205, 996, 740, - 461, 1252, 45, 836, 557, 301, 1092, 173, 964, 708, 429, 1220, - 109, 900, 621, 365, 1156, 237, 1028, 772, 493, 1284, 660, 29, - 820, 541, 285, 1076, 157, 948, 692, 413, 1204, 93, 884, 605, - 349, 1140, 221, 1012, 756, 477, 1268, 61, 852, 573, 317, 1108, - 189, 980, 724, 445, 1236, 125, 916, 637, 381, 1172, 253, 1044, - 788, 509, 1300, 652, 3, 794, 515, 259, 1050, 131, 922, 666, - 387, 1178, 67, 858, 579, 323, 1114, 195, 986, 730, 451, 1242, - 35, 826, 547, 291, 1082, 163, 954, 698, 419, 1210, 99, 890, - 611, 355, 1146, 227, 1018, 762, 483, 1274, 643, 19, 810, 531, - 275, 1066, 147, 938, 682, 403, 1194, 83, 874, 595, 339, 1130, - 211, 1002, 746, 467, 1258, 51, 842, 563, 307, 1098, 179, 970, - 714, 435, 1226, 115, 906, 627, 371, 1162, 243, 1034, 778, 499, - 1290, 11, 802, 523, 267, 1058, 139, 930, 674, 395, 1186, 75, - 866, 587, 331, 1122, 203, 994, 738, 459, 1250, 43, 834, 555, - 299, 1090, 171, 962, 706, 427, 1218, 107, 898, 619, 363, 1154, - 235, 1026, 770, 491, 1282, 658, 27, 818, 539, 283, 1074, 155, - 946, 690, 411, 1202, 91, 882, 603, 347, 1138, 219, 1010, 754, - 475, 1266, 59, 850, 571, 315, 1106, 187, 978, 722, 443, 1234, - 123, 914, 635, 379, 1170, 251, 1042, 786, 507, 1298, 654, 7, - 798, 519, 263, 1054, 135, 926, 670, 391, 1182, 71, 862, 583, - 327, 1118, 199, 990, 734, 455, 1246, 39, 830, 551, 295, 1086, - 167, 958, 702, 423, 1214, 103, 894, 615, 359, 1150, 231, 1022, - 766, 487, 1278, 647, 23, 814, 535, 279, 1070, 151, 942, 686, - 407, 1198, 87, 878, 599, 343, 1134, 215, 1006, 750, 471, 1262, - 55, 846, 567, 311, 1102, 183, 974, 718, 439, 1230, 119, 910, - 631, 375, 1166, 247, 1038, 782, 503, 1294, 15, 806, 527, 271, - 1062, 143, 934, 678, 399, 1190, 79, 870, 591, 335, 1126, 207, - 998, 742, 463, 1254, 47, 838, 559, 303, 1094, 175, 966, 710, - 431, 1222, 111, 902, 623, 367, 1158, 239, 1030, 774, 495, 1286, - 662, 31, 822, 543, 287, 1078, 159, 950, 694, 415, 1206, 95, - 886, 607, 351, 1142, 223, 1014, 758, 479, 1270, 63, 854, 575, - 319, 1110, 191, 982, 726, 447, 1238, 127, 918, 639, 383, 1174, - 255, 1046, 790, 511, 1302]; - - return (unsafe { *PERM1303.get_unchecked((index % 1303) as usize) } as u32 * 1697809 + - unsafe { *PERM1303.get_unchecked(((index / 1303) % 1303) as usize) } as u32 * 1303 + - unsafe { - *PERM1303.get_unchecked(((index / 1697809) % 1303) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2212245127u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1307(index: u32) -> f32 { - const PERM1307: [u16; 1307] = [0, 795, 512, 256, 1051, 128, 923, 667, 384, 1179, 64, 859, 576, - 320, 1115, 192, 987, 731, 448, 1243, 32, 827, 544, 288, 1083, - 160, 955, 699, 416, 1211, 96, 891, 608, 352, 1147, 224, 1019, - 763, 480, 1275, 640, 16, 811, 528, 272, 1067, 144, 939, 683, - 400, 1195, 80, 875, 592, 336, 1131, 208, 1003, 747, 464, 1259, - 48, 843, 560, 304, 1099, 176, 971, 715, 432, 1227, 112, 907, - 624, 368, 1163, 240, 1035, 779, 496, 1291, 648, 8, 803, 520, - 264, 1059, 136, 931, 675, 392, 1187, 72, 867, 584, 328, 1123, - 200, 995, 739, 456, 1251, 40, 835, 552, 296, 1091, 168, 963, - 707, 424, 1219, 104, 899, 616, 360, 1155, 232, 1027, 771, 488, - 1283, 659, 24, 819, 536, 280, 1075, 152, 947, 691, 408, 1203, - 88, 883, 600, 344, 1139, 216, 1011, 755, 472, 1267, 56, 851, - 568, 312, 1107, 184, 979, 723, 440, 1235, 120, 915, 632, 376, - 1171, 248, 1043, 787, 504, 1299, 4, 799, 516, 260, 1055, 132, - 927, 671, 388, 1183, 68, 863, 580, 324, 1119, 196, 991, 735, - 452, 1247, 36, 831, 548, 292, 1087, 164, 959, 703, 420, 1215, - 100, 895, 612, 356, 1151, 228, 1023, 767, 484, 1279, 644, 20, - 815, 532, 276, 1071, 148, 943, 687, 404, 1199, 84, 879, 596, - 340, 1135, 212, 1007, 751, 468, 1263, 52, 847, 564, 308, 1103, - 180, 975, 719, 436, 1231, 116, 911, 628, 372, 1167, 244, 1039, - 783, 500, 1295, 655, 12, 807, 524, 268, 1063, 140, 935, 679, - 396, 1191, 76, 871, 588, 332, 1127, 204, 999, 743, 460, 1255, - 44, 839, 556, 300, 1095, 172, 967, 711, 428, 1223, 108, 903, - 620, 364, 1159, 236, 1031, 775, 492, 1287, 663, 28, 823, 540, - 284, 1079, 156, 951, 695, 412, 1207, 92, 887, 604, 348, 1143, - 220, 1015, 759, 476, 1271, 60, 855, 572, 316, 1111, 188, 983, - 727, 444, 1239, 124, 919, 636, 380, 1175, 252, 1047, 791, 508, - 1303, 652, 2, 797, 514, 258, 1053, 130, 925, 669, 386, 1181, - 66, 861, 578, 322, 1117, 194, 989, 733, 450, 1245, 34, 829, - 546, 290, 1085, 162, 957, 701, 418, 1213, 98, 893, 610, 354, - 1149, 226, 1021, 765, 482, 1277, 642, 18, 813, 530, 274, 1069, - 146, 941, 685, 402, 1197, 82, 877, 594, 338, 1133, 210, 1005, - 749, 466, 1261, 50, 845, 562, 306, 1101, 178, 973, 717, 434, - 1229, 114, 909, 626, 370, 1165, 242, 1037, 781, 498, 1293, 650, - 10, 805, 522, 266, 1061, 138, 933, 677, 394, 1189, 74, 869, - 586, 330, 1125, 202, 997, 741, 458, 1253, 42, 837, 554, 298, - 1093, 170, 965, 709, 426, 1221, 106, 901, 618, 362, 1157, 234, - 1029, 773, 490, 1285, 661, 26, 821, 538, 282, 1077, 154, 949, - 693, 410, 1205, 90, 885, 602, 346, 1141, 218, 1013, 757, 474, - 1269, 58, 853, 570, 314, 1109, 186, 981, 725, 442, 1237, 122, - 917, 634, 378, 1173, 250, 1045, 789, 506, 1301, 6, 801, 518, - 262, 1057, 134, 929, 673, 390, 1185, 70, 865, 582, 326, 1121, - 198, 993, 737, 454, 1249, 38, 833, 550, 294, 1089, 166, 961, - 705, 422, 1217, 102, 897, 614, 358, 1153, 230, 1025, 769, 486, - 1281, 646, 22, 817, 534, 278, 1073, 150, 945, 689, 406, 1201, - 86, 881, 598, 342, 1137, 214, 1009, 753, 470, 1265, 54, 849, - 566, 310, 1105, 182, 977, 721, 438, 1233, 118, 913, 630, 374, - 1169, 246, 1041, 785, 502, 1297, 657, 14, 809, 526, 270, 1065, - 142, 937, 681, 398, 1193, 78, 873, 590, 334, 1129, 206, 1001, - 745, 462, 1257, 46, 841, 558, 302, 1097, 174, 969, 713, 430, - 1225, 110, 905, 622, 366, 1161, 238, 1033, 777, 494, 1289, 665, - 30, 825, 542, 286, 1081, 158, 953, 697, 414, 1209, 94, 889, - 606, 350, 1145, 222, 1017, 761, 478, 1273, 62, 857, 574, 318, - 1113, 190, 985, 729, 446, 1241, 126, 921, 638, 382, 1177, 254, - 1049, 793, 510, 1305, 653, 1, 796, 513, 257, 1052, 129, 924, - 668, 385, 1180, 65, 860, 577, 321, 1116, 193, 988, 732, 449, - 1244, 33, 828, 545, 289, 1084, 161, 956, 700, 417, 1212, 97, - 892, 609, 353, 1148, 225, 1020, 764, 481, 1276, 641, 17, 812, - 529, 273, 1068, 145, 940, 684, 401, 1196, 81, 876, 593, 337, - 1132, 209, 1004, 748, 465, 1260, 49, 844, 561, 305, 1100, 177, - 972, 716, 433, 1228, 113, 908, 625, 369, 1164, 241, 1036, 780, - 497, 1292, 649, 9, 804, 521, 265, 1060, 137, 932, 676, 393, - 1188, 73, 868, 585, 329, 1124, 201, 996, 740, 457, 1252, 41, - 836, 553, 297, 1092, 169, 964, 708, 425, 1220, 105, 900, 617, - 361, 1156, 233, 1028, 772, 489, 1284, 660, 25, 820, 537, 281, - 1076, 153, 948, 692, 409, 1204, 89, 884, 601, 345, 1140, 217, - 1012, 756, 473, 1268, 57, 852, 569, 313, 1108, 185, 980, 724, - 441, 1236, 121, 916, 633, 377, 1172, 249, 1044, 788, 505, 1300, - 5, 800, 517, 261, 1056, 133, 928, 672, 389, 1184, 69, 864, 581, - 325, 1120, 197, 992, 736, 453, 1248, 37, 832, 549, 293, 1088, - 165, 960, 704, 421, 1216, 101, 896, 613, 357, 1152, 229, 1024, - 768, 485, 1280, 645, 21, 816, 533, 277, 1072, 149, 944, 688, - 405, 1200, 85, 880, 597, 341, 1136, 213, 1008, 752, 469, 1264, - 53, 848, 565, 309, 1104, 181, 976, 720, 437, 1232, 117, 912, - 629, 373, 1168, 245, 1040, 784, 501, 1296, 656, 13, 808, 525, - 269, 1064, 141, 936, 680, 397, 1192, 77, 872, 589, 333, 1128, - 205, 1000, 744, 461, 1256, 45, 840, 557, 301, 1096, 173, 968, - 712, 429, 1224, 109, 904, 621, 365, 1160, 237, 1032, 776, 493, - 1288, 664, 29, 824, 541, 285, 1080, 157, 952, 696, 413, 1208, - 93, 888, 605, 349, 1144, 221, 1016, 760, 477, 1272, 61, 856, - 573, 317, 1112, 189, 984, 728, 445, 1240, 125, 920, 637, 381, - 1176, 253, 1048, 792, 509, 1304, 654, 3, 798, 515, 259, 1054, - 131, 926, 670, 387, 1182, 67, 862, 579, 323, 1118, 195, 990, - 734, 451, 1246, 35, 830, 547, 291, 1086, 163, 958, 702, 419, - 1214, 99, 894, 611, 355, 1150, 227, 1022, 766, 483, 1278, 643, - 19, 814, 531, 275, 1070, 147, 942, 686, 403, 1198, 83, 878, - 595, 339, 1134, 211, 1006, 750, 467, 1262, 51, 846, 563, 307, - 1102, 179, 974, 718, 435, 1230, 115, 910, 627, 371, 1166, 243, - 1038, 782, 499, 1294, 651, 11, 806, 523, 267, 1062, 139, 934, - 678, 395, 1190, 75, 870, 587, 331, 1126, 203, 998, 742, 459, - 1254, 43, 838, 555, 299, 1094, 171, 966, 710, 427, 1222, 107, - 902, 619, 363, 1158, 235, 1030, 774, 491, 1286, 662, 27, 822, - 539, 283, 1078, 155, 950, 694, 411, 1206, 91, 886, 603, 347, - 1142, 219, 1014, 758, 475, 1270, 59, 854, 571, 315, 1110, 187, - 982, 726, 443, 1238, 123, 918, 635, 379, 1174, 251, 1046, 790, - 507, 1302, 7, 802, 519, 263, 1058, 135, 930, 674, 391, 1186, - 71, 866, 583, 327, 1122, 199, 994, 738, 455, 1250, 39, 834, - 551, 295, 1090, 167, 962, 706, 423, 1218, 103, 898, 615, 359, - 1154, 231, 1026, 770, 487, 1282, 647, 23, 818, 535, 279, 1074, - 151, 946, 690, 407, 1202, 87, 882, 599, 343, 1138, 215, 1010, - 754, 471, 1266, 55, 850, 567, 311, 1106, 183, 978, 722, 439, - 1234, 119, 914, 631, 375, 1170, 247, 1042, 786, 503, 1298, 658, - 15, 810, 527, 271, 1066, 143, 938, 682, 399, 1194, 79, 874, - 591, 335, 1130, 207, 1002, 746, 463, 1258, 47, 842, 559, 303, - 1098, 175, 970, 714, 431, 1226, 111, 906, 623, 367, 1162, 239, - 1034, 778, 495, 1290, 666, 31, 826, 543, 287, 1082, 159, 954, - 698, 415, 1210, 95, 890, 607, 351, 1146, 223, 1018, 762, 479, - 1274, 63, 858, 575, 319, 1114, 191, 986, 730, 447, 1242, 127, - 922, 639, 383, 1178, 255, 1050, 794, 511, 1306]; - - return (unsafe { *PERM1307.get_unchecked((index % 1307) as usize) } as u32 * 1708249 + - unsafe { *PERM1307.get_unchecked(((index / 1307) % 1307) as usize) } as u32 * 1307 + - unsafe { - *PERM1307.get_unchecked(((index / 1708249) % 1307) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2232681443u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1319(index: u32) -> f32 { - const PERM1319: [u16; 1319] = [0, 807, 512, 256, 1063, 128, 935, 679, 384, 1191, 64, 871, 576, - 320, 1127, 192, 999, 743, 448, 1255, 640, 32, 839, 544, 288, - 1095, 160, 967, 711, 416, 1223, 96, 903, 608, 352, 1159, 224, - 1031, 775, 480, 1287, 16, 823, 528, 272, 1079, 144, 951, 695, - 400, 1207, 80, 887, 592, 336, 1143, 208, 1015, 759, 464, 1271, - 663, 48, 855, 560, 304, 1111, 176, 983, 727, 432, 1239, 112, - 919, 624, 368, 1175, 240, 1047, 791, 496, 1303, 8, 815, 520, - 264, 1071, 136, 943, 687, 392, 1199, 72, 879, 584, 328, 1135, - 200, 1007, 751, 456, 1263, 648, 40, 847, 552, 296, 1103, 168, - 975, 719, 424, 1231, 104, 911, 616, 360, 1167, 232, 1039, 783, - 488, 1295, 24, 831, 536, 280, 1087, 152, 959, 703, 408, 1215, - 88, 895, 600, 344, 1151, 216, 1023, 767, 472, 1279, 671, 56, - 863, 568, 312, 1119, 184, 991, 735, 440, 1247, 120, 927, 632, - 376, 1183, 248, 1055, 799, 504, 1311, 656, 4, 811, 516, 260, - 1067, 132, 939, 683, 388, 1195, 68, 875, 580, 324, 1131, 196, - 1003, 747, 452, 1259, 644, 36, 843, 548, 292, 1099, 164, 971, - 715, 420, 1227, 100, 907, 612, 356, 1163, 228, 1035, 779, 484, - 1291, 20, 827, 532, 276, 1083, 148, 955, 699, 404, 1211, 84, - 891, 596, 340, 1147, 212, 1019, 763, 468, 1275, 667, 52, 859, - 564, 308, 1115, 180, 987, 731, 436, 1243, 116, 923, 628, 372, - 1179, 244, 1051, 795, 500, 1307, 12, 819, 524, 268, 1075, 140, - 947, 691, 396, 1203, 76, 883, 588, 332, 1139, 204, 1011, 755, - 460, 1267, 652, 44, 851, 556, 300, 1107, 172, 979, 723, 428, - 1235, 108, 915, 620, 364, 1171, 236, 1043, 787, 492, 1299, 28, - 835, 540, 284, 1091, 156, 963, 707, 412, 1219, 92, 899, 604, - 348, 1155, 220, 1027, 771, 476, 1283, 675, 60, 867, 572, 316, - 1123, 188, 995, 739, 444, 1251, 124, 931, 636, 380, 1187, 252, - 1059, 803, 508, 1315, 658, 2, 809, 514, 258, 1065, 130, 937, - 681, 386, 1193, 66, 873, 578, 322, 1129, 194, 1001, 745, 450, - 1257, 642, 34, 841, 546, 290, 1097, 162, 969, 713, 418, 1225, - 98, 905, 610, 354, 1161, 226, 1033, 777, 482, 1289, 18, 825, - 530, 274, 1081, 146, 953, 697, 402, 1209, 82, 889, 594, 338, - 1145, 210, 1017, 761, 466, 1273, 665, 50, 857, 562, 306, 1113, - 178, 985, 729, 434, 1241, 114, 921, 626, 370, 1177, 242, 1049, - 793, 498, 1305, 10, 817, 522, 266, 1073, 138, 945, 689, 394, - 1201, 74, 881, 586, 330, 1137, 202, 1009, 753, 458, 1265, 650, - 42, 849, 554, 298, 1105, 170, 977, 721, 426, 1233, 106, 913, - 618, 362, 1169, 234, 1041, 785, 490, 1297, 26, 833, 538, 282, - 1089, 154, 961, 705, 410, 1217, 90, 897, 602, 346, 1153, 218, - 1025, 769, 474, 1281, 673, 58, 865, 570, 314, 1121, 186, 993, - 737, 442, 1249, 122, 929, 634, 378, 1185, 250, 1057, 801, 506, - 1313, 661, 6, 813, 518, 262, 1069, 134, 941, 685, 390, 1197, - 70, 877, 582, 326, 1133, 198, 1005, 749, 454, 1261, 646, 38, - 845, 550, 294, 1101, 166, 973, 717, 422, 1229, 102, 909, 614, - 358, 1165, 230, 1037, 781, 486, 1293, 22, 829, 534, 278, 1085, - 150, 957, 701, 406, 1213, 86, 893, 598, 342, 1149, 214, 1021, - 765, 470, 1277, 669, 54, 861, 566, 310, 1117, 182, 989, 733, - 438, 1245, 118, 925, 630, 374, 1181, 246, 1053, 797, 502, 1309, - 14, 821, 526, 270, 1077, 142, 949, 693, 398, 1205, 78, 885, - 590, 334, 1141, 206, 1013, 757, 462, 1269, 654, 46, 853, 558, - 302, 1109, 174, 981, 725, 430, 1237, 110, 917, 622, 366, 1173, - 238, 1045, 789, 494, 1301, 30, 837, 542, 286, 1093, 158, 965, - 709, 414, 1221, 94, 901, 606, 350, 1157, 222, 1029, 773, 478, - 1285, 677, 62, 869, 574, 318, 1125, 190, 997, 741, 446, 1253, - 126, 933, 638, 382, 1189, 254, 1061, 805, 510, 1317, 659, 1, - 808, 513, 257, 1064, 129, 936, 680, 385, 1192, 65, 872, 577, - 321, 1128, 193, 1000, 744, 449, 1256, 641, 33, 840, 545, 289, - 1096, 161, 968, 712, 417, 1224, 97, 904, 609, 353, 1160, 225, - 1032, 776, 481, 1288, 17, 824, 529, 273, 1080, 145, 952, 696, - 401, 1208, 81, 888, 593, 337, 1144, 209, 1016, 760, 465, 1272, - 664, 49, 856, 561, 305, 1112, 177, 984, 728, 433, 1240, 113, - 920, 625, 369, 1176, 241, 1048, 792, 497, 1304, 9, 816, 521, - 265, 1072, 137, 944, 688, 393, 1200, 73, 880, 585, 329, 1136, - 201, 1008, 752, 457, 1264, 649, 41, 848, 553, 297, 1104, 169, - 976, 720, 425, 1232, 105, 912, 617, 361, 1168, 233, 1040, 784, - 489, 1296, 25, 832, 537, 281, 1088, 153, 960, 704, 409, 1216, - 89, 896, 601, 345, 1152, 217, 1024, 768, 473, 1280, 672, 57, - 864, 569, 313, 1120, 185, 992, 736, 441, 1248, 121, 928, 633, - 377, 1184, 249, 1056, 800, 505, 1312, 657, 5, 812, 517, 261, - 1068, 133, 940, 684, 389, 1196, 69, 876, 581, 325, 1132, 197, - 1004, 748, 453, 1260, 645, 37, 844, 549, 293, 1100, 165, 972, - 716, 421, 1228, 101, 908, 613, 357, 1164, 229, 1036, 780, 485, - 1292, 21, 828, 533, 277, 1084, 149, 956, 700, 405, 1212, 85, - 892, 597, 341, 1148, 213, 1020, 764, 469, 1276, 668, 53, 860, - 565, 309, 1116, 181, 988, 732, 437, 1244, 117, 924, 629, 373, - 1180, 245, 1052, 796, 501, 1308, 13, 820, 525, 269, 1076, 141, - 948, 692, 397, 1204, 77, 884, 589, 333, 1140, 205, 1012, 756, - 461, 1268, 653, 45, 852, 557, 301, 1108, 173, 980, 724, 429, - 1236, 109, 916, 621, 365, 1172, 237, 1044, 788, 493, 1300, 29, - 836, 541, 285, 1092, 157, 964, 708, 413, 1220, 93, 900, 605, - 349, 1156, 221, 1028, 772, 477, 1284, 676, 61, 868, 573, 317, - 1124, 189, 996, 740, 445, 1252, 125, 932, 637, 381, 1188, 253, - 1060, 804, 509, 1316, 660, 3, 810, 515, 259, 1066, 131, 938, - 682, 387, 1194, 67, 874, 579, 323, 1130, 195, 1002, 746, 451, - 1258, 643, 35, 842, 547, 291, 1098, 163, 970, 714, 419, 1226, - 99, 906, 611, 355, 1162, 227, 1034, 778, 483, 1290, 19, 826, - 531, 275, 1082, 147, 954, 698, 403, 1210, 83, 890, 595, 339, - 1146, 211, 1018, 762, 467, 1274, 666, 51, 858, 563, 307, 1114, - 179, 986, 730, 435, 1242, 115, 922, 627, 371, 1178, 243, 1050, - 794, 499, 1306, 11, 818, 523, 267, 1074, 139, 946, 690, 395, - 1202, 75, 882, 587, 331, 1138, 203, 1010, 754, 459, 1266, 651, - 43, 850, 555, 299, 1106, 171, 978, 722, 427, 1234, 107, 914, - 619, 363, 1170, 235, 1042, 786, 491, 1298, 27, 834, 539, 283, - 1090, 155, 962, 706, 411, 1218, 91, 898, 603, 347, 1154, 219, - 1026, 770, 475, 1282, 674, 59, 866, 571, 315, 1122, 187, 994, - 738, 443, 1250, 123, 930, 635, 379, 1186, 251, 1058, 802, 507, - 1314, 662, 7, 814, 519, 263, 1070, 135, 942, 686, 391, 1198, - 71, 878, 583, 327, 1134, 199, 1006, 750, 455, 1262, 647, 39, - 846, 551, 295, 1102, 167, 974, 718, 423, 1230, 103, 910, 615, - 359, 1166, 231, 1038, 782, 487, 1294, 23, 830, 535, 279, 1086, - 151, 958, 702, 407, 1214, 87, 894, 599, 343, 1150, 215, 1022, - 766, 471, 1278, 670, 55, 862, 567, 311, 1118, 183, 990, 734, - 439, 1246, 119, 926, 631, 375, 1182, 247, 1054, 798, 503, 1310, - 15, 822, 527, 271, 1078, 143, 950, 694, 399, 1206, 79, 886, - 591, 335, 1142, 207, 1014, 758, 463, 1270, 655, 47, 854, 559, - 303, 1110, 175, 982, 726, 431, 1238, 111, 918, 623, 367, 1174, - 239, 1046, 790, 495, 1302, 31, 838, 543, 287, 1094, 159, 966, - 710, 415, 1222, 95, 902, 607, 351, 1158, 223, 1030, 774, 479, - 1286, 678, 63, 870, 575, 319, 1126, 191, 998, 742, 447, 1254, - 127, 934, 639, 383, 1190, 255, 1062, 806, 511, 1318]; - - return (unsafe { *PERM1319.get_unchecked((index % 1319) as usize) } as u32 * 1739761 + - unsafe { *PERM1319.get_unchecked(((index / 1319) % 1319) as usize) } as u32 * 1319 + - unsafe { - *PERM1319.get_unchecked(((index / 1739761) % 1319) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2294744759u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1321(index: u32) -> f32 { - const PERM1321: [u16; 1321] = [0, 809, 512, 256, 1065, 128, 937, 681, 384, 1193, 64, 873, 576, - 320, 1129, 192, 1001, 745, 448, 1257, 640, 32, 841, 544, 288, - 1097, 160, 969, 713, 416, 1225, 96, 905, 608, 352, 1161, 224, - 1033, 777, 480, 1289, 16, 825, 528, 272, 1081, 144, 953, 697, - 400, 1209, 80, 889, 592, 336, 1145, 208, 1017, 761, 464, 1273, - 665, 48, 857, 560, 304, 1113, 176, 985, 729, 432, 1241, 112, - 921, 624, 368, 1177, 240, 1049, 793, 496, 1305, 656, 8, 817, - 520, 264, 1073, 136, 945, 689, 392, 1201, 72, 881, 584, 328, - 1137, 200, 1009, 753, 456, 1265, 648, 40, 849, 552, 296, 1105, - 168, 977, 721, 424, 1233, 104, 913, 616, 360, 1169, 232, 1041, - 785, 488, 1297, 24, 833, 536, 280, 1089, 152, 961, 705, 408, - 1217, 88, 897, 600, 344, 1153, 216, 1025, 769, 472, 1281, 673, - 56, 865, 568, 312, 1121, 184, 993, 737, 440, 1249, 120, 929, - 632, 376, 1185, 248, 1057, 801, 504, 1313, 4, 813, 516, 260, - 1069, 132, 941, 685, 388, 1197, 68, 877, 580, 324, 1133, 196, - 1005, 749, 452, 1261, 644, 36, 845, 548, 292, 1101, 164, 973, - 717, 420, 1229, 100, 909, 612, 356, 1165, 228, 1037, 781, 484, - 1293, 20, 829, 532, 276, 1085, 148, 957, 701, 404, 1213, 84, - 893, 596, 340, 1149, 212, 1021, 765, 468, 1277, 669, 52, 861, - 564, 308, 1117, 180, 989, 733, 436, 1245, 116, 925, 628, 372, - 1181, 244, 1053, 797, 500, 1309, 661, 12, 821, 524, 268, 1077, - 140, 949, 693, 396, 1205, 76, 885, 588, 332, 1141, 204, 1013, - 757, 460, 1269, 652, 44, 853, 556, 300, 1109, 172, 981, 725, - 428, 1237, 108, 917, 620, 364, 1173, 236, 1045, 789, 492, 1301, - 28, 837, 540, 284, 1093, 156, 965, 709, 412, 1221, 92, 901, - 604, 348, 1157, 220, 1029, 773, 476, 1285, 677, 60, 869, 572, - 316, 1125, 188, 997, 741, 444, 1253, 124, 933, 636, 380, 1189, - 252, 1061, 805, 508, 1317, 2, 811, 514, 258, 1067, 130, 939, - 683, 386, 1195, 66, 875, 578, 322, 1131, 194, 1003, 747, 450, - 1259, 642, 34, 843, 546, 290, 1099, 162, 971, 715, 418, 1227, - 98, 907, 610, 354, 1163, 226, 1035, 779, 482, 1291, 18, 827, - 530, 274, 1083, 146, 955, 699, 402, 1211, 82, 891, 594, 338, - 1147, 210, 1019, 763, 466, 1275, 667, 50, 859, 562, 306, 1115, - 178, 987, 731, 434, 1243, 114, 923, 626, 370, 1179, 242, 1051, - 795, 498, 1307, 658, 10, 819, 522, 266, 1075, 138, 947, 691, - 394, 1203, 74, 883, 586, 330, 1139, 202, 1011, 755, 458, 1267, - 650, 42, 851, 554, 298, 1107, 170, 979, 723, 426, 1235, 106, - 915, 618, 362, 1171, 234, 1043, 787, 490, 1299, 26, 835, 538, - 282, 1091, 154, 963, 707, 410, 1219, 90, 899, 602, 346, 1155, - 218, 1027, 771, 474, 1283, 675, 58, 867, 570, 314, 1123, 186, - 995, 739, 442, 1251, 122, 931, 634, 378, 1187, 250, 1059, 803, - 506, 1315, 6, 815, 518, 262, 1071, 134, 943, 687, 390, 1199, - 70, 879, 582, 326, 1135, 198, 1007, 751, 454, 1263, 646, 38, - 847, 550, 294, 1103, 166, 975, 719, 422, 1231, 102, 911, 614, - 358, 1167, 230, 1039, 783, 486, 1295, 22, 831, 534, 278, 1087, - 150, 959, 703, 406, 1215, 86, 895, 598, 342, 1151, 214, 1023, - 767, 470, 1279, 671, 54, 863, 566, 310, 1119, 182, 991, 735, - 438, 1247, 118, 927, 630, 374, 1183, 246, 1055, 799, 502, 1311, - 663, 14, 823, 526, 270, 1079, 142, 951, 695, 398, 1207, 78, - 887, 590, 334, 1143, 206, 1015, 759, 462, 1271, 654, 46, 855, - 558, 302, 1111, 174, 983, 727, 430, 1239, 110, 919, 622, 366, - 1175, 238, 1047, 791, 494, 1303, 30, 839, 542, 286, 1095, 158, - 967, 711, 414, 1223, 94, 903, 606, 350, 1159, 222, 1031, 775, - 478, 1287, 679, 62, 871, 574, 318, 1127, 190, 999, 743, 446, - 1255, 126, 935, 638, 382, 1191, 254, 1063, 807, 510, 1319, 660, - 1, 810, 513, 257, 1066, 129, 938, 682, 385, 1194, 65, 874, 577, - 321, 1130, 193, 1002, 746, 449, 1258, 641, 33, 842, 545, 289, - 1098, 161, 970, 714, 417, 1226, 97, 906, 609, 353, 1162, 225, - 1034, 778, 481, 1290, 17, 826, 529, 273, 1082, 145, 954, 698, - 401, 1210, 81, 890, 593, 337, 1146, 209, 1018, 762, 465, 1274, - 666, 49, 858, 561, 305, 1114, 177, 986, 730, 433, 1242, 113, - 922, 625, 369, 1178, 241, 1050, 794, 497, 1306, 657, 9, 818, - 521, 265, 1074, 137, 946, 690, 393, 1202, 73, 882, 585, 329, - 1138, 201, 1010, 754, 457, 1266, 649, 41, 850, 553, 297, 1106, - 169, 978, 722, 425, 1234, 105, 914, 617, 361, 1170, 233, 1042, - 786, 489, 1298, 25, 834, 537, 281, 1090, 153, 962, 706, 409, - 1218, 89, 898, 601, 345, 1154, 217, 1026, 770, 473, 1282, 674, - 57, 866, 569, 313, 1122, 185, 994, 738, 441, 1250, 121, 930, - 633, 377, 1186, 249, 1058, 802, 505, 1314, 5, 814, 517, 261, - 1070, 133, 942, 686, 389, 1198, 69, 878, 581, 325, 1134, 197, - 1006, 750, 453, 1262, 645, 37, 846, 549, 293, 1102, 165, 974, - 718, 421, 1230, 101, 910, 613, 357, 1166, 229, 1038, 782, 485, - 1294, 21, 830, 533, 277, 1086, 149, 958, 702, 405, 1214, 85, - 894, 597, 341, 1150, 213, 1022, 766, 469, 1278, 670, 53, 862, - 565, 309, 1118, 181, 990, 734, 437, 1246, 117, 926, 629, 373, - 1182, 245, 1054, 798, 501, 1310, 662, 13, 822, 525, 269, 1078, - 141, 950, 694, 397, 1206, 77, 886, 589, 333, 1142, 205, 1014, - 758, 461, 1270, 653, 45, 854, 557, 301, 1110, 173, 982, 726, - 429, 1238, 109, 918, 621, 365, 1174, 237, 1046, 790, 493, 1302, - 29, 838, 541, 285, 1094, 157, 966, 710, 413, 1222, 93, 902, - 605, 349, 1158, 221, 1030, 774, 477, 1286, 678, 61, 870, 573, - 317, 1126, 189, 998, 742, 445, 1254, 125, 934, 637, 381, 1190, - 253, 1062, 806, 509, 1318, 3, 812, 515, 259, 1068, 131, 940, - 684, 387, 1196, 67, 876, 579, 323, 1132, 195, 1004, 748, 451, - 1260, 643, 35, 844, 547, 291, 1100, 163, 972, 716, 419, 1228, - 99, 908, 611, 355, 1164, 227, 1036, 780, 483, 1292, 19, 828, - 531, 275, 1084, 147, 956, 700, 403, 1212, 83, 892, 595, 339, - 1148, 211, 1020, 764, 467, 1276, 668, 51, 860, 563, 307, 1116, - 179, 988, 732, 435, 1244, 115, 924, 627, 371, 1180, 243, 1052, - 796, 499, 1308, 659, 11, 820, 523, 267, 1076, 139, 948, 692, - 395, 1204, 75, 884, 587, 331, 1140, 203, 1012, 756, 459, 1268, - 651, 43, 852, 555, 299, 1108, 171, 980, 724, 427, 1236, 107, - 916, 619, 363, 1172, 235, 1044, 788, 491, 1300, 27, 836, 539, - 283, 1092, 155, 964, 708, 411, 1220, 91, 900, 603, 347, 1156, - 219, 1028, 772, 475, 1284, 676, 59, 868, 571, 315, 1124, 187, - 996, 740, 443, 1252, 123, 932, 635, 379, 1188, 251, 1060, 804, - 507, 1316, 7, 816, 519, 263, 1072, 135, 944, 688, 391, 1200, - 71, 880, 583, 327, 1136, 199, 1008, 752, 455, 1264, 647, 39, - 848, 551, 295, 1104, 167, 976, 720, 423, 1232, 103, 912, 615, - 359, 1168, 231, 1040, 784, 487, 1296, 23, 832, 535, 279, 1088, - 151, 960, 704, 407, 1216, 87, 896, 599, 343, 1152, 215, 1024, - 768, 471, 1280, 672, 55, 864, 567, 311, 1120, 183, 992, 736, - 439, 1248, 119, 928, 631, 375, 1184, 247, 1056, 800, 503, 1312, - 664, 15, 824, 527, 271, 1080, 143, 952, 696, 399, 1208, 79, - 888, 591, 335, 1144, 207, 1016, 760, 463, 1272, 655, 47, 856, - 559, 303, 1112, 175, 984, 728, 431, 1240, 111, 920, 623, 367, - 1176, 239, 1048, 792, 495, 1304, 31, 840, 543, 287, 1096, 159, - 968, 712, 415, 1224, 95, 904, 607, 351, 1160, 223, 1032, 776, - 479, 1288, 680, 63, 872, 575, 319, 1128, 191, 1000, 744, 447, - 1256, 127, 936, 639, 383, 1192, 255, 1064, 808, 511, 1320]; - - return (unsafe { *PERM1321.get_unchecked((index % 1321) as usize) } as u32 * 1745041 + - unsafe { *PERM1321.get_unchecked(((index / 1321) % 1321) as usize) } as u32 * 1321 + - unsafe { - *PERM1321.get_unchecked(((index / 1745041) % 1321) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2305199161u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1327(index: u32) -> f32 { - const PERM1327: [u16; 1327] = [0, 815, 512, 256, 1071, 128, 943, 687, 384, 1199, 64, 879, 576, - 320, 1135, 192, 1007, 751, 448, 1263, 640, 32, 847, 544, 288, - 1103, 160, 975, 719, 416, 1231, 96, 911, 608, 352, 1167, 224, - 1039, 783, 480, 1295, 16, 831, 528, 272, 1087, 144, 959, 703, - 400, 1215, 80, 895, 592, 336, 1151, 208, 1023, 767, 464, 1279, - 671, 48, 863, 560, 304, 1119, 176, 991, 735, 432, 1247, 112, - 927, 624, 368, 1183, 240, 1055, 799, 496, 1311, 656, 8, 823, - 520, 264, 1079, 136, 951, 695, 392, 1207, 72, 887, 584, 328, - 1143, 200, 1015, 759, 456, 1271, 648, 40, 855, 552, 296, 1111, - 168, 983, 727, 424, 1239, 104, 919, 616, 360, 1175, 232, 1047, - 791, 488, 1303, 24, 839, 536, 280, 1095, 152, 967, 711, 408, - 1223, 88, 903, 600, 344, 1159, 216, 1031, 775, 472, 1287, 679, - 56, 871, 568, 312, 1127, 184, 999, 743, 440, 1255, 120, 935, - 632, 376, 1191, 248, 1063, 807, 504, 1319, 660, 4, 819, 516, - 260, 1075, 132, 947, 691, 388, 1203, 68, 883, 580, 324, 1139, - 196, 1011, 755, 452, 1267, 644, 36, 851, 548, 292, 1107, 164, - 979, 723, 420, 1235, 100, 915, 612, 356, 1171, 228, 1043, 787, - 484, 1299, 20, 835, 532, 276, 1091, 148, 963, 707, 404, 1219, - 84, 899, 596, 340, 1155, 212, 1027, 771, 468, 1283, 675, 52, - 867, 564, 308, 1123, 180, 995, 739, 436, 1251, 116, 931, 628, - 372, 1187, 244, 1059, 803, 500, 1315, 667, 12, 827, 524, 268, - 1083, 140, 955, 699, 396, 1211, 76, 891, 588, 332, 1147, 204, - 1019, 763, 460, 1275, 652, 44, 859, 556, 300, 1115, 172, 987, - 731, 428, 1243, 108, 923, 620, 364, 1179, 236, 1051, 795, 492, - 1307, 28, 843, 540, 284, 1099, 156, 971, 715, 412, 1227, 92, - 907, 604, 348, 1163, 220, 1035, 779, 476, 1291, 683, 60, 875, - 572, 316, 1131, 188, 1003, 747, 444, 1259, 124, 939, 636, 380, - 1195, 252, 1067, 811, 508, 1323, 662, 2, 817, 514, 258, 1073, - 130, 945, 689, 386, 1201, 66, 881, 578, 322, 1137, 194, 1009, - 753, 450, 1265, 642, 34, 849, 546, 290, 1105, 162, 977, 721, - 418, 1233, 98, 913, 610, 354, 1169, 226, 1041, 785, 482, 1297, - 18, 833, 530, 274, 1089, 146, 961, 705, 402, 1217, 82, 897, - 594, 338, 1153, 210, 1025, 769, 466, 1281, 673, 50, 865, 562, - 306, 1121, 178, 993, 737, 434, 1249, 114, 929, 626, 370, 1185, - 242, 1057, 801, 498, 1313, 658, 10, 825, 522, 266, 1081, 138, - 953, 697, 394, 1209, 74, 889, 586, 330, 1145, 202, 1017, 761, - 458, 1273, 650, 42, 857, 554, 298, 1113, 170, 985, 729, 426, - 1241, 106, 921, 618, 362, 1177, 234, 1049, 793, 490, 1305, 26, - 841, 538, 282, 1097, 154, 969, 713, 410, 1225, 90, 905, 602, - 346, 1161, 218, 1033, 777, 474, 1289, 681, 58, 873, 570, 314, - 1129, 186, 1001, 745, 442, 1257, 122, 937, 634, 378, 1193, 250, - 1065, 809, 506, 1321, 665, 6, 821, 518, 262, 1077, 134, 949, - 693, 390, 1205, 70, 885, 582, 326, 1141, 198, 1013, 757, 454, - 1269, 646, 38, 853, 550, 294, 1109, 166, 981, 725, 422, 1237, - 102, 917, 614, 358, 1173, 230, 1045, 789, 486, 1301, 22, 837, - 534, 278, 1093, 150, 965, 709, 406, 1221, 86, 901, 598, 342, - 1157, 214, 1029, 773, 470, 1285, 677, 54, 869, 566, 310, 1125, - 182, 997, 741, 438, 1253, 118, 933, 630, 374, 1189, 246, 1061, - 805, 502, 1317, 669, 14, 829, 526, 270, 1085, 142, 957, 701, - 398, 1213, 78, 893, 590, 334, 1149, 206, 1021, 765, 462, 1277, - 654, 46, 861, 558, 302, 1117, 174, 989, 733, 430, 1245, 110, - 925, 622, 366, 1181, 238, 1053, 797, 494, 1309, 30, 845, 542, - 286, 1101, 158, 973, 717, 414, 1229, 94, 909, 606, 350, 1165, - 222, 1037, 781, 478, 1293, 685, 62, 877, 574, 318, 1133, 190, - 1005, 749, 446, 1261, 126, 941, 638, 382, 1197, 254, 1069, 813, - 510, 1325, 663, 1, 816, 513, 257, 1072, 129, 944, 688, 385, - 1200, 65, 880, 577, 321, 1136, 193, 1008, 752, 449, 1264, 641, - 33, 848, 545, 289, 1104, 161, 976, 720, 417, 1232, 97, 912, - 609, 353, 1168, 225, 1040, 784, 481, 1296, 17, 832, 529, 273, - 1088, 145, 960, 704, 401, 1216, 81, 896, 593, 337, 1152, 209, - 1024, 768, 465, 1280, 672, 49, 864, 561, 305, 1120, 177, 992, - 736, 433, 1248, 113, 928, 625, 369, 1184, 241, 1056, 800, 497, - 1312, 657, 9, 824, 521, 265, 1080, 137, 952, 696, 393, 1208, - 73, 888, 585, 329, 1144, 201, 1016, 760, 457, 1272, 649, 41, - 856, 553, 297, 1112, 169, 984, 728, 425, 1240, 105, 920, 617, - 361, 1176, 233, 1048, 792, 489, 1304, 25, 840, 537, 281, 1096, - 153, 968, 712, 409, 1224, 89, 904, 601, 345, 1160, 217, 1032, - 776, 473, 1288, 680, 57, 872, 569, 313, 1128, 185, 1000, 744, - 441, 1256, 121, 936, 633, 377, 1192, 249, 1064, 808, 505, 1320, - 661, 5, 820, 517, 261, 1076, 133, 948, 692, 389, 1204, 69, 884, - 581, 325, 1140, 197, 1012, 756, 453, 1268, 645, 37, 852, 549, - 293, 1108, 165, 980, 724, 421, 1236, 101, 916, 613, 357, 1172, - 229, 1044, 788, 485, 1300, 21, 836, 533, 277, 1092, 149, 964, - 708, 405, 1220, 85, 900, 597, 341, 1156, 213, 1028, 772, 469, - 1284, 676, 53, 868, 565, 309, 1124, 181, 996, 740, 437, 1252, - 117, 932, 629, 373, 1188, 245, 1060, 804, 501, 1316, 668, 13, - 828, 525, 269, 1084, 141, 956, 700, 397, 1212, 77, 892, 589, - 333, 1148, 205, 1020, 764, 461, 1276, 653, 45, 860, 557, 301, - 1116, 173, 988, 732, 429, 1244, 109, 924, 621, 365, 1180, 237, - 1052, 796, 493, 1308, 29, 844, 541, 285, 1100, 157, 972, 716, - 413, 1228, 93, 908, 605, 349, 1164, 221, 1036, 780, 477, 1292, - 684, 61, 876, 573, 317, 1132, 189, 1004, 748, 445, 1260, 125, - 940, 637, 381, 1196, 253, 1068, 812, 509, 1324, 664, 3, 818, - 515, 259, 1074, 131, 946, 690, 387, 1202, 67, 882, 579, 323, - 1138, 195, 1010, 754, 451, 1266, 643, 35, 850, 547, 291, 1106, - 163, 978, 722, 419, 1234, 99, 914, 611, 355, 1170, 227, 1042, - 786, 483, 1298, 19, 834, 531, 275, 1090, 147, 962, 706, 403, - 1218, 83, 898, 595, 339, 1154, 211, 1026, 770, 467, 1282, 674, - 51, 866, 563, 307, 1122, 179, 994, 738, 435, 1250, 115, 930, - 627, 371, 1186, 243, 1058, 802, 499, 1314, 659, 11, 826, 523, - 267, 1082, 139, 954, 698, 395, 1210, 75, 890, 587, 331, 1146, - 203, 1018, 762, 459, 1274, 651, 43, 858, 555, 299, 1114, 171, - 986, 730, 427, 1242, 107, 922, 619, 363, 1178, 235, 1050, 794, - 491, 1306, 27, 842, 539, 283, 1098, 155, 970, 714, 411, 1226, - 91, 906, 603, 347, 1162, 219, 1034, 778, 475, 1290, 682, 59, - 874, 571, 315, 1130, 187, 1002, 746, 443, 1258, 123, 938, 635, - 379, 1194, 251, 1066, 810, 507, 1322, 666, 7, 822, 519, 263, - 1078, 135, 950, 694, 391, 1206, 71, 886, 583, 327, 1142, 199, - 1014, 758, 455, 1270, 647, 39, 854, 551, 295, 1110, 167, 982, - 726, 423, 1238, 103, 918, 615, 359, 1174, 231, 1046, 790, 487, - 1302, 23, 838, 535, 279, 1094, 151, 966, 710, 407, 1222, 87, - 902, 599, 343, 1158, 215, 1030, 774, 471, 1286, 678, 55, 870, - 567, 311, 1126, 183, 998, 742, 439, 1254, 119, 934, 631, 375, - 1190, 247, 1062, 806, 503, 1318, 670, 15, 830, 527, 271, 1086, - 143, 958, 702, 399, 1214, 79, 894, 591, 335, 1150, 207, 1022, - 766, 463, 1278, 655, 47, 862, 559, 303, 1118, 175, 990, 734, - 431, 1246, 111, 926, 623, 367, 1182, 239, 1054, 798, 495, 1310, - 31, 846, 543, 287, 1102, 159, 974, 718, 415, 1230, 95, 910, - 607, 351, 1166, 223, 1038, 782, 479, 1294, 686, 63, 878, 575, - 319, 1134, 191, 1006, 750, 447, 1262, 127, 942, 639, 383, 1198, - 255, 1070, 814, 511, 1326]; - - return (unsafe { *PERM1327.get_unchecked((index % 1327) as usize) } as u32 * 1760929 + - unsafe { *PERM1327.get_unchecked(((index / 1327) % 1327) as usize) } as u32 * 1327 + - unsafe { - *PERM1327.get_unchecked(((index / 1760929) % 1327) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2336752783u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1361(index: u32) -> f32 { - const PERM1361: [u16; 1361] = [0, 849, 512, 256, 1105, 128, 977, 721, 384, 1233, 640, 64, 913, - 576, 320, 1169, 192, 1041, 785, 448, 1297, 32, 881, 544, 288, - 1137, 160, 1009, 753, 416, 1265, 689, 96, 945, 608, 352, 1201, - 224, 1073, 817, 480, 1329, 672, 16, 865, 528, 272, 1121, 144, - 993, 737, 400, 1249, 656, 80, 929, 592, 336, 1185, 208, 1057, - 801, 464, 1313, 48, 897, 560, 304, 1153, 176, 1025, 769, 432, - 1281, 705, 112, 961, 624, 368, 1217, 240, 1089, 833, 496, 1345, - 8, 857, 520, 264, 1113, 136, 985, 729, 392, 1241, 648, 72, 921, - 584, 328, 1177, 200, 1049, 793, 456, 1305, 40, 889, 552, 296, - 1145, 168, 1017, 761, 424, 1273, 697, 104, 953, 616, 360, 1209, - 232, 1081, 825, 488, 1337, 681, 24, 873, 536, 280, 1129, 152, - 1001, 745, 408, 1257, 664, 88, 937, 600, 344, 1193, 216, 1065, - 809, 472, 1321, 56, 905, 568, 312, 1161, 184, 1033, 777, 440, - 1289, 713, 120, 969, 632, 376, 1225, 248, 1097, 841, 504, 1353, - 4, 853, 516, 260, 1109, 132, 981, 725, 388, 1237, 644, 68, 917, - 580, 324, 1173, 196, 1045, 789, 452, 1301, 36, 885, 548, 292, - 1141, 164, 1013, 757, 420, 1269, 693, 100, 949, 612, 356, 1205, - 228, 1077, 821, 484, 1333, 676, 20, 869, 532, 276, 1125, 148, - 997, 741, 404, 1253, 660, 84, 933, 596, 340, 1189, 212, 1061, - 805, 468, 1317, 52, 901, 564, 308, 1157, 180, 1029, 773, 436, - 1285, 709, 116, 965, 628, 372, 1221, 244, 1093, 837, 500, 1349, - 12, 861, 524, 268, 1117, 140, 989, 733, 396, 1245, 652, 76, - 925, 588, 332, 1181, 204, 1053, 797, 460, 1309, 44, 893, 556, - 300, 1149, 172, 1021, 765, 428, 1277, 701, 108, 957, 620, 364, - 1213, 236, 1085, 829, 492, 1341, 685, 28, 877, 540, 284, 1133, - 156, 1005, 749, 412, 1261, 668, 92, 941, 604, 348, 1197, 220, - 1069, 813, 476, 1325, 60, 909, 572, 316, 1165, 188, 1037, 781, - 444, 1293, 717, 124, 973, 636, 380, 1229, 252, 1101, 845, 508, - 1357, 2, 851, 514, 258, 1107, 130, 979, 723, 386, 1235, 642, - 66, 915, 578, 322, 1171, 194, 1043, 787, 450, 1299, 34, 883, - 546, 290, 1139, 162, 1011, 755, 418, 1267, 691, 98, 947, 610, - 354, 1203, 226, 1075, 819, 482, 1331, 674, 18, 867, 530, 274, - 1123, 146, 995, 739, 402, 1251, 658, 82, 931, 594, 338, 1187, - 210, 1059, 803, 466, 1315, 50, 899, 562, 306, 1155, 178, 1027, - 771, 434, 1283, 707, 114, 963, 626, 370, 1219, 242, 1091, 835, - 498, 1347, 10, 859, 522, 266, 1115, 138, 987, 731, 394, 1243, - 650, 74, 923, 586, 330, 1179, 202, 1051, 795, 458, 1307, 42, - 891, 554, 298, 1147, 170, 1019, 763, 426, 1275, 699, 106, 955, - 618, 362, 1211, 234, 1083, 827, 490, 1339, 683, 26, 875, 538, - 282, 1131, 154, 1003, 747, 410, 1259, 666, 90, 939, 602, 346, - 1195, 218, 1067, 811, 474, 1323, 58, 907, 570, 314, 1163, 186, - 1035, 779, 442, 1291, 715, 122, 971, 634, 378, 1227, 250, 1099, - 843, 506, 1355, 6, 855, 518, 262, 1111, 134, 983, 727, 390, - 1239, 646, 70, 919, 582, 326, 1175, 198, 1047, 791, 454, 1303, - 38, 887, 550, 294, 1143, 166, 1015, 759, 422, 1271, 695, 102, - 951, 614, 358, 1207, 230, 1079, 823, 486, 1335, 678, 22, 871, - 534, 278, 1127, 150, 999, 743, 406, 1255, 662, 86, 935, 598, - 342, 1191, 214, 1063, 807, 470, 1319, 54, 903, 566, 310, 1159, - 182, 1031, 775, 438, 1287, 711, 118, 967, 630, 374, 1223, 246, - 1095, 839, 502, 1351, 14, 863, 526, 270, 1119, 142, 991, 735, - 398, 1247, 654, 78, 927, 590, 334, 1183, 206, 1055, 799, 462, - 1311, 46, 895, 558, 302, 1151, 174, 1023, 767, 430, 1279, 703, - 110, 959, 622, 366, 1215, 238, 1087, 831, 494, 1343, 687, 30, - 879, 542, 286, 1135, 158, 1007, 751, 414, 1263, 670, 94, 943, - 606, 350, 1199, 222, 1071, 815, 478, 1327, 62, 911, 574, 318, - 1167, 190, 1039, 783, 446, 1295, 719, 126, 975, 638, 382, 1231, - 254, 1103, 847, 510, 1359, 680, 1, 850, 513, 257, 1106, 129, - 978, 722, 385, 1234, 641, 65, 914, 577, 321, 1170, 193, 1042, - 786, 449, 1298, 33, 882, 545, 289, 1138, 161, 1010, 754, 417, - 1266, 690, 97, 946, 609, 353, 1202, 225, 1074, 818, 481, 1330, - 673, 17, 866, 529, 273, 1122, 145, 994, 738, 401, 1250, 657, - 81, 930, 593, 337, 1186, 209, 1058, 802, 465, 1314, 49, 898, - 561, 305, 1154, 177, 1026, 770, 433, 1282, 706, 113, 962, 625, - 369, 1218, 241, 1090, 834, 497, 1346, 9, 858, 521, 265, 1114, - 137, 986, 730, 393, 1242, 649, 73, 922, 585, 329, 1178, 201, - 1050, 794, 457, 1306, 41, 890, 553, 297, 1146, 169, 1018, 762, - 425, 1274, 698, 105, 954, 617, 361, 1210, 233, 1082, 826, 489, - 1338, 682, 25, 874, 537, 281, 1130, 153, 1002, 746, 409, 1258, - 665, 89, 938, 601, 345, 1194, 217, 1066, 810, 473, 1322, 57, - 906, 569, 313, 1162, 185, 1034, 778, 441, 1290, 714, 121, 970, - 633, 377, 1226, 249, 1098, 842, 505, 1354, 5, 854, 517, 261, - 1110, 133, 982, 726, 389, 1238, 645, 69, 918, 581, 325, 1174, - 197, 1046, 790, 453, 1302, 37, 886, 549, 293, 1142, 165, 1014, - 758, 421, 1270, 694, 101, 950, 613, 357, 1206, 229, 1078, 822, - 485, 1334, 677, 21, 870, 533, 277, 1126, 149, 998, 742, 405, - 1254, 661, 85, 934, 597, 341, 1190, 213, 1062, 806, 469, 1318, - 53, 902, 565, 309, 1158, 181, 1030, 774, 437, 1286, 710, 117, - 966, 629, 373, 1222, 245, 1094, 838, 501, 1350, 13, 862, 525, - 269, 1118, 141, 990, 734, 397, 1246, 653, 77, 926, 589, 333, - 1182, 205, 1054, 798, 461, 1310, 45, 894, 557, 301, 1150, 173, - 1022, 766, 429, 1278, 702, 109, 958, 621, 365, 1214, 237, 1086, - 830, 493, 1342, 686, 29, 878, 541, 285, 1134, 157, 1006, 750, - 413, 1262, 669, 93, 942, 605, 349, 1198, 221, 1070, 814, 477, - 1326, 61, 910, 573, 317, 1166, 189, 1038, 782, 445, 1294, 718, - 125, 974, 637, 381, 1230, 253, 1102, 846, 509, 1358, 3, 852, - 515, 259, 1108, 131, 980, 724, 387, 1236, 643, 67, 916, 579, - 323, 1172, 195, 1044, 788, 451, 1300, 35, 884, 547, 291, 1140, - 163, 1012, 756, 419, 1268, 692, 99, 948, 611, 355, 1204, 227, - 1076, 820, 483, 1332, 675, 19, 868, 531, 275, 1124, 147, 996, - 740, 403, 1252, 659, 83, 932, 595, 339, 1188, 211, 1060, 804, - 467, 1316, 51, 900, 563, 307, 1156, 179, 1028, 772, 435, 1284, - 708, 115, 964, 627, 371, 1220, 243, 1092, 836, 499, 1348, 11, - 860, 523, 267, 1116, 139, 988, 732, 395, 1244, 651, 75, 924, - 587, 331, 1180, 203, 1052, 796, 459, 1308, 43, 892, 555, 299, - 1148, 171, 1020, 764, 427, 1276, 700, 107, 956, 619, 363, 1212, - 235, 1084, 828, 491, 1340, 684, 27, 876, 539, 283, 1132, 155, - 1004, 748, 411, 1260, 667, 91, 940, 603, 347, 1196, 219, 1068, - 812, 475, 1324, 59, 908, 571, 315, 1164, 187, 1036, 780, 443, - 1292, 716, 123, 972, 635, 379, 1228, 251, 1100, 844, 507, 1356, - 7, 856, 519, 263, 1112, 135, 984, 728, 391, 1240, 647, 71, 920, - 583, 327, 1176, 199, 1048, 792, 455, 1304, 39, 888, 551, 295, - 1144, 167, 1016, 760, 423, 1272, 696, 103, 952, 615, 359, 1208, - 231, 1080, 824, 487, 1336, 679, 23, 872, 535, 279, 1128, 151, - 1000, 744, 407, 1256, 663, 87, 936, 599, 343, 1192, 215, 1064, - 808, 471, 1320, 55, 904, 567, 311, 1160, 183, 1032, 776, 439, - 1288, 712, 119, 968, 631, 375, 1224, 247, 1096, 840, 503, 1352, - 15, 864, 527, 271, 1120, 143, 992, 736, 399, 1248, 655, 79, - 928, 591, 335, 1184, 207, 1056, 800, 463, 1312, 47, 896, 559, - 303, 1152, 175, 1024, 768, 431, 1280, 704, 111, 960, 623, 367, - 1216, 239, 1088, 832, 495, 1344, 688, 31, 880, 543, 287, 1136, - 159, 1008, 752, 415, 1264, 671, 95, 944, 607, 351, 1200, 223, - 1072, 816, 479, 1328, 63, 912, 575, 319, 1168, 191, 1040, 784, - 447, 1296, 720, 127, 976, 639, 383, 1232, 255, 1104, 848, 511, - 1360]; - - return (unsafe { *PERM1361.get_unchecked((index % 1361) as usize) } as u32 * 1852321 + - unsafe { *PERM1361.get_unchecked(((index / 1361) % 1361) as usize) } as u32 * 1361 + - unsafe { - *PERM1361.get_unchecked(((index / 1852321) % 1361) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2521008881u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1367(index: u32) -> f32 { - const PERM1367: [u16; 1367] = [0, 855, 512, 256, 1111, 128, 983, 727, 384, 1239, 640, 64, 919, - 576, 320, 1175, 192, 1047, 791, 448, 1303, 32, 887, 544, 288, - 1143, 160, 1015, 759, 416, 1271, 695, 96, 951, 608, 352, 1207, - 224, 1079, 823, 480, 1335, 672, 16, 871, 528, 272, 1127, 144, - 999, 743, 400, 1255, 656, 80, 935, 592, 336, 1191, 208, 1063, - 807, 464, 1319, 48, 903, 560, 304, 1159, 176, 1031, 775, 432, - 1287, 711, 112, 967, 624, 368, 1223, 240, 1095, 839, 496, 1351, - 8, 863, 520, 264, 1119, 136, 991, 735, 392, 1247, 648, 72, 927, - 584, 328, 1183, 200, 1055, 799, 456, 1311, 40, 895, 552, 296, - 1151, 168, 1023, 767, 424, 1279, 703, 104, 959, 616, 360, 1215, - 232, 1087, 831, 488, 1343, 687, 24, 879, 536, 280, 1135, 152, - 1007, 751, 408, 1263, 664, 88, 943, 600, 344, 1199, 216, 1071, - 815, 472, 1327, 56, 911, 568, 312, 1167, 184, 1039, 783, 440, - 1295, 719, 120, 975, 632, 376, 1231, 248, 1103, 847, 504, 1359, - 680, 4, 859, 516, 260, 1115, 132, 987, 731, 388, 1243, 644, 68, - 923, 580, 324, 1179, 196, 1051, 795, 452, 1307, 36, 891, 548, - 292, 1147, 164, 1019, 763, 420, 1275, 699, 100, 955, 612, 356, - 1211, 228, 1083, 827, 484, 1339, 676, 20, 875, 532, 276, 1131, - 148, 1003, 747, 404, 1259, 660, 84, 939, 596, 340, 1195, 212, - 1067, 811, 468, 1323, 52, 907, 564, 308, 1163, 180, 1035, 779, - 436, 1291, 715, 116, 971, 628, 372, 1227, 244, 1099, 843, 500, - 1355, 12, 867, 524, 268, 1123, 140, 995, 739, 396, 1251, 652, - 76, 931, 588, 332, 1187, 204, 1059, 803, 460, 1315, 44, 899, - 556, 300, 1155, 172, 1027, 771, 428, 1283, 707, 108, 963, 620, - 364, 1219, 236, 1091, 835, 492, 1347, 691, 28, 883, 540, 284, - 1139, 156, 1011, 755, 412, 1267, 668, 92, 947, 604, 348, 1203, - 220, 1075, 819, 476, 1331, 60, 915, 572, 316, 1171, 188, 1043, - 787, 444, 1299, 723, 124, 979, 636, 380, 1235, 252, 1107, 851, - 508, 1363, 682, 2, 857, 514, 258, 1113, 130, 985, 729, 386, - 1241, 642, 66, 921, 578, 322, 1177, 194, 1049, 793, 450, 1305, - 34, 889, 546, 290, 1145, 162, 1017, 761, 418, 1273, 697, 98, - 953, 610, 354, 1209, 226, 1081, 825, 482, 1337, 674, 18, 873, - 530, 274, 1129, 146, 1001, 745, 402, 1257, 658, 82, 937, 594, - 338, 1193, 210, 1065, 809, 466, 1321, 50, 905, 562, 306, 1161, - 178, 1033, 777, 434, 1289, 713, 114, 969, 626, 370, 1225, 242, - 1097, 841, 498, 1353, 10, 865, 522, 266, 1121, 138, 993, 737, - 394, 1249, 650, 74, 929, 586, 330, 1185, 202, 1057, 801, 458, - 1313, 42, 897, 554, 298, 1153, 170, 1025, 769, 426, 1281, 705, - 106, 961, 618, 362, 1217, 234, 1089, 833, 490, 1345, 689, 26, - 881, 538, 282, 1137, 154, 1009, 753, 410, 1265, 666, 90, 945, - 602, 346, 1201, 218, 1073, 817, 474, 1329, 58, 913, 570, 314, - 1169, 186, 1041, 785, 442, 1297, 721, 122, 977, 634, 378, 1233, - 250, 1105, 849, 506, 1361, 685, 6, 861, 518, 262, 1117, 134, - 989, 733, 390, 1245, 646, 70, 925, 582, 326, 1181, 198, 1053, - 797, 454, 1309, 38, 893, 550, 294, 1149, 166, 1021, 765, 422, - 1277, 701, 102, 957, 614, 358, 1213, 230, 1085, 829, 486, 1341, - 678, 22, 877, 534, 278, 1133, 150, 1005, 749, 406, 1261, 662, - 86, 941, 598, 342, 1197, 214, 1069, 813, 470, 1325, 54, 909, - 566, 310, 1165, 182, 1037, 781, 438, 1293, 717, 118, 973, 630, - 374, 1229, 246, 1101, 845, 502, 1357, 14, 869, 526, 270, 1125, - 142, 997, 741, 398, 1253, 654, 78, 933, 590, 334, 1189, 206, - 1061, 805, 462, 1317, 46, 901, 558, 302, 1157, 174, 1029, 773, - 430, 1285, 709, 110, 965, 622, 366, 1221, 238, 1093, 837, 494, - 1349, 693, 30, 885, 542, 286, 1141, 158, 1013, 757, 414, 1269, - 670, 94, 949, 606, 350, 1205, 222, 1077, 821, 478, 1333, 62, - 917, 574, 318, 1173, 190, 1045, 789, 446, 1301, 725, 126, 981, - 638, 382, 1237, 254, 1109, 853, 510, 1365, 683, 1, 856, 513, - 257, 1112, 129, 984, 728, 385, 1240, 641, 65, 920, 577, 321, - 1176, 193, 1048, 792, 449, 1304, 33, 888, 545, 289, 1144, 161, - 1016, 760, 417, 1272, 696, 97, 952, 609, 353, 1208, 225, 1080, - 824, 481, 1336, 673, 17, 872, 529, 273, 1128, 145, 1000, 744, - 401, 1256, 657, 81, 936, 593, 337, 1192, 209, 1064, 808, 465, - 1320, 49, 904, 561, 305, 1160, 177, 1032, 776, 433, 1288, 712, - 113, 968, 625, 369, 1224, 241, 1096, 840, 497, 1352, 9, 864, - 521, 265, 1120, 137, 992, 736, 393, 1248, 649, 73, 928, 585, - 329, 1184, 201, 1056, 800, 457, 1312, 41, 896, 553, 297, 1152, - 169, 1024, 768, 425, 1280, 704, 105, 960, 617, 361, 1216, 233, - 1088, 832, 489, 1344, 688, 25, 880, 537, 281, 1136, 153, 1008, - 752, 409, 1264, 665, 89, 944, 601, 345, 1200, 217, 1072, 816, - 473, 1328, 57, 912, 569, 313, 1168, 185, 1040, 784, 441, 1296, - 720, 121, 976, 633, 377, 1232, 249, 1104, 848, 505, 1360, 681, - 5, 860, 517, 261, 1116, 133, 988, 732, 389, 1244, 645, 69, 924, - 581, 325, 1180, 197, 1052, 796, 453, 1308, 37, 892, 549, 293, - 1148, 165, 1020, 764, 421, 1276, 700, 101, 956, 613, 357, 1212, - 229, 1084, 828, 485, 1340, 677, 21, 876, 533, 277, 1132, 149, - 1004, 748, 405, 1260, 661, 85, 940, 597, 341, 1196, 213, 1068, - 812, 469, 1324, 53, 908, 565, 309, 1164, 181, 1036, 780, 437, - 1292, 716, 117, 972, 629, 373, 1228, 245, 1100, 844, 501, 1356, - 13, 868, 525, 269, 1124, 141, 996, 740, 397, 1252, 653, 77, - 932, 589, 333, 1188, 205, 1060, 804, 461, 1316, 45, 900, 557, - 301, 1156, 173, 1028, 772, 429, 1284, 708, 109, 964, 621, 365, - 1220, 237, 1092, 836, 493, 1348, 692, 29, 884, 541, 285, 1140, - 157, 1012, 756, 413, 1268, 669, 93, 948, 605, 349, 1204, 221, - 1076, 820, 477, 1332, 61, 916, 573, 317, 1172, 189, 1044, 788, - 445, 1300, 724, 125, 980, 637, 381, 1236, 253, 1108, 852, 509, - 1364, 684, 3, 858, 515, 259, 1114, 131, 986, 730, 387, 1242, - 643, 67, 922, 579, 323, 1178, 195, 1050, 794, 451, 1306, 35, - 890, 547, 291, 1146, 163, 1018, 762, 419, 1274, 698, 99, 954, - 611, 355, 1210, 227, 1082, 826, 483, 1338, 675, 19, 874, 531, - 275, 1130, 147, 1002, 746, 403, 1258, 659, 83, 938, 595, 339, - 1194, 211, 1066, 810, 467, 1322, 51, 906, 563, 307, 1162, 179, - 1034, 778, 435, 1290, 714, 115, 970, 627, 371, 1226, 243, 1098, - 842, 499, 1354, 11, 866, 523, 267, 1122, 139, 994, 738, 395, - 1250, 651, 75, 930, 587, 331, 1186, 203, 1058, 802, 459, 1314, - 43, 898, 555, 299, 1154, 171, 1026, 770, 427, 1282, 706, 107, - 962, 619, 363, 1218, 235, 1090, 834, 491, 1346, 690, 27, 882, - 539, 283, 1138, 155, 1010, 754, 411, 1266, 667, 91, 946, 603, - 347, 1202, 219, 1074, 818, 475, 1330, 59, 914, 571, 315, 1170, - 187, 1042, 786, 443, 1298, 722, 123, 978, 635, 379, 1234, 251, - 1106, 850, 507, 1362, 686, 7, 862, 519, 263, 1118, 135, 990, - 734, 391, 1246, 647, 71, 926, 583, 327, 1182, 199, 1054, 798, - 455, 1310, 39, 894, 551, 295, 1150, 167, 1022, 766, 423, 1278, - 702, 103, 958, 615, 359, 1214, 231, 1086, 830, 487, 1342, 679, - 23, 878, 535, 279, 1134, 151, 1006, 750, 407, 1262, 663, 87, - 942, 599, 343, 1198, 215, 1070, 814, 471, 1326, 55, 910, 567, - 311, 1166, 183, 1038, 782, 439, 1294, 718, 119, 974, 631, 375, - 1230, 247, 1102, 846, 503, 1358, 15, 870, 527, 271, 1126, 143, - 998, 742, 399, 1254, 655, 79, 934, 591, 335, 1190, 207, 1062, - 806, 463, 1318, 47, 902, 559, 303, 1158, 175, 1030, 774, 431, - 1286, 710, 111, 966, 623, 367, 1222, 239, 1094, 838, 495, 1350, - 694, 31, 886, 543, 287, 1142, 159, 1014, 758, 415, 1270, 671, - 95, 950, 607, 351, 1206, 223, 1078, 822, 479, 1334, 63, 918, - 575, 319, 1174, 191, 1046, 790, 447, 1302, 726, 127, 982, 639, - 383, 1238, 255, 1110, 854, 511, 1366]; - - return (unsafe { *PERM1367.get_unchecked((index % 1367) as usize) } as u32 * 1868689 + - unsafe { *PERM1367.get_unchecked(((index / 1367) % 1367) as usize) } as u32 * 1367 + - unsafe { - *PERM1367.get_unchecked(((index / 1868689) % 1367) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2554497863u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1373(index: u32) -> f32 { - const PERM1373: [u16; 1373] = [0, 861, 512, 256, 1117, 128, 989, 733, 384, 1245, 640, 64, 925, - 576, 320, 1181, 192, 1053, 797, 448, 1309, 32, 893, 544, 288, - 1149, 160, 1021, 765, 416, 1277, 701, 96, 957, 608, 352, 1213, - 224, 1085, 829, 480, 1341, 672, 16, 877, 528, 272, 1133, 144, - 1005, 749, 400, 1261, 656, 80, 941, 592, 336, 1197, 208, 1069, - 813, 464, 1325, 48, 909, 560, 304, 1165, 176, 1037, 781, 432, - 1293, 717, 112, 973, 624, 368, 1229, 240, 1101, 845, 496, 1357, - 680, 8, 869, 520, 264, 1125, 136, 997, 741, 392, 1253, 648, 72, - 933, 584, 328, 1189, 200, 1061, 805, 456, 1317, 40, 901, 552, - 296, 1157, 168, 1029, 773, 424, 1285, 709, 104, 965, 616, 360, - 1221, 232, 1093, 837, 488, 1349, 693, 24, 885, 536, 280, 1141, - 152, 1013, 757, 408, 1269, 664, 88, 949, 600, 344, 1205, 216, - 1077, 821, 472, 1333, 56, 917, 568, 312, 1173, 184, 1045, 789, - 440, 1301, 725, 120, 981, 632, 376, 1237, 248, 1109, 853, 504, - 1365, 684, 4, 865, 516, 260, 1121, 132, 993, 737, 388, 1249, - 644, 68, 929, 580, 324, 1185, 196, 1057, 801, 452, 1313, 36, - 897, 548, 292, 1153, 164, 1025, 769, 420, 1281, 705, 100, 961, - 612, 356, 1217, 228, 1089, 833, 484, 1345, 676, 20, 881, 532, - 276, 1137, 148, 1009, 753, 404, 1265, 660, 84, 945, 596, 340, - 1201, 212, 1073, 817, 468, 1329, 52, 913, 564, 308, 1169, 180, - 1041, 785, 436, 1297, 721, 116, 977, 628, 372, 1233, 244, 1105, - 849, 500, 1361, 689, 12, 873, 524, 268, 1129, 140, 1001, 745, - 396, 1257, 652, 76, 937, 588, 332, 1193, 204, 1065, 809, 460, - 1321, 44, 905, 556, 300, 1161, 172, 1033, 777, 428, 1289, 713, - 108, 969, 620, 364, 1225, 236, 1097, 841, 492, 1353, 697, 28, - 889, 540, 284, 1145, 156, 1017, 761, 412, 1273, 668, 92, 953, - 604, 348, 1209, 220, 1081, 825, 476, 1337, 60, 921, 572, 316, - 1177, 188, 1049, 793, 444, 1305, 729, 124, 985, 636, 380, 1241, - 252, 1113, 857, 508, 1369, 2, 863, 514, 258, 1119, 130, 991, - 735, 386, 1247, 642, 66, 927, 578, 322, 1183, 194, 1055, 799, - 450, 1311, 34, 895, 546, 290, 1151, 162, 1023, 767, 418, 1279, - 703, 98, 959, 610, 354, 1215, 226, 1087, 831, 482, 1343, 674, - 18, 879, 530, 274, 1135, 146, 1007, 751, 402, 1263, 658, 82, - 943, 594, 338, 1199, 210, 1071, 815, 466, 1327, 50, 911, 562, - 306, 1167, 178, 1039, 783, 434, 1295, 719, 114, 975, 626, 370, - 1231, 242, 1103, 847, 498, 1359, 682, 10, 871, 522, 266, 1127, - 138, 999, 743, 394, 1255, 650, 74, 935, 586, 330, 1191, 202, - 1063, 807, 458, 1319, 42, 903, 554, 298, 1159, 170, 1031, 775, - 426, 1287, 711, 106, 967, 618, 362, 1223, 234, 1095, 839, 490, - 1351, 695, 26, 887, 538, 282, 1143, 154, 1015, 759, 410, 1271, - 666, 90, 951, 602, 346, 1207, 218, 1079, 823, 474, 1335, 58, - 919, 570, 314, 1175, 186, 1047, 791, 442, 1303, 727, 122, 983, - 634, 378, 1239, 250, 1111, 855, 506, 1367, 687, 6, 867, 518, - 262, 1123, 134, 995, 739, 390, 1251, 646, 70, 931, 582, 326, - 1187, 198, 1059, 803, 454, 1315, 38, 899, 550, 294, 1155, 166, - 1027, 771, 422, 1283, 707, 102, 963, 614, 358, 1219, 230, 1091, - 835, 486, 1347, 678, 22, 883, 534, 278, 1139, 150, 1011, 755, - 406, 1267, 662, 86, 947, 598, 342, 1203, 214, 1075, 819, 470, - 1331, 54, 915, 566, 310, 1171, 182, 1043, 787, 438, 1299, 723, - 118, 979, 630, 374, 1235, 246, 1107, 851, 502, 1363, 691, 14, - 875, 526, 270, 1131, 142, 1003, 747, 398, 1259, 654, 78, 939, - 590, 334, 1195, 206, 1067, 811, 462, 1323, 46, 907, 558, 302, - 1163, 174, 1035, 779, 430, 1291, 715, 110, 971, 622, 366, 1227, - 238, 1099, 843, 494, 1355, 699, 30, 891, 542, 286, 1147, 158, - 1019, 763, 414, 1275, 670, 94, 955, 606, 350, 1211, 222, 1083, - 827, 478, 1339, 62, 923, 574, 318, 1179, 190, 1051, 795, 446, - 1307, 731, 126, 987, 638, 382, 1243, 254, 1115, 859, 510, 1371, - 686, 1, 862, 513, 257, 1118, 129, 990, 734, 385, 1246, 641, 65, - 926, 577, 321, 1182, 193, 1054, 798, 449, 1310, 33, 894, 545, - 289, 1150, 161, 1022, 766, 417, 1278, 702, 97, 958, 609, 353, - 1214, 225, 1086, 830, 481, 1342, 673, 17, 878, 529, 273, 1134, - 145, 1006, 750, 401, 1262, 657, 81, 942, 593, 337, 1198, 209, - 1070, 814, 465, 1326, 49, 910, 561, 305, 1166, 177, 1038, 782, - 433, 1294, 718, 113, 974, 625, 369, 1230, 241, 1102, 846, 497, - 1358, 681, 9, 870, 521, 265, 1126, 137, 998, 742, 393, 1254, - 649, 73, 934, 585, 329, 1190, 201, 1062, 806, 457, 1318, 41, - 902, 553, 297, 1158, 169, 1030, 774, 425, 1286, 710, 105, 966, - 617, 361, 1222, 233, 1094, 838, 489, 1350, 694, 25, 886, 537, - 281, 1142, 153, 1014, 758, 409, 1270, 665, 89, 950, 601, 345, - 1206, 217, 1078, 822, 473, 1334, 57, 918, 569, 313, 1174, 185, - 1046, 790, 441, 1302, 726, 121, 982, 633, 377, 1238, 249, 1110, - 854, 505, 1366, 685, 5, 866, 517, 261, 1122, 133, 994, 738, - 389, 1250, 645, 69, 930, 581, 325, 1186, 197, 1058, 802, 453, - 1314, 37, 898, 549, 293, 1154, 165, 1026, 770, 421, 1282, 706, - 101, 962, 613, 357, 1218, 229, 1090, 834, 485, 1346, 677, 21, - 882, 533, 277, 1138, 149, 1010, 754, 405, 1266, 661, 85, 946, - 597, 341, 1202, 213, 1074, 818, 469, 1330, 53, 914, 565, 309, - 1170, 181, 1042, 786, 437, 1298, 722, 117, 978, 629, 373, 1234, - 245, 1106, 850, 501, 1362, 690, 13, 874, 525, 269, 1130, 141, - 1002, 746, 397, 1258, 653, 77, 938, 589, 333, 1194, 205, 1066, - 810, 461, 1322, 45, 906, 557, 301, 1162, 173, 1034, 778, 429, - 1290, 714, 109, 970, 621, 365, 1226, 237, 1098, 842, 493, 1354, - 698, 29, 890, 541, 285, 1146, 157, 1018, 762, 413, 1274, 669, - 93, 954, 605, 349, 1210, 221, 1082, 826, 477, 1338, 61, 922, - 573, 317, 1178, 189, 1050, 794, 445, 1306, 730, 125, 986, 637, - 381, 1242, 253, 1114, 858, 509, 1370, 3, 864, 515, 259, 1120, - 131, 992, 736, 387, 1248, 643, 67, 928, 579, 323, 1184, 195, - 1056, 800, 451, 1312, 35, 896, 547, 291, 1152, 163, 1024, 768, - 419, 1280, 704, 99, 960, 611, 355, 1216, 227, 1088, 832, 483, - 1344, 675, 19, 880, 531, 275, 1136, 147, 1008, 752, 403, 1264, - 659, 83, 944, 595, 339, 1200, 211, 1072, 816, 467, 1328, 51, - 912, 563, 307, 1168, 179, 1040, 784, 435, 1296, 720, 115, 976, - 627, 371, 1232, 243, 1104, 848, 499, 1360, 683, 11, 872, 523, - 267, 1128, 139, 1000, 744, 395, 1256, 651, 75, 936, 587, 331, - 1192, 203, 1064, 808, 459, 1320, 43, 904, 555, 299, 1160, 171, - 1032, 776, 427, 1288, 712, 107, 968, 619, 363, 1224, 235, 1096, - 840, 491, 1352, 696, 27, 888, 539, 283, 1144, 155, 1016, 760, - 411, 1272, 667, 91, 952, 603, 347, 1208, 219, 1080, 824, 475, - 1336, 59, 920, 571, 315, 1176, 187, 1048, 792, 443, 1304, 728, - 123, 984, 635, 379, 1240, 251, 1112, 856, 507, 1368, 688, 7, - 868, 519, 263, 1124, 135, 996, 740, 391, 1252, 647, 71, 932, - 583, 327, 1188, 199, 1060, 804, 455, 1316, 39, 900, 551, 295, - 1156, 167, 1028, 772, 423, 1284, 708, 103, 964, 615, 359, 1220, - 231, 1092, 836, 487, 1348, 679, 23, 884, 535, 279, 1140, 151, - 1012, 756, 407, 1268, 663, 87, 948, 599, 343, 1204, 215, 1076, - 820, 471, 1332, 55, 916, 567, 311, 1172, 183, 1044, 788, 439, - 1300, 724, 119, 980, 631, 375, 1236, 247, 1108, 852, 503, 1364, - 692, 15, 876, 527, 271, 1132, 143, 1004, 748, 399, 1260, 655, - 79, 940, 591, 335, 1196, 207, 1068, 812, 463, 1324, 47, 908, - 559, 303, 1164, 175, 1036, 780, 431, 1292, 716, 111, 972, 623, - 367, 1228, 239, 1100, 844, 495, 1356, 700, 31, 892, 543, 287, - 1148, 159, 1020, 764, 415, 1276, 671, 95, 956, 607, 351, 1212, - 223, 1084, 828, 479, 1340, 63, 924, 575, 319, 1180, 191, 1052, - 796, 447, 1308, 732, 127, 988, 639, 383, 1244, 255, 1116, 860, - 511, 1372]; - - return (unsafe { *PERM1373.get_unchecked((index % 1373) as usize) } as u32 * 1885129 + - unsafe { *PERM1373.get_unchecked(((index / 1373) % 1373) as usize) } as u32 * 1373 + - unsafe { - *PERM1373.get_unchecked(((index / 1885129) % 1373) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2588282117u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1381(index: u32) -> f32 { - const PERM1381: [u16; 1381] = [0, 869, 512, 256, 1125, 128, 997, 741, 384, 1253, 640, 64, 933, - 576, 320, 1189, 192, 1061, 805, 448, 1317, 672, 32, 901, 544, - 288, 1157, 160, 1029, 773, 416, 1285, 709, 96, 965, 608, 352, - 1221, 224, 1093, 837, 480, 1349, 16, 885, 528, 272, 1141, 144, - 1013, 757, 400, 1269, 656, 80, 949, 592, 336, 1205, 208, 1077, - 821, 464, 1333, 693, 48, 917, 560, 304, 1173, 176, 1045, 789, - 432, 1301, 725, 112, 981, 624, 368, 1237, 240, 1109, 853, 496, - 1365, 8, 877, 520, 264, 1133, 136, 1005, 749, 392, 1261, 648, - 72, 941, 584, 328, 1197, 200, 1069, 813, 456, 1325, 680, 40, - 909, 552, 296, 1165, 168, 1037, 781, 424, 1293, 717, 104, 973, - 616, 360, 1229, 232, 1101, 845, 488, 1357, 24, 893, 536, 280, - 1149, 152, 1021, 765, 408, 1277, 664, 88, 957, 600, 344, 1213, - 216, 1085, 829, 472, 1341, 701, 56, 925, 568, 312, 1181, 184, - 1053, 797, 440, 1309, 733, 120, 989, 632, 376, 1245, 248, 1117, - 861, 504, 1373, 688, 4, 873, 516, 260, 1129, 132, 1001, 745, - 388, 1257, 644, 68, 937, 580, 324, 1193, 196, 1065, 809, 452, - 1321, 676, 36, 905, 548, 292, 1161, 164, 1033, 777, 420, 1289, - 713, 100, 969, 612, 356, 1225, 228, 1097, 841, 484, 1353, 20, - 889, 532, 276, 1145, 148, 1017, 761, 404, 1273, 660, 84, 953, - 596, 340, 1209, 212, 1081, 825, 468, 1337, 697, 52, 921, 564, - 308, 1177, 180, 1049, 793, 436, 1305, 729, 116, 985, 628, 372, - 1241, 244, 1113, 857, 500, 1369, 12, 881, 524, 268, 1137, 140, - 1009, 753, 396, 1265, 652, 76, 945, 588, 332, 1201, 204, 1073, - 817, 460, 1329, 684, 44, 913, 556, 300, 1169, 172, 1041, 785, - 428, 1297, 721, 108, 977, 620, 364, 1233, 236, 1105, 849, 492, - 1361, 28, 897, 540, 284, 1153, 156, 1025, 769, 412, 1281, 668, - 92, 961, 604, 348, 1217, 220, 1089, 833, 476, 1345, 705, 60, - 929, 572, 316, 1185, 188, 1057, 801, 444, 1313, 737, 124, 993, - 636, 380, 1249, 252, 1121, 865, 508, 1377, 2, 871, 514, 258, - 1127, 130, 999, 743, 386, 1255, 642, 66, 935, 578, 322, 1191, - 194, 1063, 807, 450, 1319, 674, 34, 903, 546, 290, 1159, 162, - 1031, 775, 418, 1287, 711, 98, 967, 610, 354, 1223, 226, 1095, - 839, 482, 1351, 18, 887, 530, 274, 1143, 146, 1015, 759, 402, - 1271, 658, 82, 951, 594, 338, 1207, 210, 1079, 823, 466, 1335, - 695, 50, 919, 562, 306, 1175, 178, 1047, 791, 434, 1303, 727, - 114, 983, 626, 370, 1239, 242, 1111, 855, 498, 1367, 10, 879, - 522, 266, 1135, 138, 1007, 751, 394, 1263, 650, 74, 943, 586, - 330, 1199, 202, 1071, 815, 458, 1327, 682, 42, 911, 554, 298, - 1167, 170, 1039, 783, 426, 1295, 719, 106, 975, 618, 362, 1231, - 234, 1103, 847, 490, 1359, 26, 895, 538, 282, 1151, 154, 1023, - 767, 410, 1279, 666, 90, 959, 602, 346, 1215, 218, 1087, 831, - 474, 1343, 703, 58, 927, 570, 314, 1183, 186, 1055, 799, 442, - 1311, 735, 122, 991, 634, 378, 1247, 250, 1119, 863, 506, 1375, - 691, 6, 875, 518, 262, 1131, 134, 1003, 747, 390, 1259, 646, - 70, 939, 582, 326, 1195, 198, 1067, 811, 454, 1323, 678, 38, - 907, 550, 294, 1163, 166, 1035, 779, 422, 1291, 715, 102, 971, - 614, 358, 1227, 230, 1099, 843, 486, 1355, 22, 891, 534, 278, - 1147, 150, 1019, 763, 406, 1275, 662, 86, 955, 598, 342, 1211, - 214, 1083, 827, 470, 1339, 699, 54, 923, 566, 310, 1179, 182, - 1051, 795, 438, 1307, 731, 118, 987, 630, 374, 1243, 246, 1115, - 859, 502, 1371, 14, 883, 526, 270, 1139, 142, 1011, 755, 398, - 1267, 654, 78, 947, 590, 334, 1203, 206, 1075, 819, 462, 1331, - 686, 46, 915, 558, 302, 1171, 174, 1043, 787, 430, 1299, 723, - 110, 979, 622, 366, 1235, 238, 1107, 851, 494, 1363, 30, 899, - 542, 286, 1155, 158, 1027, 771, 414, 1283, 670, 94, 963, 606, - 350, 1219, 222, 1091, 835, 478, 1347, 707, 62, 931, 574, 318, - 1187, 190, 1059, 803, 446, 1315, 739, 126, 995, 638, 382, 1251, - 254, 1123, 867, 510, 1379, 690, 1, 870, 513, 257, 1126, 129, - 998, 742, 385, 1254, 641, 65, 934, 577, 321, 1190, 193, 1062, - 806, 449, 1318, 673, 33, 902, 545, 289, 1158, 161, 1030, 774, - 417, 1286, 710, 97, 966, 609, 353, 1222, 225, 1094, 838, 481, - 1350, 17, 886, 529, 273, 1142, 145, 1014, 758, 401, 1270, 657, - 81, 950, 593, 337, 1206, 209, 1078, 822, 465, 1334, 694, 49, - 918, 561, 305, 1174, 177, 1046, 790, 433, 1302, 726, 113, 982, - 625, 369, 1238, 241, 1110, 854, 497, 1366, 9, 878, 521, 265, - 1134, 137, 1006, 750, 393, 1262, 649, 73, 942, 585, 329, 1198, - 201, 1070, 814, 457, 1326, 681, 41, 910, 553, 297, 1166, 169, - 1038, 782, 425, 1294, 718, 105, 974, 617, 361, 1230, 233, 1102, - 846, 489, 1358, 25, 894, 537, 281, 1150, 153, 1022, 766, 409, - 1278, 665, 89, 958, 601, 345, 1214, 217, 1086, 830, 473, 1342, - 702, 57, 926, 569, 313, 1182, 185, 1054, 798, 441, 1310, 734, - 121, 990, 633, 377, 1246, 249, 1118, 862, 505, 1374, 689, 5, - 874, 517, 261, 1130, 133, 1002, 746, 389, 1258, 645, 69, 938, - 581, 325, 1194, 197, 1066, 810, 453, 1322, 677, 37, 906, 549, - 293, 1162, 165, 1034, 778, 421, 1290, 714, 101, 970, 613, 357, - 1226, 229, 1098, 842, 485, 1354, 21, 890, 533, 277, 1146, 149, - 1018, 762, 405, 1274, 661, 85, 954, 597, 341, 1210, 213, 1082, - 826, 469, 1338, 698, 53, 922, 565, 309, 1178, 181, 1050, 794, - 437, 1306, 730, 117, 986, 629, 373, 1242, 245, 1114, 858, 501, - 1370, 13, 882, 525, 269, 1138, 141, 1010, 754, 397, 1266, 653, - 77, 946, 589, 333, 1202, 205, 1074, 818, 461, 1330, 685, 45, - 914, 557, 301, 1170, 173, 1042, 786, 429, 1298, 722, 109, 978, - 621, 365, 1234, 237, 1106, 850, 493, 1362, 29, 898, 541, 285, - 1154, 157, 1026, 770, 413, 1282, 669, 93, 962, 605, 349, 1218, - 221, 1090, 834, 477, 1346, 706, 61, 930, 573, 317, 1186, 189, - 1058, 802, 445, 1314, 738, 125, 994, 637, 381, 1250, 253, 1122, - 866, 509, 1378, 3, 872, 515, 259, 1128, 131, 1000, 744, 387, - 1256, 643, 67, 936, 579, 323, 1192, 195, 1064, 808, 451, 1320, - 675, 35, 904, 547, 291, 1160, 163, 1032, 776, 419, 1288, 712, - 99, 968, 611, 355, 1224, 227, 1096, 840, 483, 1352, 19, 888, - 531, 275, 1144, 147, 1016, 760, 403, 1272, 659, 83, 952, 595, - 339, 1208, 211, 1080, 824, 467, 1336, 696, 51, 920, 563, 307, - 1176, 179, 1048, 792, 435, 1304, 728, 115, 984, 627, 371, 1240, - 243, 1112, 856, 499, 1368, 11, 880, 523, 267, 1136, 139, 1008, - 752, 395, 1264, 651, 75, 944, 587, 331, 1200, 203, 1072, 816, - 459, 1328, 683, 43, 912, 555, 299, 1168, 171, 1040, 784, 427, - 1296, 720, 107, 976, 619, 363, 1232, 235, 1104, 848, 491, 1360, - 27, 896, 539, 283, 1152, 155, 1024, 768, 411, 1280, 667, 91, - 960, 603, 347, 1216, 219, 1088, 832, 475, 1344, 704, 59, 928, - 571, 315, 1184, 187, 1056, 800, 443, 1312, 736, 123, 992, 635, - 379, 1248, 251, 1120, 864, 507, 1376, 692, 7, 876, 519, 263, - 1132, 135, 1004, 748, 391, 1260, 647, 71, 940, 583, 327, 1196, - 199, 1068, 812, 455, 1324, 679, 39, 908, 551, 295, 1164, 167, - 1036, 780, 423, 1292, 716, 103, 972, 615, 359, 1228, 231, 1100, - 844, 487, 1356, 23, 892, 535, 279, 1148, 151, 1020, 764, 407, - 1276, 663, 87, 956, 599, 343, 1212, 215, 1084, 828, 471, 1340, - 700, 55, 924, 567, 311, 1180, 183, 1052, 796, 439, 1308, 732, - 119, 988, 631, 375, 1244, 247, 1116, 860, 503, 1372, 15, 884, - 527, 271, 1140, 143, 1012, 756, 399, 1268, 655, 79, 948, 591, - 335, 1204, 207, 1076, 820, 463, 1332, 687, 47, 916, 559, 303, - 1172, 175, 1044, 788, 431, 1300, 724, 111, 980, 623, 367, 1236, - 239, 1108, 852, 495, 1364, 31, 900, 543, 287, 1156, 159, 1028, - 772, 415, 1284, 671, 95, 964, 607, 351, 1220, 223, 1092, 836, - 479, 1348, 708, 63, 932, 575, 319, 1188, 191, 1060, 804, 447, - 1316, 740, 127, 996, 639, 383, 1252, 255, 1124, 868, 511, 1380]; - - return (unsafe { *PERM1381.get_unchecked((index % 1381) as usize) } as u32 * 1907161 + - unsafe { *PERM1381.get_unchecked(((index / 1381) % 1381) as usize) } as u32 * 1381 + - unsafe { - *PERM1381.get_unchecked(((index / 1907161) % 1381) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2633789341u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1399(index: u32) -> f32 { - const PERM1399: [u16; 1399] = [0, 887, 512, 256, 1143, 128, 1015, 759, 384, 1271, 640, 64, - 951, 576, 320, 1207, 192, 1079, 823, 448, 1335, 672, 32, 919, - 544, 288, 1175, 160, 1047, 791, 416, 1303, 727, 96, 983, 608, - 352, 1239, 224, 1111, 855, 480, 1367, 688, 16, 903, 528, 272, - 1159, 144, 1031, 775, 400, 1287, 656, 80, 967, 592, 336, 1223, - 208, 1095, 839, 464, 1351, 711, 48, 935, 560, 304, 1191, 176, - 1063, 807, 432, 1319, 743, 112, 999, 624, 368, 1255, 240, 1127, - 871, 496, 1383, 8, 895, 520, 264, 1151, 136, 1023, 767, 392, - 1279, 648, 72, 959, 584, 328, 1215, 200, 1087, 831, 456, 1343, - 680, 40, 927, 552, 296, 1183, 168, 1055, 799, 424, 1311, 735, - 104, 991, 616, 360, 1247, 232, 1119, 863, 488, 1375, 703, 24, - 911, 536, 280, 1167, 152, 1039, 783, 408, 1295, 664, 88, 975, - 600, 344, 1231, 216, 1103, 847, 472, 1359, 719, 56, 943, 568, - 312, 1199, 184, 1071, 815, 440, 1327, 751, 120, 1007, 632, 376, - 1263, 248, 1135, 879, 504, 1391, 696, 4, 891, 516, 260, 1147, - 132, 1019, 763, 388, 1275, 644, 68, 955, 580, 324, 1211, 196, - 1083, 827, 452, 1339, 676, 36, 923, 548, 292, 1179, 164, 1051, - 795, 420, 1307, 731, 100, 987, 612, 356, 1243, 228, 1115, 859, - 484, 1371, 692, 20, 907, 532, 276, 1163, 148, 1035, 779, 404, - 1291, 660, 84, 971, 596, 340, 1227, 212, 1099, 843, 468, 1355, - 715, 52, 939, 564, 308, 1195, 180, 1067, 811, 436, 1323, 747, - 116, 1003, 628, 372, 1259, 244, 1131, 875, 500, 1387, 12, 899, - 524, 268, 1155, 140, 1027, 771, 396, 1283, 652, 76, 963, 588, - 332, 1219, 204, 1091, 835, 460, 1347, 684, 44, 931, 556, 300, - 1187, 172, 1059, 803, 428, 1315, 739, 108, 995, 620, 364, 1251, - 236, 1123, 867, 492, 1379, 707, 28, 915, 540, 284, 1171, 156, - 1043, 787, 412, 1299, 668, 92, 979, 604, 348, 1235, 220, 1107, - 851, 476, 1363, 723, 60, 947, 572, 316, 1203, 188, 1075, 819, - 444, 1331, 755, 124, 1011, 636, 380, 1267, 252, 1139, 883, 508, - 1395, 698, 2, 889, 514, 258, 1145, 130, 1017, 761, 386, 1273, - 642, 66, 953, 578, 322, 1209, 194, 1081, 825, 450, 1337, 674, - 34, 921, 546, 290, 1177, 162, 1049, 793, 418, 1305, 729, 98, - 985, 610, 354, 1241, 226, 1113, 857, 482, 1369, 690, 18, 905, - 530, 274, 1161, 146, 1033, 777, 402, 1289, 658, 82, 969, 594, - 338, 1225, 210, 1097, 841, 466, 1353, 713, 50, 937, 562, 306, - 1193, 178, 1065, 809, 434, 1321, 745, 114, 1001, 626, 370, - 1257, 242, 1129, 873, 498, 1385, 10, 897, 522, 266, 1153, 138, - 1025, 769, 394, 1281, 650, 74, 961, 586, 330, 1217, 202, 1089, - 833, 458, 1345, 682, 42, 929, 554, 298, 1185, 170, 1057, 801, - 426, 1313, 737, 106, 993, 618, 362, 1249, 234, 1121, 865, 490, - 1377, 705, 26, 913, 538, 282, 1169, 154, 1041, 785, 410, 1297, - 666, 90, 977, 602, 346, 1233, 218, 1105, 849, 474, 1361, 721, - 58, 945, 570, 314, 1201, 186, 1073, 817, 442, 1329, 753, 122, - 1009, 634, 378, 1265, 250, 1137, 881, 506, 1393, 701, 6, 893, - 518, 262, 1149, 134, 1021, 765, 390, 1277, 646, 70, 957, 582, - 326, 1213, 198, 1085, 829, 454, 1341, 678, 38, 925, 550, 294, - 1181, 166, 1053, 797, 422, 1309, 733, 102, 989, 614, 358, 1245, - 230, 1117, 861, 486, 1373, 694, 22, 909, 534, 278, 1165, 150, - 1037, 781, 406, 1293, 662, 86, 973, 598, 342, 1229, 214, 1101, - 845, 470, 1357, 717, 54, 941, 566, 310, 1197, 182, 1069, 813, - 438, 1325, 749, 118, 1005, 630, 374, 1261, 246, 1133, 877, 502, - 1389, 14, 901, 526, 270, 1157, 142, 1029, 773, 398, 1285, 654, - 78, 965, 590, 334, 1221, 206, 1093, 837, 462, 1349, 686, 46, - 933, 558, 302, 1189, 174, 1061, 805, 430, 1317, 741, 110, 997, - 622, 366, 1253, 238, 1125, 869, 494, 1381, 709, 30, 917, 542, - 286, 1173, 158, 1045, 789, 414, 1301, 670, 94, 981, 606, 350, - 1237, 222, 1109, 853, 478, 1365, 725, 62, 949, 574, 318, 1205, - 190, 1077, 821, 446, 1333, 757, 126, 1013, 638, 382, 1269, 254, - 1141, 885, 510, 1397, 699, 1, 888, 513, 257, 1144, 129, 1016, - 760, 385, 1272, 641, 65, 952, 577, 321, 1208, 193, 1080, 824, - 449, 1336, 673, 33, 920, 545, 289, 1176, 161, 1048, 792, 417, - 1304, 728, 97, 984, 609, 353, 1240, 225, 1112, 856, 481, 1368, - 689, 17, 904, 529, 273, 1160, 145, 1032, 776, 401, 1288, 657, - 81, 968, 593, 337, 1224, 209, 1096, 840, 465, 1352, 712, 49, - 936, 561, 305, 1192, 177, 1064, 808, 433, 1320, 744, 113, 1000, - 625, 369, 1256, 241, 1128, 872, 497, 1384, 9, 896, 521, 265, - 1152, 137, 1024, 768, 393, 1280, 649, 73, 960, 585, 329, 1216, - 201, 1088, 832, 457, 1344, 681, 41, 928, 553, 297, 1184, 169, - 1056, 800, 425, 1312, 736, 105, 992, 617, 361, 1248, 233, 1120, - 864, 489, 1376, 704, 25, 912, 537, 281, 1168, 153, 1040, 784, - 409, 1296, 665, 89, 976, 601, 345, 1232, 217, 1104, 848, 473, - 1360, 720, 57, 944, 569, 313, 1200, 185, 1072, 816, 441, 1328, - 752, 121, 1008, 633, 377, 1264, 249, 1136, 880, 505, 1392, 697, - 5, 892, 517, 261, 1148, 133, 1020, 764, 389, 1276, 645, 69, - 956, 581, 325, 1212, 197, 1084, 828, 453, 1340, 677, 37, 924, - 549, 293, 1180, 165, 1052, 796, 421, 1308, 732, 101, 988, 613, - 357, 1244, 229, 1116, 860, 485, 1372, 693, 21, 908, 533, 277, - 1164, 149, 1036, 780, 405, 1292, 661, 85, 972, 597, 341, 1228, - 213, 1100, 844, 469, 1356, 716, 53, 940, 565, 309, 1196, 181, - 1068, 812, 437, 1324, 748, 117, 1004, 629, 373, 1260, 245, - 1132, 876, 501, 1388, 13, 900, 525, 269, 1156, 141, 1028, 772, - 397, 1284, 653, 77, 964, 589, 333, 1220, 205, 1092, 836, 461, - 1348, 685, 45, 932, 557, 301, 1188, 173, 1060, 804, 429, 1316, - 740, 109, 996, 621, 365, 1252, 237, 1124, 868, 493, 1380, 708, - 29, 916, 541, 285, 1172, 157, 1044, 788, 413, 1300, 669, 93, - 980, 605, 349, 1236, 221, 1108, 852, 477, 1364, 724, 61, 948, - 573, 317, 1204, 189, 1076, 820, 445, 1332, 756, 125, 1012, 637, - 381, 1268, 253, 1140, 884, 509, 1396, 700, 3, 890, 515, 259, - 1146, 131, 1018, 762, 387, 1274, 643, 67, 954, 579, 323, 1210, - 195, 1082, 826, 451, 1338, 675, 35, 922, 547, 291, 1178, 163, - 1050, 794, 419, 1306, 730, 99, 986, 611, 355, 1242, 227, 1114, - 858, 483, 1370, 691, 19, 906, 531, 275, 1162, 147, 1034, 778, - 403, 1290, 659, 83, 970, 595, 339, 1226, 211, 1098, 842, 467, - 1354, 714, 51, 938, 563, 307, 1194, 179, 1066, 810, 435, 1322, - 746, 115, 1002, 627, 371, 1258, 243, 1130, 874, 499, 1386, 11, - 898, 523, 267, 1154, 139, 1026, 770, 395, 1282, 651, 75, 962, - 587, 331, 1218, 203, 1090, 834, 459, 1346, 683, 43, 930, 555, - 299, 1186, 171, 1058, 802, 427, 1314, 738, 107, 994, 619, 363, - 1250, 235, 1122, 866, 491, 1378, 706, 27, 914, 539, 283, 1170, - 155, 1042, 786, 411, 1298, 667, 91, 978, 603, 347, 1234, 219, - 1106, 850, 475, 1362, 722, 59, 946, 571, 315, 1202, 187, 1074, - 818, 443, 1330, 754, 123, 1010, 635, 379, 1266, 251, 1138, 882, - 507, 1394, 702, 7, 894, 519, 263, 1150, 135, 1022, 766, 391, - 1278, 647, 71, 958, 583, 327, 1214, 199, 1086, 830, 455, 1342, - 679, 39, 926, 551, 295, 1182, 167, 1054, 798, 423, 1310, 734, - 103, 990, 615, 359, 1246, 231, 1118, 862, 487, 1374, 695, 23, - 910, 535, 279, 1166, 151, 1038, 782, 407, 1294, 663, 87, 974, - 599, 343, 1230, 215, 1102, 846, 471, 1358, 718, 55, 942, 567, - 311, 1198, 183, 1070, 814, 439, 1326, 750, 119, 1006, 631, 375, - 1262, 247, 1134, 878, 503, 1390, 15, 902, 527, 271, 1158, 143, - 1030, 774, 399, 1286, 655, 79, 966, 591, 335, 1222, 207, 1094, - 838, 463, 1350, 687, 47, 934, 559, 303, 1190, 175, 1062, 806, - 431, 1318, 742, 111, 998, 623, 367, 1254, 239, 1126, 870, 495, - 1382, 710, 31, 918, 543, 287, 1174, 159, 1046, 790, 415, 1302, - 671, 95, 982, 607, 351, 1238, 223, 1110, 854, 479, 1366, 726, - 63, 950, 575, 319, 1206, 191, 1078, 822, 447, 1334, 758, 127, - 1014, 639, 383, 1270, 255, 1142, 886, 511, 1398]; - - return (unsafe { *PERM1399.get_unchecked((index % 1399) as usize) } as u32 * 1957201 + - unsafe { *PERM1399.get_unchecked(((index / 1399) % 1399) as usize) } as u32 * 1399 + - unsafe { - *PERM1399.get_unchecked(((index / 1957201) % 1399) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2738124199u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1409(index: u32) -> f32 { - const PERM1409: [u16; 1409] = [0, 897, 512, 256, 1153, 640, 128, 1025, 769, 384, 1281, 64, - 961, 576, 320, 1217, 705, 192, 1089, 833, 448, 1345, 32, 929, - 544, 288, 1185, 672, 160, 1057, 801, 416, 1313, 96, 993, 608, - 352, 1249, 737, 224, 1121, 865, 480, 1377, 16, 913, 528, 272, - 1169, 656, 144, 1041, 785, 400, 1297, 80, 977, 592, 336, 1233, - 721, 208, 1105, 849, 464, 1361, 48, 945, 560, 304, 1201, 688, - 176, 1073, 817, 432, 1329, 112, 1009, 624, 368, 1265, 753, 240, - 1137, 881, 496, 1393, 8, 905, 520, 264, 1161, 648, 136, 1033, - 777, 392, 1289, 72, 969, 584, 328, 1225, 713, 200, 1097, 841, - 456, 1353, 40, 937, 552, 296, 1193, 680, 168, 1065, 809, 424, - 1321, 104, 1001, 616, 360, 1257, 745, 232, 1129, 873, 488, - 1385, 24, 921, 536, 280, 1177, 664, 152, 1049, 793, 408, 1305, - 88, 985, 600, 344, 1241, 729, 216, 1113, 857, 472, 1369, 56, - 953, 568, 312, 1209, 696, 184, 1081, 825, 440, 1337, 120, 1017, - 632, 376, 1273, 761, 248, 1145, 889, 504, 1401, 4, 901, 516, - 260, 1157, 644, 132, 1029, 773, 388, 1285, 68, 965, 580, 324, - 1221, 709, 196, 1093, 837, 452, 1349, 36, 933, 548, 292, 1189, - 676, 164, 1061, 805, 420, 1317, 100, 997, 612, 356, 1253, 741, - 228, 1125, 869, 484, 1381, 20, 917, 532, 276, 1173, 660, 148, - 1045, 789, 404, 1301, 84, 981, 596, 340, 1237, 725, 212, 1109, - 853, 468, 1365, 52, 949, 564, 308, 1205, 692, 180, 1077, 821, - 436, 1333, 116, 1013, 628, 372, 1269, 757, 244, 1141, 885, 500, - 1397, 12, 909, 524, 268, 1165, 652, 140, 1037, 781, 396, 1293, - 76, 973, 588, 332, 1229, 717, 204, 1101, 845, 460, 1357, 44, - 941, 556, 300, 1197, 684, 172, 1069, 813, 428, 1325, 108, 1005, - 620, 364, 1261, 749, 236, 1133, 877, 492, 1389, 28, 925, 540, - 284, 1181, 668, 156, 1053, 797, 412, 1309, 92, 989, 604, 348, - 1245, 733, 220, 1117, 861, 476, 1373, 60, 957, 572, 316, 1213, - 700, 188, 1085, 829, 444, 1341, 124, 1021, 636, 380, 1277, 765, - 252, 1149, 893, 508, 1405, 2, 899, 514, 258, 1155, 642, 130, - 1027, 771, 386, 1283, 66, 963, 578, 322, 1219, 707, 194, 1091, - 835, 450, 1347, 34, 931, 546, 290, 1187, 674, 162, 1059, 803, - 418, 1315, 98, 995, 610, 354, 1251, 739, 226, 1123, 867, 482, - 1379, 18, 915, 530, 274, 1171, 658, 146, 1043, 787, 402, 1299, - 82, 979, 594, 338, 1235, 723, 210, 1107, 851, 466, 1363, 50, - 947, 562, 306, 1203, 690, 178, 1075, 819, 434, 1331, 114, 1011, - 626, 370, 1267, 755, 242, 1139, 883, 498, 1395, 10, 907, 522, - 266, 1163, 650, 138, 1035, 779, 394, 1291, 74, 971, 586, 330, - 1227, 715, 202, 1099, 843, 458, 1355, 42, 939, 554, 298, 1195, - 682, 170, 1067, 811, 426, 1323, 106, 1003, 618, 362, 1259, 747, - 234, 1131, 875, 490, 1387, 26, 923, 538, 282, 1179, 666, 154, - 1051, 795, 410, 1307, 90, 987, 602, 346, 1243, 731, 218, 1115, - 859, 474, 1371, 58, 955, 570, 314, 1211, 698, 186, 1083, 827, - 442, 1339, 122, 1019, 634, 378, 1275, 763, 250, 1147, 891, 506, - 1403, 6, 903, 518, 262, 1159, 646, 134, 1031, 775, 390, 1287, - 70, 967, 582, 326, 1223, 711, 198, 1095, 839, 454, 1351, 38, - 935, 550, 294, 1191, 678, 166, 1063, 807, 422, 1319, 102, 999, - 614, 358, 1255, 743, 230, 1127, 871, 486, 1383, 22, 919, 534, - 278, 1175, 662, 150, 1047, 791, 406, 1303, 86, 983, 598, 342, - 1239, 727, 214, 1111, 855, 470, 1367, 54, 951, 566, 310, 1207, - 694, 182, 1079, 823, 438, 1335, 118, 1015, 630, 374, 1271, 759, - 246, 1143, 887, 502, 1399, 14, 911, 526, 270, 1167, 654, 142, - 1039, 783, 398, 1295, 78, 975, 590, 334, 1231, 719, 206, 1103, - 847, 462, 1359, 46, 943, 558, 302, 1199, 686, 174, 1071, 815, - 430, 1327, 110, 1007, 622, 366, 1263, 751, 238, 1135, 879, 494, - 1391, 30, 927, 542, 286, 1183, 670, 158, 1055, 799, 414, 1311, - 94, 991, 606, 350, 1247, 735, 222, 1119, 863, 478, 1375, 62, - 959, 574, 318, 1215, 702, 190, 1087, 831, 446, 1343, 126, 1023, - 638, 382, 1279, 767, 254, 1151, 895, 510, 1407, 704, 1, 898, - 513, 257, 1154, 641, 129, 1026, 770, 385, 1282, 65, 962, 577, - 321, 1218, 706, 193, 1090, 834, 449, 1346, 33, 930, 545, 289, - 1186, 673, 161, 1058, 802, 417, 1314, 97, 994, 609, 353, 1250, - 738, 225, 1122, 866, 481, 1378, 17, 914, 529, 273, 1170, 657, - 145, 1042, 786, 401, 1298, 81, 978, 593, 337, 1234, 722, 209, - 1106, 850, 465, 1362, 49, 946, 561, 305, 1202, 689, 177, 1074, - 818, 433, 1330, 113, 1010, 625, 369, 1266, 754, 241, 1138, 882, - 497, 1394, 9, 906, 521, 265, 1162, 649, 137, 1034, 778, 393, - 1290, 73, 970, 585, 329, 1226, 714, 201, 1098, 842, 457, 1354, - 41, 938, 553, 297, 1194, 681, 169, 1066, 810, 425, 1322, 105, - 1002, 617, 361, 1258, 746, 233, 1130, 874, 489, 1386, 25, 922, - 537, 281, 1178, 665, 153, 1050, 794, 409, 1306, 89, 986, 601, - 345, 1242, 730, 217, 1114, 858, 473, 1370, 57, 954, 569, 313, - 1210, 697, 185, 1082, 826, 441, 1338, 121, 1018, 633, 377, - 1274, 762, 249, 1146, 890, 505, 1402, 5, 902, 517, 261, 1158, - 645, 133, 1030, 774, 389, 1286, 69, 966, 581, 325, 1222, 710, - 197, 1094, 838, 453, 1350, 37, 934, 549, 293, 1190, 677, 165, - 1062, 806, 421, 1318, 101, 998, 613, 357, 1254, 742, 229, 1126, - 870, 485, 1382, 21, 918, 533, 277, 1174, 661, 149, 1046, 790, - 405, 1302, 85, 982, 597, 341, 1238, 726, 213, 1110, 854, 469, - 1366, 53, 950, 565, 309, 1206, 693, 181, 1078, 822, 437, 1334, - 117, 1014, 629, 373, 1270, 758, 245, 1142, 886, 501, 1398, 13, - 910, 525, 269, 1166, 653, 141, 1038, 782, 397, 1294, 77, 974, - 589, 333, 1230, 718, 205, 1102, 846, 461, 1358, 45, 942, 557, - 301, 1198, 685, 173, 1070, 814, 429, 1326, 109, 1006, 621, 365, - 1262, 750, 237, 1134, 878, 493, 1390, 29, 926, 541, 285, 1182, - 669, 157, 1054, 798, 413, 1310, 93, 990, 605, 349, 1246, 734, - 221, 1118, 862, 477, 1374, 61, 958, 573, 317, 1214, 701, 189, - 1086, 830, 445, 1342, 125, 1022, 637, 381, 1278, 766, 253, - 1150, 894, 509, 1406, 3, 900, 515, 259, 1156, 643, 131, 1028, - 772, 387, 1284, 67, 964, 579, 323, 1220, 708, 195, 1092, 836, - 451, 1348, 35, 932, 547, 291, 1188, 675, 163, 1060, 804, 419, - 1316, 99, 996, 611, 355, 1252, 740, 227, 1124, 868, 483, 1380, - 19, 916, 531, 275, 1172, 659, 147, 1044, 788, 403, 1300, 83, - 980, 595, 339, 1236, 724, 211, 1108, 852, 467, 1364, 51, 948, - 563, 307, 1204, 691, 179, 1076, 820, 435, 1332, 115, 1012, 627, - 371, 1268, 756, 243, 1140, 884, 499, 1396, 11, 908, 523, 267, - 1164, 651, 139, 1036, 780, 395, 1292, 75, 972, 587, 331, 1228, - 716, 203, 1100, 844, 459, 1356, 43, 940, 555, 299, 1196, 683, - 171, 1068, 812, 427, 1324, 107, 1004, 619, 363, 1260, 748, 235, - 1132, 876, 491, 1388, 27, 924, 539, 283, 1180, 667, 155, 1052, - 796, 411, 1308, 91, 988, 603, 347, 1244, 732, 219, 1116, 860, - 475, 1372, 59, 956, 571, 315, 1212, 699, 187, 1084, 828, 443, - 1340, 123, 1020, 635, 379, 1276, 764, 251, 1148, 892, 507, - 1404, 7, 904, 519, 263, 1160, 647, 135, 1032, 776, 391, 1288, - 71, 968, 583, 327, 1224, 712, 199, 1096, 840, 455, 1352, 39, - 936, 551, 295, 1192, 679, 167, 1064, 808, 423, 1320, 103, 1000, - 615, 359, 1256, 744, 231, 1128, 872, 487, 1384, 23, 920, 535, - 279, 1176, 663, 151, 1048, 792, 407, 1304, 87, 984, 599, 343, - 1240, 728, 215, 1112, 856, 471, 1368, 55, 952, 567, 311, 1208, - 695, 183, 1080, 824, 439, 1336, 119, 1016, 631, 375, 1272, 760, - 247, 1144, 888, 503, 1400, 15, 912, 527, 271, 1168, 655, 143, - 1040, 784, 399, 1296, 79, 976, 591, 335, 1232, 720, 207, 1104, - 848, 463, 1360, 47, 944, 559, 303, 1200, 687, 175, 1072, 816, - 431, 1328, 111, 1008, 623, 367, 1264, 752, 239, 1136, 880, 495, - 1392, 31, 928, 543, 287, 1184, 671, 159, 1056, 800, 415, 1312, - 95, 992, 607, 351, 1248, 736, 223, 1120, 864, 479, 1376, 63, - 960, 575, 319, 1216, 703, 191, 1088, 832, 447, 1344, 127, 1024, - 639, 383, 1280, 768, 255, 1152, 896, 511, 1408]; - - return (unsafe { *PERM1409.get_unchecked((index % 1409) as usize) } as u32 * 1985281 + - unsafe { *PERM1409.get_unchecked(((index / 1409) % 1409) as usize) } as u32 * 1409 + - unsafe { - *PERM1409.get_unchecked(((index / 1985281) % 1409) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2797260929u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1423(index: u32) -> f32 { - const PERM1423: [u16; 1423] = [0, 911, 512, 256, 1167, 640, 128, 1039, 783, 384, 1295, 64, - 975, 576, 320, 1231, 719, 192, 1103, 847, 448, 1359, 32, 943, - 544, 288, 1199, 672, 160, 1071, 815, 416, 1327, 96, 1007, 608, - 352, 1263, 751, 224, 1135, 879, 480, 1391, 16, 927, 528, 272, - 1183, 656, 144, 1055, 799, 400, 1311, 80, 991, 592, 336, 1247, - 735, 208, 1119, 863, 464, 1375, 48, 959, 560, 304, 1215, 688, - 176, 1087, 831, 432, 1343, 112, 1023, 624, 368, 1279, 767, 240, - 1151, 895, 496, 1407, 704, 8, 919, 520, 264, 1175, 648, 136, - 1047, 791, 392, 1303, 72, 983, 584, 328, 1239, 727, 200, 1111, - 855, 456, 1367, 40, 951, 552, 296, 1207, 680, 168, 1079, 823, - 424, 1335, 104, 1015, 616, 360, 1271, 759, 232, 1143, 887, 488, - 1399, 24, 935, 536, 280, 1191, 664, 152, 1063, 807, 408, 1319, - 88, 999, 600, 344, 1255, 743, 216, 1127, 871, 472, 1383, 56, - 967, 568, 312, 1223, 696, 184, 1095, 839, 440, 1351, 120, 1031, - 632, 376, 1287, 775, 248, 1159, 903, 504, 1415, 708, 4, 915, - 516, 260, 1171, 644, 132, 1043, 787, 388, 1299, 68, 979, 580, - 324, 1235, 723, 196, 1107, 851, 452, 1363, 36, 947, 548, 292, - 1203, 676, 164, 1075, 819, 420, 1331, 100, 1011, 612, 356, - 1267, 755, 228, 1139, 883, 484, 1395, 20, 931, 532, 276, 1187, - 660, 148, 1059, 803, 404, 1315, 84, 995, 596, 340, 1251, 739, - 212, 1123, 867, 468, 1379, 52, 963, 564, 308, 1219, 692, 180, - 1091, 835, 436, 1347, 116, 1027, 628, 372, 1283, 771, 244, - 1155, 899, 500, 1411, 715, 12, 923, 524, 268, 1179, 652, 140, - 1051, 795, 396, 1307, 76, 987, 588, 332, 1243, 731, 204, 1115, - 859, 460, 1371, 44, 955, 556, 300, 1211, 684, 172, 1083, 827, - 428, 1339, 108, 1019, 620, 364, 1275, 763, 236, 1147, 891, 492, - 1403, 28, 939, 540, 284, 1195, 668, 156, 1067, 811, 412, 1323, - 92, 1003, 604, 348, 1259, 747, 220, 1131, 875, 476, 1387, 60, - 971, 572, 316, 1227, 700, 188, 1099, 843, 444, 1355, 124, 1035, - 636, 380, 1291, 779, 252, 1163, 907, 508, 1419, 710, 2, 913, - 514, 258, 1169, 642, 130, 1041, 785, 386, 1297, 66, 977, 578, - 322, 1233, 721, 194, 1105, 849, 450, 1361, 34, 945, 546, 290, - 1201, 674, 162, 1073, 817, 418, 1329, 98, 1009, 610, 354, 1265, - 753, 226, 1137, 881, 482, 1393, 18, 929, 530, 274, 1185, 658, - 146, 1057, 801, 402, 1313, 82, 993, 594, 338, 1249, 737, 210, - 1121, 865, 466, 1377, 50, 961, 562, 306, 1217, 690, 178, 1089, - 833, 434, 1345, 114, 1025, 626, 370, 1281, 769, 242, 1153, 897, - 498, 1409, 706, 10, 921, 522, 266, 1177, 650, 138, 1049, 793, - 394, 1305, 74, 985, 586, 330, 1241, 729, 202, 1113, 857, 458, - 1369, 42, 953, 554, 298, 1209, 682, 170, 1081, 825, 426, 1337, - 106, 1017, 618, 362, 1273, 761, 234, 1145, 889, 490, 1401, 26, - 937, 538, 282, 1193, 666, 154, 1065, 809, 410, 1321, 90, 1001, - 602, 346, 1257, 745, 218, 1129, 873, 474, 1385, 58, 969, 570, - 314, 1225, 698, 186, 1097, 841, 442, 1353, 122, 1033, 634, 378, - 1289, 777, 250, 1161, 905, 506, 1417, 713, 6, 917, 518, 262, - 1173, 646, 134, 1045, 789, 390, 1301, 70, 981, 582, 326, 1237, - 725, 198, 1109, 853, 454, 1365, 38, 949, 550, 294, 1205, 678, - 166, 1077, 821, 422, 1333, 102, 1013, 614, 358, 1269, 757, 230, - 1141, 885, 486, 1397, 22, 933, 534, 278, 1189, 662, 150, 1061, - 805, 406, 1317, 86, 997, 598, 342, 1253, 741, 214, 1125, 869, - 470, 1381, 54, 965, 566, 310, 1221, 694, 182, 1093, 837, 438, - 1349, 118, 1029, 630, 374, 1285, 773, 246, 1157, 901, 502, - 1413, 717, 14, 925, 526, 270, 1181, 654, 142, 1053, 797, 398, - 1309, 78, 989, 590, 334, 1245, 733, 206, 1117, 861, 462, 1373, - 46, 957, 558, 302, 1213, 686, 174, 1085, 829, 430, 1341, 110, - 1021, 622, 366, 1277, 765, 238, 1149, 893, 494, 1405, 30, 941, - 542, 286, 1197, 670, 158, 1069, 813, 414, 1325, 94, 1005, 606, - 350, 1261, 749, 222, 1133, 877, 478, 1389, 62, 973, 574, 318, - 1229, 702, 190, 1101, 845, 446, 1357, 126, 1037, 638, 382, - 1293, 781, 254, 1165, 909, 510, 1421, 711, 1, 912, 513, 257, - 1168, 641, 129, 1040, 784, 385, 1296, 65, 976, 577, 321, 1232, - 720, 193, 1104, 848, 449, 1360, 33, 944, 545, 289, 1200, 673, - 161, 1072, 816, 417, 1328, 97, 1008, 609, 353, 1264, 752, 225, - 1136, 880, 481, 1392, 17, 928, 529, 273, 1184, 657, 145, 1056, - 800, 401, 1312, 81, 992, 593, 337, 1248, 736, 209, 1120, 864, - 465, 1376, 49, 960, 561, 305, 1216, 689, 177, 1088, 832, 433, - 1344, 113, 1024, 625, 369, 1280, 768, 241, 1152, 896, 497, - 1408, 705, 9, 920, 521, 265, 1176, 649, 137, 1048, 792, 393, - 1304, 73, 984, 585, 329, 1240, 728, 201, 1112, 856, 457, 1368, - 41, 952, 553, 297, 1208, 681, 169, 1080, 824, 425, 1336, 105, - 1016, 617, 361, 1272, 760, 233, 1144, 888, 489, 1400, 25, 936, - 537, 281, 1192, 665, 153, 1064, 808, 409, 1320, 89, 1000, 601, - 345, 1256, 744, 217, 1128, 872, 473, 1384, 57, 968, 569, 313, - 1224, 697, 185, 1096, 840, 441, 1352, 121, 1032, 633, 377, - 1288, 776, 249, 1160, 904, 505, 1416, 709, 5, 916, 517, 261, - 1172, 645, 133, 1044, 788, 389, 1300, 69, 980, 581, 325, 1236, - 724, 197, 1108, 852, 453, 1364, 37, 948, 549, 293, 1204, 677, - 165, 1076, 820, 421, 1332, 101, 1012, 613, 357, 1268, 756, 229, - 1140, 884, 485, 1396, 21, 932, 533, 277, 1188, 661, 149, 1060, - 804, 405, 1316, 85, 996, 597, 341, 1252, 740, 213, 1124, 868, - 469, 1380, 53, 964, 565, 309, 1220, 693, 181, 1092, 836, 437, - 1348, 117, 1028, 629, 373, 1284, 772, 245, 1156, 900, 501, - 1412, 716, 13, 924, 525, 269, 1180, 653, 141, 1052, 796, 397, - 1308, 77, 988, 589, 333, 1244, 732, 205, 1116, 860, 461, 1372, - 45, 956, 557, 301, 1212, 685, 173, 1084, 828, 429, 1340, 109, - 1020, 621, 365, 1276, 764, 237, 1148, 892, 493, 1404, 29, 940, - 541, 285, 1196, 669, 157, 1068, 812, 413, 1324, 93, 1004, 605, - 349, 1260, 748, 221, 1132, 876, 477, 1388, 61, 972, 573, 317, - 1228, 701, 189, 1100, 844, 445, 1356, 125, 1036, 637, 381, - 1292, 780, 253, 1164, 908, 509, 1420, 712, 3, 914, 515, 259, - 1170, 643, 131, 1042, 786, 387, 1298, 67, 978, 579, 323, 1234, - 722, 195, 1106, 850, 451, 1362, 35, 946, 547, 291, 1202, 675, - 163, 1074, 818, 419, 1330, 99, 1010, 611, 355, 1266, 754, 227, - 1138, 882, 483, 1394, 19, 930, 531, 275, 1186, 659, 147, 1058, - 802, 403, 1314, 83, 994, 595, 339, 1250, 738, 211, 1122, 866, - 467, 1378, 51, 962, 563, 307, 1218, 691, 179, 1090, 834, 435, - 1346, 115, 1026, 627, 371, 1282, 770, 243, 1154, 898, 499, - 1410, 707, 11, 922, 523, 267, 1178, 651, 139, 1050, 794, 395, - 1306, 75, 986, 587, 331, 1242, 730, 203, 1114, 858, 459, 1370, - 43, 954, 555, 299, 1210, 683, 171, 1082, 826, 427, 1338, 107, - 1018, 619, 363, 1274, 762, 235, 1146, 890, 491, 1402, 27, 938, - 539, 283, 1194, 667, 155, 1066, 810, 411, 1322, 91, 1002, 603, - 347, 1258, 746, 219, 1130, 874, 475, 1386, 59, 970, 571, 315, - 1226, 699, 187, 1098, 842, 443, 1354, 123, 1034, 635, 379, - 1290, 778, 251, 1162, 906, 507, 1418, 714, 7, 918, 519, 263, - 1174, 647, 135, 1046, 790, 391, 1302, 71, 982, 583, 327, 1238, - 726, 199, 1110, 854, 455, 1366, 39, 950, 551, 295, 1206, 679, - 167, 1078, 822, 423, 1334, 103, 1014, 615, 359, 1270, 758, 231, - 1142, 886, 487, 1398, 23, 934, 535, 279, 1190, 663, 151, 1062, - 806, 407, 1318, 87, 998, 599, 343, 1254, 742, 215, 1126, 870, - 471, 1382, 55, 966, 567, 311, 1222, 695, 183, 1094, 838, 439, - 1350, 119, 1030, 631, 375, 1286, 774, 247, 1158, 902, 503, - 1414, 718, 15, 926, 527, 271, 1182, 655, 143, 1054, 798, 399, - 1310, 79, 990, 591, 335, 1246, 734, 207, 1118, 862, 463, 1374, - 47, 958, 559, 303, 1214, 687, 175, 1086, 830, 431, 1342, 111, - 1022, 623, 367, 1278, 766, 239, 1150, 894, 495, 1406, 31, 942, - 543, 287, 1198, 671, 159, 1070, 814, 415, 1326, 95, 1006, 607, - 351, 1262, 750, 223, 1134, 878, 479, 1390, 63, 974, 575, 319, - 1230, 703, 191, 1102, 846, 447, 1358, 127, 1038, 639, 383, - 1294, 782, 255, 1166, 910, 511, 1422]; - - return (unsafe { *PERM1423.get_unchecked((index % 1423) as usize) } as u32 * 2024929 + - unsafe { *PERM1423.get_unchecked(((index / 1423) % 1423) as usize) } as u32 * 1423 + - unsafe { - *PERM1423.get_unchecked(((index / 2024929) % 1423) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2881473967u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1427(index: u32) -> f32 { - const PERM1427: [u16; 1427] = [0, 915, 512, 256, 1171, 640, 128, 1043, 787, 384, 1299, 64, - 979, 576, 320, 1235, 723, 192, 1107, 851, 448, 1363, 32, 947, - 544, 288, 1203, 672, 160, 1075, 819, 416, 1331, 96, 1011, 608, - 352, 1267, 755, 224, 1139, 883, 480, 1395, 704, 16, 931, 528, - 272, 1187, 656, 144, 1059, 803, 400, 1315, 80, 995, 592, 336, - 1251, 739, 208, 1123, 867, 464, 1379, 48, 963, 560, 304, 1219, - 688, 176, 1091, 835, 432, 1347, 112, 1027, 624, 368, 1283, 771, - 240, 1155, 899, 496, 1411, 8, 923, 520, 264, 1179, 648, 136, - 1051, 795, 392, 1307, 72, 987, 584, 328, 1243, 731, 200, 1115, - 859, 456, 1371, 40, 955, 552, 296, 1211, 680, 168, 1083, 827, - 424, 1339, 104, 1019, 616, 360, 1275, 763, 232, 1147, 891, 488, - 1403, 715, 24, 939, 536, 280, 1195, 664, 152, 1067, 811, 408, - 1323, 88, 1003, 600, 344, 1259, 747, 216, 1131, 875, 472, 1387, - 56, 971, 568, 312, 1227, 696, 184, 1099, 843, 440, 1355, 120, - 1035, 632, 376, 1291, 779, 248, 1163, 907, 504, 1419, 4, 919, - 516, 260, 1175, 644, 132, 1047, 791, 388, 1303, 68, 983, 580, - 324, 1239, 727, 196, 1111, 855, 452, 1367, 36, 951, 548, 292, - 1207, 676, 164, 1079, 823, 420, 1335, 100, 1015, 612, 356, - 1271, 759, 228, 1143, 887, 484, 1399, 708, 20, 935, 532, 276, - 1191, 660, 148, 1063, 807, 404, 1319, 84, 999, 596, 340, 1255, - 743, 212, 1127, 871, 468, 1383, 52, 967, 564, 308, 1223, 692, - 180, 1095, 839, 436, 1351, 116, 1031, 628, 372, 1287, 775, 244, - 1159, 903, 500, 1415, 12, 927, 524, 268, 1183, 652, 140, 1055, - 799, 396, 1311, 76, 991, 588, 332, 1247, 735, 204, 1119, 863, - 460, 1375, 44, 959, 556, 300, 1215, 684, 172, 1087, 831, 428, - 1343, 108, 1023, 620, 364, 1279, 767, 236, 1151, 895, 492, - 1407, 719, 28, 943, 540, 284, 1199, 668, 156, 1071, 815, 412, - 1327, 92, 1007, 604, 348, 1263, 751, 220, 1135, 879, 476, 1391, - 60, 975, 572, 316, 1231, 700, 188, 1103, 847, 444, 1359, 124, - 1039, 636, 380, 1295, 783, 252, 1167, 911, 508, 1423, 712, 2, - 917, 514, 258, 1173, 642, 130, 1045, 789, 386, 1301, 66, 981, - 578, 322, 1237, 725, 194, 1109, 853, 450, 1365, 34, 949, 546, - 290, 1205, 674, 162, 1077, 821, 418, 1333, 98, 1013, 610, 354, - 1269, 757, 226, 1141, 885, 482, 1397, 706, 18, 933, 530, 274, - 1189, 658, 146, 1061, 805, 402, 1317, 82, 997, 594, 338, 1253, - 741, 210, 1125, 869, 466, 1381, 50, 965, 562, 306, 1221, 690, - 178, 1093, 837, 434, 1349, 114, 1029, 626, 370, 1285, 773, 242, - 1157, 901, 498, 1413, 10, 925, 522, 266, 1181, 650, 138, 1053, - 797, 394, 1309, 74, 989, 586, 330, 1245, 733, 202, 1117, 861, - 458, 1373, 42, 957, 554, 298, 1213, 682, 170, 1085, 829, 426, - 1341, 106, 1021, 618, 362, 1277, 765, 234, 1149, 893, 490, - 1405, 717, 26, 941, 538, 282, 1197, 666, 154, 1069, 813, 410, - 1325, 90, 1005, 602, 346, 1261, 749, 218, 1133, 877, 474, 1389, - 58, 973, 570, 314, 1229, 698, 186, 1101, 845, 442, 1357, 122, - 1037, 634, 378, 1293, 781, 250, 1165, 909, 506, 1421, 6, 921, - 518, 262, 1177, 646, 134, 1049, 793, 390, 1305, 70, 985, 582, - 326, 1241, 729, 198, 1113, 857, 454, 1369, 38, 953, 550, 294, - 1209, 678, 166, 1081, 825, 422, 1337, 102, 1017, 614, 358, - 1273, 761, 230, 1145, 889, 486, 1401, 710, 22, 937, 534, 278, - 1193, 662, 150, 1065, 809, 406, 1321, 86, 1001, 598, 342, 1257, - 745, 214, 1129, 873, 470, 1385, 54, 969, 566, 310, 1225, 694, - 182, 1097, 841, 438, 1353, 118, 1033, 630, 374, 1289, 777, 246, - 1161, 905, 502, 1417, 14, 929, 526, 270, 1185, 654, 142, 1057, - 801, 398, 1313, 78, 993, 590, 334, 1249, 737, 206, 1121, 865, - 462, 1377, 46, 961, 558, 302, 1217, 686, 174, 1089, 833, 430, - 1345, 110, 1025, 622, 366, 1281, 769, 238, 1153, 897, 494, - 1409, 721, 30, 945, 542, 286, 1201, 670, 158, 1073, 817, 414, - 1329, 94, 1009, 606, 350, 1265, 753, 222, 1137, 881, 478, 1393, - 62, 977, 574, 318, 1233, 702, 190, 1105, 849, 446, 1361, 126, - 1041, 638, 382, 1297, 785, 254, 1169, 913, 510, 1425, 713, 1, - 916, 513, 257, 1172, 641, 129, 1044, 788, 385, 1300, 65, 980, - 577, 321, 1236, 724, 193, 1108, 852, 449, 1364, 33, 948, 545, - 289, 1204, 673, 161, 1076, 820, 417, 1332, 97, 1012, 609, 353, - 1268, 756, 225, 1140, 884, 481, 1396, 705, 17, 932, 529, 273, - 1188, 657, 145, 1060, 804, 401, 1316, 81, 996, 593, 337, 1252, - 740, 209, 1124, 868, 465, 1380, 49, 964, 561, 305, 1220, 689, - 177, 1092, 836, 433, 1348, 113, 1028, 625, 369, 1284, 772, 241, - 1156, 900, 497, 1412, 9, 924, 521, 265, 1180, 649, 137, 1052, - 796, 393, 1308, 73, 988, 585, 329, 1244, 732, 201, 1116, 860, - 457, 1372, 41, 956, 553, 297, 1212, 681, 169, 1084, 828, 425, - 1340, 105, 1020, 617, 361, 1276, 764, 233, 1148, 892, 489, - 1404, 716, 25, 940, 537, 281, 1196, 665, 153, 1068, 812, 409, - 1324, 89, 1004, 601, 345, 1260, 748, 217, 1132, 876, 473, 1388, - 57, 972, 569, 313, 1228, 697, 185, 1100, 844, 441, 1356, 121, - 1036, 633, 377, 1292, 780, 249, 1164, 908, 505, 1420, 5, 920, - 517, 261, 1176, 645, 133, 1048, 792, 389, 1304, 69, 984, 581, - 325, 1240, 728, 197, 1112, 856, 453, 1368, 37, 952, 549, 293, - 1208, 677, 165, 1080, 824, 421, 1336, 101, 1016, 613, 357, - 1272, 760, 229, 1144, 888, 485, 1400, 709, 21, 936, 533, 277, - 1192, 661, 149, 1064, 808, 405, 1320, 85, 1000, 597, 341, 1256, - 744, 213, 1128, 872, 469, 1384, 53, 968, 565, 309, 1224, 693, - 181, 1096, 840, 437, 1352, 117, 1032, 629, 373, 1288, 776, 245, - 1160, 904, 501, 1416, 13, 928, 525, 269, 1184, 653, 141, 1056, - 800, 397, 1312, 77, 992, 589, 333, 1248, 736, 205, 1120, 864, - 461, 1376, 45, 960, 557, 301, 1216, 685, 173, 1088, 832, 429, - 1344, 109, 1024, 621, 365, 1280, 768, 237, 1152, 896, 493, - 1408, 720, 29, 944, 541, 285, 1200, 669, 157, 1072, 816, 413, - 1328, 93, 1008, 605, 349, 1264, 752, 221, 1136, 880, 477, 1392, - 61, 976, 573, 317, 1232, 701, 189, 1104, 848, 445, 1360, 125, - 1040, 637, 381, 1296, 784, 253, 1168, 912, 509, 1424, 714, 3, - 918, 515, 259, 1174, 643, 131, 1046, 790, 387, 1302, 67, 982, - 579, 323, 1238, 726, 195, 1110, 854, 451, 1366, 35, 950, 547, - 291, 1206, 675, 163, 1078, 822, 419, 1334, 99, 1014, 611, 355, - 1270, 758, 227, 1142, 886, 483, 1398, 707, 19, 934, 531, 275, - 1190, 659, 147, 1062, 806, 403, 1318, 83, 998, 595, 339, 1254, - 742, 211, 1126, 870, 467, 1382, 51, 966, 563, 307, 1222, 691, - 179, 1094, 838, 435, 1350, 115, 1030, 627, 371, 1286, 774, 243, - 1158, 902, 499, 1414, 11, 926, 523, 267, 1182, 651, 139, 1054, - 798, 395, 1310, 75, 990, 587, 331, 1246, 734, 203, 1118, 862, - 459, 1374, 43, 958, 555, 299, 1214, 683, 171, 1086, 830, 427, - 1342, 107, 1022, 619, 363, 1278, 766, 235, 1150, 894, 491, - 1406, 718, 27, 942, 539, 283, 1198, 667, 155, 1070, 814, 411, - 1326, 91, 1006, 603, 347, 1262, 750, 219, 1134, 878, 475, 1390, - 59, 974, 571, 315, 1230, 699, 187, 1102, 846, 443, 1358, 123, - 1038, 635, 379, 1294, 782, 251, 1166, 910, 507, 1422, 7, 922, - 519, 263, 1178, 647, 135, 1050, 794, 391, 1306, 71, 986, 583, - 327, 1242, 730, 199, 1114, 858, 455, 1370, 39, 954, 551, 295, - 1210, 679, 167, 1082, 826, 423, 1338, 103, 1018, 615, 359, - 1274, 762, 231, 1146, 890, 487, 1402, 711, 23, 938, 535, 279, - 1194, 663, 151, 1066, 810, 407, 1322, 87, 1002, 599, 343, 1258, - 746, 215, 1130, 874, 471, 1386, 55, 970, 567, 311, 1226, 695, - 183, 1098, 842, 439, 1354, 119, 1034, 631, 375, 1290, 778, 247, - 1162, 906, 503, 1418, 15, 930, 527, 271, 1186, 655, 143, 1058, - 802, 399, 1314, 79, 994, 591, 335, 1250, 738, 207, 1122, 866, - 463, 1378, 47, 962, 559, 303, 1218, 687, 175, 1090, 834, 431, - 1346, 111, 1026, 623, 367, 1282, 770, 239, 1154, 898, 495, - 1410, 722, 31, 946, 543, 287, 1202, 671, 159, 1074, 818, 415, - 1330, 95, 1010, 607, 351, 1266, 754, 223, 1138, 882, 479, 1394, - 63, 978, 575, 319, 1234, 703, 191, 1106, 850, 447, 1362, 127, - 1042, 639, 383, 1298, 786, 255, 1170, 914, 511, 1426]; - - return (unsafe { *PERM1427.get_unchecked((index % 1427) as usize) } as u32 * 2036329 + - unsafe { *PERM1427.get_unchecked(((index / 1427) % 1427) as usize) } as u32 * 1427 + - unsafe { - *PERM1427.get_unchecked(((index / 2036329) % 1427) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2905841483u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1429(index: u32) -> f32 { - const PERM1429: [u16; 1429] = [0, 917, 512, 256, 1173, 640, 128, 1045, 789, 384, 1301, 64, - 981, 576, 320, 1237, 725, 192, 1109, 853, 448, 1365, 32, 949, - 544, 288, 1205, 672, 160, 1077, 821, 416, 1333, 96, 1013, 608, - 352, 1269, 757, 224, 1141, 885, 480, 1397, 704, 16, 933, 528, - 272, 1189, 656, 144, 1061, 805, 400, 1317, 80, 997, 592, 336, - 1253, 741, 208, 1125, 869, 464, 1381, 48, 965, 560, 304, 1221, - 688, 176, 1093, 837, 432, 1349, 112, 1029, 624, 368, 1285, 773, - 240, 1157, 901, 496, 1413, 8, 925, 520, 264, 1181, 648, 136, - 1053, 797, 392, 1309, 72, 989, 584, 328, 1245, 733, 200, 1117, - 861, 456, 1373, 40, 957, 552, 296, 1213, 680, 168, 1085, 829, - 424, 1341, 104, 1021, 616, 360, 1277, 765, 232, 1149, 893, 488, - 1405, 717, 24, 941, 536, 280, 1197, 664, 152, 1069, 813, 408, - 1325, 88, 1005, 600, 344, 1261, 749, 216, 1133, 877, 472, 1389, - 56, 973, 568, 312, 1229, 696, 184, 1101, 845, 440, 1357, 120, - 1037, 632, 376, 1293, 781, 248, 1165, 909, 504, 1421, 712, 4, - 921, 516, 260, 1177, 644, 132, 1049, 793, 388, 1305, 68, 985, - 580, 324, 1241, 729, 196, 1113, 857, 452, 1369, 36, 953, 548, - 292, 1209, 676, 164, 1081, 825, 420, 1337, 100, 1017, 612, 356, - 1273, 761, 228, 1145, 889, 484, 1401, 708, 20, 937, 532, 276, - 1193, 660, 148, 1065, 809, 404, 1321, 84, 1001, 596, 340, 1257, - 745, 212, 1129, 873, 468, 1385, 52, 969, 564, 308, 1225, 692, - 180, 1097, 841, 436, 1353, 116, 1033, 628, 372, 1289, 777, 244, - 1161, 905, 500, 1417, 12, 929, 524, 268, 1185, 652, 140, 1057, - 801, 396, 1313, 76, 993, 588, 332, 1249, 737, 204, 1121, 865, - 460, 1377, 44, 961, 556, 300, 1217, 684, 172, 1089, 833, 428, - 1345, 108, 1025, 620, 364, 1281, 769, 236, 1153, 897, 492, - 1409, 721, 28, 945, 540, 284, 1201, 668, 156, 1073, 817, 412, - 1329, 92, 1009, 604, 348, 1265, 753, 220, 1137, 881, 476, 1393, - 60, 977, 572, 316, 1233, 700, 188, 1105, 849, 444, 1361, 124, - 1041, 636, 380, 1297, 785, 252, 1169, 913, 508, 1425, 2, 919, - 514, 258, 1175, 642, 130, 1047, 791, 386, 1303, 66, 983, 578, - 322, 1239, 727, 194, 1111, 855, 450, 1367, 34, 951, 546, 290, - 1207, 674, 162, 1079, 823, 418, 1335, 98, 1015, 610, 354, 1271, - 759, 226, 1143, 887, 482, 1399, 706, 18, 935, 530, 274, 1191, - 658, 146, 1063, 807, 402, 1319, 82, 999, 594, 338, 1255, 743, - 210, 1127, 871, 466, 1383, 50, 967, 562, 306, 1223, 690, 178, - 1095, 839, 434, 1351, 114, 1031, 626, 370, 1287, 775, 242, - 1159, 903, 498, 1415, 10, 927, 522, 266, 1183, 650, 138, 1055, - 799, 394, 1311, 74, 991, 586, 330, 1247, 735, 202, 1119, 863, - 458, 1375, 42, 959, 554, 298, 1215, 682, 170, 1087, 831, 426, - 1343, 106, 1023, 618, 362, 1279, 767, 234, 1151, 895, 490, - 1407, 719, 26, 943, 538, 282, 1199, 666, 154, 1071, 815, 410, - 1327, 90, 1007, 602, 346, 1263, 751, 218, 1135, 879, 474, 1391, - 58, 975, 570, 314, 1231, 698, 186, 1103, 847, 442, 1359, 122, - 1039, 634, 378, 1295, 783, 250, 1167, 911, 506, 1423, 715, 6, - 923, 518, 262, 1179, 646, 134, 1051, 795, 390, 1307, 70, 987, - 582, 326, 1243, 731, 198, 1115, 859, 454, 1371, 38, 955, 550, - 294, 1211, 678, 166, 1083, 827, 422, 1339, 102, 1019, 614, 358, - 1275, 763, 230, 1147, 891, 486, 1403, 710, 22, 939, 534, 278, - 1195, 662, 150, 1067, 811, 406, 1323, 86, 1003, 598, 342, 1259, - 747, 214, 1131, 875, 470, 1387, 54, 971, 566, 310, 1227, 694, - 182, 1099, 843, 438, 1355, 118, 1035, 630, 374, 1291, 779, 246, - 1163, 907, 502, 1419, 14, 931, 526, 270, 1187, 654, 142, 1059, - 803, 398, 1315, 78, 995, 590, 334, 1251, 739, 206, 1123, 867, - 462, 1379, 46, 963, 558, 302, 1219, 686, 174, 1091, 835, 430, - 1347, 110, 1027, 622, 366, 1283, 771, 238, 1155, 899, 494, - 1411, 723, 30, 947, 542, 286, 1203, 670, 158, 1075, 819, 414, - 1331, 94, 1011, 606, 350, 1267, 755, 222, 1139, 883, 478, 1395, - 62, 979, 574, 318, 1235, 702, 190, 1107, 851, 446, 1363, 126, - 1043, 638, 382, 1299, 787, 254, 1171, 915, 510, 1427, 714, 1, - 918, 513, 257, 1174, 641, 129, 1046, 790, 385, 1302, 65, 982, - 577, 321, 1238, 726, 193, 1110, 854, 449, 1366, 33, 950, 545, - 289, 1206, 673, 161, 1078, 822, 417, 1334, 97, 1014, 609, 353, - 1270, 758, 225, 1142, 886, 481, 1398, 705, 17, 934, 529, 273, - 1190, 657, 145, 1062, 806, 401, 1318, 81, 998, 593, 337, 1254, - 742, 209, 1126, 870, 465, 1382, 49, 966, 561, 305, 1222, 689, - 177, 1094, 838, 433, 1350, 113, 1030, 625, 369, 1286, 774, 241, - 1158, 902, 497, 1414, 9, 926, 521, 265, 1182, 649, 137, 1054, - 798, 393, 1310, 73, 990, 585, 329, 1246, 734, 201, 1118, 862, - 457, 1374, 41, 958, 553, 297, 1214, 681, 169, 1086, 830, 425, - 1342, 105, 1022, 617, 361, 1278, 766, 233, 1150, 894, 489, - 1406, 718, 25, 942, 537, 281, 1198, 665, 153, 1070, 814, 409, - 1326, 89, 1006, 601, 345, 1262, 750, 217, 1134, 878, 473, 1390, - 57, 974, 569, 313, 1230, 697, 185, 1102, 846, 441, 1358, 121, - 1038, 633, 377, 1294, 782, 249, 1166, 910, 505, 1422, 713, 5, - 922, 517, 261, 1178, 645, 133, 1050, 794, 389, 1306, 69, 986, - 581, 325, 1242, 730, 197, 1114, 858, 453, 1370, 37, 954, 549, - 293, 1210, 677, 165, 1082, 826, 421, 1338, 101, 1018, 613, 357, - 1274, 762, 229, 1146, 890, 485, 1402, 709, 21, 938, 533, 277, - 1194, 661, 149, 1066, 810, 405, 1322, 85, 1002, 597, 341, 1258, - 746, 213, 1130, 874, 469, 1386, 53, 970, 565, 309, 1226, 693, - 181, 1098, 842, 437, 1354, 117, 1034, 629, 373, 1290, 778, 245, - 1162, 906, 501, 1418, 13, 930, 525, 269, 1186, 653, 141, 1058, - 802, 397, 1314, 77, 994, 589, 333, 1250, 738, 205, 1122, 866, - 461, 1378, 45, 962, 557, 301, 1218, 685, 173, 1090, 834, 429, - 1346, 109, 1026, 621, 365, 1282, 770, 237, 1154, 898, 493, - 1410, 722, 29, 946, 541, 285, 1202, 669, 157, 1074, 818, 413, - 1330, 93, 1010, 605, 349, 1266, 754, 221, 1138, 882, 477, 1394, - 61, 978, 573, 317, 1234, 701, 189, 1106, 850, 445, 1362, 125, - 1042, 637, 381, 1298, 786, 253, 1170, 914, 509, 1426, 3, 920, - 515, 259, 1176, 643, 131, 1048, 792, 387, 1304, 67, 984, 579, - 323, 1240, 728, 195, 1112, 856, 451, 1368, 35, 952, 547, 291, - 1208, 675, 163, 1080, 824, 419, 1336, 99, 1016, 611, 355, 1272, - 760, 227, 1144, 888, 483, 1400, 707, 19, 936, 531, 275, 1192, - 659, 147, 1064, 808, 403, 1320, 83, 1000, 595, 339, 1256, 744, - 211, 1128, 872, 467, 1384, 51, 968, 563, 307, 1224, 691, 179, - 1096, 840, 435, 1352, 115, 1032, 627, 371, 1288, 776, 243, - 1160, 904, 499, 1416, 11, 928, 523, 267, 1184, 651, 139, 1056, - 800, 395, 1312, 75, 992, 587, 331, 1248, 736, 203, 1120, 864, - 459, 1376, 43, 960, 555, 299, 1216, 683, 171, 1088, 832, 427, - 1344, 107, 1024, 619, 363, 1280, 768, 235, 1152, 896, 491, - 1408, 720, 27, 944, 539, 283, 1200, 667, 155, 1072, 816, 411, - 1328, 91, 1008, 603, 347, 1264, 752, 219, 1136, 880, 475, 1392, - 59, 976, 571, 315, 1232, 699, 187, 1104, 848, 443, 1360, 123, - 1040, 635, 379, 1296, 784, 251, 1168, 912, 507, 1424, 716, 7, - 924, 519, 263, 1180, 647, 135, 1052, 796, 391, 1308, 71, 988, - 583, 327, 1244, 732, 199, 1116, 860, 455, 1372, 39, 956, 551, - 295, 1212, 679, 167, 1084, 828, 423, 1340, 103, 1020, 615, 359, - 1276, 764, 231, 1148, 892, 487, 1404, 711, 23, 940, 535, 279, - 1196, 663, 151, 1068, 812, 407, 1324, 87, 1004, 599, 343, 1260, - 748, 215, 1132, 876, 471, 1388, 55, 972, 567, 311, 1228, 695, - 183, 1100, 844, 439, 1356, 119, 1036, 631, 375, 1292, 780, 247, - 1164, 908, 503, 1420, 15, 932, 527, 271, 1188, 655, 143, 1060, - 804, 399, 1316, 79, 996, 591, 335, 1252, 740, 207, 1124, 868, - 463, 1380, 47, 964, 559, 303, 1220, 687, 175, 1092, 836, 431, - 1348, 111, 1028, 623, 367, 1284, 772, 239, 1156, 900, 495, - 1412, 724, 31, 948, 543, 287, 1204, 671, 159, 1076, 820, 415, - 1332, 95, 1012, 607, 351, 1268, 756, 223, 1140, 884, 479, 1396, - 63, 980, 575, 319, 1236, 703, 191, 1108, 852, 447, 1364, 127, - 1044, 639, 383, 1300, 788, 255, 1172, 916, 511, 1428]; - - return (unsafe { *PERM1429.get_unchecked((index % 1429) as usize) } as u32 * 2042041 + - unsafe { *PERM1429.get_unchecked(((index / 1429) % 1429) as usize) } as u32 * 1429 + - unsafe { - *PERM1429.get_unchecked(((index / 2042041) % 1429) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2918076589u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1433(index: u32) -> f32 { - const PERM1433: [u16; 1433] = [0, 921, 512, 256, 1177, 640, 128, 1049, 793, 384, 1305, 64, - 985, 576, 320, 1241, 729, 192, 1113, 857, 448, 1369, 32, 953, - 544, 288, 1209, 672, 160, 1081, 825, 416, 1337, 96, 1017, 608, - 352, 1273, 761, 224, 1145, 889, 480, 1401, 704, 16, 937, 528, - 272, 1193, 656, 144, 1065, 809, 400, 1321, 80, 1001, 592, 336, - 1257, 745, 208, 1129, 873, 464, 1385, 48, 969, 560, 304, 1225, - 688, 176, 1097, 841, 432, 1353, 112, 1033, 624, 368, 1289, 777, - 240, 1161, 905, 496, 1417, 712, 8, 929, 520, 264, 1185, 648, - 136, 1057, 801, 392, 1313, 72, 993, 584, 328, 1249, 737, 200, - 1121, 865, 456, 1377, 40, 961, 552, 296, 1217, 680, 168, 1089, - 833, 424, 1345, 104, 1025, 616, 360, 1281, 769, 232, 1153, 897, - 488, 1409, 721, 24, 945, 536, 280, 1201, 664, 152, 1073, 817, - 408, 1329, 88, 1009, 600, 344, 1265, 753, 216, 1137, 881, 472, - 1393, 56, 977, 568, 312, 1233, 696, 184, 1105, 849, 440, 1361, - 120, 1041, 632, 376, 1297, 785, 248, 1169, 913, 504, 1425, 4, - 925, 516, 260, 1181, 644, 132, 1053, 797, 388, 1309, 68, 989, - 580, 324, 1245, 733, 196, 1117, 861, 452, 1373, 36, 957, 548, - 292, 1213, 676, 164, 1085, 829, 420, 1341, 100, 1021, 612, 356, - 1277, 765, 228, 1149, 893, 484, 1405, 708, 20, 941, 532, 276, - 1197, 660, 148, 1069, 813, 404, 1325, 84, 1005, 596, 340, 1261, - 749, 212, 1133, 877, 468, 1389, 52, 973, 564, 308, 1229, 692, - 180, 1101, 845, 436, 1357, 116, 1037, 628, 372, 1293, 781, 244, - 1165, 909, 500, 1421, 717, 12, 933, 524, 268, 1189, 652, 140, - 1061, 805, 396, 1317, 76, 997, 588, 332, 1253, 741, 204, 1125, - 869, 460, 1381, 44, 965, 556, 300, 1221, 684, 172, 1093, 837, - 428, 1349, 108, 1029, 620, 364, 1285, 773, 236, 1157, 901, 492, - 1413, 725, 28, 949, 540, 284, 1205, 668, 156, 1077, 821, 412, - 1333, 92, 1013, 604, 348, 1269, 757, 220, 1141, 885, 476, 1397, - 60, 981, 572, 316, 1237, 700, 188, 1109, 853, 444, 1365, 124, - 1045, 636, 380, 1301, 789, 252, 1173, 917, 508, 1429, 2, 923, - 514, 258, 1179, 642, 130, 1051, 795, 386, 1307, 66, 987, 578, - 322, 1243, 731, 194, 1115, 859, 450, 1371, 34, 955, 546, 290, - 1211, 674, 162, 1083, 827, 418, 1339, 98, 1019, 610, 354, 1275, - 763, 226, 1147, 891, 482, 1403, 706, 18, 939, 530, 274, 1195, - 658, 146, 1067, 811, 402, 1323, 82, 1003, 594, 338, 1259, 747, - 210, 1131, 875, 466, 1387, 50, 971, 562, 306, 1227, 690, 178, - 1099, 843, 434, 1355, 114, 1035, 626, 370, 1291, 779, 242, - 1163, 907, 498, 1419, 714, 10, 931, 522, 266, 1187, 650, 138, - 1059, 803, 394, 1315, 74, 995, 586, 330, 1251, 739, 202, 1123, - 867, 458, 1379, 42, 963, 554, 298, 1219, 682, 170, 1091, 835, - 426, 1347, 106, 1027, 618, 362, 1283, 771, 234, 1155, 899, 490, - 1411, 723, 26, 947, 538, 282, 1203, 666, 154, 1075, 819, 410, - 1331, 90, 1011, 602, 346, 1267, 755, 218, 1139, 883, 474, 1395, - 58, 979, 570, 314, 1235, 698, 186, 1107, 851, 442, 1363, 122, - 1043, 634, 378, 1299, 787, 250, 1171, 915, 506, 1427, 6, 927, - 518, 262, 1183, 646, 134, 1055, 799, 390, 1311, 70, 991, 582, - 326, 1247, 735, 198, 1119, 863, 454, 1375, 38, 959, 550, 294, - 1215, 678, 166, 1087, 831, 422, 1343, 102, 1023, 614, 358, - 1279, 767, 230, 1151, 895, 486, 1407, 710, 22, 943, 534, 278, - 1199, 662, 150, 1071, 815, 406, 1327, 86, 1007, 598, 342, 1263, - 751, 214, 1135, 879, 470, 1391, 54, 975, 566, 310, 1231, 694, - 182, 1103, 847, 438, 1359, 118, 1039, 630, 374, 1295, 783, 246, - 1167, 911, 502, 1423, 719, 14, 935, 526, 270, 1191, 654, 142, - 1063, 807, 398, 1319, 78, 999, 590, 334, 1255, 743, 206, 1127, - 871, 462, 1383, 46, 967, 558, 302, 1223, 686, 174, 1095, 839, - 430, 1351, 110, 1031, 622, 366, 1287, 775, 238, 1159, 903, 494, - 1415, 727, 30, 951, 542, 286, 1207, 670, 158, 1079, 823, 414, - 1335, 94, 1015, 606, 350, 1271, 759, 222, 1143, 887, 478, 1399, - 62, 983, 574, 318, 1239, 702, 190, 1111, 855, 446, 1367, 126, - 1047, 638, 382, 1303, 791, 254, 1175, 919, 510, 1431, 716, 1, - 922, 513, 257, 1178, 641, 129, 1050, 794, 385, 1306, 65, 986, - 577, 321, 1242, 730, 193, 1114, 858, 449, 1370, 33, 954, 545, - 289, 1210, 673, 161, 1082, 826, 417, 1338, 97, 1018, 609, 353, - 1274, 762, 225, 1146, 890, 481, 1402, 705, 17, 938, 529, 273, - 1194, 657, 145, 1066, 810, 401, 1322, 81, 1002, 593, 337, 1258, - 746, 209, 1130, 874, 465, 1386, 49, 970, 561, 305, 1226, 689, - 177, 1098, 842, 433, 1354, 113, 1034, 625, 369, 1290, 778, 241, - 1162, 906, 497, 1418, 713, 9, 930, 521, 265, 1186, 649, 137, - 1058, 802, 393, 1314, 73, 994, 585, 329, 1250, 738, 201, 1122, - 866, 457, 1378, 41, 962, 553, 297, 1218, 681, 169, 1090, 834, - 425, 1346, 105, 1026, 617, 361, 1282, 770, 233, 1154, 898, 489, - 1410, 722, 25, 946, 537, 281, 1202, 665, 153, 1074, 818, 409, - 1330, 89, 1010, 601, 345, 1266, 754, 217, 1138, 882, 473, 1394, - 57, 978, 569, 313, 1234, 697, 185, 1106, 850, 441, 1362, 121, - 1042, 633, 377, 1298, 786, 249, 1170, 914, 505, 1426, 5, 926, - 517, 261, 1182, 645, 133, 1054, 798, 389, 1310, 69, 990, 581, - 325, 1246, 734, 197, 1118, 862, 453, 1374, 37, 958, 549, 293, - 1214, 677, 165, 1086, 830, 421, 1342, 101, 1022, 613, 357, - 1278, 766, 229, 1150, 894, 485, 1406, 709, 21, 942, 533, 277, - 1198, 661, 149, 1070, 814, 405, 1326, 85, 1006, 597, 341, 1262, - 750, 213, 1134, 878, 469, 1390, 53, 974, 565, 309, 1230, 693, - 181, 1102, 846, 437, 1358, 117, 1038, 629, 373, 1294, 782, 245, - 1166, 910, 501, 1422, 718, 13, 934, 525, 269, 1190, 653, 141, - 1062, 806, 397, 1318, 77, 998, 589, 333, 1254, 742, 205, 1126, - 870, 461, 1382, 45, 966, 557, 301, 1222, 685, 173, 1094, 838, - 429, 1350, 109, 1030, 621, 365, 1286, 774, 237, 1158, 902, 493, - 1414, 726, 29, 950, 541, 285, 1206, 669, 157, 1078, 822, 413, - 1334, 93, 1014, 605, 349, 1270, 758, 221, 1142, 886, 477, 1398, - 61, 982, 573, 317, 1238, 701, 189, 1110, 854, 445, 1366, 125, - 1046, 637, 381, 1302, 790, 253, 1174, 918, 509, 1430, 3, 924, - 515, 259, 1180, 643, 131, 1052, 796, 387, 1308, 67, 988, 579, - 323, 1244, 732, 195, 1116, 860, 451, 1372, 35, 956, 547, 291, - 1212, 675, 163, 1084, 828, 419, 1340, 99, 1020, 611, 355, 1276, - 764, 227, 1148, 892, 483, 1404, 707, 19, 940, 531, 275, 1196, - 659, 147, 1068, 812, 403, 1324, 83, 1004, 595, 339, 1260, 748, - 211, 1132, 876, 467, 1388, 51, 972, 563, 307, 1228, 691, 179, - 1100, 844, 435, 1356, 115, 1036, 627, 371, 1292, 780, 243, - 1164, 908, 499, 1420, 715, 11, 932, 523, 267, 1188, 651, 139, - 1060, 804, 395, 1316, 75, 996, 587, 331, 1252, 740, 203, 1124, - 868, 459, 1380, 43, 964, 555, 299, 1220, 683, 171, 1092, 836, - 427, 1348, 107, 1028, 619, 363, 1284, 772, 235, 1156, 900, 491, - 1412, 724, 27, 948, 539, 283, 1204, 667, 155, 1076, 820, 411, - 1332, 91, 1012, 603, 347, 1268, 756, 219, 1140, 884, 475, 1396, - 59, 980, 571, 315, 1236, 699, 187, 1108, 852, 443, 1364, 123, - 1044, 635, 379, 1300, 788, 251, 1172, 916, 507, 1428, 7, 928, - 519, 263, 1184, 647, 135, 1056, 800, 391, 1312, 71, 992, 583, - 327, 1248, 736, 199, 1120, 864, 455, 1376, 39, 960, 551, 295, - 1216, 679, 167, 1088, 832, 423, 1344, 103, 1024, 615, 359, - 1280, 768, 231, 1152, 896, 487, 1408, 711, 23, 944, 535, 279, - 1200, 663, 151, 1072, 816, 407, 1328, 87, 1008, 599, 343, 1264, - 752, 215, 1136, 880, 471, 1392, 55, 976, 567, 311, 1232, 695, - 183, 1104, 848, 439, 1360, 119, 1040, 631, 375, 1296, 784, 247, - 1168, 912, 503, 1424, 720, 15, 936, 527, 271, 1192, 655, 143, - 1064, 808, 399, 1320, 79, 1000, 591, 335, 1256, 744, 207, 1128, - 872, 463, 1384, 47, 968, 559, 303, 1224, 687, 175, 1096, 840, - 431, 1352, 111, 1032, 623, 367, 1288, 776, 239, 1160, 904, 495, - 1416, 728, 31, 952, 543, 287, 1208, 671, 159, 1080, 824, 415, - 1336, 95, 1016, 607, 351, 1272, 760, 223, 1144, 888, 479, 1400, - 63, 984, 575, 319, 1240, 703, 191, 1112, 856, 447, 1368, 127, - 1048, 639, 383, 1304, 792, 255, 1176, 920, 511, 1432]; - - return (unsafe { *PERM1433.get_unchecked((index % 1433) as usize) } as u32 * 2053489 + - unsafe { *PERM1433.get_unchecked(((index / 1433) % 1433) as usize) } as u32 * 1433 + - unsafe { - *PERM1433.get_unchecked(((index / 2053489) % 1433) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2942649737u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1439(index: u32) -> f32 { - const PERM1439: [u16; 1439] = [0, 927, 512, 256, 1183, 640, 128, 1055, 799, 384, 1311, 64, - 991, 576, 320, 1247, 735, 192, 1119, 863, 448, 1375, 32, 959, - 544, 288, 1215, 672, 160, 1087, 831, 416, 1343, 96, 1023, 608, - 352, 1279, 767, 224, 1151, 895, 480, 1407, 704, 16, 943, 528, - 272, 1199, 656, 144, 1071, 815, 400, 1327, 80, 1007, 592, 336, - 1263, 751, 208, 1135, 879, 464, 1391, 48, 975, 560, 304, 1231, - 688, 176, 1103, 847, 432, 1359, 112, 1039, 624, 368, 1295, 783, - 240, 1167, 911, 496, 1423, 712, 8, 935, 520, 264, 1191, 648, - 136, 1063, 807, 392, 1319, 72, 999, 584, 328, 1255, 743, 200, - 1127, 871, 456, 1383, 40, 967, 552, 296, 1223, 680, 168, 1095, - 839, 424, 1351, 104, 1031, 616, 360, 1287, 775, 232, 1159, 903, - 488, 1415, 727, 24, 951, 536, 280, 1207, 664, 152, 1079, 823, - 408, 1335, 88, 1015, 600, 344, 1271, 759, 216, 1143, 887, 472, - 1399, 56, 983, 568, 312, 1239, 696, 184, 1111, 855, 440, 1367, - 120, 1047, 632, 376, 1303, 791, 248, 1175, 919, 504, 1431, 716, - 4, 931, 516, 260, 1187, 644, 132, 1059, 803, 388, 1315, 68, - 995, 580, 324, 1251, 739, 196, 1123, 867, 452, 1379, 36, 963, - 548, 292, 1219, 676, 164, 1091, 835, 420, 1347, 100, 1027, 612, - 356, 1283, 771, 228, 1155, 899, 484, 1411, 708, 20, 947, 532, - 276, 1203, 660, 148, 1075, 819, 404, 1331, 84, 1011, 596, 340, - 1267, 755, 212, 1139, 883, 468, 1395, 52, 979, 564, 308, 1235, - 692, 180, 1107, 851, 436, 1363, 116, 1043, 628, 372, 1299, 787, - 244, 1171, 915, 500, 1427, 723, 12, 939, 524, 268, 1195, 652, - 140, 1067, 811, 396, 1323, 76, 1003, 588, 332, 1259, 747, 204, - 1131, 875, 460, 1387, 44, 971, 556, 300, 1227, 684, 172, 1099, - 843, 428, 1355, 108, 1035, 620, 364, 1291, 779, 236, 1163, 907, - 492, 1419, 731, 28, 955, 540, 284, 1211, 668, 156, 1083, 827, - 412, 1339, 92, 1019, 604, 348, 1275, 763, 220, 1147, 891, 476, - 1403, 60, 987, 572, 316, 1243, 700, 188, 1115, 859, 444, 1371, - 124, 1051, 636, 380, 1307, 795, 252, 1179, 923, 508, 1435, 718, - 2, 929, 514, 258, 1185, 642, 130, 1057, 801, 386, 1313, 66, - 993, 578, 322, 1249, 737, 194, 1121, 865, 450, 1377, 34, 961, - 546, 290, 1217, 674, 162, 1089, 833, 418, 1345, 98, 1025, 610, - 354, 1281, 769, 226, 1153, 897, 482, 1409, 706, 18, 945, 530, - 274, 1201, 658, 146, 1073, 817, 402, 1329, 82, 1009, 594, 338, - 1265, 753, 210, 1137, 881, 466, 1393, 50, 977, 562, 306, 1233, - 690, 178, 1105, 849, 434, 1361, 114, 1041, 626, 370, 1297, 785, - 242, 1169, 913, 498, 1425, 714, 10, 937, 522, 266, 1193, 650, - 138, 1065, 809, 394, 1321, 74, 1001, 586, 330, 1257, 745, 202, - 1129, 873, 458, 1385, 42, 969, 554, 298, 1225, 682, 170, 1097, - 841, 426, 1353, 106, 1033, 618, 362, 1289, 777, 234, 1161, 905, - 490, 1417, 729, 26, 953, 538, 282, 1209, 666, 154, 1081, 825, - 410, 1337, 90, 1017, 602, 346, 1273, 761, 218, 1145, 889, 474, - 1401, 58, 985, 570, 314, 1241, 698, 186, 1113, 857, 442, 1369, - 122, 1049, 634, 378, 1305, 793, 250, 1177, 921, 506, 1433, 721, - 6, 933, 518, 262, 1189, 646, 134, 1061, 805, 390, 1317, 70, - 997, 582, 326, 1253, 741, 198, 1125, 869, 454, 1381, 38, 965, - 550, 294, 1221, 678, 166, 1093, 837, 422, 1349, 102, 1029, 614, - 358, 1285, 773, 230, 1157, 901, 486, 1413, 710, 22, 949, 534, - 278, 1205, 662, 150, 1077, 821, 406, 1333, 86, 1013, 598, 342, - 1269, 757, 214, 1141, 885, 470, 1397, 54, 981, 566, 310, 1237, - 694, 182, 1109, 853, 438, 1365, 118, 1045, 630, 374, 1301, 789, - 246, 1173, 917, 502, 1429, 725, 14, 941, 526, 270, 1197, 654, - 142, 1069, 813, 398, 1325, 78, 1005, 590, 334, 1261, 749, 206, - 1133, 877, 462, 1389, 46, 973, 558, 302, 1229, 686, 174, 1101, - 845, 430, 1357, 110, 1037, 622, 366, 1293, 781, 238, 1165, 909, - 494, 1421, 733, 30, 957, 542, 286, 1213, 670, 158, 1085, 829, - 414, 1341, 94, 1021, 606, 350, 1277, 765, 222, 1149, 893, 478, - 1405, 62, 989, 574, 318, 1245, 702, 190, 1117, 861, 446, 1373, - 126, 1053, 638, 382, 1309, 797, 254, 1181, 925, 510, 1437, 719, - 1, 928, 513, 257, 1184, 641, 129, 1056, 800, 385, 1312, 65, - 992, 577, 321, 1248, 736, 193, 1120, 864, 449, 1376, 33, 960, - 545, 289, 1216, 673, 161, 1088, 832, 417, 1344, 97, 1024, 609, - 353, 1280, 768, 225, 1152, 896, 481, 1408, 705, 17, 944, 529, - 273, 1200, 657, 145, 1072, 816, 401, 1328, 81, 1008, 593, 337, - 1264, 752, 209, 1136, 880, 465, 1392, 49, 976, 561, 305, 1232, - 689, 177, 1104, 848, 433, 1360, 113, 1040, 625, 369, 1296, 784, - 241, 1168, 912, 497, 1424, 713, 9, 936, 521, 265, 1192, 649, - 137, 1064, 808, 393, 1320, 73, 1000, 585, 329, 1256, 744, 201, - 1128, 872, 457, 1384, 41, 968, 553, 297, 1224, 681, 169, 1096, - 840, 425, 1352, 105, 1032, 617, 361, 1288, 776, 233, 1160, 904, - 489, 1416, 728, 25, 952, 537, 281, 1208, 665, 153, 1080, 824, - 409, 1336, 89, 1016, 601, 345, 1272, 760, 217, 1144, 888, 473, - 1400, 57, 984, 569, 313, 1240, 697, 185, 1112, 856, 441, 1368, - 121, 1048, 633, 377, 1304, 792, 249, 1176, 920, 505, 1432, 717, - 5, 932, 517, 261, 1188, 645, 133, 1060, 804, 389, 1316, 69, - 996, 581, 325, 1252, 740, 197, 1124, 868, 453, 1380, 37, 964, - 549, 293, 1220, 677, 165, 1092, 836, 421, 1348, 101, 1028, 613, - 357, 1284, 772, 229, 1156, 900, 485, 1412, 709, 21, 948, 533, - 277, 1204, 661, 149, 1076, 820, 405, 1332, 85, 1012, 597, 341, - 1268, 756, 213, 1140, 884, 469, 1396, 53, 980, 565, 309, 1236, - 693, 181, 1108, 852, 437, 1364, 117, 1044, 629, 373, 1300, 788, - 245, 1172, 916, 501, 1428, 724, 13, 940, 525, 269, 1196, 653, - 141, 1068, 812, 397, 1324, 77, 1004, 589, 333, 1260, 748, 205, - 1132, 876, 461, 1388, 45, 972, 557, 301, 1228, 685, 173, 1100, - 844, 429, 1356, 109, 1036, 621, 365, 1292, 780, 237, 1164, 908, - 493, 1420, 732, 29, 956, 541, 285, 1212, 669, 157, 1084, 828, - 413, 1340, 93, 1020, 605, 349, 1276, 764, 221, 1148, 892, 477, - 1404, 61, 988, 573, 317, 1244, 701, 189, 1116, 860, 445, 1372, - 125, 1052, 637, 381, 1308, 796, 253, 1180, 924, 509, 1436, 720, - 3, 930, 515, 259, 1186, 643, 131, 1058, 802, 387, 1314, 67, - 994, 579, 323, 1250, 738, 195, 1122, 866, 451, 1378, 35, 962, - 547, 291, 1218, 675, 163, 1090, 834, 419, 1346, 99, 1026, 611, - 355, 1282, 770, 227, 1154, 898, 483, 1410, 707, 19, 946, 531, - 275, 1202, 659, 147, 1074, 818, 403, 1330, 83, 1010, 595, 339, - 1266, 754, 211, 1138, 882, 467, 1394, 51, 978, 563, 307, 1234, - 691, 179, 1106, 850, 435, 1362, 115, 1042, 627, 371, 1298, 786, - 243, 1170, 914, 499, 1426, 715, 11, 938, 523, 267, 1194, 651, - 139, 1066, 810, 395, 1322, 75, 1002, 587, 331, 1258, 746, 203, - 1130, 874, 459, 1386, 43, 970, 555, 299, 1226, 683, 171, 1098, - 842, 427, 1354, 107, 1034, 619, 363, 1290, 778, 235, 1162, 906, - 491, 1418, 730, 27, 954, 539, 283, 1210, 667, 155, 1082, 826, - 411, 1338, 91, 1018, 603, 347, 1274, 762, 219, 1146, 890, 475, - 1402, 59, 986, 571, 315, 1242, 699, 187, 1114, 858, 443, 1370, - 123, 1050, 635, 379, 1306, 794, 251, 1178, 922, 507, 1434, 722, - 7, 934, 519, 263, 1190, 647, 135, 1062, 806, 391, 1318, 71, - 998, 583, 327, 1254, 742, 199, 1126, 870, 455, 1382, 39, 966, - 551, 295, 1222, 679, 167, 1094, 838, 423, 1350, 103, 1030, 615, - 359, 1286, 774, 231, 1158, 902, 487, 1414, 711, 23, 950, 535, - 279, 1206, 663, 151, 1078, 822, 407, 1334, 87, 1014, 599, 343, - 1270, 758, 215, 1142, 886, 471, 1398, 55, 982, 567, 311, 1238, - 695, 183, 1110, 854, 439, 1366, 119, 1046, 631, 375, 1302, 790, - 247, 1174, 918, 503, 1430, 726, 15, 942, 527, 271, 1198, 655, - 143, 1070, 814, 399, 1326, 79, 1006, 591, 335, 1262, 750, 207, - 1134, 878, 463, 1390, 47, 974, 559, 303, 1230, 687, 175, 1102, - 846, 431, 1358, 111, 1038, 623, 367, 1294, 782, 239, 1166, 910, - 495, 1422, 734, 31, 958, 543, 287, 1214, 671, 159, 1086, 830, - 415, 1342, 95, 1022, 607, 351, 1278, 766, 223, 1150, 894, 479, - 1406, 63, 990, 575, 319, 1246, 703, 191, 1118, 862, 447, 1374, - 127, 1054, 639, 383, 1310, 798, 255, 1182, 926, 511, 1438]; - - return (unsafe { *PERM1439.get_unchecked((index % 1439) as usize) } as u32 * 2070721 + - unsafe { *PERM1439.get_unchecked(((index / 1439) % 1439) as usize) } as u32 * 1439 + - unsafe { - *PERM1439.get_unchecked(((index / 2070721) % 1439) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (2979767519u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1447(index: u32) -> f32 { - const PERM1447: [u16; 1447] = [0, 935, 512, 256, 1191, 640, 128, 1063, 807, 384, 1319, 64, - 999, 576, 320, 1255, 743, 192, 1127, 871, 448, 1383, 704, 32, - 967, 544, 288, 1223, 672, 160, 1095, 839, 416, 1351, 96, 1031, - 608, 352, 1287, 775, 224, 1159, 903, 480, 1415, 16, 951, 528, - 272, 1207, 656, 144, 1079, 823, 400, 1335, 80, 1015, 592, 336, - 1271, 759, 208, 1143, 887, 464, 1399, 727, 48, 983, 560, 304, - 1239, 688, 176, 1111, 855, 432, 1367, 112, 1047, 624, 368, - 1303, 791, 240, 1175, 919, 496, 1431, 8, 943, 520, 264, 1199, - 648, 136, 1071, 815, 392, 1327, 72, 1007, 584, 328, 1263, 751, - 200, 1135, 879, 456, 1391, 712, 40, 975, 552, 296, 1231, 680, - 168, 1103, 847, 424, 1359, 104, 1039, 616, 360, 1295, 783, 232, - 1167, 911, 488, 1423, 24, 959, 536, 280, 1215, 664, 152, 1087, - 831, 408, 1343, 88, 1023, 600, 344, 1279, 767, 216, 1151, 895, - 472, 1407, 735, 56, 991, 568, 312, 1247, 696, 184, 1119, 863, - 440, 1375, 120, 1055, 632, 376, 1311, 799, 248, 1183, 927, 504, - 1439, 720, 4, 939, 516, 260, 1195, 644, 132, 1067, 811, 388, - 1323, 68, 1003, 580, 324, 1259, 747, 196, 1131, 875, 452, 1387, - 708, 36, 971, 548, 292, 1227, 676, 164, 1099, 843, 420, 1355, - 100, 1035, 612, 356, 1291, 779, 228, 1163, 907, 484, 1419, 20, - 955, 532, 276, 1211, 660, 148, 1083, 827, 404, 1339, 84, 1019, - 596, 340, 1275, 763, 212, 1147, 891, 468, 1403, 731, 52, 987, - 564, 308, 1243, 692, 180, 1115, 859, 436, 1371, 116, 1051, 628, - 372, 1307, 795, 244, 1179, 923, 500, 1435, 12, 947, 524, 268, - 1203, 652, 140, 1075, 819, 396, 1331, 76, 1011, 588, 332, 1267, - 755, 204, 1139, 883, 460, 1395, 716, 44, 979, 556, 300, 1235, - 684, 172, 1107, 851, 428, 1363, 108, 1043, 620, 364, 1299, 787, - 236, 1171, 915, 492, 1427, 28, 963, 540, 284, 1219, 668, 156, - 1091, 835, 412, 1347, 92, 1027, 604, 348, 1283, 771, 220, 1155, - 899, 476, 1411, 739, 60, 995, 572, 316, 1251, 700, 188, 1123, - 867, 444, 1379, 124, 1059, 636, 380, 1315, 803, 252, 1187, 931, - 508, 1443, 722, 2, 937, 514, 258, 1193, 642, 130, 1065, 809, - 386, 1321, 66, 1001, 578, 322, 1257, 745, 194, 1129, 873, 450, - 1385, 706, 34, 969, 546, 290, 1225, 674, 162, 1097, 841, 418, - 1353, 98, 1033, 610, 354, 1289, 777, 226, 1161, 905, 482, 1417, - 18, 953, 530, 274, 1209, 658, 146, 1081, 825, 402, 1337, 82, - 1017, 594, 338, 1273, 761, 210, 1145, 889, 466, 1401, 729, 50, - 985, 562, 306, 1241, 690, 178, 1113, 857, 434, 1369, 114, 1049, - 626, 370, 1305, 793, 242, 1177, 921, 498, 1433, 10, 945, 522, - 266, 1201, 650, 138, 1073, 817, 394, 1329, 74, 1009, 586, 330, - 1265, 753, 202, 1137, 881, 458, 1393, 714, 42, 977, 554, 298, - 1233, 682, 170, 1105, 849, 426, 1361, 106, 1041, 618, 362, - 1297, 785, 234, 1169, 913, 490, 1425, 26, 961, 538, 282, 1217, - 666, 154, 1089, 833, 410, 1345, 90, 1025, 602, 346, 1281, 769, - 218, 1153, 897, 474, 1409, 737, 58, 993, 570, 314, 1249, 698, - 186, 1121, 865, 442, 1377, 122, 1057, 634, 378, 1313, 801, 250, - 1185, 929, 506, 1441, 725, 6, 941, 518, 262, 1197, 646, 134, - 1069, 813, 390, 1325, 70, 1005, 582, 326, 1261, 749, 198, 1133, - 877, 454, 1389, 710, 38, 973, 550, 294, 1229, 678, 166, 1101, - 845, 422, 1357, 102, 1037, 614, 358, 1293, 781, 230, 1165, 909, - 486, 1421, 22, 957, 534, 278, 1213, 662, 150, 1085, 829, 406, - 1341, 86, 1021, 598, 342, 1277, 765, 214, 1149, 893, 470, 1405, - 733, 54, 989, 566, 310, 1245, 694, 182, 1117, 861, 438, 1373, - 118, 1053, 630, 374, 1309, 797, 246, 1181, 925, 502, 1437, 14, - 949, 526, 270, 1205, 654, 142, 1077, 821, 398, 1333, 78, 1013, - 590, 334, 1269, 757, 206, 1141, 885, 462, 1397, 718, 46, 981, - 558, 302, 1237, 686, 174, 1109, 853, 430, 1365, 110, 1045, 622, - 366, 1301, 789, 238, 1173, 917, 494, 1429, 30, 965, 542, 286, - 1221, 670, 158, 1093, 837, 414, 1349, 94, 1029, 606, 350, 1285, - 773, 222, 1157, 901, 478, 1413, 741, 62, 997, 574, 318, 1253, - 702, 190, 1125, 869, 446, 1381, 126, 1061, 638, 382, 1317, 805, - 254, 1189, 933, 510, 1445, 723, 1, 936, 513, 257, 1192, 641, - 129, 1064, 808, 385, 1320, 65, 1000, 577, 321, 1256, 744, 193, - 1128, 872, 449, 1384, 705, 33, 968, 545, 289, 1224, 673, 161, - 1096, 840, 417, 1352, 97, 1032, 609, 353, 1288, 776, 225, 1160, - 904, 481, 1416, 17, 952, 529, 273, 1208, 657, 145, 1080, 824, - 401, 1336, 81, 1016, 593, 337, 1272, 760, 209, 1144, 888, 465, - 1400, 728, 49, 984, 561, 305, 1240, 689, 177, 1112, 856, 433, - 1368, 113, 1048, 625, 369, 1304, 792, 241, 1176, 920, 497, - 1432, 9, 944, 521, 265, 1200, 649, 137, 1072, 816, 393, 1328, - 73, 1008, 585, 329, 1264, 752, 201, 1136, 880, 457, 1392, 713, - 41, 976, 553, 297, 1232, 681, 169, 1104, 848, 425, 1360, 105, - 1040, 617, 361, 1296, 784, 233, 1168, 912, 489, 1424, 25, 960, - 537, 281, 1216, 665, 153, 1088, 832, 409, 1344, 89, 1024, 601, - 345, 1280, 768, 217, 1152, 896, 473, 1408, 736, 57, 992, 569, - 313, 1248, 697, 185, 1120, 864, 441, 1376, 121, 1056, 633, 377, - 1312, 800, 249, 1184, 928, 505, 1440, 721, 5, 940, 517, 261, - 1196, 645, 133, 1068, 812, 389, 1324, 69, 1004, 581, 325, 1260, - 748, 197, 1132, 876, 453, 1388, 709, 37, 972, 549, 293, 1228, - 677, 165, 1100, 844, 421, 1356, 101, 1036, 613, 357, 1292, 780, - 229, 1164, 908, 485, 1420, 21, 956, 533, 277, 1212, 661, 149, - 1084, 828, 405, 1340, 85, 1020, 597, 341, 1276, 764, 213, 1148, - 892, 469, 1404, 732, 53, 988, 565, 309, 1244, 693, 181, 1116, - 860, 437, 1372, 117, 1052, 629, 373, 1308, 796, 245, 1180, 924, - 501, 1436, 13, 948, 525, 269, 1204, 653, 141, 1076, 820, 397, - 1332, 77, 1012, 589, 333, 1268, 756, 205, 1140, 884, 461, 1396, - 717, 45, 980, 557, 301, 1236, 685, 173, 1108, 852, 429, 1364, - 109, 1044, 621, 365, 1300, 788, 237, 1172, 916, 493, 1428, 29, - 964, 541, 285, 1220, 669, 157, 1092, 836, 413, 1348, 93, 1028, - 605, 349, 1284, 772, 221, 1156, 900, 477, 1412, 740, 61, 996, - 573, 317, 1252, 701, 189, 1124, 868, 445, 1380, 125, 1060, 637, - 381, 1316, 804, 253, 1188, 932, 509, 1444, 724, 3, 938, 515, - 259, 1194, 643, 131, 1066, 810, 387, 1322, 67, 1002, 579, 323, - 1258, 746, 195, 1130, 874, 451, 1386, 707, 35, 970, 547, 291, - 1226, 675, 163, 1098, 842, 419, 1354, 99, 1034, 611, 355, 1290, - 778, 227, 1162, 906, 483, 1418, 19, 954, 531, 275, 1210, 659, - 147, 1082, 826, 403, 1338, 83, 1018, 595, 339, 1274, 762, 211, - 1146, 890, 467, 1402, 730, 51, 986, 563, 307, 1242, 691, 179, - 1114, 858, 435, 1370, 115, 1050, 627, 371, 1306, 794, 243, - 1178, 922, 499, 1434, 11, 946, 523, 267, 1202, 651, 139, 1074, - 818, 395, 1330, 75, 1010, 587, 331, 1266, 754, 203, 1138, 882, - 459, 1394, 715, 43, 978, 555, 299, 1234, 683, 171, 1106, 850, - 427, 1362, 107, 1042, 619, 363, 1298, 786, 235, 1170, 914, 491, - 1426, 27, 962, 539, 283, 1218, 667, 155, 1090, 834, 411, 1346, - 91, 1026, 603, 347, 1282, 770, 219, 1154, 898, 475, 1410, 738, - 59, 994, 571, 315, 1250, 699, 187, 1122, 866, 443, 1378, 123, - 1058, 635, 379, 1314, 802, 251, 1186, 930, 507, 1442, 726, 7, - 942, 519, 263, 1198, 647, 135, 1070, 814, 391, 1326, 71, 1006, - 583, 327, 1262, 750, 199, 1134, 878, 455, 1390, 711, 39, 974, - 551, 295, 1230, 679, 167, 1102, 846, 423, 1358, 103, 1038, 615, - 359, 1294, 782, 231, 1166, 910, 487, 1422, 23, 958, 535, 279, - 1214, 663, 151, 1086, 830, 407, 1342, 87, 1022, 599, 343, 1278, - 766, 215, 1150, 894, 471, 1406, 734, 55, 990, 567, 311, 1246, - 695, 183, 1118, 862, 439, 1374, 119, 1054, 631, 375, 1310, 798, - 247, 1182, 926, 503, 1438, 15, 950, 527, 271, 1206, 655, 143, - 1078, 822, 399, 1334, 79, 1014, 591, 335, 1270, 758, 207, 1142, - 886, 463, 1398, 719, 47, 982, 559, 303, 1238, 687, 175, 1110, - 854, 431, 1366, 111, 1046, 623, 367, 1302, 790, 239, 1174, 918, - 495, 1430, 31, 966, 543, 287, 1222, 671, 159, 1094, 838, 415, - 1350, 95, 1030, 607, 351, 1286, 774, 223, 1158, 902, 479, 1414, - 742, 63, 998, 575, 319, 1254, 703, 191, 1126, 870, 447, 1382, - 127, 1062, 639, 383, 1318, 806, 255, 1190, 934, 511, 1446]; - - return (unsafe { *PERM1447.get_unchecked((index % 1447) as usize) } as u32 * 2093809 + - unsafe { *PERM1447.get_unchecked(((index / 1447) % 1447) as usize) } as u32 * 1447 + - unsafe { - *PERM1447.get_unchecked(((index / 2093809) % 1447) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3029741623u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1451(index: u32) -> f32 { - const PERM1451: [u16; 1451] = [0, 939, 512, 256, 1195, 640, 128, 1067, 811, 384, 1323, 64, - 1003, 576, 320, 1259, 747, 192, 1131, 875, 448, 1387, 704, 32, - 971, 544, 288, 1227, 672, 160, 1099, 843, 416, 1355, 96, 1035, - 608, 352, 1291, 779, 224, 1163, 907, 480, 1419, 16, 955, 528, - 272, 1211, 656, 144, 1083, 827, 400, 1339, 80, 1019, 592, 336, - 1275, 763, 208, 1147, 891, 464, 1403, 731, 48, 987, 560, 304, - 1243, 688, 176, 1115, 859, 432, 1371, 112, 1051, 624, 368, - 1307, 795, 240, 1179, 923, 496, 1435, 720, 8, 947, 520, 264, - 1203, 648, 136, 1075, 819, 392, 1331, 72, 1011, 584, 328, 1267, - 755, 200, 1139, 883, 456, 1395, 712, 40, 979, 552, 296, 1235, - 680, 168, 1107, 851, 424, 1363, 104, 1043, 616, 360, 1299, 787, - 232, 1171, 915, 488, 1427, 24, 963, 536, 280, 1219, 664, 152, - 1091, 835, 408, 1347, 88, 1027, 600, 344, 1283, 771, 216, 1155, - 899, 472, 1411, 739, 56, 995, 568, 312, 1251, 696, 184, 1123, - 867, 440, 1379, 120, 1059, 632, 376, 1315, 803, 248, 1187, 931, - 504, 1443, 4, 943, 516, 260, 1199, 644, 132, 1071, 815, 388, - 1327, 68, 1007, 580, 324, 1263, 751, 196, 1135, 879, 452, 1391, - 708, 36, 975, 548, 292, 1231, 676, 164, 1103, 847, 420, 1359, - 100, 1039, 612, 356, 1295, 783, 228, 1167, 911, 484, 1423, 20, - 959, 532, 276, 1215, 660, 148, 1087, 831, 404, 1343, 84, 1023, - 596, 340, 1279, 767, 212, 1151, 895, 468, 1407, 735, 52, 991, - 564, 308, 1247, 692, 180, 1119, 863, 436, 1375, 116, 1055, 628, - 372, 1311, 799, 244, 1183, 927, 500, 1439, 727, 12, 951, 524, - 268, 1207, 652, 140, 1079, 823, 396, 1335, 76, 1015, 588, 332, - 1271, 759, 204, 1143, 887, 460, 1399, 716, 44, 983, 556, 300, - 1239, 684, 172, 1111, 855, 428, 1367, 108, 1047, 620, 364, - 1303, 791, 236, 1175, 919, 492, 1431, 28, 967, 540, 284, 1223, - 668, 156, 1095, 839, 412, 1351, 92, 1031, 604, 348, 1287, 775, - 220, 1159, 903, 476, 1415, 743, 60, 999, 572, 316, 1255, 700, - 188, 1127, 871, 444, 1383, 124, 1063, 636, 380, 1319, 807, 252, - 1191, 935, 508, 1447, 724, 2, 941, 514, 258, 1197, 642, 130, - 1069, 813, 386, 1325, 66, 1005, 578, 322, 1261, 749, 194, 1133, - 877, 450, 1389, 706, 34, 973, 546, 290, 1229, 674, 162, 1101, - 845, 418, 1357, 98, 1037, 610, 354, 1293, 781, 226, 1165, 909, - 482, 1421, 18, 957, 530, 274, 1213, 658, 146, 1085, 829, 402, - 1341, 82, 1021, 594, 338, 1277, 765, 210, 1149, 893, 466, 1405, - 733, 50, 989, 562, 306, 1245, 690, 178, 1117, 861, 434, 1373, - 114, 1053, 626, 370, 1309, 797, 242, 1181, 925, 498, 1437, 722, - 10, 949, 522, 266, 1205, 650, 138, 1077, 821, 394, 1333, 74, - 1013, 586, 330, 1269, 757, 202, 1141, 885, 458, 1397, 714, 42, - 981, 554, 298, 1237, 682, 170, 1109, 853, 426, 1365, 106, 1045, - 618, 362, 1301, 789, 234, 1173, 917, 490, 1429, 26, 965, 538, - 282, 1221, 666, 154, 1093, 837, 410, 1349, 90, 1029, 602, 346, - 1285, 773, 218, 1157, 901, 474, 1413, 741, 58, 997, 570, 314, - 1253, 698, 186, 1125, 869, 442, 1381, 122, 1061, 634, 378, - 1317, 805, 250, 1189, 933, 506, 1445, 6, 945, 518, 262, 1201, - 646, 134, 1073, 817, 390, 1329, 70, 1009, 582, 326, 1265, 753, - 198, 1137, 881, 454, 1393, 710, 38, 977, 550, 294, 1233, 678, - 166, 1105, 849, 422, 1361, 102, 1041, 614, 358, 1297, 785, 230, - 1169, 913, 486, 1425, 22, 961, 534, 278, 1217, 662, 150, 1089, - 833, 406, 1345, 86, 1025, 598, 342, 1281, 769, 214, 1153, 897, - 470, 1409, 737, 54, 993, 566, 310, 1249, 694, 182, 1121, 865, - 438, 1377, 118, 1057, 630, 374, 1313, 801, 246, 1185, 929, 502, - 1441, 729, 14, 953, 526, 270, 1209, 654, 142, 1081, 825, 398, - 1337, 78, 1017, 590, 334, 1273, 761, 206, 1145, 889, 462, 1401, - 718, 46, 985, 558, 302, 1241, 686, 174, 1113, 857, 430, 1369, - 110, 1049, 622, 366, 1305, 793, 238, 1177, 921, 494, 1433, 30, - 969, 542, 286, 1225, 670, 158, 1097, 841, 414, 1353, 94, 1033, - 606, 350, 1289, 777, 222, 1161, 905, 478, 1417, 745, 62, 1001, - 574, 318, 1257, 702, 190, 1129, 873, 446, 1385, 126, 1065, 638, - 382, 1321, 809, 254, 1193, 937, 510, 1449, 725, 1, 940, 513, - 257, 1196, 641, 129, 1068, 812, 385, 1324, 65, 1004, 577, 321, - 1260, 748, 193, 1132, 876, 449, 1388, 705, 33, 972, 545, 289, - 1228, 673, 161, 1100, 844, 417, 1356, 97, 1036, 609, 353, 1292, - 780, 225, 1164, 908, 481, 1420, 17, 956, 529, 273, 1212, 657, - 145, 1084, 828, 401, 1340, 81, 1020, 593, 337, 1276, 764, 209, - 1148, 892, 465, 1404, 732, 49, 988, 561, 305, 1244, 689, 177, - 1116, 860, 433, 1372, 113, 1052, 625, 369, 1308, 796, 241, - 1180, 924, 497, 1436, 721, 9, 948, 521, 265, 1204, 649, 137, - 1076, 820, 393, 1332, 73, 1012, 585, 329, 1268, 756, 201, 1140, - 884, 457, 1396, 713, 41, 980, 553, 297, 1236, 681, 169, 1108, - 852, 425, 1364, 105, 1044, 617, 361, 1300, 788, 233, 1172, 916, - 489, 1428, 25, 964, 537, 281, 1220, 665, 153, 1092, 836, 409, - 1348, 89, 1028, 601, 345, 1284, 772, 217, 1156, 900, 473, 1412, - 740, 57, 996, 569, 313, 1252, 697, 185, 1124, 868, 441, 1380, - 121, 1060, 633, 377, 1316, 804, 249, 1188, 932, 505, 1444, 5, - 944, 517, 261, 1200, 645, 133, 1072, 816, 389, 1328, 69, 1008, - 581, 325, 1264, 752, 197, 1136, 880, 453, 1392, 709, 37, 976, - 549, 293, 1232, 677, 165, 1104, 848, 421, 1360, 101, 1040, 613, - 357, 1296, 784, 229, 1168, 912, 485, 1424, 21, 960, 533, 277, - 1216, 661, 149, 1088, 832, 405, 1344, 85, 1024, 597, 341, 1280, - 768, 213, 1152, 896, 469, 1408, 736, 53, 992, 565, 309, 1248, - 693, 181, 1120, 864, 437, 1376, 117, 1056, 629, 373, 1312, 800, - 245, 1184, 928, 501, 1440, 728, 13, 952, 525, 269, 1208, 653, - 141, 1080, 824, 397, 1336, 77, 1016, 589, 333, 1272, 760, 205, - 1144, 888, 461, 1400, 717, 45, 984, 557, 301, 1240, 685, 173, - 1112, 856, 429, 1368, 109, 1048, 621, 365, 1304, 792, 237, - 1176, 920, 493, 1432, 29, 968, 541, 285, 1224, 669, 157, 1096, - 840, 413, 1352, 93, 1032, 605, 349, 1288, 776, 221, 1160, 904, - 477, 1416, 744, 61, 1000, 573, 317, 1256, 701, 189, 1128, 872, - 445, 1384, 125, 1064, 637, 381, 1320, 808, 253, 1192, 936, 509, - 1448, 726, 3, 942, 515, 259, 1198, 643, 131, 1070, 814, 387, - 1326, 67, 1006, 579, 323, 1262, 750, 195, 1134, 878, 451, 1390, - 707, 35, 974, 547, 291, 1230, 675, 163, 1102, 846, 419, 1358, - 99, 1038, 611, 355, 1294, 782, 227, 1166, 910, 483, 1422, 19, - 958, 531, 275, 1214, 659, 147, 1086, 830, 403, 1342, 83, 1022, - 595, 339, 1278, 766, 211, 1150, 894, 467, 1406, 734, 51, 990, - 563, 307, 1246, 691, 179, 1118, 862, 435, 1374, 115, 1054, 627, - 371, 1310, 798, 243, 1182, 926, 499, 1438, 723, 11, 950, 523, - 267, 1206, 651, 139, 1078, 822, 395, 1334, 75, 1014, 587, 331, - 1270, 758, 203, 1142, 886, 459, 1398, 715, 43, 982, 555, 299, - 1238, 683, 171, 1110, 854, 427, 1366, 107, 1046, 619, 363, - 1302, 790, 235, 1174, 918, 491, 1430, 27, 966, 539, 283, 1222, - 667, 155, 1094, 838, 411, 1350, 91, 1030, 603, 347, 1286, 774, - 219, 1158, 902, 475, 1414, 742, 59, 998, 571, 315, 1254, 699, - 187, 1126, 870, 443, 1382, 123, 1062, 635, 379, 1318, 806, 251, - 1190, 934, 507, 1446, 7, 946, 519, 263, 1202, 647, 135, 1074, - 818, 391, 1330, 71, 1010, 583, 327, 1266, 754, 199, 1138, 882, - 455, 1394, 711, 39, 978, 551, 295, 1234, 679, 167, 1106, 850, - 423, 1362, 103, 1042, 615, 359, 1298, 786, 231, 1170, 914, 487, - 1426, 23, 962, 535, 279, 1218, 663, 151, 1090, 834, 407, 1346, - 87, 1026, 599, 343, 1282, 770, 215, 1154, 898, 471, 1410, 738, - 55, 994, 567, 311, 1250, 695, 183, 1122, 866, 439, 1378, 119, - 1058, 631, 375, 1314, 802, 247, 1186, 930, 503, 1442, 730, 15, - 954, 527, 271, 1210, 655, 143, 1082, 826, 399, 1338, 79, 1018, - 591, 335, 1274, 762, 207, 1146, 890, 463, 1402, 719, 47, 986, - 559, 303, 1242, 687, 175, 1114, 858, 431, 1370, 111, 1050, 623, - 367, 1306, 794, 239, 1178, 922, 495, 1434, 31, 970, 543, 287, - 1226, 671, 159, 1098, 842, 415, 1354, 95, 1034, 607, 351, 1290, - 778, 223, 1162, 906, 479, 1418, 746, 63, 1002, 575, 319, 1258, - 703, 191, 1130, 874, 447, 1386, 127, 1066, 639, 383, 1322, 810, - 255, 1194, 938, 511, 1450]; - - return (unsafe { *PERM1451.get_unchecked((index % 1451) as usize) } as u32 * 2105401 + - unsafe { *PERM1451.get_unchecked(((index / 1451) % 1451) as usize) } as u32 * 1451 + - unsafe { - *PERM1451.get_unchecked(((index / 2105401) % 1451) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3054936851u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1453(index: u32) -> f32 { - const PERM1453: [u16; 1453] = [0, 941, 512, 256, 1197, 640, 128, 1069, 813, 384, 1325, 64, - 1005, 576, 320, 1261, 749, 192, 1133, 877, 448, 1389, 704, 32, - 973, 544, 288, 1229, 672, 160, 1101, 845, 416, 1357, 96, 1037, - 608, 352, 1293, 781, 224, 1165, 909, 480, 1421, 16, 957, 528, - 272, 1213, 656, 144, 1085, 829, 400, 1341, 80, 1021, 592, 336, - 1277, 765, 208, 1149, 893, 464, 1405, 733, 48, 989, 560, 304, - 1245, 688, 176, 1117, 861, 432, 1373, 112, 1053, 624, 368, - 1309, 797, 240, 1181, 925, 496, 1437, 720, 8, 949, 520, 264, - 1205, 648, 136, 1077, 821, 392, 1333, 72, 1013, 584, 328, 1269, - 757, 200, 1141, 885, 456, 1397, 712, 40, 981, 552, 296, 1237, - 680, 168, 1109, 853, 424, 1365, 104, 1045, 616, 360, 1301, 789, - 232, 1173, 917, 488, 1429, 24, 965, 536, 280, 1221, 664, 152, - 1093, 837, 408, 1349, 88, 1029, 600, 344, 1285, 773, 216, 1157, - 901, 472, 1413, 741, 56, 997, 568, 312, 1253, 696, 184, 1125, - 869, 440, 1381, 120, 1061, 632, 376, 1317, 805, 248, 1189, 933, - 504, 1445, 724, 4, 945, 516, 260, 1201, 644, 132, 1073, 817, - 388, 1329, 68, 1009, 580, 324, 1265, 753, 196, 1137, 881, 452, - 1393, 708, 36, 977, 548, 292, 1233, 676, 164, 1105, 849, 420, - 1361, 100, 1041, 612, 356, 1297, 785, 228, 1169, 913, 484, - 1425, 20, 961, 532, 276, 1217, 660, 148, 1089, 833, 404, 1345, - 84, 1025, 596, 340, 1281, 769, 212, 1153, 897, 468, 1409, 737, - 52, 993, 564, 308, 1249, 692, 180, 1121, 865, 436, 1377, 116, - 1057, 628, 372, 1313, 801, 244, 1185, 929, 500, 1441, 729, 12, - 953, 524, 268, 1209, 652, 140, 1081, 825, 396, 1337, 76, 1017, - 588, 332, 1273, 761, 204, 1145, 889, 460, 1401, 716, 44, 985, - 556, 300, 1241, 684, 172, 1113, 857, 428, 1369, 108, 1049, 620, - 364, 1305, 793, 236, 1177, 921, 492, 1433, 28, 969, 540, 284, - 1225, 668, 156, 1097, 841, 412, 1353, 92, 1033, 604, 348, 1289, - 777, 220, 1161, 905, 476, 1417, 745, 60, 1001, 572, 316, 1257, - 700, 188, 1129, 873, 444, 1385, 124, 1065, 636, 380, 1321, 809, - 252, 1193, 937, 508, 1449, 2, 943, 514, 258, 1199, 642, 130, - 1071, 815, 386, 1327, 66, 1007, 578, 322, 1263, 751, 194, 1135, - 879, 450, 1391, 706, 34, 975, 546, 290, 1231, 674, 162, 1103, - 847, 418, 1359, 98, 1039, 610, 354, 1295, 783, 226, 1167, 911, - 482, 1423, 18, 959, 530, 274, 1215, 658, 146, 1087, 831, 402, - 1343, 82, 1023, 594, 338, 1279, 767, 210, 1151, 895, 466, 1407, - 735, 50, 991, 562, 306, 1247, 690, 178, 1119, 863, 434, 1375, - 114, 1055, 626, 370, 1311, 799, 242, 1183, 927, 498, 1439, 722, - 10, 951, 522, 266, 1207, 650, 138, 1079, 823, 394, 1335, 74, - 1015, 586, 330, 1271, 759, 202, 1143, 887, 458, 1399, 714, 42, - 983, 554, 298, 1239, 682, 170, 1111, 855, 426, 1367, 106, 1047, - 618, 362, 1303, 791, 234, 1175, 919, 490, 1431, 26, 967, 538, - 282, 1223, 666, 154, 1095, 839, 410, 1351, 90, 1031, 602, 346, - 1287, 775, 218, 1159, 903, 474, 1415, 743, 58, 999, 570, 314, - 1255, 698, 186, 1127, 871, 442, 1383, 122, 1063, 634, 378, - 1319, 807, 250, 1191, 935, 506, 1447, 727, 6, 947, 518, 262, - 1203, 646, 134, 1075, 819, 390, 1331, 70, 1011, 582, 326, 1267, - 755, 198, 1139, 883, 454, 1395, 710, 38, 979, 550, 294, 1235, - 678, 166, 1107, 851, 422, 1363, 102, 1043, 614, 358, 1299, 787, - 230, 1171, 915, 486, 1427, 22, 963, 534, 278, 1219, 662, 150, - 1091, 835, 406, 1347, 86, 1027, 598, 342, 1283, 771, 214, 1155, - 899, 470, 1411, 739, 54, 995, 566, 310, 1251, 694, 182, 1123, - 867, 438, 1379, 118, 1059, 630, 374, 1315, 803, 246, 1187, 931, - 502, 1443, 731, 14, 955, 526, 270, 1211, 654, 142, 1083, 827, - 398, 1339, 78, 1019, 590, 334, 1275, 763, 206, 1147, 891, 462, - 1403, 718, 46, 987, 558, 302, 1243, 686, 174, 1115, 859, 430, - 1371, 110, 1051, 622, 366, 1307, 795, 238, 1179, 923, 494, - 1435, 30, 971, 542, 286, 1227, 670, 158, 1099, 843, 414, 1355, - 94, 1035, 606, 350, 1291, 779, 222, 1163, 907, 478, 1419, 747, - 62, 1003, 574, 318, 1259, 702, 190, 1131, 875, 446, 1387, 126, - 1067, 638, 382, 1323, 811, 254, 1195, 939, 510, 1451, 726, 1, - 942, 513, 257, 1198, 641, 129, 1070, 814, 385, 1326, 65, 1006, - 577, 321, 1262, 750, 193, 1134, 878, 449, 1390, 705, 33, 974, - 545, 289, 1230, 673, 161, 1102, 846, 417, 1358, 97, 1038, 609, - 353, 1294, 782, 225, 1166, 910, 481, 1422, 17, 958, 529, 273, - 1214, 657, 145, 1086, 830, 401, 1342, 81, 1022, 593, 337, 1278, - 766, 209, 1150, 894, 465, 1406, 734, 49, 990, 561, 305, 1246, - 689, 177, 1118, 862, 433, 1374, 113, 1054, 625, 369, 1310, 798, - 241, 1182, 926, 497, 1438, 721, 9, 950, 521, 265, 1206, 649, - 137, 1078, 822, 393, 1334, 73, 1014, 585, 329, 1270, 758, 201, - 1142, 886, 457, 1398, 713, 41, 982, 553, 297, 1238, 681, 169, - 1110, 854, 425, 1366, 105, 1046, 617, 361, 1302, 790, 233, - 1174, 918, 489, 1430, 25, 966, 537, 281, 1222, 665, 153, 1094, - 838, 409, 1350, 89, 1030, 601, 345, 1286, 774, 217, 1158, 902, - 473, 1414, 742, 57, 998, 569, 313, 1254, 697, 185, 1126, 870, - 441, 1382, 121, 1062, 633, 377, 1318, 806, 249, 1190, 934, 505, - 1446, 725, 5, 946, 517, 261, 1202, 645, 133, 1074, 818, 389, - 1330, 69, 1010, 581, 325, 1266, 754, 197, 1138, 882, 453, 1394, - 709, 37, 978, 549, 293, 1234, 677, 165, 1106, 850, 421, 1362, - 101, 1042, 613, 357, 1298, 786, 229, 1170, 914, 485, 1426, 21, - 962, 533, 277, 1218, 661, 149, 1090, 834, 405, 1346, 85, 1026, - 597, 341, 1282, 770, 213, 1154, 898, 469, 1410, 738, 53, 994, - 565, 309, 1250, 693, 181, 1122, 866, 437, 1378, 117, 1058, 629, - 373, 1314, 802, 245, 1186, 930, 501, 1442, 730, 13, 954, 525, - 269, 1210, 653, 141, 1082, 826, 397, 1338, 77, 1018, 589, 333, - 1274, 762, 205, 1146, 890, 461, 1402, 717, 45, 986, 557, 301, - 1242, 685, 173, 1114, 858, 429, 1370, 109, 1050, 621, 365, - 1306, 794, 237, 1178, 922, 493, 1434, 29, 970, 541, 285, 1226, - 669, 157, 1098, 842, 413, 1354, 93, 1034, 605, 349, 1290, 778, - 221, 1162, 906, 477, 1418, 746, 61, 1002, 573, 317, 1258, 701, - 189, 1130, 874, 445, 1386, 125, 1066, 637, 381, 1322, 810, 253, - 1194, 938, 509, 1450, 3, 944, 515, 259, 1200, 643, 131, 1072, - 816, 387, 1328, 67, 1008, 579, 323, 1264, 752, 195, 1136, 880, - 451, 1392, 707, 35, 976, 547, 291, 1232, 675, 163, 1104, 848, - 419, 1360, 99, 1040, 611, 355, 1296, 784, 227, 1168, 912, 483, - 1424, 19, 960, 531, 275, 1216, 659, 147, 1088, 832, 403, 1344, - 83, 1024, 595, 339, 1280, 768, 211, 1152, 896, 467, 1408, 736, - 51, 992, 563, 307, 1248, 691, 179, 1120, 864, 435, 1376, 115, - 1056, 627, 371, 1312, 800, 243, 1184, 928, 499, 1440, 723, 11, - 952, 523, 267, 1208, 651, 139, 1080, 824, 395, 1336, 75, 1016, - 587, 331, 1272, 760, 203, 1144, 888, 459, 1400, 715, 43, 984, - 555, 299, 1240, 683, 171, 1112, 856, 427, 1368, 107, 1048, 619, - 363, 1304, 792, 235, 1176, 920, 491, 1432, 27, 968, 539, 283, - 1224, 667, 155, 1096, 840, 411, 1352, 91, 1032, 603, 347, 1288, - 776, 219, 1160, 904, 475, 1416, 744, 59, 1000, 571, 315, 1256, - 699, 187, 1128, 872, 443, 1384, 123, 1064, 635, 379, 1320, 808, - 251, 1192, 936, 507, 1448, 728, 7, 948, 519, 263, 1204, 647, - 135, 1076, 820, 391, 1332, 71, 1012, 583, 327, 1268, 756, 199, - 1140, 884, 455, 1396, 711, 39, 980, 551, 295, 1236, 679, 167, - 1108, 852, 423, 1364, 103, 1044, 615, 359, 1300, 788, 231, - 1172, 916, 487, 1428, 23, 964, 535, 279, 1220, 663, 151, 1092, - 836, 407, 1348, 87, 1028, 599, 343, 1284, 772, 215, 1156, 900, - 471, 1412, 740, 55, 996, 567, 311, 1252, 695, 183, 1124, 868, - 439, 1380, 119, 1060, 631, 375, 1316, 804, 247, 1188, 932, 503, - 1444, 732, 15, 956, 527, 271, 1212, 655, 143, 1084, 828, 399, - 1340, 79, 1020, 591, 335, 1276, 764, 207, 1148, 892, 463, 1404, - 719, 47, 988, 559, 303, 1244, 687, 175, 1116, 860, 431, 1372, - 111, 1052, 623, 367, 1308, 796, 239, 1180, 924, 495, 1436, 31, - 972, 543, 287, 1228, 671, 159, 1100, 844, 415, 1356, 95, 1036, - 607, 351, 1292, 780, 223, 1164, 908, 479, 1420, 748, 63, 1004, - 575, 319, 1260, 703, 191, 1132, 876, 447, 1388, 127, 1068, 639, - 383, 1324, 812, 255, 1196, 940, 511, 1452]; - - return (unsafe { *PERM1453.get_unchecked((index % 1453) as usize) } as u32 * 2111209 + - unsafe { *PERM1453.get_unchecked(((index / 1453) % 1453) as usize) } as u32 * 1453 + - unsafe { - *PERM1453.get_unchecked(((index / 2111209) % 1453) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3067586677u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1459(index: u32) -> f32 { - const PERM1459: [u16; 1459] = [0, 947, 512, 256, 1203, 640, 128, 1075, 819, 384, 1331, 64, - 1011, 576, 320, 1267, 755, 192, 1139, 883, 448, 1395, 704, 32, - 979, 544, 288, 1235, 672, 160, 1107, 851, 416, 1363, 96, 1043, - 608, 352, 1299, 787, 224, 1171, 915, 480, 1427, 720, 16, 963, - 528, 272, 1219, 656, 144, 1091, 835, 400, 1347, 80, 1027, 592, - 336, 1283, 771, 208, 1155, 899, 464, 1411, 739, 48, 995, 560, - 304, 1251, 688, 176, 1123, 867, 432, 1379, 112, 1059, 624, 368, - 1315, 803, 240, 1187, 931, 496, 1443, 8, 955, 520, 264, 1211, - 648, 136, 1083, 827, 392, 1339, 72, 1019, 584, 328, 1275, 763, - 200, 1147, 891, 456, 1403, 712, 40, 987, 552, 296, 1243, 680, - 168, 1115, 859, 424, 1371, 104, 1051, 616, 360, 1307, 795, 232, - 1179, 923, 488, 1435, 731, 24, 971, 536, 280, 1227, 664, 152, - 1099, 843, 408, 1355, 88, 1035, 600, 344, 1291, 779, 216, 1163, - 907, 472, 1419, 747, 56, 1003, 568, 312, 1259, 696, 184, 1131, - 875, 440, 1387, 120, 1067, 632, 376, 1323, 811, 248, 1195, 939, - 504, 1451, 4, 951, 516, 260, 1207, 644, 132, 1079, 823, 388, - 1335, 68, 1015, 580, 324, 1271, 759, 196, 1143, 887, 452, 1399, - 708, 36, 983, 548, 292, 1239, 676, 164, 1111, 855, 420, 1367, - 100, 1047, 612, 356, 1303, 791, 228, 1175, 919, 484, 1431, 724, - 20, 967, 532, 276, 1223, 660, 148, 1095, 839, 404, 1351, 84, - 1031, 596, 340, 1287, 775, 212, 1159, 903, 468, 1415, 743, 52, - 999, 564, 308, 1255, 692, 180, 1127, 871, 436, 1383, 116, 1063, - 628, 372, 1319, 807, 244, 1191, 935, 500, 1447, 12, 959, 524, - 268, 1215, 652, 140, 1087, 831, 396, 1343, 76, 1023, 588, 332, - 1279, 767, 204, 1151, 895, 460, 1407, 716, 44, 991, 556, 300, - 1247, 684, 172, 1119, 863, 428, 1375, 108, 1055, 620, 364, - 1311, 799, 236, 1183, 927, 492, 1439, 735, 28, 975, 540, 284, - 1231, 668, 156, 1103, 847, 412, 1359, 92, 1039, 604, 348, 1295, - 783, 220, 1167, 911, 476, 1423, 751, 60, 1007, 572, 316, 1263, - 700, 188, 1135, 879, 444, 1391, 124, 1071, 636, 380, 1327, 815, - 252, 1199, 943, 508, 1455, 728, 2, 949, 514, 258, 1205, 642, - 130, 1077, 821, 386, 1333, 66, 1013, 578, 322, 1269, 757, 194, - 1141, 885, 450, 1397, 706, 34, 981, 546, 290, 1237, 674, 162, - 1109, 853, 418, 1365, 98, 1045, 610, 354, 1301, 789, 226, 1173, - 917, 482, 1429, 722, 18, 965, 530, 274, 1221, 658, 146, 1093, - 837, 402, 1349, 82, 1029, 594, 338, 1285, 773, 210, 1157, 901, - 466, 1413, 741, 50, 997, 562, 306, 1253, 690, 178, 1125, 869, - 434, 1381, 114, 1061, 626, 370, 1317, 805, 242, 1189, 933, 498, - 1445, 10, 957, 522, 266, 1213, 650, 138, 1085, 829, 394, 1341, - 74, 1021, 586, 330, 1277, 765, 202, 1149, 893, 458, 1405, 714, - 42, 989, 554, 298, 1245, 682, 170, 1117, 861, 426, 1373, 106, - 1053, 618, 362, 1309, 797, 234, 1181, 925, 490, 1437, 733, 26, - 973, 538, 282, 1229, 666, 154, 1101, 845, 410, 1357, 90, 1037, - 602, 346, 1293, 781, 218, 1165, 909, 474, 1421, 749, 58, 1005, - 570, 314, 1261, 698, 186, 1133, 877, 442, 1389, 122, 1069, 634, - 378, 1325, 813, 250, 1197, 941, 506, 1453, 6, 953, 518, 262, - 1209, 646, 134, 1081, 825, 390, 1337, 70, 1017, 582, 326, 1273, - 761, 198, 1145, 889, 454, 1401, 710, 38, 985, 550, 294, 1241, - 678, 166, 1113, 857, 422, 1369, 102, 1049, 614, 358, 1305, 793, - 230, 1177, 921, 486, 1433, 726, 22, 969, 534, 278, 1225, 662, - 150, 1097, 841, 406, 1353, 86, 1033, 598, 342, 1289, 777, 214, - 1161, 905, 470, 1417, 745, 54, 1001, 566, 310, 1257, 694, 182, - 1129, 873, 438, 1385, 118, 1065, 630, 374, 1321, 809, 246, - 1193, 937, 502, 1449, 14, 961, 526, 270, 1217, 654, 142, 1089, - 833, 398, 1345, 78, 1025, 590, 334, 1281, 769, 206, 1153, 897, - 462, 1409, 718, 46, 993, 558, 302, 1249, 686, 174, 1121, 865, - 430, 1377, 110, 1057, 622, 366, 1313, 801, 238, 1185, 929, 494, - 1441, 737, 30, 977, 542, 286, 1233, 670, 158, 1105, 849, 414, - 1361, 94, 1041, 606, 350, 1297, 785, 222, 1169, 913, 478, 1425, - 753, 62, 1009, 574, 318, 1265, 702, 190, 1137, 881, 446, 1393, - 126, 1073, 638, 382, 1329, 817, 254, 1201, 945, 510, 1457, 729, - 1, 948, 513, 257, 1204, 641, 129, 1076, 820, 385, 1332, 65, - 1012, 577, 321, 1268, 756, 193, 1140, 884, 449, 1396, 705, 33, - 980, 545, 289, 1236, 673, 161, 1108, 852, 417, 1364, 97, 1044, - 609, 353, 1300, 788, 225, 1172, 916, 481, 1428, 721, 17, 964, - 529, 273, 1220, 657, 145, 1092, 836, 401, 1348, 81, 1028, 593, - 337, 1284, 772, 209, 1156, 900, 465, 1412, 740, 49, 996, 561, - 305, 1252, 689, 177, 1124, 868, 433, 1380, 113, 1060, 625, 369, - 1316, 804, 241, 1188, 932, 497, 1444, 9, 956, 521, 265, 1212, - 649, 137, 1084, 828, 393, 1340, 73, 1020, 585, 329, 1276, 764, - 201, 1148, 892, 457, 1404, 713, 41, 988, 553, 297, 1244, 681, - 169, 1116, 860, 425, 1372, 105, 1052, 617, 361, 1308, 796, 233, - 1180, 924, 489, 1436, 732, 25, 972, 537, 281, 1228, 665, 153, - 1100, 844, 409, 1356, 89, 1036, 601, 345, 1292, 780, 217, 1164, - 908, 473, 1420, 748, 57, 1004, 569, 313, 1260, 697, 185, 1132, - 876, 441, 1388, 121, 1068, 633, 377, 1324, 812, 249, 1196, 940, - 505, 1452, 5, 952, 517, 261, 1208, 645, 133, 1080, 824, 389, - 1336, 69, 1016, 581, 325, 1272, 760, 197, 1144, 888, 453, 1400, - 709, 37, 984, 549, 293, 1240, 677, 165, 1112, 856, 421, 1368, - 101, 1048, 613, 357, 1304, 792, 229, 1176, 920, 485, 1432, 725, - 21, 968, 533, 277, 1224, 661, 149, 1096, 840, 405, 1352, 85, - 1032, 597, 341, 1288, 776, 213, 1160, 904, 469, 1416, 744, 53, - 1000, 565, 309, 1256, 693, 181, 1128, 872, 437, 1384, 117, - 1064, 629, 373, 1320, 808, 245, 1192, 936, 501, 1448, 13, 960, - 525, 269, 1216, 653, 141, 1088, 832, 397, 1344, 77, 1024, 589, - 333, 1280, 768, 205, 1152, 896, 461, 1408, 717, 45, 992, 557, - 301, 1248, 685, 173, 1120, 864, 429, 1376, 109, 1056, 621, 365, - 1312, 800, 237, 1184, 928, 493, 1440, 736, 29, 976, 541, 285, - 1232, 669, 157, 1104, 848, 413, 1360, 93, 1040, 605, 349, 1296, - 784, 221, 1168, 912, 477, 1424, 752, 61, 1008, 573, 317, 1264, - 701, 189, 1136, 880, 445, 1392, 125, 1072, 637, 381, 1328, 816, - 253, 1200, 944, 509, 1456, 730, 3, 950, 515, 259, 1206, 643, - 131, 1078, 822, 387, 1334, 67, 1014, 579, 323, 1270, 758, 195, - 1142, 886, 451, 1398, 707, 35, 982, 547, 291, 1238, 675, 163, - 1110, 854, 419, 1366, 99, 1046, 611, 355, 1302, 790, 227, 1174, - 918, 483, 1430, 723, 19, 966, 531, 275, 1222, 659, 147, 1094, - 838, 403, 1350, 83, 1030, 595, 339, 1286, 774, 211, 1158, 902, - 467, 1414, 742, 51, 998, 563, 307, 1254, 691, 179, 1126, 870, - 435, 1382, 115, 1062, 627, 371, 1318, 806, 243, 1190, 934, 499, - 1446, 11, 958, 523, 267, 1214, 651, 139, 1086, 830, 395, 1342, - 75, 1022, 587, 331, 1278, 766, 203, 1150, 894, 459, 1406, 715, - 43, 990, 555, 299, 1246, 683, 171, 1118, 862, 427, 1374, 107, - 1054, 619, 363, 1310, 798, 235, 1182, 926, 491, 1438, 734, 27, - 974, 539, 283, 1230, 667, 155, 1102, 846, 411, 1358, 91, 1038, - 603, 347, 1294, 782, 219, 1166, 910, 475, 1422, 750, 59, 1006, - 571, 315, 1262, 699, 187, 1134, 878, 443, 1390, 123, 1070, 635, - 379, 1326, 814, 251, 1198, 942, 507, 1454, 7, 954, 519, 263, - 1210, 647, 135, 1082, 826, 391, 1338, 71, 1018, 583, 327, 1274, - 762, 199, 1146, 890, 455, 1402, 711, 39, 986, 551, 295, 1242, - 679, 167, 1114, 858, 423, 1370, 103, 1050, 615, 359, 1306, 794, - 231, 1178, 922, 487, 1434, 727, 23, 970, 535, 279, 1226, 663, - 151, 1098, 842, 407, 1354, 87, 1034, 599, 343, 1290, 778, 215, - 1162, 906, 471, 1418, 746, 55, 1002, 567, 311, 1258, 695, 183, - 1130, 874, 439, 1386, 119, 1066, 631, 375, 1322, 810, 247, - 1194, 938, 503, 1450, 15, 962, 527, 271, 1218, 655, 143, 1090, - 834, 399, 1346, 79, 1026, 591, 335, 1282, 770, 207, 1154, 898, - 463, 1410, 719, 47, 994, 559, 303, 1250, 687, 175, 1122, 866, - 431, 1378, 111, 1058, 623, 367, 1314, 802, 239, 1186, 930, 495, - 1442, 738, 31, 978, 543, 287, 1234, 671, 159, 1106, 850, 415, - 1362, 95, 1042, 607, 351, 1298, 786, 223, 1170, 914, 479, 1426, - 754, 63, 1010, 575, 319, 1266, 703, 191, 1138, 882, 447, 1394, - 127, 1074, 639, 383, 1330, 818, 255, 1202, 946, 511, 1458]; - - return (unsafe { *PERM1459.get_unchecked((index % 1459) as usize) } as u32 * 2128681 + - unsafe { *PERM1459.get_unchecked(((index / 1459) % 1459) as usize) } as u32 * 1459 + - unsafe { - *PERM1459.get_unchecked(((index / 2128681) % 1459) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3105745579u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1471(index: u32) -> f32 { - const PERM1471: [u16; 1471] = [0, 959, 512, 256, 1215, 640, 128, 1087, 831, 384, 1343, 64, - 1023, 576, 320, 1279, 767, 192, 1151, 895, 448, 1407, 704, 32, - 991, 544, 288, 1247, 672, 160, 1119, 863, 416, 1375, 96, 1055, - 608, 352, 1311, 799, 224, 1183, 927, 480, 1439, 720, 16, 975, - 528, 272, 1231, 656, 144, 1103, 847, 400, 1359, 80, 1039, 592, - 336, 1295, 783, 208, 1167, 911, 464, 1423, 751, 48, 1007, 560, - 304, 1263, 688, 176, 1135, 879, 432, 1391, 112, 1071, 624, 368, - 1327, 815, 240, 1199, 943, 496, 1455, 728, 8, 967, 520, 264, - 1223, 648, 136, 1095, 839, 392, 1351, 72, 1031, 584, 328, 1287, - 775, 200, 1159, 903, 456, 1415, 712, 40, 999, 552, 296, 1255, - 680, 168, 1127, 871, 424, 1383, 104, 1063, 616, 360, 1319, 807, - 232, 1191, 935, 488, 1447, 743, 24, 983, 536, 280, 1239, 664, - 152, 1111, 855, 408, 1367, 88, 1047, 600, 344, 1303, 791, 216, - 1175, 919, 472, 1431, 759, 56, 1015, 568, 312, 1271, 696, 184, - 1143, 887, 440, 1399, 120, 1079, 632, 376, 1335, 823, 248, - 1207, 951, 504, 1463, 732, 4, 963, 516, 260, 1219, 644, 132, - 1091, 835, 388, 1347, 68, 1027, 580, 324, 1283, 771, 196, 1155, - 899, 452, 1411, 708, 36, 995, 548, 292, 1251, 676, 164, 1123, - 867, 420, 1379, 100, 1059, 612, 356, 1315, 803, 228, 1187, 931, - 484, 1443, 724, 20, 979, 532, 276, 1235, 660, 148, 1107, 851, - 404, 1363, 84, 1043, 596, 340, 1299, 787, 212, 1171, 915, 468, - 1427, 755, 52, 1011, 564, 308, 1267, 692, 180, 1139, 883, 436, - 1395, 116, 1075, 628, 372, 1331, 819, 244, 1203, 947, 500, - 1459, 739, 12, 971, 524, 268, 1227, 652, 140, 1099, 843, 396, - 1355, 76, 1035, 588, 332, 1291, 779, 204, 1163, 907, 460, 1419, - 716, 44, 1003, 556, 300, 1259, 684, 172, 1131, 875, 428, 1387, - 108, 1067, 620, 364, 1323, 811, 236, 1195, 939, 492, 1451, 747, - 28, 987, 540, 284, 1243, 668, 156, 1115, 859, 412, 1371, 92, - 1051, 604, 348, 1307, 795, 220, 1179, 923, 476, 1435, 763, 60, - 1019, 572, 316, 1275, 700, 188, 1147, 891, 444, 1403, 124, - 1083, 636, 380, 1339, 827, 252, 1211, 955, 508, 1467, 734, 2, - 961, 514, 258, 1217, 642, 130, 1089, 833, 386, 1345, 66, 1025, - 578, 322, 1281, 769, 194, 1153, 897, 450, 1409, 706, 34, 993, - 546, 290, 1249, 674, 162, 1121, 865, 418, 1377, 98, 1057, 610, - 354, 1313, 801, 226, 1185, 929, 482, 1441, 722, 18, 977, 530, - 274, 1233, 658, 146, 1105, 849, 402, 1361, 82, 1041, 594, 338, - 1297, 785, 210, 1169, 913, 466, 1425, 753, 50, 1009, 562, 306, - 1265, 690, 178, 1137, 881, 434, 1393, 114, 1073, 626, 370, - 1329, 817, 242, 1201, 945, 498, 1457, 730, 10, 969, 522, 266, - 1225, 650, 138, 1097, 841, 394, 1353, 74, 1033, 586, 330, 1289, - 777, 202, 1161, 905, 458, 1417, 714, 42, 1001, 554, 298, 1257, - 682, 170, 1129, 873, 426, 1385, 106, 1065, 618, 362, 1321, 809, - 234, 1193, 937, 490, 1449, 745, 26, 985, 538, 282, 1241, 666, - 154, 1113, 857, 410, 1369, 90, 1049, 602, 346, 1305, 793, 218, - 1177, 921, 474, 1433, 761, 58, 1017, 570, 314, 1273, 698, 186, - 1145, 889, 442, 1401, 122, 1081, 634, 378, 1337, 825, 250, - 1209, 953, 506, 1465, 737, 6, 965, 518, 262, 1221, 646, 134, - 1093, 837, 390, 1349, 70, 1029, 582, 326, 1285, 773, 198, 1157, - 901, 454, 1413, 710, 38, 997, 550, 294, 1253, 678, 166, 1125, - 869, 422, 1381, 102, 1061, 614, 358, 1317, 805, 230, 1189, 933, - 486, 1445, 726, 22, 981, 534, 278, 1237, 662, 150, 1109, 853, - 406, 1365, 86, 1045, 598, 342, 1301, 789, 214, 1173, 917, 470, - 1429, 757, 54, 1013, 566, 310, 1269, 694, 182, 1141, 885, 438, - 1397, 118, 1077, 630, 374, 1333, 821, 246, 1205, 949, 502, - 1461, 741, 14, 973, 526, 270, 1229, 654, 142, 1101, 845, 398, - 1357, 78, 1037, 590, 334, 1293, 781, 206, 1165, 909, 462, 1421, - 718, 46, 1005, 558, 302, 1261, 686, 174, 1133, 877, 430, 1389, - 110, 1069, 622, 366, 1325, 813, 238, 1197, 941, 494, 1453, 749, - 30, 989, 542, 286, 1245, 670, 158, 1117, 861, 414, 1373, 94, - 1053, 606, 350, 1309, 797, 222, 1181, 925, 478, 1437, 765, 62, - 1021, 574, 318, 1277, 702, 190, 1149, 893, 446, 1405, 126, - 1085, 638, 382, 1341, 829, 254, 1213, 957, 510, 1469, 735, 1, - 960, 513, 257, 1216, 641, 129, 1088, 832, 385, 1344, 65, 1024, - 577, 321, 1280, 768, 193, 1152, 896, 449, 1408, 705, 33, 992, - 545, 289, 1248, 673, 161, 1120, 864, 417, 1376, 97, 1056, 609, - 353, 1312, 800, 225, 1184, 928, 481, 1440, 721, 17, 976, 529, - 273, 1232, 657, 145, 1104, 848, 401, 1360, 81, 1040, 593, 337, - 1296, 784, 209, 1168, 912, 465, 1424, 752, 49, 1008, 561, 305, - 1264, 689, 177, 1136, 880, 433, 1392, 113, 1072, 625, 369, - 1328, 816, 241, 1200, 944, 497, 1456, 729, 9, 968, 521, 265, - 1224, 649, 137, 1096, 840, 393, 1352, 73, 1032, 585, 329, 1288, - 776, 201, 1160, 904, 457, 1416, 713, 41, 1000, 553, 297, 1256, - 681, 169, 1128, 872, 425, 1384, 105, 1064, 617, 361, 1320, 808, - 233, 1192, 936, 489, 1448, 744, 25, 984, 537, 281, 1240, 665, - 153, 1112, 856, 409, 1368, 89, 1048, 601, 345, 1304, 792, 217, - 1176, 920, 473, 1432, 760, 57, 1016, 569, 313, 1272, 697, 185, - 1144, 888, 441, 1400, 121, 1080, 633, 377, 1336, 824, 249, - 1208, 952, 505, 1464, 733, 5, 964, 517, 261, 1220, 645, 133, - 1092, 836, 389, 1348, 69, 1028, 581, 325, 1284, 772, 197, 1156, - 900, 453, 1412, 709, 37, 996, 549, 293, 1252, 677, 165, 1124, - 868, 421, 1380, 101, 1060, 613, 357, 1316, 804, 229, 1188, 932, - 485, 1444, 725, 21, 980, 533, 277, 1236, 661, 149, 1108, 852, - 405, 1364, 85, 1044, 597, 341, 1300, 788, 213, 1172, 916, 469, - 1428, 756, 53, 1012, 565, 309, 1268, 693, 181, 1140, 884, 437, - 1396, 117, 1076, 629, 373, 1332, 820, 245, 1204, 948, 501, - 1460, 740, 13, 972, 525, 269, 1228, 653, 141, 1100, 844, 397, - 1356, 77, 1036, 589, 333, 1292, 780, 205, 1164, 908, 461, 1420, - 717, 45, 1004, 557, 301, 1260, 685, 173, 1132, 876, 429, 1388, - 109, 1068, 621, 365, 1324, 812, 237, 1196, 940, 493, 1452, 748, - 29, 988, 541, 285, 1244, 669, 157, 1116, 860, 413, 1372, 93, - 1052, 605, 349, 1308, 796, 221, 1180, 924, 477, 1436, 764, 61, - 1020, 573, 317, 1276, 701, 189, 1148, 892, 445, 1404, 125, - 1084, 637, 381, 1340, 828, 253, 1212, 956, 509, 1468, 736, 3, - 962, 515, 259, 1218, 643, 131, 1090, 834, 387, 1346, 67, 1026, - 579, 323, 1282, 770, 195, 1154, 898, 451, 1410, 707, 35, 994, - 547, 291, 1250, 675, 163, 1122, 866, 419, 1378, 99, 1058, 611, - 355, 1314, 802, 227, 1186, 930, 483, 1442, 723, 19, 978, 531, - 275, 1234, 659, 147, 1106, 850, 403, 1362, 83, 1042, 595, 339, - 1298, 786, 211, 1170, 914, 467, 1426, 754, 51, 1010, 563, 307, - 1266, 691, 179, 1138, 882, 435, 1394, 115, 1074, 627, 371, - 1330, 818, 243, 1202, 946, 499, 1458, 731, 11, 970, 523, 267, - 1226, 651, 139, 1098, 842, 395, 1354, 75, 1034, 587, 331, 1290, - 778, 203, 1162, 906, 459, 1418, 715, 43, 1002, 555, 299, 1258, - 683, 171, 1130, 874, 427, 1386, 107, 1066, 619, 363, 1322, 810, - 235, 1194, 938, 491, 1450, 746, 27, 986, 539, 283, 1242, 667, - 155, 1114, 858, 411, 1370, 91, 1050, 603, 347, 1306, 794, 219, - 1178, 922, 475, 1434, 762, 59, 1018, 571, 315, 1274, 699, 187, - 1146, 890, 443, 1402, 123, 1082, 635, 379, 1338, 826, 251, - 1210, 954, 507, 1466, 738, 7, 966, 519, 263, 1222, 647, 135, - 1094, 838, 391, 1350, 71, 1030, 583, 327, 1286, 774, 199, 1158, - 902, 455, 1414, 711, 39, 998, 551, 295, 1254, 679, 167, 1126, - 870, 423, 1382, 103, 1062, 615, 359, 1318, 806, 231, 1190, 934, - 487, 1446, 727, 23, 982, 535, 279, 1238, 663, 151, 1110, 854, - 407, 1366, 87, 1046, 599, 343, 1302, 790, 215, 1174, 918, 471, - 1430, 758, 55, 1014, 567, 311, 1270, 695, 183, 1142, 886, 439, - 1398, 119, 1078, 631, 375, 1334, 822, 247, 1206, 950, 503, - 1462, 742, 15, 974, 527, 271, 1230, 655, 143, 1102, 846, 399, - 1358, 79, 1038, 591, 335, 1294, 782, 207, 1166, 910, 463, 1422, - 719, 47, 1006, 559, 303, 1262, 687, 175, 1134, 878, 431, 1390, - 111, 1070, 623, 367, 1326, 814, 239, 1198, 942, 495, 1454, 750, - 31, 990, 543, 287, 1246, 671, 159, 1118, 862, 415, 1374, 95, - 1054, 607, 351, 1310, 798, 223, 1182, 926, 479, 1438, 766, 63, - 1022, 575, 319, 1278, 703, 191, 1150, 894, 447, 1406, 127, - 1086, 639, 383, 1342, 830, 255, 1214, 958, 511, 1470]; - - return (unsafe { *PERM1471.get_unchecked((index % 1471) as usize) } as u32 * 2163841 + - unsafe { *PERM1471.get_unchecked(((index / 1471) % 1471) as usize) } as u32 * 1471 + - unsafe { - *PERM1471.get_unchecked(((index / 2163841) % 1471) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3183010111u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1481(index: u32) -> f32 { - const PERM1481: [u16; 1481] = [0, 969, 512, 256, 1225, 640, 128, 1097, 841, 384, 1353, 704, - 64, 1033, 576, 320, 1289, 777, 192, 1161, 905, 448, 1417, 32, - 1001, 544, 288, 1257, 672, 160, 1129, 873, 416, 1385, 745, 96, - 1065, 608, 352, 1321, 809, 224, 1193, 937, 480, 1449, 16, 985, - 528, 272, 1241, 656, 144, 1113, 857, 400, 1369, 720, 80, 1049, - 592, 336, 1305, 793, 208, 1177, 921, 464, 1433, 48, 1017, 560, - 304, 1273, 688, 176, 1145, 889, 432, 1401, 761, 112, 1081, 624, - 368, 1337, 825, 240, 1209, 953, 496, 1465, 736, 8, 977, 520, - 264, 1233, 648, 136, 1105, 849, 392, 1361, 712, 72, 1041, 584, - 328, 1297, 785, 200, 1169, 913, 456, 1425, 40, 1009, 552, 296, - 1265, 680, 168, 1137, 881, 424, 1393, 753, 104, 1073, 616, 360, - 1329, 817, 232, 1201, 945, 488, 1457, 24, 993, 536, 280, 1249, - 664, 152, 1121, 865, 408, 1377, 728, 88, 1057, 600, 344, 1313, - 801, 216, 1185, 929, 472, 1441, 56, 1025, 568, 312, 1281, 696, - 184, 1153, 897, 440, 1409, 769, 120, 1089, 632, 376, 1345, 833, - 248, 1217, 961, 504, 1473, 4, 973, 516, 260, 1229, 644, 132, - 1101, 845, 388, 1357, 708, 68, 1037, 580, 324, 1293, 781, 196, - 1165, 909, 452, 1421, 36, 1005, 548, 292, 1261, 676, 164, 1133, - 877, 420, 1389, 749, 100, 1069, 612, 356, 1325, 813, 228, 1197, - 941, 484, 1453, 20, 989, 532, 276, 1245, 660, 148, 1117, 861, - 404, 1373, 724, 84, 1053, 596, 340, 1309, 797, 212, 1181, 925, - 468, 1437, 52, 1021, 564, 308, 1277, 692, 180, 1149, 893, 436, - 1405, 765, 116, 1085, 628, 372, 1341, 829, 244, 1213, 957, 500, - 1469, 741, 12, 981, 524, 268, 1237, 652, 140, 1109, 853, 396, - 1365, 716, 76, 1045, 588, 332, 1301, 789, 204, 1173, 917, 460, - 1429, 44, 1013, 556, 300, 1269, 684, 172, 1141, 885, 428, 1397, - 757, 108, 1077, 620, 364, 1333, 821, 236, 1205, 949, 492, 1461, - 28, 997, 540, 284, 1253, 668, 156, 1125, 869, 412, 1381, 732, - 92, 1061, 604, 348, 1317, 805, 220, 1189, 933, 476, 1445, 60, - 1029, 572, 316, 1285, 700, 188, 1157, 901, 444, 1413, 773, 124, - 1093, 636, 380, 1349, 837, 252, 1221, 965, 508, 1477, 2, 971, - 514, 258, 1227, 642, 130, 1099, 843, 386, 1355, 706, 66, 1035, - 578, 322, 1291, 779, 194, 1163, 907, 450, 1419, 34, 1003, 546, - 290, 1259, 674, 162, 1131, 875, 418, 1387, 747, 98, 1067, 610, - 354, 1323, 811, 226, 1195, 939, 482, 1451, 18, 987, 530, 274, - 1243, 658, 146, 1115, 859, 402, 1371, 722, 82, 1051, 594, 338, - 1307, 795, 210, 1179, 923, 466, 1435, 50, 1019, 562, 306, 1275, - 690, 178, 1147, 891, 434, 1403, 763, 114, 1083, 626, 370, 1339, - 827, 242, 1211, 955, 498, 1467, 738, 10, 979, 522, 266, 1235, - 650, 138, 1107, 851, 394, 1363, 714, 74, 1043, 586, 330, 1299, - 787, 202, 1171, 915, 458, 1427, 42, 1011, 554, 298, 1267, 682, - 170, 1139, 883, 426, 1395, 755, 106, 1075, 618, 362, 1331, 819, - 234, 1203, 947, 490, 1459, 26, 995, 538, 282, 1251, 666, 154, - 1123, 867, 410, 1379, 730, 90, 1059, 602, 346, 1315, 803, 218, - 1187, 931, 474, 1443, 58, 1027, 570, 314, 1283, 698, 186, 1155, - 899, 442, 1411, 771, 122, 1091, 634, 378, 1347, 835, 250, 1219, - 963, 506, 1475, 6, 975, 518, 262, 1231, 646, 134, 1103, 847, - 390, 1359, 710, 70, 1039, 582, 326, 1295, 783, 198, 1167, 911, - 454, 1423, 38, 1007, 550, 294, 1263, 678, 166, 1135, 879, 422, - 1391, 751, 102, 1071, 614, 358, 1327, 815, 230, 1199, 943, 486, - 1455, 22, 991, 534, 278, 1247, 662, 150, 1119, 863, 406, 1375, - 726, 86, 1055, 598, 342, 1311, 799, 214, 1183, 927, 470, 1439, - 54, 1023, 566, 310, 1279, 694, 182, 1151, 895, 438, 1407, 767, - 118, 1087, 630, 374, 1343, 831, 246, 1215, 959, 502, 1471, 743, - 14, 983, 526, 270, 1239, 654, 142, 1111, 855, 398, 1367, 718, - 78, 1047, 590, 334, 1303, 791, 206, 1175, 919, 462, 1431, 46, - 1015, 558, 302, 1271, 686, 174, 1143, 887, 430, 1399, 759, 110, - 1079, 622, 366, 1335, 823, 238, 1207, 951, 494, 1463, 30, 999, - 542, 286, 1255, 670, 158, 1127, 871, 414, 1383, 734, 94, 1063, - 606, 350, 1319, 807, 222, 1191, 935, 478, 1447, 62, 1031, 574, - 318, 1287, 702, 190, 1159, 903, 446, 1415, 775, 126, 1095, 638, - 382, 1351, 839, 254, 1223, 967, 510, 1479, 740, 1, 970, 513, - 257, 1226, 641, 129, 1098, 842, 385, 1354, 705, 65, 1034, 577, - 321, 1290, 778, 193, 1162, 906, 449, 1418, 33, 1002, 545, 289, - 1258, 673, 161, 1130, 874, 417, 1386, 746, 97, 1066, 609, 353, - 1322, 810, 225, 1194, 938, 481, 1450, 17, 986, 529, 273, 1242, - 657, 145, 1114, 858, 401, 1370, 721, 81, 1050, 593, 337, 1306, - 794, 209, 1178, 922, 465, 1434, 49, 1018, 561, 305, 1274, 689, - 177, 1146, 890, 433, 1402, 762, 113, 1082, 625, 369, 1338, 826, - 241, 1210, 954, 497, 1466, 737, 9, 978, 521, 265, 1234, 649, - 137, 1106, 850, 393, 1362, 713, 73, 1042, 585, 329, 1298, 786, - 201, 1170, 914, 457, 1426, 41, 1010, 553, 297, 1266, 681, 169, - 1138, 882, 425, 1394, 754, 105, 1074, 617, 361, 1330, 818, 233, - 1202, 946, 489, 1458, 25, 994, 537, 281, 1250, 665, 153, 1122, - 866, 409, 1378, 729, 89, 1058, 601, 345, 1314, 802, 217, 1186, - 930, 473, 1442, 57, 1026, 569, 313, 1282, 697, 185, 1154, 898, - 441, 1410, 770, 121, 1090, 633, 377, 1346, 834, 249, 1218, 962, - 505, 1474, 5, 974, 517, 261, 1230, 645, 133, 1102, 846, 389, - 1358, 709, 69, 1038, 581, 325, 1294, 782, 197, 1166, 910, 453, - 1422, 37, 1006, 549, 293, 1262, 677, 165, 1134, 878, 421, 1390, - 750, 101, 1070, 613, 357, 1326, 814, 229, 1198, 942, 485, 1454, - 21, 990, 533, 277, 1246, 661, 149, 1118, 862, 405, 1374, 725, - 85, 1054, 597, 341, 1310, 798, 213, 1182, 926, 469, 1438, 53, - 1022, 565, 309, 1278, 693, 181, 1150, 894, 437, 1406, 766, 117, - 1086, 629, 373, 1342, 830, 245, 1214, 958, 501, 1470, 742, 13, - 982, 525, 269, 1238, 653, 141, 1110, 854, 397, 1366, 717, 77, - 1046, 589, 333, 1302, 790, 205, 1174, 918, 461, 1430, 45, 1014, - 557, 301, 1270, 685, 173, 1142, 886, 429, 1398, 758, 109, 1078, - 621, 365, 1334, 822, 237, 1206, 950, 493, 1462, 29, 998, 541, - 285, 1254, 669, 157, 1126, 870, 413, 1382, 733, 93, 1062, 605, - 349, 1318, 806, 221, 1190, 934, 477, 1446, 61, 1030, 573, 317, - 1286, 701, 189, 1158, 902, 445, 1414, 774, 125, 1094, 637, 381, - 1350, 838, 253, 1222, 966, 509, 1478, 3, 972, 515, 259, 1228, - 643, 131, 1100, 844, 387, 1356, 707, 67, 1036, 579, 323, 1292, - 780, 195, 1164, 908, 451, 1420, 35, 1004, 547, 291, 1260, 675, - 163, 1132, 876, 419, 1388, 748, 99, 1068, 611, 355, 1324, 812, - 227, 1196, 940, 483, 1452, 19, 988, 531, 275, 1244, 659, 147, - 1116, 860, 403, 1372, 723, 83, 1052, 595, 339, 1308, 796, 211, - 1180, 924, 467, 1436, 51, 1020, 563, 307, 1276, 691, 179, 1148, - 892, 435, 1404, 764, 115, 1084, 627, 371, 1340, 828, 243, 1212, - 956, 499, 1468, 739, 11, 980, 523, 267, 1236, 651, 139, 1108, - 852, 395, 1364, 715, 75, 1044, 587, 331, 1300, 788, 203, 1172, - 916, 459, 1428, 43, 1012, 555, 299, 1268, 683, 171, 1140, 884, - 427, 1396, 756, 107, 1076, 619, 363, 1332, 820, 235, 1204, 948, - 491, 1460, 27, 996, 539, 283, 1252, 667, 155, 1124, 868, 411, - 1380, 731, 91, 1060, 603, 347, 1316, 804, 219, 1188, 932, 475, - 1444, 59, 1028, 571, 315, 1284, 699, 187, 1156, 900, 443, 1412, - 772, 123, 1092, 635, 379, 1348, 836, 251, 1220, 964, 507, 1476, - 7, 976, 519, 263, 1232, 647, 135, 1104, 848, 391, 1360, 711, - 71, 1040, 583, 327, 1296, 784, 199, 1168, 912, 455, 1424, 39, - 1008, 551, 295, 1264, 679, 167, 1136, 880, 423, 1392, 752, 103, - 1072, 615, 359, 1328, 816, 231, 1200, 944, 487, 1456, 23, 992, - 535, 279, 1248, 663, 151, 1120, 864, 407, 1376, 727, 87, 1056, - 599, 343, 1312, 800, 215, 1184, 928, 471, 1440, 55, 1024, 567, - 311, 1280, 695, 183, 1152, 896, 439, 1408, 768, 119, 1088, 631, - 375, 1344, 832, 247, 1216, 960, 503, 1472, 744, 15, 984, 527, - 271, 1240, 655, 143, 1112, 856, 399, 1368, 719, 79, 1048, 591, - 335, 1304, 792, 207, 1176, 920, 463, 1432, 47, 1016, 559, 303, - 1272, 687, 175, 1144, 888, 431, 1400, 760, 111, 1080, 623, 367, - 1336, 824, 239, 1208, 952, 495, 1464, 31, 1000, 543, 287, 1256, - 671, 159, 1128, 872, 415, 1384, 735, 95, 1064, 607, 351, 1320, - 808, 223, 1192, 936, 479, 1448, 63, 1032, 575, 319, 1288, 703, - 191, 1160, 904, 447, 1416, 776, 127, 1096, 639, 383, 1352, 840, - 255, 1224, 968, 511, 1480]; - - return (unsafe { *PERM1481.get_unchecked((index % 1481) as usize) } as u32 * 2193361 + - unsafe { *PERM1481.get_unchecked(((index / 1481) % 1481) as usize) } as u32 * 1481 + - unsafe { - *PERM1481.get_unchecked(((index / 2193361) % 1481) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3248367641u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1483(index: u32) -> f32 { - const PERM1483: [u16; 1483] = [0, 971, 512, 256, 1227, 640, 128, 1099, 843, 384, 1355, 704, - 64, 1035, 576, 320, 1291, 779, 192, 1163, 907, 448, 1419, 32, - 1003, 544, 288, 1259, 672, 160, 1131, 875, 416, 1387, 747, 96, - 1067, 608, 352, 1323, 811, 224, 1195, 939, 480, 1451, 16, 987, - 528, 272, 1243, 656, 144, 1115, 859, 400, 1371, 720, 80, 1051, - 592, 336, 1307, 795, 208, 1179, 923, 464, 1435, 48, 1019, 560, - 304, 1275, 688, 176, 1147, 891, 432, 1403, 763, 112, 1083, 624, - 368, 1339, 827, 240, 1211, 955, 496, 1467, 736, 8, 979, 520, - 264, 1235, 648, 136, 1107, 851, 392, 1363, 712, 72, 1043, 584, - 328, 1299, 787, 200, 1171, 915, 456, 1427, 40, 1011, 552, 296, - 1267, 680, 168, 1139, 883, 424, 1395, 755, 104, 1075, 616, 360, - 1331, 819, 232, 1203, 947, 488, 1459, 24, 995, 536, 280, 1251, - 664, 152, 1123, 867, 408, 1379, 728, 88, 1059, 600, 344, 1315, - 803, 216, 1187, 931, 472, 1443, 56, 1027, 568, 312, 1283, 696, - 184, 1155, 899, 440, 1411, 771, 120, 1091, 632, 376, 1347, 835, - 248, 1219, 963, 504, 1475, 4, 975, 516, 260, 1231, 644, 132, - 1103, 847, 388, 1359, 708, 68, 1039, 580, 324, 1295, 783, 196, - 1167, 911, 452, 1423, 36, 1007, 548, 292, 1263, 676, 164, 1135, - 879, 420, 1391, 751, 100, 1071, 612, 356, 1327, 815, 228, 1199, - 943, 484, 1455, 20, 991, 532, 276, 1247, 660, 148, 1119, 863, - 404, 1375, 724, 84, 1055, 596, 340, 1311, 799, 212, 1183, 927, - 468, 1439, 52, 1023, 564, 308, 1279, 692, 180, 1151, 895, 436, - 1407, 767, 116, 1087, 628, 372, 1343, 831, 244, 1215, 959, 500, - 1471, 743, 12, 983, 524, 268, 1239, 652, 140, 1111, 855, 396, - 1367, 716, 76, 1047, 588, 332, 1303, 791, 204, 1175, 919, 460, - 1431, 44, 1015, 556, 300, 1271, 684, 172, 1143, 887, 428, 1399, - 759, 108, 1079, 620, 364, 1335, 823, 236, 1207, 951, 492, 1463, - 28, 999, 540, 284, 1255, 668, 156, 1127, 871, 412, 1383, 732, - 92, 1063, 604, 348, 1319, 807, 220, 1191, 935, 476, 1447, 60, - 1031, 572, 316, 1287, 700, 188, 1159, 903, 444, 1415, 775, 124, - 1095, 636, 380, 1351, 839, 252, 1223, 967, 508, 1479, 740, 2, - 973, 514, 258, 1229, 642, 130, 1101, 845, 386, 1357, 706, 66, - 1037, 578, 322, 1293, 781, 194, 1165, 909, 450, 1421, 34, 1005, - 546, 290, 1261, 674, 162, 1133, 877, 418, 1389, 749, 98, 1069, - 610, 354, 1325, 813, 226, 1197, 941, 482, 1453, 18, 989, 530, - 274, 1245, 658, 146, 1117, 861, 402, 1373, 722, 82, 1053, 594, - 338, 1309, 797, 210, 1181, 925, 466, 1437, 50, 1021, 562, 306, - 1277, 690, 178, 1149, 893, 434, 1405, 765, 114, 1085, 626, 370, - 1341, 829, 242, 1213, 957, 498, 1469, 738, 10, 981, 522, 266, - 1237, 650, 138, 1109, 853, 394, 1365, 714, 74, 1045, 586, 330, - 1301, 789, 202, 1173, 917, 458, 1429, 42, 1013, 554, 298, 1269, - 682, 170, 1141, 885, 426, 1397, 757, 106, 1077, 618, 362, 1333, - 821, 234, 1205, 949, 490, 1461, 26, 997, 538, 282, 1253, 666, - 154, 1125, 869, 410, 1381, 730, 90, 1061, 602, 346, 1317, 805, - 218, 1189, 933, 474, 1445, 58, 1029, 570, 314, 1285, 698, 186, - 1157, 901, 442, 1413, 773, 122, 1093, 634, 378, 1349, 837, 250, - 1221, 965, 506, 1477, 6, 977, 518, 262, 1233, 646, 134, 1105, - 849, 390, 1361, 710, 70, 1041, 582, 326, 1297, 785, 198, 1169, - 913, 454, 1425, 38, 1009, 550, 294, 1265, 678, 166, 1137, 881, - 422, 1393, 753, 102, 1073, 614, 358, 1329, 817, 230, 1201, 945, - 486, 1457, 22, 993, 534, 278, 1249, 662, 150, 1121, 865, 406, - 1377, 726, 86, 1057, 598, 342, 1313, 801, 214, 1185, 929, 470, - 1441, 54, 1025, 566, 310, 1281, 694, 182, 1153, 897, 438, 1409, - 769, 118, 1089, 630, 374, 1345, 833, 246, 1217, 961, 502, 1473, - 745, 14, 985, 526, 270, 1241, 654, 142, 1113, 857, 398, 1369, - 718, 78, 1049, 590, 334, 1305, 793, 206, 1177, 921, 462, 1433, - 46, 1017, 558, 302, 1273, 686, 174, 1145, 889, 430, 1401, 761, - 110, 1081, 622, 366, 1337, 825, 238, 1209, 953, 494, 1465, 30, - 1001, 542, 286, 1257, 670, 158, 1129, 873, 414, 1385, 734, 94, - 1065, 606, 350, 1321, 809, 222, 1193, 937, 478, 1449, 62, 1033, - 574, 318, 1289, 702, 190, 1161, 905, 446, 1417, 777, 126, 1097, - 638, 382, 1353, 841, 254, 1225, 969, 510, 1481, 741, 1, 972, - 513, 257, 1228, 641, 129, 1100, 844, 385, 1356, 705, 65, 1036, - 577, 321, 1292, 780, 193, 1164, 908, 449, 1420, 33, 1004, 545, - 289, 1260, 673, 161, 1132, 876, 417, 1388, 748, 97, 1068, 609, - 353, 1324, 812, 225, 1196, 940, 481, 1452, 17, 988, 529, 273, - 1244, 657, 145, 1116, 860, 401, 1372, 721, 81, 1052, 593, 337, - 1308, 796, 209, 1180, 924, 465, 1436, 49, 1020, 561, 305, 1276, - 689, 177, 1148, 892, 433, 1404, 764, 113, 1084, 625, 369, 1340, - 828, 241, 1212, 956, 497, 1468, 737, 9, 980, 521, 265, 1236, - 649, 137, 1108, 852, 393, 1364, 713, 73, 1044, 585, 329, 1300, - 788, 201, 1172, 916, 457, 1428, 41, 1012, 553, 297, 1268, 681, - 169, 1140, 884, 425, 1396, 756, 105, 1076, 617, 361, 1332, 820, - 233, 1204, 948, 489, 1460, 25, 996, 537, 281, 1252, 665, 153, - 1124, 868, 409, 1380, 729, 89, 1060, 601, 345, 1316, 804, 217, - 1188, 932, 473, 1444, 57, 1028, 569, 313, 1284, 697, 185, 1156, - 900, 441, 1412, 772, 121, 1092, 633, 377, 1348, 836, 249, 1220, - 964, 505, 1476, 5, 976, 517, 261, 1232, 645, 133, 1104, 848, - 389, 1360, 709, 69, 1040, 581, 325, 1296, 784, 197, 1168, 912, - 453, 1424, 37, 1008, 549, 293, 1264, 677, 165, 1136, 880, 421, - 1392, 752, 101, 1072, 613, 357, 1328, 816, 229, 1200, 944, 485, - 1456, 21, 992, 533, 277, 1248, 661, 149, 1120, 864, 405, 1376, - 725, 85, 1056, 597, 341, 1312, 800, 213, 1184, 928, 469, 1440, - 53, 1024, 565, 309, 1280, 693, 181, 1152, 896, 437, 1408, 768, - 117, 1088, 629, 373, 1344, 832, 245, 1216, 960, 501, 1472, 744, - 13, 984, 525, 269, 1240, 653, 141, 1112, 856, 397, 1368, 717, - 77, 1048, 589, 333, 1304, 792, 205, 1176, 920, 461, 1432, 45, - 1016, 557, 301, 1272, 685, 173, 1144, 888, 429, 1400, 760, 109, - 1080, 621, 365, 1336, 824, 237, 1208, 952, 493, 1464, 29, 1000, - 541, 285, 1256, 669, 157, 1128, 872, 413, 1384, 733, 93, 1064, - 605, 349, 1320, 808, 221, 1192, 936, 477, 1448, 61, 1032, 573, - 317, 1288, 701, 189, 1160, 904, 445, 1416, 776, 125, 1096, 637, - 381, 1352, 840, 253, 1224, 968, 509, 1480, 742, 3, 974, 515, - 259, 1230, 643, 131, 1102, 846, 387, 1358, 707, 67, 1038, 579, - 323, 1294, 782, 195, 1166, 910, 451, 1422, 35, 1006, 547, 291, - 1262, 675, 163, 1134, 878, 419, 1390, 750, 99, 1070, 611, 355, - 1326, 814, 227, 1198, 942, 483, 1454, 19, 990, 531, 275, 1246, - 659, 147, 1118, 862, 403, 1374, 723, 83, 1054, 595, 339, 1310, - 798, 211, 1182, 926, 467, 1438, 51, 1022, 563, 307, 1278, 691, - 179, 1150, 894, 435, 1406, 766, 115, 1086, 627, 371, 1342, 830, - 243, 1214, 958, 499, 1470, 739, 11, 982, 523, 267, 1238, 651, - 139, 1110, 854, 395, 1366, 715, 75, 1046, 587, 331, 1302, 790, - 203, 1174, 918, 459, 1430, 43, 1014, 555, 299, 1270, 683, 171, - 1142, 886, 427, 1398, 758, 107, 1078, 619, 363, 1334, 822, 235, - 1206, 950, 491, 1462, 27, 998, 539, 283, 1254, 667, 155, 1126, - 870, 411, 1382, 731, 91, 1062, 603, 347, 1318, 806, 219, 1190, - 934, 475, 1446, 59, 1030, 571, 315, 1286, 699, 187, 1158, 902, - 443, 1414, 774, 123, 1094, 635, 379, 1350, 838, 251, 1222, 966, - 507, 1478, 7, 978, 519, 263, 1234, 647, 135, 1106, 850, 391, - 1362, 711, 71, 1042, 583, 327, 1298, 786, 199, 1170, 914, 455, - 1426, 39, 1010, 551, 295, 1266, 679, 167, 1138, 882, 423, 1394, - 754, 103, 1074, 615, 359, 1330, 818, 231, 1202, 946, 487, 1458, - 23, 994, 535, 279, 1250, 663, 151, 1122, 866, 407, 1378, 727, - 87, 1058, 599, 343, 1314, 802, 215, 1186, 930, 471, 1442, 55, - 1026, 567, 311, 1282, 695, 183, 1154, 898, 439, 1410, 770, 119, - 1090, 631, 375, 1346, 834, 247, 1218, 962, 503, 1474, 746, 15, - 986, 527, 271, 1242, 655, 143, 1114, 858, 399, 1370, 719, 79, - 1050, 591, 335, 1306, 794, 207, 1178, 922, 463, 1434, 47, 1018, - 559, 303, 1274, 687, 175, 1146, 890, 431, 1402, 762, 111, 1082, - 623, 367, 1338, 826, 239, 1210, 954, 495, 1466, 31, 1002, 543, - 287, 1258, 671, 159, 1130, 874, 415, 1386, 735, 95, 1066, 607, - 351, 1322, 810, 223, 1194, 938, 479, 1450, 63, 1034, 575, 319, - 1290, 703, 191, 1162, 906, 447, 1418, 778, 127, 1098, 639, 383, - 1354, 842, 255, 1226, 970, 511, 1482]; - - return (unsafe { *PERM1483.get_unchecked((index % 1483) as usize) } as u32 * 2199289 + - unsafe { *PERM1483.get_unchecked(((index / 1483) % 1483) as usize) } as u32 * 1483 + - unsafe { - *PERM1483.get_unchecked(((index / 2199289) % 1483) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3261545587u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1487(index: u32) -> f32 { - const PERM1487: [u16; 1487] = [0, 975, 512, 256, 1231, 640, 128, 1103, 847, 384, 1359, 704, - 64, 1039, 576, 320, 1295, 783, 192, 1167, 911, 448, 1423, 32, - 1007, 544, 288, 1263, 672, 160, 1135, 879, 416, 1391, 751, 96, - 1071, 608, 352, 1327, 815, 224, 1199, 943, 480, 1455, 16, 991, - 528, 272, 1247, 656, 144, 1119, 863, 400, 1375, 720, 80, 1055, - 592, 336, 1311, 799, 208, 1183, 927, 464, 1439, 48, 1023, 560, - 304, 1279, 688, 176, 1151, 895, 432, 1407, 767, 112, 1087, 624, - 368, 1343, 831, 240, 1215, 959, 496, 1471, 736, 8, 983, 520, - 264, 1239, 648, 136, 1111, 855, 392, 1367, 712, 72, 1047, 584, - 328, 1303, 791, 200, 1175, 919, 456, 1431, 40, 1015, 552, 296, - 1271, 680, 168, 1143, 887, 424, 1399, 759, 104, 1079, 616, 360, - 1335, 823, 232, 1207, 951, 488, 1463, 24, 999, 536, 280, 1255, - 664, 152, 1127, 871, 408, 1383, 728, 88, 1063, 600, 344, 1319, - 807, 216, 1191, 935, 472, 1447, 56, 1031, 568, 312, 1287, 696, - 184, 1159, 903, 440, 1415, 775, 120, 1095, 632, 376, 1351, 839, - 248, 1223, 967, 504, 1479, 740, 4, 979, 516, 260, 1235, 644, - 132, 1107, 851, 388, 1363, 708, 68, 1043, 580, 324, 1299, 787, - 196, 1171, 915, 452, 1427, 36, 1011, 548, 292, 1267, 676, 164, - 1139, 883, 420, 1395, 755, 100, 1075, 612, 356, 1331, 819, 228, - 1203, 947, 484, 1459, 20, 995, 532, 276, 1251, 660, 148, 1123, - 867, 404, 1379, 724, 84, 1059, 596, 340, 1315, 803, 212, 1187, - 931, 468, 1443, 52, 1027, 564, 308, 1283, 692, 180, 1155, 899, - 436, 1411, 771, 116, 1091, 628, 372, 1347, 835, 244, 1219, 963, - 500, 1475, 747, 12, 987, 524, 268, 1243, 652, 140, 1115, 859, - 396, 1371, 716, 76, 1051, 588, 332, 1307, 795, 204, 1179, 923, - 460, 1435, 44, 1019, 556, 300, 1275, 684, 172, 1147, 891, 428, - 1403, 763, 108, 1083, 620, 364, 1339, 827, 236, 1211, 955, 492, - 1467, 28, 1003, 540, 284, 1259, 668, 156, 1131, 875, 412, 1387, - 732, 92, 1067, 604, 348, 1323, 811, 220, 1195, 939, 476, 1451, - 60, 1035, 572, 316, 1291, 700, 188, 1163, 907, 444, 1419, 779, - 124, 1099, 636, 380, 1355, 843, 252, 1227, 971, 508, 1483, 742, - 2, 977, 514, 258, 1233, 642, 130, 1105, 849, 386, 1361, 706, - 66, 1041, 578, 322, 1297, 785, 194, 1169, 913, 450, 1425, 34, - 1009, 546, 290, 1265, 674, 162, 1137, 881, 418, 1393, 753, 98, - 1073, 610, 354, 1329, 817, 226, 1201, 945, 482, 1457, 18, 993, - 530, 274, 1249, 658, 146, 1121, 865, 402, 1377, 722, 82, 1057, - 594, 338, 1313, 801, 210, 1185, 929, 466, 1441, 50, 1025, 562, - 306, 1281, 690, 178, 1153, 897, 434, 1409, 769, 114, 1089, 626, - 370, 1345, 833, 242, 1217, 961, 498, 1473, 738, 10, 985, 522, - 266, 1241, 650, 138, 1113, 857, 394, 1369, 714, 74, 1049, 586, - 330, 1305, 793, 202, 1177, 921, 458, 1433, 42, 1017, 554, 298, - 1273, 682, 170, 1145, 889, 426, 1401, 761, 106, 1081, 618, 362, - 1337, 825, 234, 1209, 953, 490, 1465, 26, 1001, 538, 282, 1257, - 666, 154, 1129, 873, 410, 1385, 730, 90, 1065, 602, 346, 1321, - 809, 218, 1193, 937, 474, 1449, 58, 1033, 570, 314, 1289, 698, - 186, 1161, 905, 442, 1417, 777, 122, 1097, 634, 378, 1353, 841, - 250, 1225, 969, 506, 1481, 745, 6, 981, 518, 262, 1237, 646, - 134, 1109, 853, 390, 1365, 710, 70, 1045, 582, 326, 1301, 789, - 198, 1173, 917, 454, 1429, 38, 1013, 550, 294, 1269, 678, 166, - 1141, 885, 422, 1397, 757, 102, 1077, 614, 358, 1333, 821, 230, - 1205, 949, 486, 1461, 22, 997, 534, 278, 1253, 662, 150, 1125, - 869, 406, 1381, 726, 86, 1061, 598, 342, 1317, 805, 214, 1189, - 933, 470, 1445, 54, 1029, 566, 310, 1285, 694, 182, 1157, 901, - 438, 1413, 773, 118, 1093, 630, 374, 1349, 837, 246, 1221, 965, - 502, 1477, 749, 14, 989, 526, 270, 1245, 654, 142, 1117, 861, - 398, 1373, 718, 78, 1053, 590, 334, 1309, 797, 206, 1181, 925, - 462, 1437, 46, 1021, 558, 302, 1277, 686, 174, 1149, 893, 430, - 1405, 765, 110, 1085, 622, 366, 1341, 829, 238, 1213, 957, 494, - 1469, 30, 1005, 542, 286, 1261, 670, 158, 1133, 877, 414, 1389, - 734, 94, 1069, 606, 350, 1325, 813, 222, 1197, 941, 478, 1453, - 62, 1037, 574, 318, 1293, 702, 190, 1165, 909, 446, 1421, 781, - 126, 1101, 638, 382, 1357, 845, 254, 1229, 973, 510, 1485, 743, - 1, 976, 513, 257, 1232, 641, 129, 1104, 848, 385, 1360, 705, - 65, 1040, 577, 321, 1296, 784, 193, 1168, 912, 449, 1424, 33, - 1008, 545, 289, 1264, 673, 161, 1136, 880, 417, 1392, 752, 97, - 1072, 609, 353, 1328, 816, 225, 1200, 944, 481, 1456, 17, 992, - 529, 273, 1248, 657, 145, 1120, 864, 401, 1376, 721, 81, 1056, - 593, 337, 1312, 800, 209, 1184, 928, 465, 1440, 49, 1024, 561, - 305, 1280, 689, 177, 1152, 896, 433, 1408, 768, 113, 1088, 625, - 369, 1344, 832, 241, 1216, 960, 497, 1472, 737, 9, 984, 521, - 265, 1240, 649, 137, 1112, 856, 393, 1368, 713, 73, 1048, 585, - 329, 1304, 792, 201, 1176, 920, 457, 1432, 41, 1016, 553, 297, - 1272, 681, 169, 1144, 888, 425, 1400, 760, 105, 1080, 617, 361, - 1336, 824, 233, 1208, 952, 489, 1464, 25, 1000, 537, 281, 1256, - 665, 153, 1128, 872, 409, 1384, 729, 89, 1064, 601, 345, 1320, - 808, 217, 1192, 936, 473, 1448, 57, 1032, 569, 313, 1288, 697, - 185, 1160, 904, 441, 1416, 776, 121, 1096, 633, 377, 1352, 840, - 249, 1224, 968, 505, 1480, 741, 5, 980, 517, 261, 1236, 645, - 133, 1108, 852, 389, 1364, 709, 69, 1044, 581, 325, 1300, 788, - 197, 1172, 916, 453, 1428, 37, 1012, 549, 293, 1268, 677, 165, - 1140, 884, 421, 1396, 756, 101, 1076, 613, 357, 1332, 820, 229, - 1204, 948, 485, 1460, 21, 996, 533, 277, 1252, 661, 149, 1124, - 868, 405, 1380, 725, 85, 1060, 597, 341, 1316, 804, 213, 1188, - 932, 469, 1444, 53, 1028, 565, 309, 1284, 693, 181, 1156, 900, - 437, 1412, 772, 117, 1092, 629, 373, 1348, 836, 245, 1220, 964, - 501, 1476, 748, 13, 988, 525, 269, 1244, 653, 141, 1116, 860, - 397, 1372, 717, 77, 1052, 589, 333, 1308, 796, 205, 1180, 924, - 461, 1436, 45, 1020, 557, 301, 1276, 685, 173, 1148, 892, 429, - 1404, 764, 109, 1084, 621, 365, 1340, 828, 237, 1212, 956, 493, - 1468, 29, 1004, 541, 285, 1260, 669, 157, 1132, 876, 413, 1388, - 733, 93, 1068, 605, 349, 1324, 812, 221, 1196, 940, 477, 1452, - 61, 1036, 573, 317, 1292, 701, 189, 1164, 908, 445, 1420, 780, - 125, 1100, 637, 381, 1356, 844, 253, 1228, 972, 509, 1484, 744, - 3, 978, 515, 259, 1234, 643, 131, 1106, 850, 387, 1362, 707, - 67, 1042, 579, 323, 1298, 786, 195, 1170, 914, 451, 1426, 35, - 1010, 547, 291, 1266, 675, 163, 1138, 882, 419, 1394, 754, 99, - 1074, 611, 355, 1330, 818, 227, 1202, 946, 483, 1458, 19, 994, - 531, 275, 1250, 659, 147, 1122, 866, 403, 1378, 723, 83, 1058, - 595, 339, 1314, 802, 211, 1186, 930, 467, 1442, 51, 1026, 563, - 307, 1282, 691, 179, 1154, 898, 435, 1410, 770, 115, 1090, 627, - 371, 1346, 834, 243, 1218, 962, 499, 1474, 739, 11, 986, 523, - 267, 1242, 651, 139, 1114, 858, 395, 1370, 715, 75, 1050, 587, - 331, 1306, 794, 203, 1178, 922, 459, 1434, 43, 1018, 555, 299, - 1274, 683, 171, 1146, 890, 427, 1402, 762, 107, 1082, 619, 363, - 1338, 826, 235, 1210, 954, 491, 1466, 27, 1002, 539, 283, 1258, - 667, 155, 1130, 874, 411, 1386, 731, 91, 1066, 603, 347, 1322, - 810, 219, 1194, 938, 475, 1450, 59, 1034, 571, 315, 1290, 699, - 187, 1162, 906, 443, 1418, 778, 123, 1098, 635, 379, 1354, 842, - 251, 1226, 970, 507, 1482, 746, 7, 982, 519, 263, 1238, 647, - 135, 1110, 854, 391, 1366, 711, 71, 1046, 583, 327, 1302, 790, - 199, 1174, 918, 455, 1430, 39, 1014, 551, 295, 1270, 679, 167, - 1142, 886, 423, 1398, 758, 103, 1078, 615, 359, 1334, 822, 231, - 1206, 950, 487, 1462, 23, 998, 535, 279, 1254, 663, 151, 1126, - 870, 407, 1382, 727, 87, 1062, 599, 343, 1318, 806, 215, 1190, - 934, 471, 1446, 55, 1030, 567, 311, 1286, 695, 183, 1158, 902, - 439, 1414, 774, 119, 1094, 631, 375, 1350, 838, 247, 1222, 966, - 503, 1478, 750, 15, 990, 527, 271, 1246, 655, 143, 1118, 862, - 399, 1374, 719, 79, 1054, 591, 335, 1310, 798, 207, 1182, 926, - 463, 1438, 47, 1022, 559, 303, 1278, 687, 175, 1150, 894, 431, - 1406, 766, 111, 1086, 623, 367, 1342, 830, 239, 1214, 958, 495, - 1470, 31, 1006, 543, 287, 1262, 671, 159, 1134, 878, 415, 1390, - 735, 95, 1070, 607, 351, 1326, 814, 223, 1198, 942, 479, 1454, - 63, 1038, 575, 319, 1294, 703, 191, 1166, 910, 447, 1422, 782, - 127, 1102, 639, 383, 1358, 846, 255, 1230, 974, 511, 1486]; - - return (unsafe { *PERM1487.get_unchecked((index % 1487) as usize) } as u32 * 2211169 + - unsafe { *PERM1487.get_unchecked(((index / 1487) % 1487) as usize) } as u32 * 1487 + - unsafe { - *PERM1487.get_unchecked(((index / 2211169) % 1487) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3288008303u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1489(index: u32) -> f32 { - const PERM1489: [u16; 1489] = [0, 977, 512, 256, 1233, 640, 128, 1105, 849, 384, 1361, 704, - 64, 1041, 576, 320, 1297, 785, 192, 1169, 913, 448, 1425, 32, - 1009, 544, 288, 1265, 672, 160, 1137, 881, 416, 1393, 753, 96, - 1073, 608, 352, 1329, 817, 224, 1201, 945, 480, 1457, 736, 16, - 993, 528, 272, 1249, 656, 144, 1121, 865, 400, 1377, 720, 80, - 1057, 592, 336, 1313, 801, 208, 1185, 929, 464, 1441, 48, 1025, - 560, 304, 1281, 688, 176, 1153, 897, 432, 1409, 769, 112, 1089, - 624, 368, 1345, 833, 240, 1217, 961, 496, 1473, 8, 985, 520, - 264, 1241, 648, 136, 1113, 857, 392, 1369, 712, 72, 1049, 584, - 328, 1305, 793, 200, 1177, 921, 456, 1433, 40, 1017, 552, 296, - 1273, 680, 168, 1145, 889, 424, 1401, 761, 104, 1081, 616, 360, - 1337, 825, 232, 1209, 953, 488, 1465, 745, 24, 1001, 536, 280, - 1257, 664, 152, 1129, 873, 408, 1385, 728, 88, 1065, 600, 344, - 1321, 809, 216, 1193, 937, 472, 1449, 56, 1033, 568, 312, 1289, - 696, 184, 1161, 905, 440, 1417, 777, 120, 1097, 632, 376, 1353, - 841, 248, 1225, 969, 504, 1481, 4, 981, 516, 260, 1237, 644, - 132, 1109, 853, 388, 1365, 708, 68, 1045, 580, 324, 1301, 789, - 196, 1173, 917, 452, 1429, 36, 1013, 548, 292, 1269, 676, 164, - 1141, 885, 420, 1397, 757, 100, 1077, 612, 356, 1333, 821, 228, - 1205, 949, 484, 1461, 740, 20, 997, 532, 276, 1253, 660, 148, - 1125, 869, 404, 1381, 724, 84, 1061, 596, 340, 1317, 805, 212, - 1189, 933, 468, 1445, 52, 1029, 564, 308, 1285, 692, 180, 1157, - 901, 436, 1413, 773, 116, 1093, 628, 372, 1349, 837, 244, 1221, - 965, 500, 1477, 12, 989, 524, 268, 1245, 652, 140, 1117, 861, - 396, 1373, 716, 76, 1053, 588, 332, 1309, 797, 204, 1181, 925, - 460, 1437, 44, 1021, 556, 300, 1277, 684, 172, 1149, 893, 428, - 1405, 765, 108, 1085, 620, 364, 1341, 829, 236, 1213, 957, 492, - 1469, 749, 28, 1005, 540, 284, 1261, 668, 156, 1133, 877, 412, - 1389, 732, 92, 1069, 604, 348, 1325, 813, 220, 1197, 941, 476, - 1453, 60, 1037, 572, 316, 1293, 700, 188, 1165, 909, 444, 1421, - 781, 124, 1101, 636, 380, 1357, 845, 252, 1229, 973, 508, 1485, - 2, 979, 514, 258, 1235, 642, 130, 1107, 851, 386, 1363, 706, - 66, 1043, 578, 322, 1299, 787, 194, 1171, 915, 450, 1427, 34, - 1011, 546, 290, 1267, 674, 162, 1139, 883, 418, 1395, 755, 98, - 1075, 610, 354, 1331, 819, 226, 1203, 947, 482, 1459, 738, 18, - 995, 530, 274, 1251, 658, 146, 1123, 867, 402, 1379, 722, 82, - 1059, 594, 338, 1315, 803, 210, 1187, 931, 466, 1443, 50, 1027, - 562, 306, 1283, 690, 178, 1155, 899, 434, 1411, 771, 114, 1091, - 626, 370, 1347, 835, 242, 1219, 963, 498, 1475, 10, 987, 522, - 266, 1243, 650, 138, 1115, 859, 394, 1371, 714, 74, 1051, 586, - 330, 1307, 795, 202, 1179, 923, 458, 1435, 42, 1019, 554, 298, - 1275, 682, 170, 1147, 891, 426, 1403, 763, 106, 1083, 618, 362, - 1339, 827, 234, 1211, 955, 490, 1467, 747, 26, 1003, 538, 282, - 1259, 666, 154, 1131, 875, 410, 1387, 730, 90, 1067, 602, 346, - 1323, 811, 218, 1195, 939, 474, 1451, 58, 1035, 570, 314, 1291, - 698, 186, 1163, 907, 442, 1419, 779, 122, 1099, 634, 378, 1355, - 843, 250, 1227, 971, 506, 1483, 6, 983, 518, 262, 1239, 646, - 134, 1111, 855, 390, 1367, 710, 70, 1047, 582, 326, 1303, 791, - 198, 1175, 919, 454, 1431, 38, 1015, 550, 294, 1271, 678, 166, - 1143, 887, 422, 1399, 759, 102, 1079, 614, 358, 1335, 823, 230, - 1207, 951, 486, 1463, 742, 22, 999, 534, 278, 1255, 662, 150, - 1127, 871, 406, 1383, 726, 86, 1063, 598, 342, 1319, 807, 214, - 1191, 935, 470, 1447, 54, 1031, 566, 310, 1287, 694, 182, 1159, - 903, 438, 1415, 775, 118, 1095, 630, 374, 1351, 839, 246, 1223, - 967, 502, 1479, 14, 991, 526, 270, 1247, 654, 142, 1119, 863, - 398, 1375, 718, 78, 1055, 590, 334, 1311, 799, 206, 1183, 927, - 462, 1439, 46, 1023, 558, 302, 1279, 686, 174, 1151, 895, 430, - 1407, 767, 110, 1087, 622, 366, 1343, 831, 238, 1215, 959, 494, - 1471, 751, 30, 1007, 542, 286, 1263, 670, 158, 1135, 879, 414, - 1391, 734, 94, 1071, 606, 350, 1327, 815, 222, 1199, 943, 478, - 1455, 62, 1039, 574, 318, 1295, 702, 190, 1167, 911, 446, 1423, - 783, 126, 1103, 638, 382, 1359, 847, 254, 1231, 975, 510, 1487, - 744, 1, 978, 513, 257, 1234, 641, 129, 1106, 850, 385, 1362, - 705, 65, 1042, 577, 321, 1298, 786, 193, 1170, 914, 449, 1426, - 33, 1010, 545, 289, 1266, 673, 161, 1138, 882, 417, 1394, 754, - 97, 1074, 609, 353, 1330, 818, 225, 1202, 946, 481, 1458, 737, - 17, 994, 529, 273, 1250, 657, 145, 1122, 866, 401, 1378, 721, - 81, 1058, 593, 337, 1314, 802, 209, 1186, 930, 465, 1442, 49, - 1026, 561, 305, 1282, 689, 177, 1154, 898, 433, 1410, 770, 113, - 1090, 625, 369, 1346, 834, 241, 1218, 962, 497, 1474, 9, 986, - 521, 265, 1242, 649, 137, 1114, 858, 393, 1370, 713, 73, 1050, - 585, 329, 1306, 794, 201, 1178, 922, 457, 1434, 41, 1018, 553, - 297, 1274, 681, 169, 1146, 890, 425, 1402, 762, 105, 1082, 617, - 361, 1338, 826, 233, 1210, 954, 489, 1466, 746, 25, 1002, 537, - 281, 1258, 665, 153, 1130, 874, 409, 1386, 729, 89, 1066, 601, - 345, 1322, 810, 217, 1194, 938, 473, 1450, 57, 1034, 569, 313, - 1290, 697, 185, 1162, 906, 441, 1418, 778, 121, 1098, 633, 377, - 1354, 842, 249, 1226, 970, 505, 1482, 5, 982, 517, 261, 1238, - 645, 133, 1110, 854, 389, 1366, 709, 69, 1046, 581, 325, 1302, - 790, 197, 1174, 918, 453, 1430, 37, 1014, 549, 293, 1270, 677, - 165, 1142, 886, 421, 1398, 758, 101, 1078, 613, 357, 1334, 822, - 229, 1206, 950, 485, 1462, 741, 21, 998, 533, 277, 1254, 661, - 149, 1126, 870, 405, 1382, 725, 85, 1062, 597, 341, 1318, 806, - 213, 1190, 934, 469, 1446, 53, 1030, 565, 309, 1286, 693, 181, - 1158, 902, 437, 1414, 774, 117, 1094, 629, 373, 1350, 838, 245, - 1222, 966, 501, 1478, 13, 990, 525, 269, 1246, 653, 141, 1118, - 862, 397, 1374, 717, 77, 1054, 589, 333, 1310, 798, 205, 1182, - 926, 461, 1438, 45, 1022, 557, 301, 1278, 685, 173, 1150, 894, - 429, 1406, 766, 109, 1086, 621, 365, 1342, 830, 237, 1214, 958, - 493, 1470, 750, 29, 1006, 541, 285, 1262, 669, 157, 1134, 878, - 413, 1390, 733, 93, 1070, 605, 349, 1326, 814, 221, 1198, 942, - 477, 1454, 61, 1038, 573, 317, 1294, 701, 189, 1166, 910, 445, - 1422, 782, 125, 1102, 637, 381, 1358, 846, 253, 1230, 974, 509, - 1486, 3, 980, 515, 259, 1236, 643, 131, 1108, 852, 387, 1364, - 707, 67, 1044, 579, 323, 1300, 788, 195, 1172, 916, 451, 1428, - 35, 1012, 547, 291, 1268, 675, 163, 1140, 884, 419, 1396, 756, - 99, 1076, 611, 355, 1332, 820, 227, 1204, 948, 483, 1460, 739, - 19, 996, 531, 275, 1252, 659, 147, 1124, 868, 403, 1380, 723, - 83, 1060, 595, 339, 1316, 804, 211, 1188, 932, 467, 1444, 51, - 1028, 563, 307, 1284, 691, 179, 1156, 900, 435, 1412, 772, 115, - 1092, 627, 371, 1348, 836, 243, 1220, 964, 499, 1476, 11, 988, - 523, 267, 1244, 651, 139, 1116, 860, 395, 1372, 715, 75, 1052, - 587, 331, 1308, 796, 203, 1180, 924, 459, 1436, 43, 1020, 555, - 299, 1276, 683, 171, 1148, 892, 427, 1404, 764, 107, 1084, 619, - 363, 1340, 828, 235, 1212, 956, 491, 1468, 748, 27, 1004, 539, - 283, 1260, 667, 155, 1132, 876, 411, 1388, 731, 91, 1068, 603, - 347, 1324, 812, 219, 1196, 940, 475, 1452, 59, 1036, 571, 315, - 1292, 699, 187, 1164, 908, 443, 1420, 780, 123, 1100, 635, 379, - 1356, 844, 251, 1228, 972, 507, 1484, 7, 984, 519, 263, 1240, - 647, 135, 1112, 856, 391, 1368, 711, 71, 1048, 583, 327, 1304, - 792, 199, 1176, 920, 455, 1432, 39, 1016, 551, 295, 1272, 679, - 167, 1144, 888, 423, 1400, 760, 103, 1080, 615, 359, 1336, 824, - 231, 1208, 952, 487, 1464, 743, 23, 1000, 535, 279, 1256, 663, - 151, 1128, 872, 407, 1384, 727, 87, 1064, 599, 343, 1320, 808, - 215, 1192, 936, 471, 1448, 55, 1032, 567, 311, 1288, 695, 183, - 1160, 904, 439, 1416, 776, 119, 1096, 631, 375, 1352, 840, 247, - 1224, 968, 503, 1480, 15, 992, 527, 271, 1248, 655, 143, 1120, - 864, 399, 1376, 719, 79, 1056, 591, 335, 1312, 800, 207, 1184, - 928, 463, 1440, 47, 1024, 559, 303, 1280, 687, 175, 1152, 896, - 431, 1408, 768, 111, 1088, 623, 367, 1344, 832, 239, 1216, 960, - 495, 1472, 752, 31, 1008, 543, 287, 1264, 671, 159, 1136, 880, - 415, 1392, 735, 95, 1072, 607, 351, 1328, 816, 223, 1200, 944, - 479, 1456, 63, 1040, 575, 319, 1296, 703, 191, 1168, 912, 447, - 1424, 784, 127, 1104, 639, 383, 1360, 848, 255, 1232, 976, 511, - 1488]; - - return (unsafe { *PERM1489.get_unchecked((index % 1489) as usize) } as u32 * 2217121 + - unsafe { *PERM1489.get_unchecked(((index / 1489) % 1489) as usize) } as u32 * 1489 + - unsafe { - *PERM1489.get_unchecked(((index / 2217121) % 1489) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3301293169u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1493(index: u32) -> f32 { - const PERM1493: [u16; 1493] = [0, 981, 512, 256, 1237, 640, 128, 1109, 853, 384, 1365, 704, - 64, 1045, 576, 320, 1301, 789, 192, 1173, 917, 448, 1429, 32, - 1013, 544, 288, 1269, 672, 160, 1141, 885, 416, 1397, 757, 96, - 1077, 608, 352, 1333, 821, 224, 1205, 949, 480, 1461, 736, 16, - 997, 528, 272, 1253, 656, 144, 1125, 869, 400, 1381, 720, 80, - 1061, 592, 336, 1317, 805, 208, 1189, 933, 464, 1445, 48, 1029, - 560, 304, 1285, 688, 176, 1157, 901, 432, 1413, 773, 112, 1093, - 624, 368, 1349, 837, 240, 1221, 965, 496, 1477, 8, 989, 520, - 264, 1245, 648, 136, 1117, 861, 392, 1373, 712, 72, 1053, 584, - 328, 1309, 797, 200, 1181, 925, 456, 1437, 40, 1021, 552, 296, - 1277, 680, 168, 1149, 893, 424, 1405, 765, 104, 1085, 616, 360, - 1341, 829, 232, 1213, 957, 488, 1469, 749, 24, 1005, 536, 280, - 1261, 664, 152, 1133, 877, 408, 1389, 728, 88, 1069, 600, 344, - 1325, 813, 216, 1197, 941, 472, 1453, 56, 1037, 568, 312, 1293, - 696, 184, 1165, 909, 440, 1421, 781, 120, 1101, 632, 376, 1357, - 845, 248, 1229, 973, 504, 1485, 744, 4, 985, 516, 260, 1241, - 644, 132, 1113, 857, 388, 1369, 708, 68, 1049, 580, 324, 1305, - 793, 196, 1177, 921, 452, 1433, 36, 1017, 548, 292, 1273, 676, - 164, 1145, 889, 420, 1401, 761, 100, 1081, 612, 356, 1337, 825, - 228, 1209, 953, 484, 1465, 740, 20, 1001, 532, 276, 1257, 660, - 148, 1129, 873, 404, 1385, 724, 84, 1065, 596, 340, 1321, 809, - 212, 1193, 937, 468, 1449, 52, 1033, 564, 308, 1289, 692, 180, - 1161, 905, 436, 1417, 777, 116, 1097, 628, 372, 1353, 841, 244, - 1225, 969, 500, 1481, 12, 993, 524, 268, 1249, 652, 140, 1121, - 865, 396, 1377, 716, 76, 1057, 588, 332, 1313, 801, 204, 1185, - 929, 460, 1441, 44, 1025, 556, 300, 1281, 684, 172, 1153, 897, - 428, 1409, 769, 108, 1089, 620, 364, 1345, 833, 236, 1217, 961, - 492, 1473, 753, 28, 1009, 540, 284, 1265, 668, 156, 1137, 881, - 412, 1393, 732, 92, 1073, 604, 348, 1329, 817, 220, 1201, 945, - 476, 1457, 60, 1041, 572, 316, 1297, 700, 188, 1169, 913, 444, - 1425, 785, 124, 1105, 636, 380, 1361, 849, 252, 1233, 977, 508, - 1489, 2, 983, 514, 258, 1239, 642, 130, 1111, 855, 386, 1367, - 706, 66, 1047, 578, 322, 1303, 791, 194, 1175, 919, 450, 1431, - 34, 1015, 546, 290, 1271, 674, 162, 1143, 887, 418, 1399, 759, - 98, 1079, 610, 354, 1335, 823, 226, 1207, 951, 482, 1463, 738, - 18, 999, 530, 274, 1255, 658, 146, 1127, 871, 402, 1383, 722, - 82, 1063, 594, 338, 1319, 807, 210, 1191, 935, 466, 1447, 50, - 1031, 562, 306, 1287, 690, 178, 1159, 903, 434, 1415, 775, 114, - 1095, 626, 370, 1351, 839, 242, 1223, 967, 498, 1479, 10, 991, - 522, 266, 1247, 650, 138, 1119, 863, 394, 1375, 714, 74, 1055, - 586, 330, 1311, 799, 202, 1183, 927, 458, 1439, 42, 1023, 554, - 298, 1279, 682, 170, 1151, 895, 426, 1407, 767, 106, 1087, 618, - 362, 1343, 831, 234, 1215, 959, 490, 1471, 751, 26, 1007, 538, - 282, 1263, 666, 154, 1135, 879, 410, 1391, 730, 90, 1071, 602, - 346, 1327, 815, 218, 1199, 943, 474, 1455, 58, 1039, 570, 314, - 1295, 698, 186, 1167, 911, 442, 1423, 783, 122, 1103, 634, 378, - 1359, 847, 250, 1231, 975, 506, 1487, 747, 6, 987, 518, 262, - 1243, 646, 134, 1115, 859, 390, 1371, 710, 70, 1051, 582, 326, - 1307, 795, 198, 1179, 923, 454, 1435, 38, 1019, 550, 294, 1275, - 678, 166, 1147, 891, 422, 1403, 763, 102, 1083, 614, 358, 1339, - 827, 230, 1211, 955, 486, 1467, 742, 22, 1003, 534, 278, 1259, - 662, 150, 1131, 875, 406, 1387, 726, 86, 1067, 598, 342, 1323, - 811, 214, 1195, 939, 470, 1451, 54, 1035, 566, 310, 1291, 694, - 182, 1163, 907, 438, 1419, 779, 118, 1099, 630, 374, 1355, 843, - 246, 1227, 971, 502, 1483, 14, 995, 526, 270, 1251, 654, 142, - 1123, 867, 398, 1379, 718, 78, 1059, 590, 334, 1315, 803, 206, - 1187, 931, 462, 1443, 46, 1027, 558, 302, 1283, 686, 174, 1155, - 899, 430, 1411, 771, 110, 1091, 622, 366, 1347, 835, 238, 1219, - 963, 494, 1475, 755, 30, 1011, 542, 286, 1267, 670, 158, 1139, - 883, 414, 1395, 734, 94, 1075, 606, 350, 1331, 819, 222, 1203, - 947, 478, 1459, 62, 1043, 574, 318, 1299, 702, 190, 1171, 915, - 446, 1427, 787, 126, 1107, 638, 382, 1363, 851, 254, 1235, 979, - 510, 1491, 746, 1, 982, 513, 257, 1238, 641, 129, 1110, 854, - 385, 1366, 705, 65, 1046, 577, 321, 1302, 790, 193, 1174, 918, - 449, 1430, 33, 1014, 545, 289, 1270, 673, 161, 1142, 886, 417, - 1398, 758, 97, 1078, 609, 353, 1334, 822, 225, 1206, 950, 481, - 1462, 737, 17, 998, 529, 273, 1254, 657, 145, 1126, 870, 401, - 1382, 721, 81, 1062, 593, 337, 1318, 806, 209, 1190, 934, 465, - 1446, 49, 1030, 561, 305, 1286, 689, 177, 1158, 902, 433, 1414, - 774, 113, 1094, 625, 369, 1350, 838, 241, 1222, 966, 497, 1478, - 9, 990, 521, 265, 1246, 649, 137, 1118, 862, 393, 1374, 713, - 73, 1054, 585, 329, 1310, 798, 201, 1182, 926, 457, 1438, 41, - 1022, 553, 297, 1278, 681, 169, 1150, 894, 425, 1406, 766, 105, - 1086, 617, 361, 1342, 830, 233, 1214, 958, 489, 1470, 750, 25, - 1006, 537, 281, 1262, 665, 153, 1134, 878, 409, 1390, 729, 89, - 1070, 601, 345, 1326, 814, 217, 1198, 942, 473, 1454, 57, 1038, - 569, 313, 1294, 697, 185, 1166, 910, 441, 1422, 782, 121, 1102, - 633, 377, 1358, 846, 249, 1230, 974, 505, 1486, 745, 5, 986, - 517, 261, 1242, 645, 133, 1114, 858, 389, 1370, 709, 69, 1050, - 581, 325, 1306, 794, 197, 1178, 922, 453, 1434, 37, 1018, 549, - 293, 1274, 677, 165, 1146, 890, 421, 1402, 762, 101, 1082, 613, - 357, 1338, 826, 229, 1210, 954, 485, 1466, 741, 21, 1002, 533, - 277, 1258, 661, 149, 1130, 874, 405, 1386, 725, 85, 1066, 597, - 341, 1322, 810, 213, 1194, 938, 469, 1450, 53, 1034, 565, 309, - 1290, 693, 181, 1162, 906, 437, 1418, 778, 117, 1098, 629, 373, - 1354, 842, 245, 1226, 970, 501, 1482, 13, 994, 525, 269, 1250, - 653, 141, 1122, 866, 397, 1378, 717, 77, 1058, 589, 333, 1314, - 802, 205, 1186, 930, 461, 1442, 45, 1026, 557, 301, 1282, 685, - 173, 1154, 898, 429, 1410, 770, 109, 1090, 621, 365, 1346, 834, - 237, 1218, 962, 493, 1474, 754, 29, 1010, 541, 285, 1266, 669, - 157, 1138, 882, 413, 1394, 733, 93, 1074, 605, 349, 1330, 818, - 221, 1202, 946, 477, 1458, 61, 1042, 573, 317, 1298, 701, 189, - 1170, 914, 445, 1426, 786, 125, 1106, 637, 381, 1362, 850, 253, - 1234, 978, 509, 1490, 3, 984, 515, 259, 1240, 643, 131, 1112, - 856, 387, 1368, 707, 67, 1048, 579, 323, 1304, 792, 195, 1176, - 920, 451, 1432, 35, 1016, 547, 291, 1272, 675, 163, 1144, 888, - 419, 1400, 760, 99, 1080, 611, 355, 1336, 824, 227, 1208, 952, - 483, 1464, 739, 19, 1000, 531, 275, 1256, 659, 147, 1128, 872, - 403, 1384, 723, 83, 1064, 595, 339, 1320, 808, 211, 1192, 936, - 467, 1448, 51, 1032, 563, 307, 1288, 691, 179, 1160, 904, 435, - 1416, 776, 115, 1096, 627, 371, 1352, 840, 243, 1224, 968, 499, - 1480, 11, 992, 523, 267, 1248, 651, 139, 1120, 864, 395, 1376, - 715, 75, 1056, 587, 331, 1312, 800, 203, 1184, 928, 459, 1440, - 43, 1024, 555, 299, 1280, 683, 171, 1152, 896, 427, 1408, 768, - 107, 1088, 619, 363, 1344, 832, 235, 1216, 960, 491, 1472, 752, - 27, 1008, 539, 283, 1264, 667, 155, 1136, 880, 411, 1392, 731, - 91, 1072, 603, 347, 1328, 816, 219, 1200, 944, 475, 1456, 59, - 1040, 571, 315, 1296, 699, 187, 1168, 912, 443, 1424, 784, 123, - 1104, 635, 379, 1360, 848, 251, 1232, 976, 507, 1488, 748, 7, - 988, 519, 263, 1244, 647, 135, 1116, 860, 391, 1372, 711, 71, - 1052, 583, 327, 1308, 796, 199, 1180, 924, 455, 1436, 39, 1020, - 551, 295, 1276, 679, 167, 1148, 892, 423, 1404, 764, 103, 1084, - 615, 359, 1340, 828, 231, 1212, 956, 487, 1468, 743, 23, 1004, - 535, 279, 1260, 663, 151, 1132, 876, 407, 1388, 727, 87, 1068, - 599, 343, 1324, 812, 215, 1196, 940, 471, 1452, 55, 1036, 567, - 311, 1292, 695, 183, 1164, 908, 439, 1420, 780, 119, 1100, 631, - 375, 1356, 844, 247, 1228, 972, 503, 1484, 15, 996, 527, 271, - 1252, 655, 143, 1124, 868, 399, 1380, 719, 79, 1060, 591, 335, - 1316, 804, 207, 1188, 932, 463, 1444, 47, 1028, 559, 303, 1284, - 687, 175, 1156, 900, 431, 1412, 772, 111, 1092, 623, 367, 1348, - 836, 239, 1220, 964, 495, 1476, 756, 31, 1012, 543, 287, 1268, - 671, 159, 1140, 884, 415, 1396, 735, 95, 1076, 607, 351, 1332, - 820, 223, 1204, 948, 479, 1460, 63, 1044, 575, 319, 1300, 703, - 191, 1172, 916, 447, 1428, 788, 127, 1108, 639, 383, 1364, 852, - 255, 1236, 980, 511, 1492]; - - return (unsafe { *PERM1493.get_unchecked((index % 1493) as usize) } as u32 * 2229049 + - unsafe { *PERM1493.get_unchecked(((index / 1493) % 1493) as usize) } as u32 * 1493 + - unsafe { - *PERM1493.get_unchecked(((index / 2229049) % 1493) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3327970157u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1499(index: u32) -> f32 { - const PERM1499: [u16; 1499] = [0, 987, 512, 256, 1243, 640, 128, 1115, 859, 384, 1371, 704, - 64, 1051, 576, 320, 1307, 795, 192, 1179, 923, 448, 1435, 32, - 1019, 544, 288, 1275, 672, 160, 1147, 891, 416, 1403, 763, 96, - 1083, 608, 352, 1339, 827, 224, 1211, 955, 480, 1467, 736, 16, - 1003, 528, 272, 1259, 656, 144, 1131, 875, 400, 1387, 720, 80, - 1067, 592, 336, 1323, 811, 208, 1195, 939, 464, 1451, 48, 1035, - 560, 304, 1291, 688, 176, 1163, 907, 432, 1419, 779, 112, 1099, - 624, 368, 1355, 843, 240, 1227, 971, 496, 1483, 744, 8, 995, - 520, 264, 1251, 648, 136, 1123, 867, 392, 1379, 712, 72, 1059, - 584, 328, 1315, 803, 200, 1187, 931, 456, 1443, 40, 1027, 552, - 296, 1283, 680, 168, 1155, 899, 424, 1411, 771, 104, 1091, 616, - 360, 1347, 835, 232, 1219, 963, 488, 1475, 755, 24, 1011, 536, - 280, 1267, 664, 152, 1139, 883, 408, 1395, 728, 88, 1075, 600, - 344, 1331, 819, 216, 1203, 947, 472, 1459, 56, 1043, 568, 312, - 1299, 696, 184, 1171, 915, 440, 1427, 787, 120, 1107, 632, 376, - 1363, 851, 248, 1235, 979, 504, 1491, 4, 991, 516, 260, 1247, - 644, 132, 1119, 863, 388, 1375, 708, 68, 1055, 580, 324, 1311, - 799, 196, 1183, 927, 452, 1439, 36, 1023, 548, 292, 1279, 676, - 164, 1151, 895, 420, 1407, 767, 100, 1087, 612, 356, 1343, 831, - 228, 1215, 959, 484, 1471, 740, 20, 1007, 532, 276, 1263, 660, - 148, 1135, 879, 404, 1391, 724, 84, 1071, 596, 340, 1327, 815, - 212, 1199, 943, 468, 1455, 52, 1039, 564, 308, 1295, 692, 180, - 1167, 911, 436, 1423, 783, 116, 1103, 628, 372, 1359, 847, 244, - 1231, 975, 500, 1487, 751, 12, 999, 524, 268, 1255, 652, 140, - 1127, 871, 396, 1383, 716, 76, 1063, 588, 332, 1319, 807, 204, - 1191, 935, 460, 1447, 44, 1031, 556, 300, 1287, 684, 172, 1159, - 903, 428, 1415, 775, 108, 1095, 620, 364, 1351, 839, 236, 1223, - 967, 492, 1479, 759, 28, 1015, 540, 284, 1271, 668, 156, 1143, - 887, 412, 1399, 732, 92, 1079, 604, 348, 1335, 823, 220, 1207, - 951, 476, 1463, 60, 1047, 572, 316, 1303, 700, 188, 1175, 919, - 444, 1431, 791, 124, 1111, 636, 380, 1367, 855, 252, 1239, 983, - 508, 1495, 748, 2, 989, 514, 258, 1245, 642, 130, 1117, 861, - 386, 1373, 706, 66, 1053, 578, 322, 1309, 797, 194, 1181, 925, - 450, 1437, 34, 1021, 546, 290, 1277, 674, 162, 1149, 893, 418, - 1405, 765, 98, 1085, 610, 354, 1341, 829, 226, 1213, 957, 482, - 1469, 738, 18, 1005, 530, 274, 1261, 658, 146, 1133, 877, 402, - 1389, 722, 82, 1069, 594, 338, 1325, 813, 210, 1197, 941, 466, - 1453, 50, 1037, 562, 306, 1293, 690, 178, 1165, 909, 434, 1421, - 781, 114, 1101, 626, 370, 1357, 845, 242, 1229, 973, 498, 1485, - 746, 10, 997, 522, 266, 1253, 650, 138, 1125, 869, 394, 1381, - 714, 74, 1061, 586, 330, 1317, 805, 202, 1189, 933, 458, 1445, - 42, 1029, 554, 298, 1285, 682, 170, 1157, 901, 426, 1413, 773, - 106, 1093, 618, 362, 1349, 837, 234, 1221, 965, 490, 1477, 757, - 26, 1013, 538, 282, 1269, 666, 154, 1141, 885, 410, 1397, 730, - 90, 1077, 602, 346, 1333, 821, 218, 1205, 949, 474, 1461, 58, - 1045, 570, 314, 1301, 698, 186, 1173, 917, 442, 1429, 789, 122, - 1109, 634, 378, 1365, 853, 250, 1237, 981, 506, 1493, 6, 993, - 518, 262, 1249, 646, 134, 1121, 865, 390, 1377, 710, 70, 1057, - 582, 326, 1313, 801, 198, 1185, 929, 454, 1441, 38, 1025, 550, - 294, 1281, 678, 166, 1153, 897, 422, 1409, 769, 102, 1089, 614, - 358, 1345, 833, 230, 1217, 961, 486, 1473, 742, 22, 1009, 534, - 278, 1265, 662, 150, 1137, 881, 406, 1393, 726, 86, 1073, 598, - 342, 1329, 817, 214, 1201, 945, 470, 1457, 54, 1041, 566, 310, - 1297, 694, 182, 1169, 913, 438, 1425, 785, 118, 1105, 630, 374, - 1361, 849, 246, 1233, 977, 502, 1489, 753, 14, 1001, 526, 270, - 1257, 654, 142, 1129, 873, 398, 1385, 718, 78, 1065, 590, 334, - 1321, 809, 206, 1193, 937, 462, 1449, 46, 1033, 558, 302, 1289, - 686, 174, 1161, 905, 430, 1417, 777, 110, 1097, 622, 366, 1353, - 841, 238, 1225, 969, 494, 1481, 761, 30, 1017, 542, 286, 1273, - 670, 158, 1145, 889, 414, 1401, 734, 94, 1081, 606, 350, 1337, - 825, 222, 1209, 953, 478, 1465, 62, 1049, 574, 318, 1305, 702, - 190, 1177, 921, 446, 1433, 793, 126, 1113, 638, 382, 1369, 857, - 254, 1241, 985, 510, 1497, 749, 1, 988, 513, 257, 1244, 641, - 129, 1116, 860, 385, 1372, 705, 65, 1052, 577, 321, 1308, 796, - 193, 1180, 924, 449, 1436, 33, 1020, 545, 289, 1276, 673, 161, - 1148, 892, 417, 1404, 764, 97, 1084, 609, 353, 1340, 828, 225, - 1212, 956, 481, 1468, 737, 17, 1004, 529, 273, 1260, 657, 145, - 1132, 876, 401, 1388, 721, 81, 1068, 593, 337, 1324, 812, 209, - 1196, 940, 465, 1452, 49, 1036, 561, 305, 1292, 689, 177, 1164, - 908, 433, 1420, 780, 113, 1100, 625, 369, 1356, 844, 241, 1228, - 972, 497, 1484, 745, 9, 996, 521, 265, 1252, 649, 137, 1124, - 868, 393, 1380, 713, 73, 1060, 585, 329, 1316, 804, 201, 1188, - 932, 457, 1444, 41, 1028, 553, 297, 1284, 681, 169, 1156, 900, - 425, 1412, 772, 105, 1092, 617, 361, 1348, 836, 233, 1220, 964, - 489, 1476, 756, 25, 1012, 537, 281, 1268, 665, 153, 1140, 884, - 409, 1396, 729, 89, 1076, 601, 345, 1332, 820, 217, 1204, 948, - 473, 1460, 57, 1044, 569, 313, 1300, 697, 185, 1172, 916, 441, - 1428, 788, 121, 1108, 633, 377, 1364, 852, 249, 1236, 980, 505, - 1492, 5, 992, 517, 261, 1248, 645, 133, 1120, 864, 389, 1376, - 709, 69, 1056, 581, 325, 1312, 800, 197, 1184, 928, 453, 1440, - 37, 1024, 549, 293, 1280, 677, 165, 1152, 896, 421, 1408, 768, - 101, 1088, 613, 357, 1344, 832, 229, 1216, 960, 485, 1472, 741, - 21, 1008, 533, 277, 1264, 661, 149, 1136, 880, 405, 1392, 725, - 85, 1072, 597, 341, 1328, 816, 213, 1200, 944, 469, 1456, 53, - 1040, 565, 309, 1296, 693, 181, 1168, 912, 437, 1424, 784, 117, - 1104, 629, 373, 1360, 848, 245, 1232, 976, 501, 1488, 752, 13, - 1000, 525, 269, 1256, 653, 141, 1128, 872, 397, 1384, 717, 77, - 1064, 589, 333, 1320, 808, 205, 1192, 936, 461, 1448, 45, 1032, - 557, 301, 1288, 685, 173, 1160, 904, 429, 1416, 776, 109, 1096, - 621, 365, 1352, 840, 237, 1224, 968, 493, 1480, 760, 29, 1016, - 541, 285, 1272, 669, 157, 1144, 888, 413, 1400, 733, 93, 1080, - 605, 349, 1336, 824, 221, 1208, 952, 477, 1464, 61, 1048, 573, - 317, 1304, 701, 189, 1176, 920, 445, 1432, 792, 125, 1112, 637, - 381, 1368, 856, 253, 1240, 984, 509, 1496, 750, 3, 990, 515, - 259, 1246, 643, 131, 1118, 862, 387, 1374, 707, 67, 1054, 579, - 323, 1310, 798, 195, 1182, 926, 451, 1438, 35, 1022, 547, 291, - 1278, 675, 163, 1150, 894, 419, 1406, 766, 99, 1086, 611, 355, - 1342, 830, 227, 1214, 958, 483, 1470, 739, 19, 1006, 531, 275, - 1262, 659, 147, 1134, 878, 403, 1390, 723, 83, 1070, 595, 339, - 1326, 814, 211, 1198, 942, 467, 1454, 51, 1038, 563, 307, 1294, - 691, 179, 1166, 910, 435, 1422, 782, 115, 1102, 627, 371, 1358, - 846, 243, 1230, 974, 499, 1486, 747, 11, 998, 523, 267, 1254, - 651, 139, 1126, 870, 395, 1382, 715, 75, 1062, 587, 331, 1318, - 806, 203, 1190, 934, 459, 1446, 43, 1030, 555, 299, 1286, 683, - 171, 1158, 902, 427, 1414, 774, 107, 1094, 619, 363, 1350, 838, - 235, 1222, 966, 491, 1478, 758, 27, 1014, 539, 283, 1270, 667, - 155, 1142, 886, 411, 1398, 731, 91, 1078, 603, 347, 1334, 822, - 219, 1206, 950, 475, 1462, 59, 1046, 571, 315, 1302, 699, 187, - 1174, 918, 443, 1430, 790, 123, 1110, 635, 379, 1366, 854, 251, - 1238, 982, 507, 1494, 7, 994, 519, 263, 1250, 647, 135, 1122, - 866, 391, 1378, 711, 71, 1058, 583, 327, 1314, 802, 199, 1186, - 930, 455, 1442, 39, 1026, 551, 295, 1282, 679, 167, 1154, 898, - 423, 1410, 770, 103, 1090, 615, 359, 1346, 834, 231, 1218, 962, - 487, 1474, 743, 23, 1010, 535, 279, 1266, 663, 151, 1138, 882, - 407, 1394, 727, 87, 1074, 599, 343, 1330, 818, 215, 1202, 946, - 471, 1458, 55, 1042, 567, 311, 1298, 695, 183, 1170, 914, 439, - 1426, 786, 119, 1106, 631, 375, 1362, 850, 247, 1234, 978, 503, - 1490, 754, 15, 1002, 527, 271, 1258, 655, 143, 1130, 874, 399, - 1386, 719, 79, 1066, 591, 335, 1322, 810, 207, 1194, 938, 463, - 1450, 47, 1034, 559, 303, 1290, 687, 175, 1162, 906, 431, 1418, - 778, 111, 1098, 623, 367, 1354, 842, 239, 1226, 970, 495, 1482, - 762, 31, 1018, 543, 287, 1274, 671, 159, 1146, 890, 415, 1402, - 735, 95, 1082, 607, 351, 1338, 826, 223, 1210, 954, 479, 1466, - 63, 1050, 575, 319, 1306, 703, 191, 1178, 922, 447, 1434, 794, - 127, 1114, 639, 383, 1370, 858, 255, 1242, 986, 511, 1498]; - - return (unsafe { *PERM1499.get_unchecked((index % 1499) as usize) } as u32 * 2247001 + - unsafe { *PERM1499.get_unchecked(((index / 1499) % 1499) as usize) } as u32 * 1499 + - unsafe { - *PERM1499.get_unchecked(((index / 2247001) % 1499) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3368254499u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1511(index: u32) -> f32 { - const PERM1511: [u16; 1511] = [0, 999, 512, 256, 1255, 640, 128, 1127, 871, 384, 1383, 704, - 64, 1063, 576, 320, 1319, 807, 192, 1191, 935, 448, 1447, 736, - 32, 1031, 544, 288, 1287, 672, 160, 1159, 903, 416, 1415, 775, - 96, 1095, 608, 352, 1351, 839, 224, 1223, 967, 480, 1479, 16, - 1015, 528, 272, 1271, 656, 144, 1143, 887, 400, 1399, 720, 80, - 1079, 592, 336, 1335, 823, 208, 1207, 951, 464, 1463, 759, 48, - 1047, 560, 304, 1303, 688, 176, 1175, 919, 432, 1431, 791, 112, - 1111, 624, 368, 1367, 855, 240, 1239, 983, 496, 1495, 8, 1007, - 520, 264, 1263, 648, 136, 1135, 879, 392, 1391, 712, 72, 1071, - 584, 328, 1327, 815, 200, 1199, 943, 456, 1455, 744, 40, 1039, - 552, 296, 1295, 680, 168, 1167, 911, 424, 1423, 783, 104, 1103, - 616, 360, 1359, 847, 232, 1231, 975, 488, 1487, 24, 1023, 536, - 280, 1279, 664, 152, 1151, 895, 408, 1407, 728, 88, 1087, 600, - 344, 1343, 831, 216, 1215, 959, 472, 1471, 767, 56, 1055, 568, - 312, 1311, 696, 184, 1183, 927, 440, 1439, 799, 120, 1119, 632, - 376, 1375, 863, 248, 1247, 991, 504, 1503, 752, 4, 1003, 516, - 260, 1259, 644, 132, 1131, 875, 388, 1387, 708, 68, 1067, 580, - 324, 1323, 811, 196, 1195, 939, 452, 1451, 740, 36, 1035, 548, - 292, 1291, 676, 164, 1163, 907, 420, 1419, 779, 100, 1099, 612, - 356, 1355, 843, 228, 1227, 971, 484, 1483, 20, 1019, 532, 276, - 1275, 660, 148, 1147, 891, 404, 1403, 724, 84, 1083, 596, 340, - 1339, 827, 212, 1211, 955, 468, 1467, 763, 52, 1051, 564, 308, - 1307, 692, 180, 1179, 923, 436, 1435, 795, 116, 1115, 628, 372, - 1371, 859, 244, 1243, 987, 500, 1499, 12, 1011, 524, 268, 1267, - 652, 140, 1139, 883, 396, 1395, 716, 76, 1075, 588, 332, 1331, - 819, 204, 1203, 947, 460, 1459, 748, 44, 1043, 556, 300, 1299, - 684, 172, 1171, 915, 428, 1427, 787, 108, 1107, 620, 364, 1363, - 851, 236, 1235, 979, 492, 1491, 28, 1027, 540, 284, 1283, 668, - 156, 1155, 899, 412, 1411, 732, 92, 1091, 604, 348, 1347, 835, - 220, 1219, 963, 476, 1475, 771, 60, 1059, 572, 316, 1315, 700, - 188, 1187, 931, 444, 1443, 803, 124, 1123, 636, 380, 1379, 867, - 252, 1251, 995, 508, 1507, 754, 2, 1001, 514, 258, 1257, 642, - 130, 1129, 873, 386, 1385, 706, 66, 1065, 578, 322, 1321, 809, - 194, 1193, 937, 450, 1449, 738, 34, 1033, 546, 290, 1289, 674, - 162, 1161, 905, 418, 1417, 777, 98, 1097, 610, 354, 1353, 841, - 226, 1225, 969, 482, 1481, 18, 1017, 530, 274, 1273, 658, 146, - 1145, 889, 402, 1401, 722, 82, 1081, 594, 338, 1337, 825, 210, - 1209, 953, 466, 1465, 761, 50, 1049, 562, 306, 1305, 690, 178, - 1177, 921, 434, 1433, 793, 114, 1113, 626, 370, 1369, 857, 242, - 1241, 985, 498, 1497, 10, 1009, 522, 266, 1265, 650, 138, 1137, - 881, 394, 1393, 714, 74, 1073, 586, 330, 1329, 817, 202, 1201, - 945, 458, 1457, 746, 42, 1041, 554, 298, 1297, 682, 170, 1169, - 913, 426, 1425, 785, 106, 1105, 618, 362, 1361, 849, 234, 1233, - 977, 490, 1489, 26, 1025, 538, 282, 1281, 666, 154, 1153, 897, - 410, 1409, 730, 90, 1089, 602, 346, 1345, 833, 218, 1217, 961, - 474, 1473, 769, 58, 1057, 570, 314, 1313, 698, 186, 1185, 929, - 442, 1441, 801, 122, 1121, 634, 378, 1377, 865, 250, 1249, 993, - 506, 1505, 757, 6, 1005, 518, 262, 1261, 646, 134, 1133, 877, - 390, 1389, 710, 70, 1069, 582, 326, 1325, 813, 198, 1197, 941, - 454, 1453, 742, 38, 1037, 550, 294, 1293, 678, 166, 1165, 909, - 422, 1421, 781, 102, 1101, 614, 358, 1357, 845, 230, 1229, 973, - 486, 1485, 22, 1021, 534, 278, 1277, 662, 150, 1149, 893, 406, - 1405, 726, 86, 1085, 598, 342, 1341, 829, 214, 1213, 957, 470, - 1469, 765, 54, 1053, 566, 310, 1309, 694, 182, 1181, 925, 438, - 1437, 797, 118, 1117, 630, 374, 1373, 861, 246, 1245, 989, 502, - 1501, 14, 1013, 526, 270, 1269, 654, 142, 1141, 885, 398, 1397, - 718, 78, 1077, 590, 334, 1333, 821, 206, 1205, 949, 462, 1461, - 750, 46, 1045, 558, 302, 1301, 686, 174, 1173, 917, 430, 1429, - 789, 110, 1109, 622, 366, 1365, 853, 238, 1237, 981, 494, 1493, - 30, 1029, 542, 286, 1285, 670, 158, 1157, 901, 414, 1413, 734, - 94, 1093, 606, 350, 1349, 837, 222, 1221, 965, 478, 1477, 773, - 62, 1061, 574, 318, 1317, 702, 190, 1189, 933, 446, 1445, 805, - 126, 1125, 638, 382, 1381, 869, 254, 1253, 997, 510, 1509, 755, - 1, 1000, 513, 257, 1256, 641, 129, 1128, 872, 385, 1384, 705, - 65, 1064, 577, 321, 1320, 808, 193, 1192, 936, 449, 1448, 737, - 33, 1032, 545, 289, 1288, 673, 161, 1160, 904, 417, 1416, 776, - 97, 1096, 609, 353, 1352, 840, 225, 1224, 968, 481, 1480, 17, - 1016, 529, 273, 1272, 657, 145, 1144, 888, 401, 1400, 721, 81, - 1080, 593, 337, 1336, 824, 209, 1208, 952, 465, 1464, 760, 49, - 1048, 561, 305, 1304, 689, 177, 1176, 920, 433, 1432, 792, 113, - 1112, 625, 369, 1368, 856, 241, 1240, 984, 497, 1496, 9, 1008, - 521, 265, 1264, 649, 137, 1136, 880, 393, 1392, 713, 73, 1072, - 585, 329, 1328, 816, 201, 1200, 944, 457, 1456, 745, 41, 1040, - 553, 297, 1296, 681, 169, 1168, 912, 425, 1424, 784, 105, 1104, - 617, 361, 1360, 848, 233, 1232, 976, 489, 1488, 25, 1024, 537, - 281, 1280, 665, 153, 1152, 896, 409, 1408, 729, 89, 1088, 601, - 345, 1344, 832, 217, 1216, 960, 473, 1472, 768, 57, 1056, 569, - 313, 1312, 697, 185, 1184, 928, 441, 1440, 800, 121, 1120, 633, - 377, 1376, 864, 249, 1248, 992, 505, 1504, 753, 5, 1004, 517, - 261, 1260, 645, 133, 1132, 876, 389, 1388, 709, 69, 1068, 581, - 325, 1324, 812, 197, 1196, 940, 453, 1452, 741, 37, 1036, 549, - 293, 1292, 677, 165, 1164, 908, 421, 1420, 780, 101, 1100, 613, - 357, 1356, 844, 229, 1228, 972, 485, 1484, 21, 1020, 533, 277, - 1276, 661, 149, 1148, 892, 405, 1404, 725, 85, 1084, 597, 341, - 1340, 828, 213, 1212, 956, 469, 1468, 764, 53, 1052, 565, 309, - 1308, 693, 181, 1180, 924, 437, 1436, 796, 117, 1116, 629, 373, - 1372, 860, 245, 1244, 988, 501, 1500, 13, 1012, 525, 269, 1268, - 653, 141, 1140, 884, 397, 1396, 717, 77, 1076, 589, 333, 1332, - 820, 205, 1204, 948, 461, 1460, 749, 45, 1044, 557, 301, 1300, - 685, 173, 1172, 916, 429, 1428, 788, 109, 1108, 621, 365, 1364, - 852, 237, 1236, 980, 493, 1492, 29, 1028, 541, 285, 1284, 669, - 157, 1156, 900, 413, 1412, 733, 93, 1092, 605, 349, 1348, 836, - 221, 1220, 964, 477, 1476, 772, 61, 1060, 573, 317, 1316, 701, - 189, 1188, 932, 445, 1444, 804, 125, 1124, 637, 381, 1380, 868, - 253, 1252, 996, 509, 1508, 756, 3, 1002, 515, 259, 1258, 643, - 131, 1130, 874, 387, 1386, 707, 67, 1066, 579, 323, 1322, 810, - 195, 1194, 938, 451, 1450, 739, 35, 1034, 547, 291, 1290, 675, - 163, 1162, 906, 419, 1418, 778, 99, 1098, 611, 355, 1354, 842, - 227, 1226, 970, 483, 1482, 19, 1018, 531, 275, 1274, 659, 147, - 1146, 890, 403, 1402, 723, 83, 1082, 595, 339, 1338, 826, 211, - 1210, 954, 467, 1466, 762, 51, 1050, 563, 307, 1306, 691, 179, - 1178, 922, 435, 1434, 794, 115, 1114, 627, 371, 1370, 858, 243, - 1242, 986, 499, 1498, 11, 1010, 523, 267, 1266, 651, 139, 1138, - 882, 395, 1394, 715, 75, 1074, 587, 331, 1330, 818, 203, 1202, - 946, 459, 1458, 747, 43, 1042, 555, 299, 1298, 683, 171, 1170, - 914, 427, 1426, 786, 107, 1106, 619, 363, 1362, 850, 235, 1234, - 978, 491, 1490, 27, 1026, 539, 283, 1282, 667, 155, 1154, 898, - 411, 1410, 731, 91, 1090, 603, 347, 1346, 834, 219, 1218, 962, - 475, 1474, 770, 59, 1058, 571, 315, 1314, 699, 187, 1186, 930, - 443, 1442, 802, 123, 1122, 635, 379, 1378, 866, 251, 1250, 994, - 507, 1506, 758, 7, 1006, 519, 263, 1262, 647, 135, 1134, 878, - 391, 1390, 711, 71, 1070, 583, 327, 1326, 814, 199, 1198, 942, - 455, 1454, 743, 39, 1038, 551, 295, 1294, 679, 167, 1166, 910, - 423, 1422, 782, 103, 1102, 615, 359, 1358, 846, 231, 1230, 974, - 487, 1486, 23, 1022, 535, 279, 1278, 663, 151, 1150, 894, 407, - 1406, 727, 87, 1086, 599, 343, 1342, 830, 215, 1214, 958, 471, - 1470, 766, 55, 1054, 567, 311, 1310, 695, 183, 1182, 926, 439, - 1438, 798, 119, 1118, 631, 375, 1374, 862, 247, 1246, 990, 503, - 1502, 15, 1014, 527, 271, 1270, 655, 143, 1142, 886, 399, 1398, - 719, 79, 1078, 591, 335, 1334, 822, 207, 1206, 950, 463, 1462, - 751, 47, 1046, 559, 303, 1302, 687, 175, 1174, 918, 431, 1430, - 790, 111, 1110, 623, 367, 1366, 854, 239, 1238, 982, 495, 1494, - 31, 1030, 543, 287, 1286, 671, 159, 1158, 902, 415, 1414, 735, - 95, 1094, 607, 351, 1350, 838, 223, 1222, 966, 479, 1478, 774, - 63, 1062, 575, 319, 1318, 703, 191, 1190, 934, 447, 1446, 806, - 127, 1126, 639, 383, 1382, 870, 255, 1254, 998, 511, 1510]; - - return (unsafe { *PERM1511.get_unchecked((index % 1511) as usize) } as u32 * 2283121 + - unsafe { *PERM1511.get_unchecked(((index / 1511) % 1511) as usize) } as u32 * 1511 + - unsafe { - *PERM1511.get_unchecked(((index / 2283121) % 1511) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3449795831u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1523(index: u32) -> f32 { - const PERM1523: [u16; 1523] = [0, 1011, 512, 256, 1267, 640, 128, 1139, 883, 384, 1395, 704, - 64, 1075, 576, 320, 1331, 819, 192, 1203, 947, 448, 1459, 736, - 32, 1043, 544, 288, 1299, 672, 160, 1171, 915, 416, 1427, 787, - 96, 1107, 608, 352, 1363, 851, 224, 1235, 979, 480, 1491, 752, - 16, 1027, 528, 272, 1283, 656, 144, 1155, 899, 400, 1411, 720, - 80, 1091, 592, 336, 1347, 835, 208, 1219, 963, 464, 1475, 771, - 48, 1059, 560, 304, 1315, 688, 176, 1187, 931, 432, 1443, 803, - 112, 1123, 624, 368, 1379, 867, 240, 1251, 995, 496, 1507, 8, - 1019, 520, 264, 1275, 648, 136, 1147, 891, 392, 1403, 712, 72, - 1083, 584, 328, 1339, 827, 200, 1211, 955, 456, 1467, 744, 40, - 1051, 552, 296, 1307, 680, 168, 1179, 923, 424, 1435, 795, 104, - 1115, 616, 360, 1371, 859, 232, 1243, 987, 488, 1499, 763, 24, - 1035, 536, 280, 1291, 664, 152, 1163, 907, 408, 1419, 728, 88, - 1099, 600, 344, 1355, 843, 216, 1227, 971, 472, 1483, 779, 56, - 1067, 568, 312, 1323, 696, 184, 1195, 939, 440, 1451, 811, 120, - 1131, 632, 376, 1387, 875, 248, 1259, 1003, 504, 1515, 4, 1015, - 516, 260, 1271, 644, 132, 1143, 887, 388, 1399, 708, 68, 1079, - 580, 324, 1335, 823, 196, 1207, 951, 452, 1463, 740, 36, 1047, - 548, 292, 1303, 676, 164, 1175, 919, 420, 1431, 791, 100, 1111, - 612, 356, 1367, 855, 228, 1239, 983, 484, 1495, 756, 20, 1031, - 532, 276, 1287, 660, 148, 1159, 903, 404, 1415, 724, 84, 1095, - 596, 340, 1351, 839, 212, 1223, 967, 468, 1479, 775, 52, 1063, - 564, 308, 1319, 692, 180, 1191, 935, 436, 1447, 807, 116, 1127, - 628, 372, 1383, 871, 244, 1255, 999, 500, 1511, 12, 1023, 524, - 268, 1279, 652, 140, 1151, 895, 396, 1407, 716, 76, 1087, 588, - 332, 1343, 831, 204, 1215, 959, 460, 1471, 748, 44, 1055, 556, - 300, 1311, 684, 172, 1183, 927, 428, 1439, 799, 108, 1119, 620, - 364, 1375, 863, 236, 1247, 991, 492, 1503, 767, 28, 1039, 540, - 284, 1295, 668, 156, 1167, 911, 412, 1423, 732, 92, 1103, 604, - 348, 1359, 847, 220, 1231, 975, 476, 1487, 783, 60, 1071, 572, - 316, 1327, 700, 188, 1199, 943, 444, 1455, 815, 124, 1135, 636, - 380, 1391, 879, 252, 1263, 1007, 508, 1519, 760, 2, 1013, 514, - 258, 1269, 642, 130, 1141, 885, 386, 1397, 706, 66, 1077, 578, - 322, 1333, 821, 194, 1205, 949, 450, 1461, 738, 34, 1045, 546, - 290, 1301, 674, 162, 1173, 917, 418, 1429, 789, 98, 1109, 610, - 354, 1365, 853, 226, 1237, 981, 482, 1493, 754, 18, 1029, 530, - 274, 1285, 658, 146, 1157, 901, 402, 1413, 722, 82, 1093, 594, - 338, 1349, 837, 210, 1221, 965, 466, 1477, 773, 50, 1061, 562, - 306, 1317, 690, 178, 1189, 933, 434, 1445, 805, 114, 1125, 626, - 370, 1381, 869, 242, 1253, 997, 498, 1509, 10, 1021, 522, 266, - 1277, 650, 138, 1149, 893, 394, 1405, 714, 74, 1085, 586, 330, - 1341, 829, 202, 1213, 957, 458, 1469, 746, 42, 1053, 554, 298, - 1309, 682, 170, 1181, 925, 426, 1437, 797, 106, 1117, 618, 362, - 1373, 861, 234, 1245, 989, 490, 1501, 765, 26, 1037, 538, 282, - 1293, 666, 154, 1165, 909, 410, 1421, 730, 90, 1101, 602, 346, - 1357, 845, 218, 1229, 973, 474, 1485, 781, 58, 1069, 570, 314, - 1325, 698, 186, 1197, 941, 442, 1453, 813, 122, 1133, 634, 378, - 1389, 877, 250, 1261, 1005, 506, 1517, 6, 1017, 518, 262, 1273, - 646, 134, 1145, 889, 390, 1401, 710, 70, 1081, 582, 326, 1337, - 825, 198, 1209, 953, 454, 1465, 742, 38, 1049, 550, 294, 1305, - 678, 166, 1177, 921, 422, 1433, 793, 102, 1113, 614, 358, 1369, - 857, 230, 1241, 985, 486, 1497, 758, 22, 1033, 534, 278, 1289, - 662, 150, 1161, 905, 406, 1417, 726, 86, 1097, 598, 342, 1353, - 841, 214, 1225, 969, 470, 1481, 777, 54, 1065, 566, 310, 1321, - 694, 182, 1193, 937, 438, 1449, 809, 118, 1129, 630, 374, 1385, - 873, 246, 1257, 1001, 502, 1513, 14, 1025, 526, 270, 1281, 654, - 142, 1153, 897, 398, 1409, 718, 78, 1089, 590, 334, 1345, 833, - 206, 1217, 961, 462, 1473, 750, 46, 1057, 558, 302, 1313, 686, - 174, 1185, 929, 430, 1441, 801, 110, 1121, 622, 366, 1377, 865, - 238, 1249, 993, 494, 1505, 769, 30, 1041, 542, 286, 1297, 670, - 158, 1169, 913, 414, 1425, 734, 94, 1105, 606, 350, 1361, 849, - 222, 1233, 977, 478, 1489, 785, 62, 1073, 574, 318, 1329, 702, - 190, 1201, 945, 446, 1457, 817, 126, 1137, 638, 382, 1393, 881, - 254, 1265, 1009, 510, 1521, 761, 1, 1012, 513, 257, 1268, 641, - 129, 1140, 884, 385, 1396, 705, 65, 1076, 577, 321, 1332, 820, - 193, 1204, 948, 449, 1460, 737, 33, 1044, 545, 289, 1300, 673, - 161, 1172, 916, 417, 1428, 788, 97, 1108, 609, 353, 1364, 852, - 225, 1236, 980, 481, 1492, 753, 17, 1028, 529, 273, 1284, 657, - 145, 1156, 900, 401, 1412, 721, 81, 1092, 593, 337, 1348, 836, - 209, 1220, 964, 465, 1476, 772, 49, 1060, 561, 305, 1316, 689, - 177, 1188, 932, 433, 1444, 804, 113, 1124, 625, 369, 1380, 868, - 241, 1252, 996, 497, 1508, 9, 1020, 521, 265, 1276, 649, 137, - 1148, 892, 393, 1404, 713, 73, 1084, 585, 329, 1340, 828, 201, - 1212, 956, 457, 1468, 745, 41, 1052, 553, 297, 1308, 681, 169, - 1180, 924, 425, 1436, 796, 105, 1116, 617, 361, 1372, 860, 233, - 1244, 988, 489, 1500, 764, 25, 1036, 537, 281, 1292, 665, 153, - 1164, 908, 409, 1420, 729, 89, 1100, 601, 345, 1356, 844, 217, - 1228, 972, 473, 1484, 780, 57, 1068, 569, 313, 1324, 697, 185, - 1196, 940, 441, 1452, 812, 121, 1132, 633, 377, 1388, 876, 249, - 1260, 1004, 505, 1516, 5, 1016, 517, 261, 1272, 645, 133, 1144, - 888, 389, 1400, 709, 69, 1080, 581, 325, 1336, 824, 197, 1208, - 952, 453, 1464, 741, 37, 1048, 549, 293, 1304, 677, 165, 1176, - 920, 421, 1432, 792, 101, 1112, 613, 357, 1368, 856, 229, 1240, - 984, 485, 1496, 757, 21, 1032, 533, 277, 1288, 661, 149, 1160, - 904, 405, 1416, 725, 85, 1096, 597, 341, 1352, 840, 213, 1224, - 968, 469, 1480, 776, 53, 1064, 565, 309, 1320, 693, 181, 1192, - 936, 437, 1448, 808, 117, 1128, 629, 373, 1384, 872, 245, 1256, - 1000, 501, 1512, 13, 1024, 525, 269, 1280, 653, 141, 1152, 896, - 397, 1408, 717, 77, 1088, 589, 333, 1344, 832, 205, 1216, 960, - 461, 1472, 749, 45, 1056, 557, 301, 1312, 685, 173, 1184, 928, - 429, 1440, 800, 109, 1120, 621, 365, 1376, 864, 237, 1248, 992, - 493, 1504, 768, 29, 1040, 541, 285, 1296, 669, 157, 1168, 912, - 413, 1424, 733, 93, 1104, 605, 349, 1360, 848, 221, 1232, 976, - 477, 1488, 784, 61, 1072, 573, 317, 1328, 701, 189, 1200, 944, - 445, 1456, 816, 125, 1136, 637, 381, 1392, 880, 253, 1264, - 1008, 509, 1520, 762, 3, 1014, 515, 259, 1270, 643, 131, 1142, - 886, 387, 1398, 707, 67, 1078, 579, 323, 1334, 822, 195, 1206, - 950, 451, 1462, 739, 35, 1046, 547, 291, 1302, 675, 163, 1174, - 918, 419, 1430, 790, 99, 1110, 611, 355, 1366, 854, 227, 1238, - 982, 483, 1494, 755, 19, 1030, 531, 275, 1286, 659, 147, 1158, - 902, 403, 1414, 723, 83, 1094, 595, 339, 1350, 838, 211, 1222, - 966, 467, 1478, 774, 51, 1062, 563, 307, 1318, 691, 179, 1190, - 934, 435, 1446, 806, 115, 1126, 627, 371, 1382, 870, 243, 1254, - 998, 499, 1510, 11, 1022, 523, 267, 1278, 651, 139, 1150, 894, - 395, 1406, 715, 75, 1086, 587, 331, 1342, 830, 203, 1214, 958, - 459, 1470, 747, 43, 1054, 555, 299, 1310, 683, 171, 1182, 926, - 427, 1438, 798, 107, 1118, 619, 363, 1374, 862, 235, 1246, 990, - 491, 1502, 766, 27, 1038, 539, 283, 1294, 667, 155, 1166, 910, - 411, 1422, 731, 91, 1102, 603, 347, 1358, 846, 219, 1230, 974, - 475, 1486, 782, 59, 1070, 571, 315, 1326, 699, 187, 1198, 942, - 443, 1454, 814, 123, 1134, 635, 379, 1390, 878, 251, 1262, - 1006, 507, 1518, 7, 1018, 519, 263, 1274, 647, 135, 1146, 890, - 391, 1402, 711, 71, 1082, 583, 327, 1338, 826, 199, 1210, 954, - 455, 1466, 743, 39, 1050, 551, 295, 1306, 679, 167, 1178, 922, - 423, 1434, 794, 103, 1114, 615, 359, 1370, 858, 231, 1242, 986, - 487, 1498, 759, 23, 1034, 535, 279, 1290, 663, 151, 1162, 906, - 407, 1418, 727, 87, 1098, 599, 343, 1354, 842, 215, 1226, 970, - 471, 1482, 778, 55, 1066, 567, 311, 1322, 695, 183, 1194, 938, - 439, 1450, 810, 119, 1130, 631, 375, 1386, 874, 247, 1258, - 1002, 503, 1514, 15, 1026, 527, 271, 1282, 655, 143, 1154, 898, - 399, 1410, 719, 79, 1090, 591, 335, 1346, 834, 207, 1218, 962, - 463, 1474, 751, 47, 1058, 559, 303, 1314, 687, 175, 1186, 930, - 431, 1442, 802, 111, 1122, 623, 367, 1378, 866, 239, 1250, 994, - 495, 1506, 770, 31, 1042, 543, 287, 1298, 671, 159, 1170, 914, - 415, 1426, 735, 95, 1106, 607, 351, 1362, 850, 223, 1234, 978, - 479, 1490, 786, 63, 1074, 575, 319, 1330, 703, 191, 1202, 946, - 447, 1458, 818, 127, 1138, 639, 383, 1394, 882, 255, 1266, - 1010, 511, 1522]; - - return (unsafe { *PERM1523.get_unchecked((index % 1523) as usize) } as u32 * 2319529 + - unsafe { *PERM1523.get_unchecked(((index / 1523) % 1523) as usize) } as u32 * 1523 + - unsafe { - *PERM1523.get_unchecked(((index / 2319529) % 1523) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3532642667u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1531(index: u32) -> f32 { - const PERM1531: [u16; 1531] = [0, 1019, 512, 256, 1275, 640, 128, 1147, 891, 384, 1403, 704, - 64, 1083, 576, 320, 1339, 827, 192, 1211, 955, 448, 1467, 736, - 32, 1051, 544, 288, 1307, 672, 160, 1179, 923, 416, 1435, 795, - 96, 1115, 608, 352, 1371, 859, 224, 1243, 987, 480, 1499, 752, - 16, 1035, 528, 272, 1291, 656, 144, 1163, 907, 400, 1419, 720, - 80, 1099, 592, 336, 1355, 843, 208, 1227, 971, 464, 1483, 779, - 48, 1067, 560, 304, 1323, 688, 176, 1195, 939, 432, 1451, 811, - 112, 1131, 624, 368, 1387, 875, 240, 1259, 1003, 496, 1515, - 760, 8, 1027, 520, 264, 1283, 648, 136, 1155, 899, 392, 1411, - 712, 72, 1091, 584, 328, 1347, 835, 200, 1219, 963, 456, 1475, - 744, 40, 1059, 552, 296, 1315, 680, 168, 1187, 931, 424, 1443, - 803, 104, 1123, 616, 360, 1379, 867, 232, 1251, 995, 488, 1507, - 771, 24, 1043, 536, 280, 1299, 664, 152, 1171, 915, 408, 1427, - 728, 88, 1107, 600, 344, 1363, 851, 216, 1235, 979, 472, 1491, - 787, 56, 1075, 568, 312, 1331, 696, 184, 1203, 947, 440, 1459, - 819, 120, 1139, 632, 376, 1395, 883, 248, 1267, 1011, 504, - 1523, 4, 1023, 516, 260, 1279, 644, 132, 1151, 895, 388, 1407, - 708, 68, 1087, 580, 324, 1343, 831, 196, 1215, 959, 452, 1471, - 740, 36, 1055, 548, 292, 1311, 676, 164, 1183, 927, 420, 1439, - 799, 100, 1119, 612, 356, 1375, 863, 228, 1247, 991, 484, 1503, - 756, 20, 1039, 532, 276, 1295, 660, 148, 1167, 911, 404, 1423, - 724, 84, 1103, 596, 340, 1359, 847, 212, 1231, 975, 468, 1487, - 783, 52, 1071, 564, 308, 1327, 692, 180, 1199, 943, 436, 1455, - 815, 116, 1135, 628, 372, 1391, 879, 244, 1263, 1007, 500, - 1519, 767, 12, 1031, 524, 268, 1287, 652, 140, 1159, 903, 396, - 1415, 716, 76, 1095, 588, 332, 1351, 839, 204, 1223, 967, 460, - 1479, 748, 44, 1063, 556, 300, 1319, 684, 172, 1191, 935, 428, - 1447, 807, 108, 1127, 620, 364, 1383, 871, 236, 1255, 999, 492, - 1511, 775, 28, 1047, 540, 284, 1303, 668, 156, 1175, 919, 412, - 1431, 732, 92, 1111, 604, 348, 1367, 855, 220, 1239, 983, 476, - 1495, 791, 60, 1079, 572, 316, 1335, 700, 188, 1207, 951, 444, - 1463, 823, 124, 1143, 636, 380, 1399, 887, 252, 1271, 1015, - 508, 1527, 764, 2, 1021, 514, 258, 1277, 642, 130, 1149, 893, - 386, 1405, 706, 66, 1085, 578, 322, 1341, 829, 194, 1213, 957, - 450, 1469, 738, 34, 1053, 546, 290, 1309, 674, 162, 1181, 925, - 418, 1437, 797, 98, 1117, 610, 354, 1373, 861, 226, 1245, 989, - 482, 1501, 754, 18, 1037, 530, 274, 1293, 658, 146, 1165, 909, - 402, 1421, 722, 82, 1101, 594, 338, 1357, 845, 210, 1229, 973, - 466, 1485, 781, 50, 1069, 562, 306, 1325, 690, 178, 1197, 941, - 434, 1453, 813, 114, 1133, 626, 370, 1389, 877, 242, 1261, - 1005, 498, 1517, 762, 10, 1029, 522, 266, 1285, 650, 138, 1157, - 901, 394, 1413, 714, 74, 1093, 586, 330, 1349, 837, 202, 1221, - 965, 458, 1477, 746, 42, 1061, 554, 298, 1317, 682, 170, 1189, - 933, 426, 1445, 805, 106, 1125, 618, 362, 1381, 869, 234, 1253, - 997, 490, 1509, 773, 26, 1045, 538, 282, 1301, 666, 154, 1173, - 917, 410, 1429, 730, 90, 1109, 602, 346, 1365, 853, 218, 1237, - 981, 474, 1493, 789, 58, 1077, 570, 314, 1333, 698, 186, 1205, - 949, 442, 1461, 821, 122, 1141, 634, 378, 1397, 885, 250, 1269, - 1013, 506, 1525, 6, 1025, 518, 262, 1281, 646, 134, 1153, 897, - 390, 1409, 710, 70, 1089, 582, 326, 1345, 833, 198, 1217, 961, - 454, 1473, 742, 38, 1057, 550, 294, 1313, 678, 166, 1185, 929, - 422, 1441, 801, 102, 1121, 614, 358, 1377, 865, 230, 1249, 993, - 486, 1505, 758, 22, 1041, 534, 278, 1297, 662, 150, 1169, 913, - 406, 1425, 726, 86, 1105, 598, 342, 1361, 849, 214, 1233, 977, - 470, 1489, 785, 54, 1073, 566, 310, 1329, 694, 182, 1201, 945, - 438, 1457, 817, 118, 1137, 630, 374, 1393, 881, 246, 1265, - 1009, 502, 1521, 769, 14, 1033, 526, 270, 1289, 654, 142, 1161, - 905, 398, 1417, 718, 78, 1097, 590, 334, 1353, 841, 206, 1225, - 969, 462, 1481, 750, 46, 1065, 558, 302, 1321, 686, 174, 1193, - 937, 430, 1449, 809, 110, 1129, 622, 366, 1385, 873, 238, 1257, - 1001, 494, 1513, 777, 30, 1049, 542, 286, 1305, 670, 158, 1177, - 921, 414, 1433, 734, 94, 1113, 606, 350, 1369, 857, 222, 1241, - 985, 478, 1497, 793, 62, 1081, 574, 318, 1337, 702, 190, 1209, - 953, 446, 1465, 825, 126, 1145, 638, 382, 1401, 889, 254, 1273, - 1017, 510, 1529, 765, 1, 1020, 513, 257, 1276, 641, 129, 1148, - 892, 385, 1404, 705, 65, 1084, 577, 321, 1340, 828, 193, 1212, - 956, 449, 1468, 737, 33, 1052, 545, 289, 1308, 673, 161, 1180, - 924, 417, 1436, 796, 97, 1116, 609, 353, 1372, 860, 225, 1244, - 988, 481, 1500, 753, 17, 1036, 529, 273, 1292, 657, 145, 1164, - 908, 401, 1420, 721, 81, 1100, 593, 337, 1356, 844, 209, 1228, - 972, 465, 1484, 780, 49, 1068, 561, 305, 1324, 689, 177, 1196, - 940, 433, 1452, 812, 113, 1132, 625, 369, 1388, 876, 241, 1260, - 1004, 497, 1516, 761, 9, 1028, 521, 265, 1284, 649, 137, 1156, - 900, 393, 1412, 713, 73, 1092, 585, 329, 1348, 836, 201, 1220, - 964, 457, 1476, 745, 41, 1060, 553, 297, 1316, 681, 169, 1188, - 932, 425, 1444, 804, 105, 1124, 617, 361, 1380, 868, 233, 1252, - 996, 489, 1508, 772, 25, 1044, 537, 281, 1300, 665, 153, 1172, - 916, 409, 1428, 729, 89, 1108, 601, 345, 1364, 852, 217, 1236, - 980, 473, 1492, 788, 57, 1076, 569, 313, 1332, 697, 185, 1204, - 948, 441, 1460, 820, 121, 1140, 633, 377, 1396, 884, 249, 1268, - 1012, 505, 1524, 5, 1024, 517, 261, 1280, 645, 133, 1152, 896, - 389, 1408, 709, 69, 1088, 581, 325, 1344, 832, 197, 1216, 960, - 453, 1472, 741, 37, 1056, 549, 293, 1312, 677, 165, 1184, 928, - 421, 1440, 800, 101, 1120, 613, 357, 1376, 864, 229, 1248, 992, - 485, 1504, 757, 21, 1040, 533, 277, 1296, 661, 149, 1168, 912, - 405, 1424, 725, 85, 1104, 597, 341, 1360, 848, 213, 1232, 976, - 469, 1488, 784, 53, 1072, 565, 309, 1328, 693, 181, 1200, 944, - 437, 1456, 816, 117, 1136, 629, 373, 1392, 880, 245, 1264, - 1008, 501, 1520, 768, 13, 1032, 525, 269, 1288, 653, 141, 1160, - 904, 397, 1416, 717, 77, 1096, 589, 333, 1352, 840, 205, 1224, - 968, 461, 1480, 749, 45, 1064, 557, 301, 1320, 685, 173, 1192, - 936, 429, 1448, 808, 109, 1128, 621, 365, 1384, 872, 237, 1256, - 1000, 493, 1512, 776, 29, 1048, 541, 285, 1304, 669, 157, 1176, - 920, 413, 1432, 733, 93, 1112, 605, 349, 1368, 856, 221, 1240, - 984, 477, 1496, 792, 61, 1080, 573, 317, 1336, 701, 189, 1208, - 952, 445, 1464, 824, 125, 1144, 637, 381, 1400, 888, 253, 1272, - 1016, 509, 1528, 766, 3, 1022, 515, 259, 1278, 643, 131, 1150, - 894, 387, 1406, 707, 67, 1086, 579, 323, 1342, 830, 195, 1214, - 958, 451, 1470, 739, 35, 1054, 547, 291, 1310, 675, 163, 1182, - 926, 419, 1438, 798, 99, 1118, 611, 355, 1374, 862, 227, 1246, - 990, 483, 1502, 755, 19, 1038, 531, 275, 1294, 659, 147, 1166, - 910, 403, 1422, 723, 83, 1102, 595, 339, 1358, 846, 211, 1230, - 974, 467, 1486, 782, 51, 1070, 563, 307, 1326, 691, 179, 1198, - 942, 435, 1454, 814, 115, 1134, 627, 371, 1390, 878, 243, 1262, - 1006, 499, 1518, 763, 11, 1030, 523, 267, 1286, 651, 139, 1158, - 902, 395, 1414, 715, 75, 1094, 587, 331, 1350, 838, 203, 1222, - 966, 459, 1478, 747, 43, 1062, 555, 299, 1318, 683, 171, 1190, - 934, 427, 1446, 806, 107, 1126, 619, 363, 1382, 870, 235, 1254, - 998, 491, 1510, 774, 27, 1046, 539, 283, 1302, 667, 155, 1174, - 918, 411, 1430, 731, 91, 1110, 603, 347, 1366, 854, 219, 1238, - 982, 475, 1494, 790, 59, 1078, 571, 315, 1334, 699, 187, 1206, - 950, 443, 1462, 822, 123, 1142, 635, 379, 1398, 886, 251, 1270, - 1014, 507, 1526, 7, 1026, 519, 263, 1282, 647, 135, 1154, 898, - 391, 1410, 711, 71, 1090, 583, 327, 1346, 834, 199, 1218, 962, - 455, 1474, 743, 39, 1058, 551, 295, 1314, 679, 167, 1186, 930, - 423, 1442, 802, 103, 1122, 615, 359, 1378, 866, 231, 1250, 994, - 487, 1506, 759, 23, 1042, 535, 279, 1298, 663, 151, 1170, 914, - 407, 1426, 727, 87, 1106, 599, 343, 1362, 850, 215, 1234, 978, - 471, 1490, 786, 55, 1074, 567, 311, 1330, 695, 183, 1202, 946, - 439, 1458, 818, 119, 1138, 631, 375, 1394, 882, 247, 1266, - 1010, 503, 1522, 770, 15, 1034, 527, 271, 1290, 655, 143, 1162, - 906, 399, 1418, 719, 79, 1098, 591, 335, 1354, 842, 207, 1226, - 970, 463, 1482, 751, 47, 1066, 559, 303, 1322, 687, 175, 1194, - 938, 431, 1450, 810, 111, 1130, 623, 367, 1386, 874, 239, 1258, - 1002, 495, 1514, 778, 31, 1050, 543, 287, 1306, 671, 159, 1178, - 922, 415, 1434, 735, 95, 1114, 607, 351, 1370, 858, 223, 1242, - 986, 479, 1498, 794, 63, 1082, 575, 319, 1338, 703, 191, 1210, - 954, 447, 1466, 826, 127, 1146, 639, 383, 1402, 890, 255, 1274, - 1018, 511, 1530]; - - return (unsafe { *PERM1531.get_unchecked((index % 1531) as usize) } as u32 * 2343961 + - unsafe { *PERM1531.get_unchecked(((index / 1531) % 1531) as usize) } as u32 * 1531 + - unsafe { - *PERM1531.get_unchecked(((index / 2343961) % 1531) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3588604291u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1543(index: u32) -> f32 { - const PERM1543: [u16; 1543] = [0, 512, 1031, 256, 775, 1287, 128, 640, 1159, 384, 903, 1415, - 64, 576, 1095, 320, 839, 1351, 192, 704, 1223, 448, 967, 1479, - 32, 544, 1063, 288, 807, 1319, 160, 672, 1191, 416, 935, 1447, - 96, 608, 1127, 352, 871, 1383, 224, 736, 1255, 480, 999, 1511, - 16, 528, 1047, 272, 791, 1303, 144, 656, 1175, 400, 919, 1431, - 80, 592, 1111, 336, 855, 1367, 208, 720, 1239, 464, 983, 1495, - 48, 560, 1079, 304, 823, 1335, 176, 688, 1207, 432, 951, 1463, - 112, 624, 1143, 368, 887, 1399, 240, 752, 1271, 496, 1015, - 1527, 8, 520, 1039, 264, 783, 1295, 136, 648, 1167, 392, 911, - 1423, 72, 584, 1103, 328, 847, 1359, 200, 712, 1231, 456, 975, - 1487, 40, 552, 1071, 296, 815, 1327, 168, 680, 1199, 424, 943, - 1455, 104, 616, 1135, 360, 879, 1391, 232, 744, 1263, 488, - 1007, 1519, 24, 536, 1055, 280, 799, 1311, 152, 664, 1183, 408, - 927, 1439, 88, 600, 1119, 344, 863, 1375, 216, 728, 1247, 472, - 991, 1503, 56, 568, 1087, 312, 831, 1343, 184, 696, 1215, 440, - 959, 1471, 120, 632, 1151, 376, 895, 1407, 248, 760, 1279, 504, - 1023, 1535, 768, 4, 516, 1035, 260, 779, 1291, 132, 644, 1163, - 388, 907, 1419, 68, 580, 1099, 324, 843, 1355, 196, 708, 1227, - 452, 971, 1483, 36, 548, 1067, 292, 811, 1323, 164, 676, 1195, - 420, 939, 1451, 100, 612, 1131, 356, 875, 1387, 228, 740, 1259, - 484, 1003, 1515, 20, 532, 1051, 276, 795, 1307, 148, 660, 1179, - 404, 923, 1435, 84, 596, 1115, 340, 859, 1371, 212, 724, 1243, - 468, 987, 1499, 52, 564, 1083, 308, 827, 1339, 180, 692, 1211, - 436, 955, 1467, 116, 628, 1147, 372, 891, 1403, 244, 756, 1275, - 500, 1019, 1531, 12, 524, 1043, 268, 787, 1299, 140, 652, 1171, - 396, 915, 1427, 76, 588, 1107, 332, 851, 1363, 204, 716, 1235, - 460, 979, 1491, 44, 556, 1075, 300, 819, 1331, 172, 684, 1203, - 428, 947, 1459, 108, 620, 1139, 364, 883, 1395, 236, 748, 1267, - 492, 1011, 1523, 28, 540, 1059, 284, 803, 1315, 156, 668, 1187, - 412, 931, 1443, 92, 604, 1123, 348, 867, 1379, 220, 732, 1251, - 476, 995, 1507, 60, 572, 1091, 316, 835, 1347, 188, 700, 1219, - 444, 963, 1475, 124, 636, 1155, 380, 899, 1411, 252, 764, 1283, - 508, 1027, 1539, 770, 2, 514, 1033, 258, 777, 1289, 130, 642, - 1161, 386, 905, 1417, 66, 578, 1097, 322, 841, 1353, 194, 706, - 1225, 450, 969, 1481, 34, 546, 1065, 290, 809, 1321, 162, 674, - 1193, 418, 937, 1449, 98, 610, 1129, 354, 873, 1385, 226, 738, - 1257, 482, 1001, 1513, 18, 530, 1049, 274, 793, 1305, 146, 658, - 1177, 402, 921, 1433, 82, 594, 1113, 338, 857, 1369, 210, 722, - 1241, 466, 985, 1497, 50, 562, 1081, 306, 825, 1337, 178, 690, - 1209, 434, 953, 1465, 114, 626, 1145, 370, 889, 1401, 242, 754, - 1273, 498, 1017, 1529, 10, 522, 1041, 266, 785, 1297, 138, 650, - 1169, 394, 913, 1425, 74, 586, 1105, 330, 849, 1361, 202, 714, - 1233, 458, 977, 1489, 42, 554, 1073, 298, 817, 1329, 170, 682, - 1201, 426, 945, 1457, 106, 618, 1137, 362, 881, 1393, 234, 746, - 1265, 490, 1009, 1521, 26, 538, 1057, 282, 801, 1313, 154, 666, - 1185, 410, 929, 1441, 90, 602, 1121, 346, 865, 1377, 218, 730, - 1249, 474, 993, 1505, 58, 570, 1089, 314, 833, 1345, 186, 698, - 1217, 442, 961, 1473, 122, 634, 1153, 378, 897, 1409, 250, 762, - 1281, 506, 1025, 1537, 773, 6, 518, 1037, 262, 781, 1293, 134, - 646, 1165, 390, 909, 1421, 70, 582, 1101, 326, 845, 1357, 198, - 710, 1229, 454, 973, 1485, 38, 550, 1069, 294, 813, 1325, 166, - 678, 1197, 422, 941, 1453, 102, 614, 1133, 358, 877, 1389, 230, - 742, 1261, 486, 1005, 1517, 22, 534, 1053, 278, 797, 1309, 150, - 662, 1181, 406, 925, 1437, 86, 598, 1117, 342, 861, 1373, 214, - 726, 1245, 470, 989, 1501, 54, 566, 1085, 310, 829, 1341, 182, - 694, 1213, 438, 957, 1469, 118, 630, 1149, 374, 893, 1405, 246, - 758, 1277, 502, 1021, 1533, 14, 526, 1045, 270, 789, 1301, 142, - 654, 1173, 398, 917, 1429, 78, 590, 1109, 334, 853, 1365, 206, - 718, 1237, 462, 981, 1493, 46, 558, 1077, 302, 821, 1333, 174, - 686, 1205, 430, 949, 1461, 110, 622, 1141, 366, 885, 1397, 238, - 750, 1269, 494, 1013, 1525, 30, 542, 1061, 286, 805, 1317, 158, - 670, 1189, 414, 933, 1445, 94, 606, 1125, 350, 869, 1381, 222, - 734, 1253, 478, 997, 1509, 62, 574, 1093, 318, 837, 1349, 190, - 702, 1221, 446, 965, 1477, 126, 638, 1157, 382, 901, 1413, 254, - 766, 1285, 510, 1029, 1541, 771, 1, 513, 1032, 257, 776, 1288, - 129, 641, 1160, 385, 904, 1416, 65, 577, 1096, 321, 840, 1352, - 193, 705, 1224, 449, 968, 1480, 33, 545, 1064, 289, 808, 1320, - 161, 673, 1192, 417, 936, 1448, 97, 609, 1128, 353, 872, 1384, - 225, 737, 1256, 481, 1000, 1512, 17, 529, 1048, 273, 792, 1304, - 145, 657, 1176, 401, 920, 1432, 81, 593, 1112, 337, 856, 1368, - 209, 721, 1240, 465, 984, 1496, 49, 561, 1080, 305, 824, 1336, - 177, 689, 1208, 433, 952, 1464, 113, 625, 1144, 369, 888, 1400, - 241, 753, 1272, 497, 1016, 1528, 9, 521, 1040, 265, 784, 1296, - 137, 649, 1168, 393, 912, 1424, 73, 585, 1104, 329, 848, 1360, - 201, 713, 1232, 457, 976, 1488, 41, 553, 1072, 297, 816, 1328, - 169, 681, 1200, 425, 944, 1456, 105, 617, 1136, 361, 880, 1392, - 233, 745, 1264, 489, 1008, 1520, 25, 537, 1056, 281, 800, 1312, - 153, 665, 1184, 409, 928, 1440, 89, 601, 1120, 345, 864, 1376, - 217, 729, 1248, 473, 992, 1504, 57, 569, 1088, 313, 832, 1344, - 185, 697, 1216, 441, 960, 1472, 121, 633, 1152, 377, 896, 1408, - 249, 761, 1280, 505, 1024, 1536, 769, 5, 517, 1036, 261, 780, - 1292, 133, 645, 1164, 389, 908, 1420, 69, 581, 1100, 325, 844, - 1356, 197, 709, 1228, 453, 972, 1484, 37, 549, 1068, 293, 812, - 1324, 165, 677, 1196, 421, 940, 1452, 101, 613, 1132, 357, 876, - 1388, 229, 741, 1260, 485, 1004, 1516, 21, 533, 1052, 277, 796, - 1308, 149, 661, 1180, 405, 924, 1436, 85, 597, 1116, 341, 860, - 1372, 213, 725, 1244, 469, 988, 1500, 53, 565, 1084, 309, 828, - 1340, 181, 693, 1212, 437, 956, 1468, 117, 629, 1148, 373, 892, - 1404, 245, 757, 1276, 501, 1020, 1532, 13, 525, 1044, 269, 788, - 1300, 141, 653, 1172, 397, 916, 1428, 77, 589, 1108, 333, 852, - 1364, 205, 717, 1236, 461, 980, 1492, 45, 557, 1076, 301, 820, - 1332, 173, 685, 1204, 429, 948, 1460, 109, 621, 1140, 365, 884, - 1396, 237, 749, 1268, 493, 1012, 1524, 29, 541, 1060, 285, 804, - 1316, 157, 669, 1188, 413, 932, 1444, 93, 605, 1124, 349, 868, - 1380, 221, 733, 1252, 477, 996, 1508, 61, 573, 1092, 317, 836, - 1348, 189, 701, 1220, 445, 964, 1476, 125, 637, 1156, 381, 900, - 1412, 253, 765, 1284, 509, 1028, 1540, 772, 3, 515, 1034, 259, - 778, 1290, 131, 643, 1162, 387, 906, 1418, 67, 579, 1098, 323, - 842, 1354, 195, 707, 1226, 451, 970, 1482, 35, 547, 1066, 291, - 810, 1322, 163, 675, 1194, 419, 938, 1450, 99, 611, 1130, 355, - 874, 1386, 227, 739, 1258, 483, 1002, 1514, 19, 531, 1050, 275, - 794, 1306, 147, 659, 1178, 403, 922, 1434, 83, 595, 1114, 339, - 858, 1370, 211, 723, 1242, 467, 986, 1498, 51, 563, 1082, 307, - 826, 1338, 179, 691, 1210, 435, 954, 1466, 115, 627, 1146, 371, - 890, 1402, 243, 755, 1274, 499, 1018, 1530, 11, 523, 1042, 267, - 786, 1298, 139, 651, 1170, 395, 914, 1426, 75, 587, 1106, 331, - 850, 1362, 203, 715, 1234, 459, 978, 1490, 43, 555, 1074, 299, - 818, 1330, 171, 683, 1202, 427, 946, 1458, 107, 619, 1138, 363, - 882, 1394, 235, 747, 1266, 491, 1010, 1522, 27, 539, 1058, 283, - 802, 1314, 155, 667, 1186, 411, 930, 1442, 91, 603, 1122, 347, - 866, 1378, 219, 731, 1250, 475, 994, 1506, 59, 571, 1090, 315, - 834, 1346, 187, 699, 1218, 443, 962, 1474, 123, 635, 1154, 379, - 898, 1410, 251, 763, 1282, 507, 1026, 1538, 774, 7, 519, 1038, - 263, 782, 1294, 135, 647, 1166, 391, 910, 1422, 71, 583, 1102, - 327, 846, 1358, 199, 711, 1230, 455, 974, 1486, 39, 551, 1070, - 295, 814, 1326, 167, 679, 1198, 423, 942, 1454, 103, 615, 1134, - 359, 878, 1390, 231, 743, 1262, 487, 1006, 1518, 23, 535, 1054, - 279, 798, 1310, 151, 663, 1182, 407, 926, 1438, 87, 599, 1118, - 343, 862, 1374, 215, 727, 1246, 471, 990, 1502, 55, 567, 1086, - 311, 830, 1342, 183, 695, 1214, 439, 958, 1470, 119, 631, 1150, - 375, 894, 1406, 247, 759, 1278, 503, 1022, 1534, 15, 527, 1046, - 271, 790, 1302, 143, 655, 1174, 399, 918, 1430, 79, 591, 1110, - 335, 854, 1366, 207, 719, 1238, 463, 982, 1494, 47, 559, 1078, - 303, 822, 1334, 175, 687, 1206, 431, 950, 1462, 111, 623, 1142, - 367, 886, 1398, 239, 751, 1270, 495, 1014, 1526, 31, 543, 1062, - 287, 806, 1318, 159, 671, 1190, 415, 934, 1446, 95, 607, 1126, - 351, 870, 1382, 223, 735, 1254, 479, 998, 1510, 63, 575, 1094, - 319, 838, 1350, 191, 703, 1222, 447, 966, 1478, 127, 639, 1158, - 383, 902, 1414, 255, 767, 1286, 511, 1030, 1542]; - - return (unsafe { *PERM1543.get_unchecked((index % 1543) as usize) } as u32 * 2380849 + - unsafe { *PERM1543.get_unchecked(((index / 1543) % 1543) as usize) } as u32 * 1543 + - unsafe { - *PERM1543.get_unchecked(((index / 2380849) % 1543) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3673650007u32 as f32)); // Results in [0,1). + const PERM719: [u16; 719] = [0, 463, 256, 128, 591, 320, 64, 527, 399, 192, 655, 32, 495, 288, 160, 623, 367, 96, 559, 431, 224, 687, 16, 479, 272, 144, 607, 336, 80, 543, 415, 208, 671, 48, 511, 304, 176, 639, 383, 112, 575, 447, 240, 703, 352, 8, 471, 264, 136, 599, 328, 72, 535, 407, 200, 663, 40, 503, 296, 168, 631, 375, 104, 567, 439, 232, 695, 24, 487, 280, 152, 615, 344, 88, 551, 423, 216, 679, 56, 519, 312, 184, 647, 391, 120, 583, 455, 248, 711, 356, 4, 467, 260, 132, 595, 324, 68, 531, 403, 196, 659, 36, 499, 292, 164, 627, 371, 100, 563, 435, 228, 691, 20, 483, 276, 148, 611, 340, 84, 547, 419, 212, 675, 52, 515, 308, 180, 643, 387, 116, 579, 451, 244, 707, 363, 12, 475, 268, 140, 603, 332, 76, 539, 411, 204, 667, 44, 507, 300, 172, 635, 379, 108, 571, 443, 236, 699, 28, 491, 284, 156, 619, 348, 92, 555, 427, 220, 683, 60, 523, 316, 188, 651, 395, 124, 587, 459, 252, 715, 358, 2, 465, 258, 130, 593, 322, 66, 529, 401, 194, 657, 34, 497, 290, 162, 625, 369, 98, 561, 433, 226, 689, 18, 481, 274, 146, 609, 338, 82, 545, 417, 210, 673, 50, 513, 306, 178, 641, 385, 114, 577, 449, 242, 705, 354, 10, 473, 266, 138, 601, 330, 74, 537, 409, 202, 665, 42, 505, 298, 170, 633, 377, 106, 569, 441, 234, 697, 26, 489, 282, 154, 617, 346, 90, 553, 425, 218, 681, 58, 521, 314, 186, 649, 393, 122, 585, 457, 250, 713, 361, 6, 469, 262, 134, 597, 326, 70, 533, 405, 198, 661, 38, 501, 294, 166, 629, 373, 102, 565, 437, 230, 693, 22, 485, 278, 150, 613, 342, 86, 549, 421, 214, 677, 54, 517, 310, 182, 645, 389, 118, 581, 453, 246, 709, 365, 14, 477, 270, 142, 605, 334, 78, 541, 413, 206, 669, 46, 509, 302, 174, 637, 381, 110, 573, 445, 238, 701, 30, 493, 286, 158, 621, 350, 94, 557, 429, 222, 685, 62, 525, 318, 190, 653, 397, 126, 589, 461, 254, 717, 359, 1, 464, 257, 129, 592, 321, 65, 528, 400, 193, 656, 33, 496, 289, 161, 624, 368, 97, 560, 432, 225, 688, 17, 480, 273, 145, 608, 337, 81, 544, 416, 209, 672, 49, 512, 305, 177, 640, 384, 113, 576, 448, 241, 704, 353, 9, 472, 265, 137, 600, 329, 73, 536, 408, 201, 664, 41, 504, 297, 169, 632, 376, 105, 568, 440, 233, 696, 25, 488, 281, 153, 616, 345, 89, 552, 424, 217, 680, 57, 520, 313, 185, 648, 392, 121, 584, 456, 249, 712, 357, 5, 468, 261, 133, 596, 325, 69, 532, 404, 197, 660, 37, 500, 293, 165, 628, 372, 101, 564, 436, 229, 692, 21, 484, 277, 149, 612, 341, 85, 548, 420, 213, 676, 53, 516, 309, 181, 644, 388, 117, 580, 452, 245, 708, 364, 13, 476, 269, 141, 604, 333, 77, 540, 412, 205, 668, 45, 508, 301, 173, 636, 380, 109, 572, 444, 237, 700, 29, 492, 285, 157, 620, 349, 93, 556, 428, 221, 684, 61, 524, 317, 189, 652, 396, 125, 588, 460, 253, 716, 360, 3, 466, 259, 131, 594, 323, 67, 530, 402, 195, 658, 35, 498, 291, 163, 626, 370, 99, 562, 434, 227, 690, 19, 482, 275, 147, 610, 339, 83, 546, 418, 211, 674, 51, 514, 307, 179, 642, 386, 115, 578, 450, 243, 706, 355, 11, 474, 267, 139, 602, 331, 75, 538, 410, 203, 666, 43, 506, 299, 171, 634, 378, 107, 570, 442, 235, 698, 27, 490, 283, 155, 618, 347, 91, 554, 426, 219, 682, 59, 522, 315, 187, 650, 394, 123, 586, 458, 251, 714, 362, 7, 470, 263, 135, 598, 327, 71, 534, 406, 199, 662, 39, 502, 295, 167, 630, 374, 103, 566, 438, 231, 694, 23, 486, 279, 151, 614, 343, 87, 550, 422, 215, 678, 55, 518, 311, 183, 646, 390, 119, 582, 454, 247, 710, 366, 15, 478, 271, 143, 606, 335, 79, 542, 414, 207, 670, 47, 510, 303, 175, 638, 382, 111, 574, 446, 239, 702, 31, 494, 287, 159, 622, 351, 95, 558, 430, 223, 686, 63, 526, 319, 191, 654, 398, 127, 590, 462, 255, 718]; + + return (unsafe{*PERM719.get_unchecked((index % 719) as usize)} as u32 * 516961 + + unsafe{*PERM719.get_unchecked(((index / 719) % 719) as usize)} as u32 * 719 + + unsafe{*PERM719.get_unchecked(((index / 516961) % 719) as usize)} as u32) as f32 * (0.999999940395355224609375f32 / (371694959u32 as f32)); // Results in [0,1). } - - -#[inline(always)] -fn halton1549(index: u32) -> f32 { - const PERM1549: [u16; 1549] = [0, 512, 1037, 256, 781, 1293, 128, 640, 1165, 384, 909, 1421, - 64, 576, 1101, 320, 845, 1357, 192, 704, 1229, 448, 973, 1485, - 32, 544, 1069, 288, 813, 1325, 160, 672, 1197, 416, 941, 1453, - 96, 608, 1133, 352, 877, 1389, 224, 736, 1261, 480, 1005, 1517, - 16, 528, 1053, 272, 797, 1309, 144, 656, 1181, 400, 925, 1437, - 80, 592, 1117, 336, 861, 1373, 208, 720, 1245, 464, 989, 1501, - 48, 560, 1085, 304, 829, 1341, 176, 688, 1213, 432, 957, 1469, - 112, 624, 1149, 368, 893, 1405, 240, 752, 1277, 496, 1021, - 1533, 768, 8, 520, 1045, 264, 789, 1301, 136, 648, 1173, 392, - 917, 1429, 72, 584, 1109, 328, 853, 1365, 200, 712, 1237, 456, - 981, 1493, 40, 552, 1077, 296, 821, 1333, 168, 680, 1205, 424, - 949, 1461, 104, 616, 1141, 360, 885, 1397, 232, 744, 1269, 488, - 1013, 1525, 24, 536, 1061, 280, 805, 1317, 152, 664, 1189, 408, - 933, 1445, 88, 600, 1125, 344, 869, 1381, 216, 728, 1253, 472, - 997, 1509, 56, 568, 1093, 312, 837, 1349, 184, 696, 1221, 440, - 965, 1477, 120, 632, 1157, 376, 901, 1413, 248, 760, 1285, 504, - 1029, 1541, 772, 4, 516, 1041, 260, 785, 1297, 132, 644, 1169, - 388, 913, 1425, 68, 580, 1105, 324, 849, 1361, 196, 708, 1233, - 452, 977, 1489, 36, 548, 1073, 292, 817, 1329, 164, 676, 1201, - 420, 945, 1457, 100, 612, 1137, 356, 881, 1393, 228, 740, 1265, - 484, 1009, 1521, 20, 532, 1057, 276, 801, 1313, 148, 660, 1185, - 404, 929, 1441, 84, 596, 1121, 340, 865, 1377, 212, 724, 1249, - 468, 993, 1505, 52, 564, 1089, 308, 833, 1345, 180, 692, 1217, - 436, 961, 1473, 116, 628, 1153, 372, 897, 1409, 244, 756, 1281, - 500, 1025, 1537, 777, 12, 524, 1049, 268, 793, 1305, 140, 652, - 1177, 396, 921, 1433, 76, 588, 1113, 332, 857, 1369, 204, 716, - 1241, 460, 985, 1497, 44, 556, 1081, 300, 825, 1337, 172, 684, - 1209, 428, 953, 1465, 108, 620, 1145, 364, 889, 1401, 236, 748, - 1273, 492, 1017, 1529, 28, 540, 1065, 284, 809, 1321, 156, 668, - 1193, 412, 937, 1449, 92, 604, 1129, 348, 873, 1385, 220, 732, - 1257, 476, 1001, 1513, 60, 572, 1097, 316, 841, 1353, 188, 700, - 1225, 444, 969, 1481, 124, 636, 1161, 380, 905, 1417, 252, 764, - 1289, 508, 1033, 1545, 2, 514, 1039, 258, 783, 1295, 130, 642, - 1167, 386, 911, 1423, 66, 578, 1103, 322, 847, 1359, 194, 706, - 1231, 450, 975, 1487, 34, 546, 1071, 290, 815, 1327, 162, 674, - 1199, 418, 943, 1455, 98, 610, 1135, 354, 879, 1391, 226, 738, - 1263, 482, 1007, 1519, 18, 530, 1055, 274, 799, 1311, 146, 658, - 1183, 402, 927, 1439, 82, 594, 1119, 338, 863, 1375, 210, 722, - 1247, 466, 991, 1503, 50, 562, 1087, 306, 831, 1343, 178, 690, - 1215, 434, 959, 1471, 114, 626, 1151, 370, 895, 1407, 242, 754, - 1279, 498, 1023, 1535, 770, 10, 522, 1047, 266, 791, 1303, 138, - 650, 1175, 394, 919, 1431, 74, 586, 1111, 330, 855, 1367, 202, - 714, 1239, 458, 983, 1495, 42, 554, 1079, 298, 823, 1335, 170, - 682, 1207, 426, 951, 1463, 106, 618, 1143, 362, 887, 1399, 234, - 746, 1271, 490, 1015, 1527, 26, 538, 1063, 282, 807, 1319, 154, - 666, 1191, 410, 935, 1447, 90, 602, 1127, 346, 871, 1383, 218, - 730, 1255, 474, 999, 1511, 58, 570, 1095, 314, 839, 1351, 186, - 698, 1223, 442, 967, 1479, 122, 634, 1159, 378, 903, 1415, 250, - 762, 1287, 506, 1031, 1543, 775, 6, 518, 1043, 262, 787, 1299, - 134, 646, 1171, 390, 915, 1427, 70, 582, 1107, 326, 851, 1363, - 198, 710, 1235, 454, 979, 1491, 38, 550, 1075, 294, 819, 1331, - 166, 678, 1203, 422, 947, 1459, 102, 614, 1139, 358, 883, 1395, - 230, 742, 1267, 486, 1011, 1523, 22, 534, 1059, 278, 803, 1315, - 150, 662, 1187, 406, 931, 1443, 86, 598, 1123, 342, 867, 1379, - 214, 726, 1251, 470, 995, 1507, 54, 566, 1091, 310, 835, 1347, - 182, 694, 1219, 438, 963, 1475, 118, 630, 1155, 374, 899, 1411, - 246, 758, 1283, 502, 1027, 1539, 779, 14, 526, 1051, 270, 795, - 1307, 142, 654, 1179, 398, 923, 1435, 78, 590, 1115, 334, 859, - 1371, 206, 718, 1243, 462, 987, 1499, 46, 558, 1083, 302, 827, - 1339, 174, 686, 1211, 430, 955, 1467, 110, 622, 1147, 366, 891, - 1403, 238, 750, 1275, 494, 1019, 1531, 30, 542, 1067, 286, 811, - 1323, 158, 670, 1195, 414, 939, 1451, 94, 606, 1131, 350, 875, - 1387, 222, 734, 1259, 478, 1003, 1515, 62, 574, 1099, 318, 843, - 1355, 190, 702, 1227, 446, 971, 1483, 126, 638, 1163, 382, 907, - 1419, 254, 766, 1291, 510, 1035, 1547, 774, 1, 513, 1038, 257, - 782, 1294, 129, 641, 1166, 385, 910, 1422, 65, 577, 1102, 321, - 846, 1358, 193, 705, 1230, 449, 974, 1486, 33, 545, 1070, 289, - 814, 1326, 161, 673, 1198, 417, 942, 1454, 97, 609, 1134, 353, - 878, 1390, 225, 737, 1262, 481, 1006, 1518, 17, 529, 1054, 273, - 798, 1310, 145, 657, 1182, 401, 926, 1438, 81, 593, 1118, 337, - 862, 1374, 209, 721, 1246, 465, 990, 1502, 49, 561, 1086, 305, - 830, 1342, 177, 689, 1214, 433, 958, 1470, 113, 625, 1150, 369, - 894, 1406, 241, 753, 1278, 497, 1022, 1534, 769, 9, 521, 1046, - 265, 790, 1302, 137, 649, 1174, 393, 918, 1430, 73, 585, 1110, - 329, 854, 1366, 201, 713, 1238, 457, 982, 1494, 41, 553, 1078, - 297, 822, 1334, 169, 681, 1206, 425, 950, 1462, 105, 617, 1142, - 361, 886, 1398, 233, 745, 1270, 489, 1014, 1526, 25, 537, 1062, - 281, 806, 1318, 153, 665, 1190, 409, 934, 1446, 89, 601, 1126, - 345, 870, 1382, 217, 729, 1254, 473, 998, 1510, 57, 569, 1094, - 313, 838, 1350, 185, 697, 1222, 441, 966, 1478, 121, 633, 1158, - 377, 902, 1414, 249, 761, 1286, 505, 1030, 1542, 773, 5, 517, - 1042, 261, 786, 1298, 133, 645, 1170, 389, 914, 1426, 69, 581, - 1106, 325, 850, 1362, 197, 709, 1234, 453, 978, 1490, 37, 549, - 1074, 293, 818, 1330, 165, 677, 1202, 421, 946, 1458, 101, 613, - 1138, 357, 882, 1394, 229, 741, 1266, 485, 1010, 1522, 21, 533, - 1058, 277, 802, 1314, 149, 661, 1186, 405, 930, 1442, 85, 597, - 1122, 341, 866, 1378, 213, 725, 1250, 469, 994, 1506, 53, 565, - 1090, 309, 834, 1346, 181, 693, 1218, 437, 962, 1474, 117, 629, - 1154, 373, 898, 1410, 245, 757, 1282, 501, 1026, 1538, 778, 13, - 525, 1050, 269, 794, 1306, 141, 653, 1178, 397, 922, 1434, 77, - 589, 1114, 333, 858, 1370, 205, 717, 1242, 461, 986, 1498, 45, - 557, 1082, 301, 826, 1338, 173, 685, 1210, 429, 954, 1466, 109, - 621, 1146, 365, 890, 1402, 237, 749, 1274, 493, 1018, 1530, 29, - 541, 1066, 285, 810, 1322, 157, 669, 1194, 413, 938, 1450, 93, - 605, 1130, 349, 874, 1386, 221, 733, 1258, 477, 1002, 1514, 61, - 573, 1098, 317, 842, 1354, 189, 701, 1226, 445, 970, 1482, 125, - 637, 1162, 381, 906, 1418, 253, 765, 1290, 509, 1034, 1546, 3, - 515, 1040, 259, 784, 1296, 131, 643, 1168, 387, 912, 1424, 67, - 579, 1104, 323, 848, 1360, 195, 707, 1232, 451, 976, 1488, 35, - 547, 1072, 291, 816, 1328, 163, 675, 1200, 419, 944, 1456, 99, - 611, 1136, 355, 880, 1392, 227, 739, 1264, 483, 1008, 1520, 19, - 531, 1056, 275, 800, 1312, 147, 659, 1184, 403, 928, 1440, 83, - 595, 1120, 339, 864, 1376, 211, 723, 1248, 467, 992, 1504, 51, - 563, 1088, 307, 832, 1344, 179, 691, 1216, 435, 960, 1472, 115, - 627, 1152, 371, 896, 1408, 243, 755, 1280, 499, 1024, 1536, - 771, 11, 523, 1048, 267, 792, 1304, 139, 651, 1176, 395, 920, - 1432, 75, 587, 1112, 331, 856, 1368, 203, 715, 1240, 459, 984, - 1496, 43, 555, 1080, 299, 824, 1336, 171, 683, 1208, 427, 952, - 1464, 107, 619, 1144, 363, 888, 1400, 235, 747, 1272, 491, - 1016, 1528, 27, 539, 1064, 283, 808, 1320, 155, 667, 1192, 411, - 936, 1448, 91, 603, 1128, 347, 872, 1384, 219, 731, 1256, 475, - 1000, 1512, 59, 571, 1096, 315, 840, 1352, 187, 699, 1224, 443, - 968, 1480, 123, 635, 1160, 379, 904, 1416, 251, 763, 1288, 507, - 1032, 1544, 776, 7, 519, 1044, 263, 788, 1300, 135, 647, 1172, - 391, 916, 1428, 71, 583, 1108, 327, 852, 1364, 199, 711, 1236, - 455, 980, 1492, 39, 551, 1076, 295, 820, 1332, 167, 679, 1204, - 423, 948, 1460, 103, 615, 1140, 359, 884, 1396, 231, 743, 1268, - 487, 1012, 1524, 23, 535, 1060, 279, 804, 1316, 151, 663, 1188, - 407, 932, 1444, 87, 599, 1124, 343, 868, 1380, 215, 727, 1252, - 471, 996, 1508, 55, 567, 1092, 311, 836, 1348, 183, 695, 1220, - 439, 964, 1476, 119, 631, 1156, 375, 900, 1412, 247, 759, 1284, - 503, 1028, 1540, 780, 15, 527, 1052, 271, 796, 1308, 143, 655, - 1180, 399, 924, 1436, 79, 591, 1116, 335, 860, 1372, 207, 719, - 1244, 463, 988, 1500, 47, 559, 1084, 303, 828, 1340, 175, 687, - 1212, 431, 956, 1468, 111, 623, 1148, 367, 892, 1404, 239, 751, - 1276, 495, 1020, 1532, 31, 543, 1068, 287, 812, 1324, 159, 671, - 1196, 415, 940, 1452, 95, 607, 1132, 351, 876, 1388, 223, 735, - 1260, 479, 1004, 1516, 63, 575, 1100, 319, 844, 1356, 191, 703, - 1228, 447, 972, 1484, 127, 639, 1164, 383, 908, 1420, 255, 767, - 1292, 511, 1036, 1548]; - - return (unsafe { *PERM1549.get_unchecked((index % 1549) as usize) } as u32 * 2399401 + - unsafe { *PERM1549.get_unchecked(((index / 1549) % 1549) as usize) } as u32 * 1549 + - unsafe { - *PERM1549.get_unchecked(((index / 2399401) % 1549) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3716672149u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1553(index: u32) -> f32 { - const PERM1553: [u16; 1553] = [0, 512, 1041, 256, 785, 1297, 128, 640, 1169, 384, 913, 1425, - 64, 576, 1105, 320, 849, 1361, 192, 704, 1233, 448, 977, 1489, - 32, 544, 1073, 288, 817, 1329, 160, 672, 1201, 416, 945, 1457, - 96, 608, 1137, 352, 881, 1393, 224, 736, 1265, 480, 1009, 1521, - 768, 16, 528, 1057, 272, 801, 1313, 144, 656, 1185, 400, 929, - 1441, 80, 592, 1121, 336, 865, 1377, 208, 720, 1249, 464, 993, - 1505, 48, 560, 1089, 304, 833, 1345, 176, 688, 1217, 432, 961, - 1473, 112, 624, 1153, 368, 897, 1409, 240, 752, 1281, 496, - 1025, 1537, 8, 520, 1049, 264, 793, 1305, 136, 648, 1177, 392, - 921, 1433, 72, 584, 1113, 328, 857, 1369, 200, 712, 1241, 456, - 985, 1497, 40, 552, 1081, 296, 825, 1337, 168, 680, 1209, 424, - 953, 1465, 104, 616, 1145, 360, 889, 1401, 232, 744, 1273, 488, - 1017, 1529, 777, 24, 536, 1065, 280, 809, 1321, 152, 664, 1193, - 408, 937, 1449, 88, 600, 1129, 344, 873, 1385, 216, 728, 1257, - 472, 1001, 1513, 56, 568, 1097, 312, 841, 1353, 184, 696, 1225, - 440, 969, 1481, 120, 632, 1161, 376, 905, 1417, 248, 760, 1289, - 504, 1033, 1545, 4, 516, 1045, 260, 789, 1301, 132, 644, 1173, - 388, 917, 1429, 68, 580, 1109, 324, 853, 1365, 196, 708, 1237, - 452, 981, 1493, 36, 548, 1077, 292, 821, 1333, 164, 676, 1205, - 420, 949, 1461, 100, 612, 1141, 356, 885, 1397, 228, 740, 1269, - 484, 1013, 1525, 772, 20, 532, 1061, 276, 805, 1317, 148, 660, - 1189, 404, 933, 1445, 84, 596, 1125, 340, 869, 1381, 212, 724, - 1253, 468, 997, 1509, 52, 564, 1093, 308, 837, 1349, 180, 692, - 1221, 436, 965, 1477, 116, 628, 1157, 372, 901, 1413, 244, 756, - 1285, 500, 1029, 1541, 12, 524, 1053, 268, 797, 1309, 140, 652, - 1181, 396, 925, 1437, 76, 588, 1117, 332, 861, 1373, 204, 716, - 1245, 460, 989, 1501, 44, 556, 1085, 300, 829, 1341, 172, 684, - 1213, 428, 957, 1469, 108, 620, 1149, 364, 893, 1405, 236, 748, - 1277, 492, 1021, 1533, 781, 28, 540, 1069, 284, 813, 1325, 156, - 668, 1197, 412, 941, 1453, 92, 604, 1133, 348, 877, 1389, 220, - 732, 1261, 476, 1005, 1517, 60, 572, 1101, 316, 845, 1357, 188, - 700, 1229, 444, 973, 1485, 124, 636, 1165, 380, 909, 1421, 252, - 764, 1293, 508, 1037, 1549, 2, 514, 1043, 258, 787, 1299, 130, - 642, 1171, 386, 915, 1427, 66, 578, 1107, 322, 851, 1363, 194, - 706, 1235, 450, 979, 1491, 34, 546, 1075, 290, 819, 1331, 162, - 674, 1203, 418, 947, 1459, 98, 610, 1139, 354, 883, 1395, 226, - 738, 1267, 482, 1011, 1523, 770, 18, 530, 1059, 274, 803, 1315, - 146, 658, 1187, 402, 931, 1443, 82, 594, 1123, 338, 867, 1379, - 210, 722, 1251, 466, 995, 1507, 50, 562, 1091, 306, 835, 1347, - 178, 690, 1219, 434, 963, 1475, 114, 626, 1155, 370, 899, 1411, - 242, 754, 1283, 498, 1027, 1539, 10, 522, 1051, 266, 795, 1307, - 138, 650, 1179, 394, 923, 1435, 74, 586, 1115, 330, 859, 1371, - 202, 714, 1243, 458, 987, 1499, 42, 554, 1083, 298, 827, 1339, - 170, 682, 1211, 426, 955, 1467, 106, 618, 1147, 362, 891, 1403, - 234, 746, 1275, 490, 1019, 1531, 779, 26, 538, 1067, 282, 811, - 1323, 154, 666, 1195, 410, 939, 1451, 90, 602, 1131, 346, 875, - 1387, 218, 730, 1259, 474, 1003, 1515, 58, 570, 1099, 314, 843, - 1355, 186, 698, 1227, 442, 971, 1483, 122, 634, 1163, 378, 907, - 1419, 250, 762, 1291, 506, 1035, 1547, 6, 518, 1047, 262, 791, - 1303, 134, 646, 1175, 390, 919, 1431, 70, 582, 1111, 326, 855, - 1367, 198, 710, 1239, 454, 983, 1495, 38, 550, 1079, 294, 823, - 1335, 166, 678, 1207, 422, 951, 1463, 102, 614, 1143, 358, 887, - 1399, 230, 742, 1271, 486, 1015, 1527, 774, 22, 534, 1063, 278, - 807, 1319, 150, 662, 1191, 406, 935, 1447, 86, 598, 1127, 342, - 871, 1383, 214, 726, 1255, 470, 999, 1511, 54, 566, 1095, 310, - 839, 1351, 182, 694, 1223, 438, 967, 1479, 118, 630, 1159, 374, - 903, 1415, 246, 758, 1287, 502, 1031, 1543, 14, 526, 1055, 270, - 799, 1311, 142, 654, 1183, 398, 927, 1439, 78, 590, 1119, 334, - 863, 1375, 206, 718, 1247, 462, 991, 1503, 46, 558, 1087, 302, - 831, 1343, 174, 686, 1215, 430, 959, 1471, 110, 622, 1151, 366, - 895, 1407, 238, 750, 1279, 494, 1023, 1535, 783, 30, 542, 1071, - 286, 815, 1327, 158, 670, 1199, 414, 943, 1455, 94, 606, 1135, - 350, 879, 1391, 222, 734, 1263, 478, 1007, 1519, 62, 574, 1103, - 318, 847, 1359, 190, 702, 1231, 446, 975, 1487, 126, 638, 1167, - 382, 911, 1423, 254, 766, 1295, 510, 1039, 1551, 776, 1, 513, - 1042, 257, 786, 1298, 129, 641, 1170, 385, 914, 1426, 65, 577, - 1106, 321, 850, 1362, 193, 705, 1234, 449, 978, 1490, 33, 545, - 1074, 289, 818, 1330, 161, 673, 1202, 417, 946, 1458, 97, 609, - 1138, 353, 882, 1394, 225, 737, 1266, 481, 1010, 1522, 769, 17, - 529, 1058, 273, 802, 1314, 145, 657, 1186, 401, 930, 1442, 81, - 593, 1122, 337, 866, 1378, 209, 721, 1250, 465, 994, 1506, 49, - 561, 1090, 305, 834, 1346, 177, 689, 1218, 433, 962, 1474, 113, - 625, 1154, 369, 898, 1410, 241, 753, 1282, 497, 1026, 1538, 9, - 521, 1050, 265, 794, 1306, 137, 649, 1178, 393, 922, 1434, 73, - 585, 1114, 329, 858, 1370, 201, 713, 1242, 457, 986, 1498, 41, - 553, 1082, 297, 826, 1338, 169, 681, 1210, 425, 954, 1466, 105, - 617, 1146, 361, 890, 1402, 233, 745, 1274, 489, 1018, 1530, - 778, 25, 537, 1066, 281, 810, 1322, 153, 665, 1194, 409, 938, - 1450, 89, 601, 1130, 345, 874, 1386, 217, 729, 1258, 473, 1002, - 1514, 57, 569, 1098, 313, 842, 1354, 185, 697, 1226, 441, 970, - 1482, 121, 633, 1162, 377, 906, 1418, 249, 761, 1290, 505, - 1034, 1546, 5, 517, 1046, 261, 790, 1302, 133, 645, 1174, 389, - 918, 1430, 69, 581, 1110, 325, 854, 1366, 197, 709, 1238, 453, - 982, 1494, 37, 549, 1078, 293, 822, 1334, 165, 677, 1206, 421, - 950, 1462, 101, 613, 1142, 357, 886, 1398, 229, 741, 1270, 485, - 1014, 1526, 773, 21, 533, 1062, 277, 806, 1318, 149, 661, 1190, - 405, 934, 1446, 85, 597, 1126, 341, 870, 1382, 213, 725, 1254, - 469, 998, 1510, 53, 565, 1094, 309, 838, 1350, 181, 693, 1222, - 437, 966, 1478, 117, 629, 1158, 373, 902, 1414, 245, 757, 1286, - 501, 1030, 1542, 13, 525, 1054, 269, 798, 1310, 141, 653, 1182, - 397, 926, 1438, 77, 589, 1118, 333, 862, 1374, 205, 717, 1246, - 461, 990, 1502, 45, 557, 1086, 301, 830, 1342, 173, 685, 1214, - 429, 958, 1470, 109, 621, 1150, 365, 894, 1406, 237, 749, 1278, - 493, 1022, 1534, 782, 29, 541, 1070, 285, 814, 1326, 157, 669, - 1198, 413, 942, 1454, 93, 605, 1134, 349, 878, 1390, 221, 733, - 1262, 477, 1006, 1518, 61, 573, 1102, 317, 846, 1358, 189, 701, - 1230, 445, 974, 1486, 125, 637, 1166, 381, 910, 1422, 253, 765, - 1294, 509, 1038, 1550, 3, 515, 1044, 259, 788, 1300, 131, 643, - 1172, 387, 916, 1428, 67, 579, 1108, 323, 852, 1364, 195, 707, - 1236, 451, 980, 1492, 35, 547, 1076, 291, 820, 1332, 163, 675, - 1204, 419, 948, 1460, 99, 611, 1140, 355, 884, 1396, 227, 739, - 1268, 483, 1012, 1524, 771, 19, 531, 1060, 275, 804, 1316, 147, - 659, 1188, 403, 932, 1444, 83, 595, 1124, 339, 868, 1380, 211, - 723, 1252, 467, 996, 1508, 51, 563, 1092, 307, 836, 1348, 179, - 691, 1220, 435, 964, 1476, 115, 627, 1156, 371, 900, 1412, 243, - 755, 1284, 499, 1028, 1540, 11, 523, 1052, 267, 796, 1308, 139, - 651, 1180, 395, 924, 1436, 75, 587, 1116, 331, 860, 1372, 203, - 715, 1244, 459, 988, 1500, 43, 555, 1084, 299, 828, 1340, 171, - 683, 1212, 427, 956, 1468, 107, 619, 1148, 363, 892, 1404, 235, - 747, 1276, 491, 1020, 1532, 780, 27, 539, 1068, 283, 812, 1324, - 155, 667, 1196, 411, 940, 1452, 91, 603, 1132, 347, 876, 1388, - 219, 731, 1260, 475, 1004, 1516, 59, 571, 1100, 315, 844, 1356, - 187, 699, 1228, 443, 972, 1484, 123, 635, 1164, 379, 908, 1420, - 251, 763, 1292, 507, 1036, 1548, 7, 519, 1048, 263, 792, 1304, - 135, 647, 1176, 391, 920, 1432, 71, 583, 1112, 327, 856, 1368, - 199, 711, 1240, 455, 984, 1496, 39, 551, 1080, 295, 824, 1336, - 167, 679, 1208, 423, 952, 1464, 103, 615, 1144, 359, 888, 1400, - 231, 743, 1272, 487, 1016, 1528, 775, 23, 535, 1064, 279, 808, - 1320, 151, 663, 1192, 407, 936, 1448, 87, 599, 1128, 343, 872, - 1384, 215, 727, 1256, 471, 1000, 1512, 55, 567, 1096, 311, 840, - 1352, 183, 695, 1224, 439, 968, 1480, 119, 631, 1160, 375, 904, - 1416, 247, 759, 1288, 503, 1032, 1544, 15, 527, 1056, 271, 800, - 1312, 143, 655, 1184, 399, 928, 1440, 79, 591, 1120, 335, 864, - 1376, 207, 719, 1248, 463, 992, 1504, 47, 559, 1088, 303, 832, - 1344, 175, 687, 1216, 431, 960, 1472, 111, 623, 1152, 367, 896, - 1408, 239, 751, 1280, 495, 1024, 1536, 784, 31, 543, 1072, 287, - 816, 1328, 159, 671, 1200, 415, 944, 1456, 95, 607, 1136, 351, - 880, 1392, 223, 735, 1264, 479, 1008, 1520, 63, 575, 1104, 319, - 848, 1360, 191, 703, 1232, 447, 976, 1488, 127, 639, 1168, 383, - 912, 1424, 255, 767, 1296, 511, 1040, 1552]; - - return (unsafe { *PERM1553.get_unchecked((index % 1553) as usize) } as u32 * 2411809 + - unsafe { *PERM1553.get_unchecked(((index / 1553) % 1553) as usize) } as u32 * 1553 + - unsafe { - *PERM1553.get_unchecked(((index / 2411809) % 1553) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3745539377u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1559(index: u32) -> f32 { - const PERM1559: [u16; 1559] = [0, 512, 1047, 256, 791, 1303, 128, 640, 1175, 384, 919, 1431, - 64, 576, 1111, 320, 855, 1367, 192, 704, 1239, 448, 983, 1495, - 32, 544, 1079, 288, 823, 1335, 160, 672, 1207, 416, 951, 1463, - 96, 608, 1143, 352, 887, 1399, 224, 736, 1271, 480, 1015, 1527, - 768, 16, 528, 1063, 272, 807, 1319, 144, 656, 1191, 400, 935, - 1447, 80, 592, 1127, 336, 871, 1383, 208, 720, 1255, 464, 999, - 1511, 48, 560, 1095, 304, 839, 1351, 176, 688, 1223, 432, 967, - 1479, 112, 624, 1159, 368, 903, 1415, 240, 752, 1287, 496, - 1031, 1543, 8, 520, 1055, 264, 799, 1311, 136, 648, 1183, 392, - 927, 1439, 72, 584, 1119, 328, 863, 1375, 200, 712, 1247, 456, - 991, 1503, 40, 552, 1087, 296, 831, 1343, 168, 680, 1215, 424, - 959, 1471, 104, 616, 1151, 360, 895, 1407, 232, 744, 1279, 488, - 1023, 1535, 783, 24, 536, 1071, 280, 815, 1327, 152, 664, 1199, - 408, 943, 1455, 88, 600, 1135, 344, 879, 1391, 216, 728, 1263, - 472, 1007, 1519, 56, 568, 1103, 312, 847, 1359, 184, 696, 1231, - 440, 975, 1487, 120, 632, 1167, 376, 911, 1423, 248, 760, 1295, - 504, 1039, 1551, 776, 4, 516, 1051, 260, 795, 1307, 132, 644, - 1179, 388, 923, 1435, 68, 580, 1115, 324, 859, 1371, 196, 708, - 1243, 452, 987, 1499, 36, 548, 1083, 292, 827, 1339, 164, 676, - 1211, 420, 955, 1467, 100, 612, 1147, 356, 891, 1403, 228, 740, - 1275, 484, 1019, 1531, 772, 20, 532, 1067, 276, 811, 1323, 148, - 660, 1195, 404, 939, 1451, 84, 596, 1131, 340, 875, 1387, 212, - 724, 1259, 468, 1003, 1515, 52, 564, 1099, 308, 843, 1355, 180, - 692, 1227, 436, 971, 1483, 116, 628, 1163, 372, 907, 1419, 244, - 756, 1291, 500, 1035, 1547, 12, 524, 1059, 268, 803, 1315, 140, - 652, 1187, 396, 931, 1443, 76, 588, 1123, 332, 867, 1379, 204, - 716, 1251, 460, 995, 1507, 44, 556, 1091, 300, 835, 1347, 172, - 684, 1219, 428, 963, 1475, 108, 620, 1155, 364, 899, 1411, 236, - 748, 1283, 492, 1027, 1539, 787, 28, 540, 1075, 284, 819, 1331, - 156, 668, 1203, 412, 947, 1459, 92, 604, 1139, 348, 883, 1395, - 220, 732, 1267, 476, 1011, 1523, 60, 572, 1107, 316, 851, 1363, - 188, 700, 1235, 444, 979, 1491, 124, 636, 1171, 380, 915, 1427, - 252, 764, 1299, 508, 1043, 1555, 778, 2, 514, 1049, 258, 793, - 1305, 130, 642, 1177, 386, 921, 1433, 66, 578, 1113, 322, 857, - 1369, 194, 706, 1241, 450, 985, 1497, 34, 546, 1081, 290, 825, - 1337, 162, 674, 1209, 418, 953, 1465, 98, 610, 1145, 354, 889, - 1401, 226, 738, 1273, 482, 1017, 1529, 770, 18, 530, 1065, 274, - 809, 1321, 146, 658, 1193, 402, 937, 1449, 82, 594, 1129, 338, - 873, 1385, 210, 722, 1257, 466, 1001, 1513, 50, 562, 1097, 306, - 841, 1353, 178, 690, 1225, 434, 969, 1481, 114, 626, 1161, 370, - 905, 1417, 242, 754, 1289, 498, 1033, 1545, 10, 522, 1057, 266, - 801, 1313, 138, 650, 1185, 394, 929, 1441, 74, 586, 1121, 330, - 865, 1377, 202, 714, 1249, 458, 993, 1505, 42, 554, 1089, 298, - 833, 1345, 170, 682, 1217, 426, 961, 1473, 106, 618, 1153, 362, - 897, 1409, 234, 746, 1281, 490, 1025, 1537, 785, 26, 538, 1073, - 282, 817, 1329, 154, 666, 1201, 410, 945, 1457, 90, 602, 1137, - 346, 881, 1393, 218, 730, 1265, 474, 1009, 1521, 58, 570, 1105, - 314, 849, 1361, 186, 698, 1233, 442, 977, 1489, 122, 634, 1169, - 378, 913, 1425, 250, 762, 1297, 506, 1041, 1553, 781, 6, 518, - 1053, 262, 797, 1309, 134, 646, 1181, 390, 925, 1437, 70, 582, - 1117, 326, 861, 1373, 198, 710, 1245, 454, 989, 1501, 38, 550, - 1085, 294, 829, 1341, 166, 678, 1213, 422, 957, 1469, 102, 614, - 1149, 358, 893, 1405, 230, 742, 1277, 486, 1021, 1533, 774, 22, - 534, 1069, 278, 813, 1325, 150, 662, 1197, 406, 941, 1453, 86, - 598, 1133, 342, 877, 1389, 214, 726, 1261, 470, 1005, 1517, 54, - 566, 1101, 310, 845, 1357, 182, 694, 1229, 438, 973, 1485, 118, - 630, 1165, 374, 909, 1421, 246, 758, 1293, 502, 1037, 1549, 14, - 526, 1061, 270, 805, 1317, 142, 654, 1189, 398, 933, 1445, 78, - 590, 1125, 334, 869, 1381, 206, 718, 1253, 462, 997, 1509, 46, - 558, 1093, 302, 837, 1349, 174, 686, 1221, 430, 965, 1477, 110, - 622, 1157, 366, 901, 1413, 238, 750, 1285, 494, 1029, 1541, - 789, 30, 542, 1077, 286, 821, 1333, 158, 670, 1205, 414, 949, - 1461, 94, 606, 1141, 350, 885, 1397, 222, 734, 1269, 478, 1013, - 1525, 62, 574, 1109, 318, 853, 1365, 190, 702, 1237, 446, 981, - 1493, 126, 638, 1173, 382, 917, 1429, 254, 766, 1301, 510, - 1045, 1557, 779, 1, 513, 1048, 257, 792, 1304, 129, 641, 1176, - 385, 920, 1432, 65, 577, 1112, 321, 856, 1368, 193, 705, 1240, - 449, 984, 1496, 33, 545, 1080, 289, 824, 1336, 161, 673, 1208, - 417, 952, 1464, 97, 609, 1144, 353, 888, 1400, 225, 737, 1272, - 481, 1016, 1528, 769, 17, 529, 1064, 273, 808, 1320, 145, 657, - 1192, 401, 936, 1448, 81, 593, 1128, 337, 872, 1384, 209, 721, - 1256, 465, 1000, 1512, 49, 561, 1096, 305, 840, 1352, 177, 689, - 1224, 433, 968, 1480, 113, 625, 1160, 369, 904, 1416, 241, 753, - 1288, 497, 1032, 1544, 9, 521, 1056, 265, 800, 1312, 137, 649, - 1184, 393, 928, 1440, 73, 585, 1120, 329, 864, 1376, 201, 713, - 1248, 457, 992, 1504, 41, 553, 1088, 297, 832, 1344, 169, 681, - 1216, 425, 960, 1472, 105, 617, 1152, 361, 896, 1408, 233, 745, - 1280, 489, 1024, 1536, 784, 25, 537, 1072, 281, 816, 1328, 153, - 665, 1200, 409, 944, 1456, 89, 601, 1136, 345, 880, 1392, 217, - 729, 1264, 473, 1008, 1520, 57, 569, 1104, 313, 848, 1360, 185, - 697, 1232, 441, 976, 1488, 121, 633, 1168, 377, 912, 1424, 249, - 761, 1296, 505, 1040, 1552, 777, 5, 517, 1052, 261, 796, 1308, - 133, 645, 1180, 389, 924, 1436, 69, 581, 1116, 325, 860, 1372, - 197, 709, 1244, 453, 988, 1500, 37, 549, 1084, 293, 828, 1340, - 165, 677, 1212, 421, 956, 1468, 101, 613, 1148, 357, 892, 1404, - 229, 741, 1276, 485, 1020, 1532, 773, 21, 533, 1068, 277, 812, - 1324, 149, 661, 1196, 405, 940, 1452, 85, 597, 1132, 341, 876, - 1388, 213, 725, 1260, 469, 1004, 1516, 53, 565, 1100, 309, 844, - 1356, 181, 693, 1228, 437, 972, 1484, 117, 629, 1164, 373, 908, - 1420, 245, 757, 1292, 501, 1036, 1548, 13, 525, 1060, 269, 804, - 1316, 141, 653, 1188, 397, 932, 1444, 77, 589, 1124, 333, 868, - 1380, 205, 717, 1252, 461, 996, 1508, 45, 557, 1092, 301, 836, - 1348, 173, 685, 1220, 429, 964, 1476, 109, 621, 1156, 365, 900, - 1412, 237, 749, 1284, 493, 1028, 1540, 788, 29, 541, 1076, 285, - 820, 1332, 157, 669, 1204, 413, 948, 1460, 93, 605, 1140, 349, - 884, 1396, 221, 733, 1268, 477, 1012, 1524, 61, 573, 1108, 317, - 852, 1364, 189, 701, 1236, 445, 980, 1492, 125, 637, 1172, 381, - 916, 1428, 253, 765, 1300, 509, 1044, 1556, 780, 3, 515, 1050, - 259, 794, 1306, 131, 643, 1178, 387, 922, 1434, 67, 579, 1114, - 323, 858, 1370, 195, 707, 1242, 451, 986, 1498, 35, 547, 1082, - 291, 826, 1338, 163, 675, 1210, 419, 954, 1466, 99, 611, 1146, - 355, 890, 1402, 227, 739, 1274, 483, 1018, 1530, 771, 19, 531, - 1066, 275, 810, 1322, 147, 659, 1194, 403, 938, 1450, 83, 595, - 1130, 339, 874, 1386, 211, 723, 1258, 467, 1002, 1514, 51, 563, - 1098, 307, 842, 1354, 179, 691, 1226, 435, 970, 1482, 115, 627, - 1162, 371, 906, 1418, 243, 755, 1290, 499, 1034, 1546, 11, 523, - 1058, 267, 802, 1314, 139, 651, 1186, 395, 930, 1442, 75, 587, - 1122, 331, 866, 1378, 203, 715, 1250, 459, 994, 1506, 43, 555, - 1090, 299, 834, 1346, 171, 683, 1218, 427, 962, 1474, 107, 619, - 1154, 363, 898, 1410, 235, 747, 1282, 491, 1026, 1538, 786, 27, - 539, 1074, 283, 818, 1330, 155, 667, 1202, 411, 946, 1458, 91, - 603, 1138, 347, 882, 1394, 219, 731, 1266, 475, 1010, 1522, 59, - 571, 1106, 315, 850, 1362, 187, 699, 1234, 443, 978, 1490, 123, - 635, 1170, 379, 914, 1426, 251, 763, 1298, 507, 1042, 1554, - 782, 7, 519, 1054, 263, 798, 1310, 135, 647, 1182, 391, 926, - 1438, 71, 583, 1118, 327, 862, 1374, 199, 711, 1246, 455, 990, - 1502, 39, 551, 1086, 295, 830, 1342, 167, 679, 1214, 423, 958, - 1470, 103, 615, 1150, 359, 894, 1406, 231, 743, 1278, 487, - 1022, 1534, 775, 23, 535, 1070, 279, 814, 1326, 151, 663, 1198, - 407, 942, 1454, 87, 599, 1134, 343, 878, 1390, 215, 727, 1262, - 471, 1006, 1518, 55, 567, 1102, 311, 846, 1358, 183, 695, 1230, - 439, 974, 1486, 119, 631, 1166, 375, 910, 1422, 247, 759, 1294, - 503, 1038, 1550, 15, 527, 1062, 271, 806, 1318, 143, 655, 1190, - 399, 934, 1446, 79, 591, 1126, 335, 870, 1382, 207, 719, 1254, - 463, 998, 1510, 47, 559, 1094, 303, 838, 1350, 175, 687, 1222, - 431, 966, 1478, 111, 623, 1158, 367, 902, 1414, 239, 751, 1286, - 495, 1030, 1542, 790, 31, 543, 1078, 287, 822, 1334, 159, 671, - 1206, 415, 950, 1462, 95, 607, 1142, 351, 886, 1398, 223, 735, - 1270, 479, 1014, 1526, 63, 575, 1110, 319, 854, 1366, 191, 703, - 1238, 447, 982, 1494, 127, 639, 1174, 383, 918, 1430, 255, 767, - 1302, 511, 1046, 1558]; - - return (unsafe { *PERM1559.get_unchecked((index % 1559) as usize) } as u32 * 2430481 + - unsafe { *PERM1559.get_unchecked(((index / 1559) % 1559) as usize) } as u32 * 1559 + - unsafe { - *PERM1559.get_unchecked(((index / 2430481) % 1559) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3789119879u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1567(index: u32) -> f32 { - const PERM1567: [u16; 1567] = [0, 512, 1055, 256, 799, 1311, 128, 640, 1183, 384, 927, 1439, - 64, 576, 1119, 320, 863, 1375, 192, 704, 1247, 448, 991, 1503, - 32, 544, 1087, 288, 831, 1343, 160, 672, 1215, 416, 959, 1471, - 96, 608, 1151, 352, 895, 1407, 224, 736, 1279, 480, 1023, 1535, - 768, 16, 528, 1071, 272, 815, 1327, 144, 656, 1199, 400, 943, - 1455, 80, 592, 1135, 336, 879, 1391, 208, 720, 1263, 464, 1007, - 1519, 48, 560, 1103, 304, 847, 1359, 176, 688, 1231, 432, 975, - 1487, 112, 624, 1167, 368, 911, 1423, 240, 752, 1295, 496, - 1039, 1551, 776, 8, 520, 1063, 264, 807, 1319, 136, 648, 1191, - 392, 935, 1447, 72, 584, 1127, 328, 871, 1383, 200, 712, 1255, - 456, 999, 1511, 40, 552, 1095, 296, 839, 1351, 168, 680, 1223, - 424, 967, 1479, 104, 616, 1159, 360, 903, 1415, 232, 744, 1287, - 488, 1031, 1543, 791, 24, 536, 1079, 280, 823, 1335, 152, 664, - 1207, 408, 951, 1463, 88, 600, 1143, 344, 887, 1399, 216, 728, - 1271, 472, 1015, 1527, 56, 568, 1111, 312, 855, 1367, 184, 696, - 1239, 440, 983, 1495, 120, 632, 1175, 376, 919, 1431, 248, 760, - 1303, 504, 1047, 1559, 780, 4, 516, 1059, 260, 803, 1315, 132, - 644, 1187, 388, 931, 1443, 68, 580, 1123, 324, 867, 1379, 196, - 708, 1251, 452, 995, 1507, 36, 548, 1091, 292, 835, 1347, 164, - 676, 1219, 420, 963, 1475, 100, 612, 1155, 356, 899, 1411, 228, - 740, 1283, 484, 1027, 1539, 772, 20, 532, 1075, 276, 819, 1331, - 148, 660, 1203, 404, 947, 1459, 84, 596, 1139, 340, 883, 1395, - 212, 724, 1267, 468, 1011, 1523, 52, 564, 1107, 308, 851, 1363, - 180, 692, 1235, 436, 979, 1491, 116, 628, 1171, 372, 915, 1427, - 244, 756, 1299, 500, 1043, 1555, 787, 12, 524, 1067, 268, 811, - 1323, 140, 652, 1195, 396, 939, 1451, 76, 588, 1131, 332, 875, - 1387, 204, 716, 1259, 460, 1003, 1515, 44, 556, 1099, 300, 843, - 1355, 172, 684, 1227, 428, 971, 1483, 108, 620, 1163, 364, 907, - 1419, 236, 748, 1291, 492, 1035, 1547, 795, 28, 540, 1083, 284, - 827, 1339, 156, 668, 1211, 412, 955, 1467, 92, 604, 1147, 348, - 891, 1403, 220, 732, 1275, 476, 1019, 1531, 60, 572, 1115, 316, - 859, 1371, 188, 700, 1243, 444, 987, 1499, 124, 636, 1179, 380, - 923, 1435, 252, 764, 1307, 508, 1051, 1563, 782, 2, 514, 1057, - 258, 801, 1313, 130, 642, 1185, 386, 929, 1441, 66, 578, 1121, - 322, 865, 1377, 194, 706, 1249, 450, 993, 1505, 34, 546, 1089, - 290, 833, 1345, 162, 674, 1217, 418, 961, 1473, 98, 610, 1153, - 354, 897, 1409, 226, 738, 1281, 482, 1025, 1537, 770, 18, 530, - 1073, 274, 817, 1329, 146, 658, 1201, 402, 945, 1457, 82, 594, - 1137, 338, 881, 1393, 210, 722, 1265, 466, 1009, 1521, 50, 562, - 1105, 306, 849, 1361, 178, 690, 1233, 434, 977, 1489, 114, 626, - 1169, 370, 913, 1425, 242, 754, 1297, 498, 1041, 1553, 778, 10, - 522, 1065, 266, 809, 1321, 138, 650, 1193, 394, 937, 1449, 74, - 586, 1129, 330, 873, 1385, 202, 714, 1257, 458, 1001, 1513, 42, - 554, 1097, 298, 841, 1353, 170, 682, 1225, 426, 969, 1481, 106, - 618, 1161, 362, 905, 1417, 234, 746, 1289, 490, 1033, 1545, - 793, 26, 538, 1081, 282, 825, 1337, 154, 666, 1209, 410, 953, - 1465, 90, 602, 1145, 346, 889, 1401, 218, 730, 1273, 474, 1017, - 1529, 58, 570, 1113, 314, 857, 1369, 186, 698, 1241, 442, 985, - 1497, 122, 634, 1177, 378, 921, 1433, 250, 762, 1305, 506, - 1049, 1561, 785, 6, 518, 1061, 262, 805, 1317, 134, 646, 1189, - 390, 933, 1445, 70, 582, 1125, 326, 869, 1381, 198, 710, 1253, - 454, 997, 1509, 38, 550, 1093, 294, 837, 1349, 166, 678, 1221, - 422, 965, 1477, 102, 614, 1157, 358, 901, 1413, 230, 742, 1285, - 486, 1029, 1541, 774, 22, 534, 1077, 278, 821, 1333, 150, 662, - 1205, 406, 949, 1461, 86, 598, 1141, 342, 885, 1397, 214, 726, - 1269, 470, 1013, 1525, 54, 566, 1109, 310, 853, 1365, 182, 694, - 1237, 438, 981, 1493, 118, 630, 1173, 374, 917, 1429, 246, 758, - 1301, 502, 1045, 1557, 789, 14, 526, 1069, 270, 813, 1325, 142, - 654, 1197, 398, 941, 1453, 78, 590, 1133, 334, 877, 1389, 206, - 718, 1261, 462, 1005, 1517, 46, 558, 1101, 302, 845, 1357, 174, - 686, 1229, 430, 973, 1485, 110, 622, 1165, 366, 909, 1421, 238, - 750, 1293, 494, 1037, 1549, 797, 30, 542, 1085, 286, 829, 1341, - 158, 670, 1213, 414, 957, 1469, 94, 606, 1149, 350, 893, 1405, - 222, 734, 1277, 478, 1021, 1533, 62, 574, 1117, 318, 861, 1373, - 190, 702, 1245, 446, 989, 1501, 126, 638, 1181, 382, 925, 1437, - 254, 766, 1309, 510, 1053, 1565, 783, 1, 513, 1056, 257, 800, - 1312, 129, 641, 1184, 385, 928, 1440, 65, 577, 1120, 321, 864, - 1376, 193, 705, 1248, 449, 992, 1504, 33, 545, 1088, 289, 832, - 1344, 161, 673, 1216, 417, 960, 1472, 97, 609, 1152, 353, 896, - 1408, 225, 737, 1280, 481, 1024, 1536, 769, 17, 529, 1072, 273, - 816, 1328, 145, 657, 1200, 401, 944, 1456, 81, 593, 1136, 337, - 880, 1392, 209, 721, 1264, 465, 1008, 1520, 49, 561, 1104, 305, - 848, 1360, 177, 689, 1232, 433, 976, 1488, 113, 625, 1168, 369, - 912, 1424, 241, 753, 1296, 497, 1040, 1552, 777, 9, 521, 1064, - 265, 808, 1320, 137, 649, 1192, 393, 936, 1448, 73, 585, 1128, - 329, 872, 1384, 201, 713, 1256, 457, 1000, 1512, 41, 553, 1096, - 297, 840, 1352, 169, 681, 1224, 425, 968, 1480, 105, 617, 1160, - 361, 904, 1416, 233, 745, 1288, 489, 1032, 1544, 792, 25, 537, - 1080, 281, 824, 1336, 153, 665, 1208, 409, 952, 1464, 89, 601, - 1144, 345, 888, 1400, 217, 729, 1272, 473, 1016, 1528, 57, 569, - 1112, 313, 856, 1368, 185, 697, 1240, 441, 984, 1496, 121, 633, - 1176, 377, 920, 1432, 249, 761, 1304, 505, 1048, 1560, 781, 5, - 517, 1060, 261, 804, 1316, 133, 645, 1188, 389, 932, 1444, 69, - 581, 1124, 325, 868, 1380, 197, 709, 1252, 453, 996, 1508, 37, - 549, 1092, 293, 836, 1348, 165, 677, 1220, 421, 964, 1476, 101, - 613, 1156, 357, 900, 1412, 229, 741, 1284, 485, 1028, 1540, - 773, 21, 533, 1076, 277, 820, 1332, 149, 661, 1204, 405, 948, - 1460, 85, 597, 1140, 341, 884, 1396, 213, 725, 1268, 469, 1012, - 1524, 53, 565, 1108, 309, 852, 1364, 181, 693, 1236, 437, 980, - 1492, 117, 629, 1172, 373, 916, 1428, 245, 757, 1300, 501, - 1044, 1556, 788, 13, 525, 1068, 269, 812, 1324, 141, 653, 1196, - 397, 940, 1452, 77, 589, 1132, 333, 876, 1388, 205, 717, 1260, - 461, 1004, 1516, 45, 557, 1100, 301, 844, 1356, 173, 685, 1228, - 429, 972, 1484, 109, 621, 1164, 365, 908, 1420, 237, 749, 1292, - 493, 1036, 1548, 796, 29, 541, 1084, 285, 828, 1340, 157, 669, - 1212, 413, 956, 1468, 93, 605, 1148, 349, 892, 1404, 221, 733, - 1276, 477, 1020, 1532, 61, 573, 1116, 317, 860, 1372, 189, 701, - 1244, 445, 988, 1500, 125, 637, 1180, 381, 924, 1436, 253, 765, - 1308, 509, 1052, 1564, 784, 3, 515, 1058, 259, 802, 1314, 131, - 643, 1186, 387, 930, 1442, 67, 579, 1122, 323, 866, 1378, 195, - 707, 1250, 451, 994, 1506, 35, 547, 1090, 291, 834, 1346, 163, - 675, 1218, 419, 962, 1474, 99, 611, 1154, 355, 898, 1410, 227, - 739, 1282, 483, 1026, 1538, 771, 19, 531, 1074, 275, 818, 1330, - 147, 659, 1202, 403, 946, 1458, 83, 595, 1138, 339, 882, 1394, - 211, 723, 1266, 467, 1010, 1522, 51, 563, 1106, 307, 850, 1362, - 179, 691, 1234, 435, 978, 1490, 115, 627, 1170, 371, 914, 1426, - 243, 755, 1298, 499, 1042, 1554, 779, 11, 523, 1066, 267, 810, - 1322, 139, 651, 1194, 395, 938, 1450, 75, 587, 1130, 331, 874, - 1386, 203, 715, 1258, 459, 1002, 1514, 43, 555, 1098, 299, 842, - 1354, 171, 683, 1226, 427, 970, 1482, 107, 619, 1162, 363, 906, - 1418, 235, 747, 1290, 491, 1034, 1546, 794, 27, 539, 1082, 283, - 826, 1338, 155, 667, 1210, 411, 954, 1466, 91, 603, 1146, 347, - 890, 1402, 219, 731, 1274, 475, 1018, 1530, 59, 571, 1114, 315, - 858, 1370, 187, 699, 1242, 443, 986, 1498, 123, 635, 1178, 379, - 922, 1434, 251, 763, 1306, 507, 1050, 1562, 786, 7, 519, 1062, - 263, 806, 1318, 135, 647, 1190, 391, 934, 1446, 71, 583, 1126, - 327, 870, 1382, 199, 711, 1254, 455, 998, 1510, 39, 551, 1094, - 295, 838, 1350, 167, 679, 1222, 423, 966, 1478, 103, 615, 1158, - 359, 902, 1414, 231, 743, 1286, 487, 1030, 1542, 775, 23, 535, - 1078, 279, 822, 1334, 151, 663, 1206, 407, 950, 1462, 87, 599, - 1142, 343, 886, 1398, 215, 727, 1270, 471, 1014, 1526, 55, 567, - 1110, 311, 854, 1366, 183, 695, 1238, 439, 982, 1494, 119, 631, - 1174, 375, 918, 1430, 247, 759, 1302, 503, 1046, 1558, 790, 15, - 527, 1070, 271, 814, 1326, 143, 655, 1198, 399, 942, 1454, 79, - 591, 1134, 335, 878, 1390, 207, 719, 1262, 463, 1006, 1518, 47, - 559, 1102, 303, 846, 1358, 175, 687, 1230, 431, 974, 1486, 111, - 623, 1166, 367, 910, 1422, 239, 751, 1294, 495, 1038, 1550, - 798, 31, 543, 1086, 287, 830, 1342, 159, 671, 1214, 415, 958, - 1470, 95, 607, 1150, 351, 894, 1406, 223, 735, 1278, 479, 1022, - 1534, 63, 575, 1118, 319, 862, 1374, 191, 703, 1246, 447, 990, - 1502, 127, 639, 1182, 383, 926, 1438, 255, 767, 1310, 511, - 1054, 1566]; - - return (unsafe { *PERM1567.get_unchecked((index % 1567) as usize) } as u32 * 2455489 + - unsafe { *PERM1567.get_unchecked(((index / 1567) % 1567) as usize) } as u32 * 1567 + - unsafe { - *PERM1567.get_unchecked(((index / 2455489) % 1567) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3847751263u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1571(index: u32) -> f32 { - const PERM1571: [u16; 1571] = [0, 512, 1059, 256, 803, 1315, 128, 640, 1187, 384, 931, 1443, - 64, 576, 1123, 320, 867, 1379, 192, 704, 1251, 448, 995, 1507, - 768, 32, 544, 1091, 288, 835, 1347, 160, 672, 1219, 416, 963, - 1475, 96, 608, 1155, 352, 899, 1411, 224, 736, 1283, 480, 1027, - 1539, 16, 528, 1075, 272, 819, 1331, 144, 656, 1203, 400, 947, - 1459, 80, 592, 1139, 336, 883, 1395, 208, 720, 1267, 464, 1011, - 1523, 787, 48, 560, 1107, 304, 851, 1363, 176, 688, 1235, 432, - 979, 1491, 112, 624, 1171, 368, 915, 1427, 240, 752, 1299, 496, - 1043, 1555, 8, 520, 1067, 264, 811, 1323, 136, 648, 1195, 392, - 939, 1451, 72, 584, 1131, 328, 875, 1387, 200, 712, 1259, 456, - 1003, 1515, 776, 40, 552, 1099, 296, 843, 1355, 168, 680, 1227, - 424, 971, 1483, 104, 616, 1163, 360, 907, 1419, 232, 744, 1291, - 488, 1035, 1547, 24, 536, 1083, 280, 827, 1339, 152, 664, 1211, - 408, 955, 1467, 88, 600, 1147, 344, 891, 1403, 216, 728, 1275, - 472, 1019, 1531, 795, 56, 568, 1115, 312, 859, 1371, 184, 696, - 1243, 440, 987, 1499, 120, 632, 1179, 376, 923, 1435, 248, 760, - 1307, 504, 1051, 1563, 4, 516, 1063, 260, 807, 1319, 132, 644, - 1191, 388, 935, 1447, 68, 580, 1127, 324, 871, 1383, 196, 708, - 1255, 452, 999, 1511, 772, 36, 548, 1095, 292, 839, 1351, 164, - 676, 1223, 420, 967, 1479, 100, 612, 1159, 356, 903, 1415, 228, - 740, 1287, 484, 1031, 1543, 20, 532, 1079, 276, 823, 1335, 148, - 660, 1207, 404, 951, 1463, 84, 596, 1143, 340, 887, 1399, 212, - 724, 1271, 468, 1015, 1527, 791, 52, 564, 1111, 308, 855, 1367, - 180, 692, 1239, 436, 983, 1495, 116, 628, 1175, 372, 919, 1431, - 244, 756, 1303, 500, 1047, 1559, 12, 524, 1071, 268, 815, 1327, - 140, 652, 1199, 396, 943, 1455, 76, 588, 1135, 332, 879, 1391, - 204, 716, 1263, 460, 1007, 1519, 780, 44, 556, 1103, 300, 847, - 1359, 172, 684, 1231, 428, 975, 1487, 108, 620, 1167, 364, 911, - 1423, 236, 748, 1295, 492, 1039, 1551, 28, 540, 1087, 284, 831, - 1343, 156, 668, 1215, 412, 959, 1471, 92, 604, 1151, 348, 895, - 1407, 220, 732, 1279, 476, 1023, 1535, 799, 60, 572, 1119, 316, - 863, 1375, 188, 700, 1247, 444, 991, 1503, 124, 636, 1183, 380, - 927, 1439, 252, 764, 1311, 508, 1055, 1567, 784, 2, 514, 1061, - 258, 805, 1317, 130, 642, 1189, 386, 933, 1445, 66, 578, 1125, - 322, 869, 1381, 194, 706, 1253, 450, 997, 1509, 770, 34, 546, - 1093, 290, 837, 1349, 162, 674, 1221, 418, 965, 1477, 98, 610, - 1157, 354, 901, 1413, 226, 738, 1285, 482, 1029, 1541, 18, 530, - 1077, 274, 821, 1333, 146, 658, 1205, 402, 949, 1461, 82, 594, - 1141, 338, 885, 1397, 210, 722, 1269, 466, 1013, 1525, 789, 50, - 562, 1109, 306, 853, 1365, 178, 690, 1237, 434, 981, 1493, 114, - 626, 1173, 370, 917, 1429, 242, 754, 1301, 498, 1045, 1557, 10, - 522, 1069, 266, 813, 1325, 138, 650, 1197, 394, 941, 1453, 74, - 586, 1133, 330, 877, 1389, 202, 714, 1261, 458, 1005, 1517, - 778, 42, 554, 1101, 298, 845, 1357, 170, 682, 1229, 426, 973, - 1485, 106, 618, 1165, 362, 909, 1421, 234, 746, 1293, 490, - 1037, 1549, 26, 538, 1085, 282, 829, 1341, 154, 666, 1213, 410, - 957, 1469, 90, 602, 1149, 346, 893, 1405, 218, 730, 1277, 474, - 1021, 1533, 797, 58, 570, 1117, 314, 861, 1373, 186, 698, 1245, - 442, 989, 1501, 122, 634, 1181, 378, 925, 1437, 250, 762, 1309, - 506, 1053, 1565, 6, 518, 1065, 262, 809, 1321, 134, 646, 1193, - 390, 937, 1449, 70, 582, 1129, 326, 873, 1385, 198, 710, 1257, - 454, 1001, 1513, 774, 38, 550, 1097, 294, 841, 1353, 166, 678, - 1225, 422, 969, 1481, 102, 614, 1161, 358, 905, 1417, 230, 742, - 1289, 486, 1033, 1545, 22, 534, 1081, 278, 825, 1337, 150, 662, - 1209, 406, 953, 1465, 86, 598, 1145, 342, 889, 1401, 214, 726, - 1273, 470, 1017, 1529, 793, 54, 566, 1113, 310, 857, 1369, 182, - 694, 1241, 438, 985, 1497, 118, 630, 1177, 374, 921, 1433, 246, - 758, 1305, 502, 1049, 1561, 14, 526, 1073, 270, 817, 1329, 142, - 654, 1201, 398, 945, 1457, 78, 590, 1137, 334, 881, 1393, 206, - 718, 1265, 462, 1009, 1521, 782, 46, 558, 1105, 302, 849, 1361, - 174, 686, 1233, 430, 977, 1489, 110, 622, 1169, 366, 913, 1425, - 238, 750, 1297, 494, 1041, 1553, 30, 542, 1089, 286, 833, 1345, - 158, 670, 1217, 414, 961, 1473, 94, 606, 1153, 350, 897, 1409, - 222, 734, 1281, 478, 1025, 1537, 801, 62, 574, 1121, 318, 865, - 1377, 190, 702, 1249, 446, 993, 1505, 126, 638, 1185, 382, 929, - 1441, 254, 766, 1313, 510, 1057, 1569, 785, 1, 513, 1060, 257, - 804, 1316, 129, 641, 1188, 385, 932, 1444, 65, 577, 1124, 321, - 868, 1380, 193, 705, 1252, 449, 996, 1508, 769, 33, 545, 1092, - 289, 836, 1348, 161, 673, 1220, 417, 964, 1476, 97, 609, 1156, - 353, 900, 1412, 225, 737, 1284, 481, 1028, 1540, 17, 529, 1076, - 273, 820, 1332, 145, 657, 1204, 401, 948, 1460, 81, 593, 1140, - 337, 884, 1396, 209, 721, 1268, 465, 1012, 1524, 788, 49, 561, - 1108, 305, 852, 1364, 177, 689, 1236, 433, 980, 1492, 113, 625, - 1172, 369, 916, 1428, 241, 753, 1300, 497, 1044, 1556, 9, 521, - 1068, 265, 812, 1324, 137, 649, 1196, 393, 940, 1452, 73, 585, - 1132, 329, 876, 1388, 201, 713, 1260, 457, 1004, 1516, 777, 41, - 553, 1100, 297, 844, 1356, 169, 681, 1228, 425, 972, 1484, 105, - 617, 1164, 361, 908, 1420, 233, 745, 1292, 489, 1036, 1548, 25, - 537, 1084, 281, 828, 1340, 153, 665, 1212, 409, 956, 1468, 89, - 601, 1148, 345, 892, 1404, 217, 729, 1276, 473, 1020, 1532, - 796, 57, 569, 1116, 313, 860, 1372, 185, 697, 1244, 441, 988, - 1500, 121, 633, 1180, 377, 924, 1436, 249, 761, 1308, 505, - 1052, 1564, 5, 517, 1064, 261, 808, 1320, 133, 645, 1192, 389, - 936, 1448, 69, 581, 1128, 325, 872, 1384, 197, 709, 1256, 453, - 1000, 1512, 773, 37, 549, 1096, 293, 840, 1352, 165, 677, 1224, - 421, 968, 1480, 101, 613, 1160, 357, 904, 1416, 229, 741, 1288, - 485, 1032, 1544, 21, 533, 1080, 277, 824, 1336, 149, 661, 1208, - 405, 952, 1464, 85, 597, 1144, 341, 888, 1400, 213, 725, 1272, - 469, 1016, 1528, 792, 53, 565, 1112, 309, 856, 1368, 181, 693, - 1240, 437, 984, 1496, 117, 629, 1176, 373, 920, 1432, 245, 757, - 1304, 501, 1048, 1560, 13, 525, 1072, 269, 816, 1328, 141, 653, - 1200, 397, 944, 1456, 77, 589, 1136, 333, 880, 1392, 205, 717, - 1264, 461, 1008, 1520, 781, 45, 557, 1104, 301, 848, 1360, 173, - 685, 1232, 429, 976, 1488, 109, 621, 1168, 365, 912, 1424, 237, - 749, 1296, 493, 1040, 1552, 29, 541, 1088, 285, 832, 1344, 157, - 669, 1216, 413, 960, 1472, 93, 605, 1152, 349, 896, 1408, 221, - 733, 1280, 477, 1024, 1536, 800, 61, 573, 1120, 317, 864, 1376, - 189, 701, 1248, 445, 992, 1504, 125, 637, 1184, 381, 928, 1440, - 253, 765, 1312, 509, 1056, 1568, 786, 3, 515, 1062, 259, 806, - 1318, 131, 643, 1190, 387, 934, 1446, 67, 579, 1126, 323, 870, - 1382, 195, 707, 1254, 451, 998, 1510, 771, 35, 547, 1094, 291, - 838, 1350, 163, 675, 1222, 419, 966, 1478, 99, 611, 1158, 355, - 902, 1414, 227, 739, 1286, 483, 1030, 1542, 19, 531, 1078, 275, - 822, 1334, 147, 659, 1206, 403, 950, 1462, 83, 595, 1142, 339, - 886, 1398, 211, 723, 1270, 467, 1014, 1526, 790, 51, 563, 1110, - 307, 854, 1366, 179, 691, 1238, 435, 982, 1494, 115, 627, 1174, - 371, 918, 1430, 243, 755, 1302, 499, 1046, 1558, 11, 523, 1070, - 267, 814, 1326, 139, 651, 1198, 395, 942, 1454, 75, 587, 1134, - 331, 878, 1390, 203, 715, 1262, 459, 1006, 1518, 779, 43, 555, - 1102, 299, 846, 1358, 171, 683, 1230, 427, 974, 1486, 107, 619, - 1166, 363, 910, 1422, 235, 747, 1294, 491, 1038, 1550, 27, 539, - 1086, 283, 830, 1342, 155, 667, 1214, 411, 958, 1470, 91, 603, - 1150, 347, 894, 1406, 219, 731, 1278, 475, 1022, 1534, 798, 59, - 571, 1118, 315, 862, 1374, 187, 699, 1246, 443, 990, 1502, 123, - 635, 1182, 379, 926, 1438, 251, 763, 1310, 507, 1054, 1566, 7, - 519, 1066, 263, 810, 1322, 135, 647, 1194, 391, 938, 1450, 71, - 583, 1130, 327, 874, 1386, 199, 711, 1258, 455, 1002, 1514, - 775, 39, 551, 1098, 295, 842, 1354, 167, 679, 1226, 423, 970, - 1482, 103, 615, 1162, 359, 906, 1418, 231, 743, 1290, 487, - 1034, 1546, 23, 535, 1082, 279, 826, 1338, 151, 663, 1210, 407, - 954, 1466, 87, 599, 1146, 343, 890, 1402, 215, 727, 1274, 471, - 1018, 1530, 794, 55, 567, 1114, 311, 858, 1370, 183, 695, 1242, - 439, 986, 1498, 119, 631, 1178, 375, 922, 1434, 247, 759, 1306, - 503, 1050, 1562, 15, 527, 1074, 271, 818, 1330, 143, 655, 1202, - 399, 946, 1458, 79, 591, 1138, 335, 882, 1394, 207, 719, 1266, - 463, 1010, 1522, 783, 47, 559, 1106, 303, 850, 1362, 175, 687, - 1234, 431, 978, 1490, 111, 623, 1170, 367, 914, 1426, 239, 751, - 1298, 495, 1042, 1554, 31, 543, 1090, 287, 834, 1346, 159, 671, - 1218, 415, 962, 1474, 95, 607, 1154, 351, 898, 1410, 223, 735, - 1282, 479, 1026, 1538, 802, 63, 575, 1122, 319, 866, 1378, 191, - 703, 1250, 447, 994, 1506, 127, 639, 1186, 383, 930, 1442, 255, - 767, 1314, 511, 1058, 1570]; - - return (unsafe { *PERM1571.get_unchecked((index % 1571) as usize) } as u32 * 2468041 + - unsafe { *PERM1571.get_unchecked(((index / 1571) % 1571) as usize) } as u32 * 1571 + - unsafe { - *PERM1571.get_unchecked(((index / 2468041) % 1571) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3877292411u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1579(index: u32) -> f32 { - const PERM1579: [u16; 1579] = [0, 512, 1067, 256, 811, 1323, 128, 640, 1195, 384, 939, 1451, - 64, 576, 1131, 320, 875, 1387, 192, 704, 1259, 448, 1003, 1515, - 768, 32, 544, 1099, 288, 843, 1355, 160, 672, 1227, 416, 971, - 1483, 96, 608, 1163, 352, 907, 1419, 224, 736, 1291, 480, 1035, - 1547, 16, 528, 1083, 272, 827, 1339, 144, 656, 1211, 400, 955, - 1467, 80, 592, 1147, 336, 891, 1403, 208, 720, 1275, 464, 1019, - 1531, 795, 48, 560, 1115, 304, 859, 1371, 176, 688, 1243, 432, - 987, 1499, 112, 624, 1179, 368, 923, 1435, 240, 752, 1307, 496, - 1051, 1563, 784, 8, 520, 1075, 264, 819, 1331, 136, 648, 1203, - 392, 947, 1459, 72, 584, 1139, 328, 883, 1395, 200, 712, 1267, - 456, 1011, 1523, 776, 40, 552, 1107, 296, 851, 1363, 168, 680, - 1235, 424, 979, 1491, 104, 616, 1171, 360, 915, 1427, 232, 744, - 1299, 488, 1043, 1555, 24, 536, 1091, 280, 835, 1347, 152, 664, - 1219, 408, 963, 1475, 88, 600, 1155, 344, 899, 1411, 216, 728, - 1283, 472, 1027, 1539, 803, 56, 568, 1123, 312, 867, 1379, 184, - 696, 1251, 440, 995, 1507, 120, 632, 1187, 376, 931, 1443, 248, - 760, 1315, 504, 1059, 1571, 4, 516, 1071, 260, 815, 1327, 132, - 644, 1199, 388, 943, 1455, 68, 580, 1135, 324, 879, 1391, 196, - 708, 1263, 452, 1007, 1519, 772, 36, 548, 1103, 292, 847, 1359, - 164, 676, 1231, 420, 975, 1487, 100, 612, 1167, 356, 911, 1423, - 228, 740, 1295, 484, 1039, 1551, 20, 532, 1087, 276, 831, 1343, - 148, 660, 1215, 404, 959, 1471, 84, 596, 1151, 340, 895, 1407, - 212, 724, 1279, 468, 1023, 1535, 799, 52, 564, 1119, 308, 863, - 1375, 180, 692, 1247, 436, 991, 1503, 116, 628, 1183, 372, 927, - 1439, 244, 756, 1311, 500, 1055, 1567, 791, 12, 524, 1079, 268, - 823, 1335, 140, 652, 1207, 396, 951, 1463, 76, 588, 1143, 332, - 887, 1399, 204, 716, 1271, 460, 1015, 1527, 780, 44, 556, 1111, - 300, 855, 1367, 172, 684, 1239, 428, 983, 1495, 108, 620, 1175, - 364, 919, 1431, 236, 748, 1303, 492, 1047, 1559, 28, 540, 1095, - 284, 839, 1351, 156, 668, 1223, 412, 967, 1479, 92, 604, 1159, - 348, 903, 1415, 220, 732, 1287, 476, 1031, 1543, 807, 60, 572, - 1127, 316, 871, 1383, 188, 700, 1255, 444, 999, 1511, 124, 636, - 1191, 380, 935, 1447, 252, 764, 1319, 508, 1063, 1575, 788, 2, - 514, 1069, 258, 813, 1325, 130, 642, 1197, 386, 941, 1453, 66, - 578, 1133, 322, 877, 1389, 194, 706, 1261, 450, 1005, 1517, - 770, 34, 546, 1101, 290, 845, 1357, 162, 674, 1229, 418, 973, - 1485, 98, 610, 1165, 354, 909, 1421, 226, 738, 1293, 482, 1037, - 1549, 18, 530, 1085, 274, 829, 1341, 146, 658, 1213, 402, 957, - 1469, 82, 594, 1149, 338, 893, 1405, 210, 722, 1277, 466, 1021, - 1533, 797, 50, 562, 1117, 306, 861, 1373, 178, 690, 1245, 434, - 989, 1501, 114, 626, 1181, 370, 925, 1437, 242, 754, 1309, 498, - 1053, 1565, 786, 10, 522, 1077, 266, 821, 1333, 138, 650, 1205, - 394, 949, 1461, 74, 586, 1141, 330, 885, 1397, 202, 714, 1269, - 458, 1013, 1525, 778, 42, 554, 1109, 298, 853, 1365, 170, 682, - 1237, 426, 981, 1493, 106, 618, 1173, 362, 917, 1429, 234, 746, - 1301, 490, 1045, 1557, 26, 538, 1093, 282, 837, 1349, 154, 666, - 1221, 410, 965, 1477, 90, 602, 1157, 346, 901, 1413, 218, 730, - 1285, 474, 1029, 1541, 805, 58, 570, 1125, 314, 869, 1381, 186, - 698, 1253, 442, 997, 1509, 122, 634, 1189, 378, 933, 1445, 250, - 762, 1317, 506, 1061, 1573, 6, 518, 1073, 262, 817, 1329, 134, - 646, 1201, 390, 945, 1457, 70, 582, 1137, 326, 881, 1393, 198, - 710, 1265, 454, 1009, 1521, 774, 38, 550, 1105, 294, 849, 1361, - 166, 678, 1233, 422, 977, 1489, 102, 614, 1169, 358, 913, 1425, - 230, 742, 1297, 486, 1041, 1553, 22, 534, 1089, 278, 833, 1345, - 150, 662, 1217, 406, 961, 1473, 86, 598, 1153, 342, 897, 1409, - 214, 726, 1281, 470, 1025, 1537, 801, 54, 566, 1121, 310, 865, - 1377, 182, 694, 1249, 438, 993, 1505, 118, 630, 1185, 374, 929, - 1441, 246, 758, 1313, 502, 1057, 1569, 793, 14, 526, 1081, 270, - 825, 1337, 142, 654, 1209, 398, 953, 1465, 78, 590, 1145, 334, - 889, 1401, 206, 718, 1273, 462, 1017, 1529, 782, 46, 558, 1113, - 302, 857, 1369, 174, 686, 1241, 430, 985, 1497, 110, 622, 1177, - 366, 921, 1433, 238, 750, 1305, 494, 1049, 1561, 30, 542, 1097, - 286, 841, 1353, 158, 670, 1225, 414, 969, 1481, 94, 606, 1161, - 350, 905, 1417, 222, 734, 1289, 478, 1033, 1545, 809, 62, 574, - 1129, 318, 873, 1385, 190, 702, 1257, 446, 1001, 1513, 126, - 638, 1193, 382, 937, 1449, 254, 766, 1321, 510, 1065, 1577, - 789, 1, 513, 1068, 257, 812, 1324, 129, 641, 1196, 385, 940, - 1452, 65, 577, 1132, 321, 876, 1388, 193, 705, 1260, 449, 1004, - 1516, 769, 33, 545, 1100, 289, 844, 1356, 161, 673, 1228, 417, - 972, 1484, 97, 609, 1164, 353, 908, 1420, 225, 737, 1292, 481, - 1036, 1548, 17, 529, 1084, 273, 828, 1340, 145, 657, 1212, 401, - 956, 1468, 81, 593, 1148, 337, 892, 1404, 209, 721, 1276, 465, - 1020, 1532, 796, 49, 561, 1116, 305, 860, 1372, 177, 689, 1244, - 433, 988, 1500, 113, 625, 1180, 369, 924, 1436, 241, 753, 1308, - 497, 1052, 1564, 785, 9, 521, 1076, 265, 820, 1332, 137, 649, - 1204, 393, 948, 1460, 73, 585, 1140, 329, 884, 1396, 201, 713, - 1268, 457, 1012, 1524, 777, 41, 553, 1108, 297, 852, 1364, 169, - 681, 1236, 425, 980, 1492, 105, 617, 1172, 361, 916, 1428, 233, - 745, 1300, 489, 1044, 1556, 25, 537, 1092, 281, 836, 1348, 153, - 665, 1220, 409, 964, 1476, 89, 601, 1156, 345, 900, 1412, 217, - 729, 1284, 473, 1028, 1540, 804, 57, 569, 1124, 313, 868, 1380, - 185, 697, 1252, 441, 996, 1508, 121, 633, 1188, 377, 932, 1444, - 249, 761, 1316, 505, 1060, 1572, 5, 517, 1072, 261, 816, 1328, - 133, 645, 1200, 389, 944, 1456, 69, 581, 1136, 325, 880, 1392, - 197, 709, 1264, 453, 1008, 1520, 773, 37, 549, 1104, 293, 848, - 1360, 165, 677, 1232, 421, 976, 1488, 101, 613, 1168, 357, 912, - 1424, 229, 741, 1296, 485, 1040, 1552, 21, 533, 1088, 277, 832, - 1344, 149, 661, 1216, 405, 960, 1472, 85, 597, 1152, 341, 896, - 1408, 213, 725, 1280, 469, 1024, 1536, 800, 53, 565, 1120, 309, - 864, 1376, 181, 693, 1248, 437, 992, 1504, 117, 629, 1184, 373, - 928, 1440, 245, 757, 1312, 501, 1056, 1568, 792, 13, 525, 1080, - 269, 824, 1336, 141, 653, 1208, 397, 952, 1464, 77, 589, 1144, - 333, 888, 1400, 205, 717, 1272, 461, 1016, 1528, 781, 45, 557, - 1112, 301, 856, 1368, 173, 685, 1240, 429, 984, 1496, 109, 621, - 1176, 365, 920, 1432, 237, 749, 1304, 493, 1048, 1560, 29, 541, - 1096, 285, 840, 1352, 157, 669, 1224, 413, 968, 1480, 93, 605, - 1160, 349, 904, 1416, 221, 733, 1288, 477, 1032, 1544, 808, 61, - 573, 1128, 317, 872, 1384, 189, 701, 1256, 445, 1000, 1512, - 125, 637, 1192, 381, 936, 1448, 253, 765, 1320, 509, 1064, - 1576, 790, 3, 515, 1070, 259, 814, 1326, 131, 643, 1198, 387, - 942, 1454, 67, 579, 1134, 323, 878, 1390, 195, 707, 1262, 451, - 1006, 1518, 771, 35, 547, 1102, 291, 846, 1358, 163, 675, 1230, - 419, 974, 1486, 99, 611, 1166, 355, 910, 1422, 227, 739, 1294, - 483, 1038, 1550, 19, 531, 1086, 275, 830, 1342, 147, 659, 1214, - 403, 958, 1470, 83, 595, 1150, 339, 894, 1406, 211, 723, 1278, - 467, 1022, 1534, 798, 51, 563, 1118, 307, 862, 1374, 179, 691, - 1246, 435, 990, 1502, 115, 627, 1182, 371, 926, 1438, 243, 755, - 1310, 499, 1054, 1566, 787, 11, 523, 1078, 267, 822, 1334, 139, - 651, 1206, 395, 950, 1462, 75, 587, 1142, 331, 886, 1398, 203, - 715, 1270, 459, 1014, 1526, 779, 43, 555, 1110, 299, 854, 1366, - 171, 683, 1238, 427, 982, 1494, 107, 619, 1174, 363, 918, 1430, - 235, 747, 1302, 491, 1046, 1558, 27, 539, 1094, 283, 838, 1350, - 155, 667, 1222, 411, 966, 1478, 91, 603, 1158, 347, 902, 1414, - 219, 731, 1286, 475, 1030, 1542, 806, 59, 571, 1126, 315, 870, - 1382, 187, 699, 1254, 443, 998, 1510, 123, 635, 1190, 379, 934, - 1446, 251, 763, 1318, 507, 1062, 1574, 7, 519, 1074, 263, 818, - 1330, 135, 647, 1202, 391, 946, 1458, 71, 583, 1138, 327, 882, - 1394, 199, 711, 1266, 455, 1010, 1522, 775, 39, 551, 1106, 295, - 850, 1362, 167, 679, 1234, 423, 978, 1490, 103, 615, 1170, 359, - 914, 1426, 231, 743, 1298, 487, 1042, 1554, 23, 535, 1090, 279, - 834, 1346, 151, 663, 1218, 407, 962, 1474, 87, 599, 1154, 343, - 898, 1410, 215, 727, 1282, 471, 1026, 1538, 802, 55, 567, 1122, - 311, 866, 1378, 183, 695, 1250, 439, 994, 1506, 119, 631, 1186, - 375, 930, 1442, 247, 759, 1314, 503, 1058, 1570, 794, 15, 527, - 1082, 271, 826, 1338, 143, 655, 1210, 399, 954, 1466, 79, 591, - 1146, 335, 890, 1402, 207, 719, 1274, 463, 1018, 1530, 783, 47, - 559, 1114, 303, 858, 1370, 175, 687, 1242, 431, 986, 1498, 111, - 623, 1178, 367, 922, 1434, 239, 751, 1306, 495, 1050, 1562, 31, - 543, 1098, 287, 842, 1354, 159, 671, 1226, 415, 970, 1482, 95, - 607, 1162, 351, 906, 1418, 223, 735, 1290, 479, 1034, 1546, - 810, 63, 575, 1130, 319, 874, 1386, 191, 703, 1258, 447, 1002, - 1514, 127, 639, 1194, 383, 938, 1450, 255, 767, 1322, 511, - 1066, 1578]; - - return (unsafe { *PERM1579.get_unchecked((index % 1579) as usize) } as u32 * 2493241 + - unsafe { *PERM1579.get_unchecked(((index / 1579) % 1579) as usize) } as u32 * 1579 + - unsafe { - *PERM1579.get_unchecked(((index / 2493241) % 1579) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3936827539u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1583(index: u32) -> f32 { - const PERM1583: [u16; 1583] = [0, 512, 1071, 256, 815, 1327, 128, 640, 1199, 384, 943, 1455, - 64, 576, 1135, 320, 879, 1391, 192, 704, 1263, 448, 1007, 1519, - 768, 32, 544, 1103, 288, 847, 1359, 160, 672, 1231, 416, 975, - 1487, 96, 608, 1167, 352, 911, 1423, 224, 736, 1295, 480, 1039, - 1551, 16, 528, 1087, 272, 831, 1343, 144, 656, 1215, 400, 959, - 1471, 80, 592, 1151, 336, 895, 1407, 208, 720, 1279, 464, 1023, - 1535, 799, 48, 560, 1119, 304, 863, 1375, 176, 688, 1247, 432, - 991, 1503, 112, 624, 1183, 368, 927, 1439, 240, 752, 1311, 496, - 1055, 1567, 784, 8, 520, 1079, 264, 823, 1335, 136, 648, 1207, - 392, 951, 1463, 72, 584, 1143, 328, 887, 1399, 200, 712, 1271, - 456, 1015, 1527, 776, 40, 552, 1111, 296, 855, 1367, 168, 680, - 1239, 424, 983, 1495, 104, 616, 1175, 360, 919, 1431, 232, 744, - 1303, 488, 1047, 1559, 24, 536, 1095, 280, 839, 1351, 152, 664, - 1223, 408, 967, 1479, 88, 600, 1159, 344, 903, 1415, 216, 728, - 1287, 472, 1031, 1543, 807, 56, 568, 1127, 312, 871, 1383, 184, - 696, 1255, 440, 999, 1511, 120, 632, 1191, 376, 935, 1447, 248, - 760, 1319, 504, 1063, 1575, 788, 4, 516, 1075, 260, 819, 1331, - 132, 644, 1203, 388, 947, 1459, 68, 580, 1139, 324, 883, 1395, - 196, 708, 1267, 452, 1011, 1523, 772, 36, 548, 1107, 292, 851, - 1363, 164, 676, 1235, 420, 979, 1491, 100, 612, 1171, 356, 915, - 1427, 228, 740, 1299, 484, 1043, 1555, 20, 532, 1091, 276, 835, - 1347, 148, 660, 1219, 404, 963, 1475, 84, 596, 1155, 340, 899, - 1411, 212, 724, 1283, 468, 1027, 1539, 803, 52, 564, 1123, 308, - 867, 1379, 180, 692, 1251, 436, 995, 1507, 116, 628, 1187, 372, - 931, 1443, 244, 756, 1315, 500, 1059, 1571, 795, 12, 524, 1083, - 268, 827, 1339, 140, 652, 1211, 396, 955, 1467, 76, 588, 1147, - 332, 891, 1403, 204, 716, 1275, 460, 1019, 1531, 780, 44, 556, - 1115, 300, 859, 1371, 172, 684, 1243, 428, 987, 1499, 108, 620, - 1179, 364, 923, 1435, 236, 748, 1307, 492, 1051, 1563, 28, 540, - 1099, 284, 843, 1355, 156, 668, 1227, 412, 971, 1483, 92, 604, - 1163, 348, 907, 1419, 220, 732, 1291, 476, 1035, 1547, 811, 60, - 572, 1131, 316, 875, 1387, 188, 700, 1259, 444, 1003, 1515, - 124, 636, 1195, 380, 939, 1451, 252, 764, 1323, 508, 1067, - 1579, 790, 2, 514, 1073, 258, 817, 1329, 130, 642, 1201, 386, - 945, 1457, 66, 578, 1137, 322, 881, 1393, 194, 706, 1265, 450, - 1009, 1521, 770, 34, 546, 1105, 290, 849, 1361, 162, 674, 1233, - 418, 977, 1489, 98, 610, 1169, 354, 913, 1425, 226, 738, 1297, - 482, 1041, 1553, 18, 530, 1089, 274, 833, 1345, 146, 658, 1217, - 402, 961, 1473, 82, 594, 1153, 338, 897, 1409, 210, 722, 1281, - 466, 1025, 1537, 801, 50, 562, 1121, 306, 865, 1377, 178, 690, - 1249, 434, 993, 1505, 114, 626, 1185, 370, 929, 1441, 242, 754, - 1313, 498, 1057, 1569, 786, 10, 522, 1081, 266, 825, 1337, 138, - 650, 1209, 394, 953, 1465, 74, 586, 1145, 330, 889, 1401, 202, - 714, 1273, 458, 1017, 1529, 778, 42, 554, 1113, 298, 857, 1369, - 170, 682, 1241, 426, 985, 1497, 106, 618, 1177, 362, 921, 1433, - 234, 746, 1305, 490, 1049, 1561, 26, 538, 1097, 282, 841, 1353, - 154, 666, 1225, 410, 969, 1481, 90, 602, 1161, 346, 905, 1417, - 218, 730, 1289, 474, 1033, 1545, 809, 58, 570, 1129, 314, 873, - 1385, 186, 698, 1257, 442, 1001, 1513, 122, 634, 1193, 378, - 937, 1449, 250, 762, 1321, 506, 1065, 1577, 793, 6, 518, 1077, - 262, 821, 1333, 134, 646, 1205, 390, 949, 1461, 70, 582, 1141, - 326, 885, 1397, 198, 710, 1269, 454, 1013, 1525, 774, 38, 550, - 1109, 294, 853, 1365, 166, 678, 1237, 422, 981, 1493, 102, 614, - 1173, 358, 917, 1429, 230, 742, 1301, 486, 1045, 1557, 22, 534, - 1093, 278, 837, 1349, 150, 662, 1221, 406, 965, 1477, 86, 598, - 1157, 342, 901, 1413, 214, 726, 1285, 470, 1029, 1541, 805, 54, - 566, 1125, 310, 869, 1381, 182, 694, 1253, 438, 997, 1509, 118, - 630, 1189, 374, 933, 1445, 246, 758, 1317, 502, 1061, 1573, - 797, 14, 526, 1085, 270, 829, 1341, 142, 654, 1213, 398, 957, - 1469, 78, 590, 1149, 334, 893, 1405, 206, 718, 1277, 462, 1021, - 1533, 782, 46, 558, 1117, 302, 861, 1373, 174, 686, 1245, 430, - 989, 1501, 110, 622, 1181, 366, 925, 1437, 238, 750, 1309, 494, - 1053, 1565, 30, 542, 1101, 286, 845, 1357, 158, 670, 1229, 414, - 973, 1485, 94, 606, 1165, 350, 909, 1421, 222, 734, 1293, 478, - 1037, 1549, 813, 62, 574, 1133, 318, 877, 1389, 190, 702, 1261, - 446, 1005, 1517, 126, 638, 1197, 382, 941, 1453, 254, 766, - 1325, 510, 1069, 1581, 791, 1, 513, 1072, 257, 816, 1328, 129, - 641, 1200, 385, 944, 1456, 65, 577, 1136, 321, 880, 1392, 193, - 705, 1264, 449, 1008, 1520, 769, 33, 545, 1104, 289, 848, 1360, - 161, 673, 1232, 417, 976, 1488, 97, 609, 1168, 353, 912, 1424, - 225, 737, 1296, 481, 1040, 1552, 17, 529, 1088, 273, 832, 1344, - 145, 657, 1216, 401, 960, 1472, 81, 593, 1152, 337, 896, 1408, - 209, 721, 1280, 465, 1024, 1536, 800, 49, 561, 1120, 305, 864, - 1376, 177, 689, 1248, 433, 992, 1504, 113, 625, 1184, 369, 928, - 1440, 241, 753, 1312, 497, 1056, 1568, 785, 9, 521, 1080, 265, - 824, 1336, 137, 649, 1208, 393, 952, 1464, 73, 585, 1144, 329, - 888, 1400, 201, 713, 1272, 457, 1016, 1528, 777, 41, 553, 1112, - 297, 856, 1368, 169, 681, 1240, 425, 984, 1496, 105, 617, 1176, - 361, 920, 1432, 233, 745, 1304, 489, 1048, 1560, 25, 537, 1096, - 281, 840, 1352, 153, 665, 1224, 409, 968, 1480, 89, 601, 1160, - 345, 904, 1416, 217, 729, 1288, 473, 1032, 1544, 808, 57, 569, - 1128, 313, 872, 1384, 185, 697, 1256, 441, 1000, 1512, 121, - 633, 1192, 377, 936, 1448, 249, 761, 1320, 505, 1064, 1576, - 789, 5, 517, 1076, 261, 820, 1332, 133, 645, 1204, 389, 948, - 1460, 69, 581, 1140, 325, 884, 1396, 197, 709, 1268, 453, 1012, - 1524, 773, 37, 549, 1108, 293, 852, 1364, 165, 677, 1236, 421, - 980, 1492, 101, 613, 1172, 357, 916, 1428, 229, 741, 1300, 485, - 1044, 1556, 21, 533, 1092, 277, 836, 1348, 149, 661, 1220, 405, - 964, 1476, 85, 597, 1156, 341, 900, 1412, 213, 725, 1284, 469, - 1028, 1540, 804, 53, 565, 1124, 309, 868, 1380, 181, 693, 1252, - 437, 996, 1508, 117, 629, 1188, 373, 932, 1444, 245, 757, 1316, - 501, 1060, 1572, 796, 13, 525, 1084, 269, 828, 1340, 141, 653, - 1212, 397, 956, 1468, 77, 589, 1148, 333, 892, 1404, 205, 717, - 1276, 461, 1020, 1532, 781, 45, 557, 1116, 301, 860, 1372, 173, - 685, 1244, 429, 988, 1500, 109, 621, 1180, 365, 924, 1436, 237, - 749, 1308, 493, 1052, 1564, 29, 541, 1100, 285, 844, 1356, 157, - 669, 1228, 413, 972, 1484, 93, 605, 1164, 349, 908, 1420, 221, - 733, 1292, 477, 1036, 1548, 812, 61, 573, 1132, 317, 876, 1388, - 189, 701, 1260, 445, 1004, 1516, 125, 637, 1196, 381, 940, - 1452, 253, 765, 1324, 509, 1068, 1580, 792, 3, 515, 1074, 259, - 818, 1330, 131, 643, 1202, 387, 946, 1458, 67, 579, 1138, 323, - 882, 1394, 195, 707, 1266, 451, 1010, 1522, 771, 35, 547, 1106, - 291, 850, 1362, 163, 675, 1234, 419, 978, 1490, 99, 611, 1170, - 355, 914, 1426, 227, 739, 1298, 483, 1042, 1554, 19, 531, 1090, - 275, 834, 1346, 147, 659, 1218, 403, 962, 1474, 83, 595, 1154, - 339, 898, 1410, 211, 723, 1282, 467, 1026, 1538, 802, 51, 563, - 1122, 307, 866, 1378, 179, 691, 1250, 435, 994, 1506, 115, 627, - 1186, 371, 930, 1442, 243, 755, 1314, 499, 1058, 1570, 787, 11, - 523, 1082, 267, 826, 1338, 139, 651, 1210, 395, 954, 1466, 75, - 587, 1146, 331, 890, 1402, 203, 715, 1274, 459, 1018, 1530, - 779, 43, 555, 1114, 299, 858, 1370, 171, 683, 1242, 427, 986, - 1498, 107, 619, 1178, 363, 922, 1434, 235, 747, 1306, 491, - 1050, 1562, 27, 539, 1098, 283, 842, 1354, 155, 667, 1226, 411, - 970, 1482, 91, 603, 1162, 347, 906, 1418, 219, 731, 1290, 475, - 1034, 1546, 810, 59, 571, 1130, 315, 874, 1386, 187, 699, 1258, - 443, 1002, 1514, 123, 635, 1194, 379, 938, 1450, 251, 763, - 1322, 507, 1066, 1578, 794, 7, 519, 1078, 263, 822, 1334, 135, - 647, 1206, 391, 950, 1462, 71, 583, 1142, 327, 886, 1398, 199, - 711, 1270, 455, 1014, 1526, 775, 39, 551, 1110, 295, 854, 1366, - 167, 679, 1238, 423, 982, 1494, 103, 615, 1174, 359, 918, 1430, - 231, 743, 1302, 487, 1046, 1558, 23, 535, 1094, 279, 838, 1350, - 151, 663, 1222, 407, 966, 1478, 87, 599, 1158, 343, 902, 1414, - 215, 727, 1286, 471, 1030, 1542, 806, 55, 567, 1126, 311, 870, - 1382, 183, 695, 1254, 439, 998, 1510, 119, 631, 1190, 375, 934, - 1446, 247, 759, 1318, 503, 1062, 1574, 798, 15, 527, 1086, 271, - 830, 1342, 143, 655, 1214, 399, 958, 1470, 79, 591, 1150, 335, - 894, 1406, 207, 719, 1278, 463, 1022, 1534, 783, 47, 559, 1118, - 303, 862, 1374, 175, 687, 1246, 431, 990, 1502, 111, 623, 1182, - 367, 926, 1438, 239, 751, 1310, 495, 1054, 1566, 31, 543, 1102, - 287, 846, 1358, 159, 671, 1230, 415, 974, 1486, 95, 607, 1166, - 351, 910, 1422, 223, 735, 1294, 479, 1038, 1550, 814, 63, 575, - 1134, 319, 878, 1390, 191, 703, 1262, 447, 1006, 1518, 127, - 639, 1198, 383, 942, 1454, 255, 767, 1326, 511, 1070, 1582]; - - return (unsafe { *PERM1583.get_unchecked((index % 1583) as usize) } as u32 * 2505889 + - unsafe { *PERM1583.get_unchecked(((index / 1583) % 1583) as usize) } as u32 * 1583 + - unsafe { - *PERM1583.get_unchecked(((index / 2505889) % 1583) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (3966822287u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1597(index: u32) -> f32 { - const PERM1597: [u16; 1597] = [0, 512, 1085, 256, 829, 1341, 128, 640, 1213, 384, 957, 1469, - 64, 576, 1149, 320, 893, 1405, 192, 704, 1277, 448, 1021, 1533, - 768, 32, 544, 1117, 288, 861, 1373, 160, 672, 1245, 416, 989, - 1501, 96, 608, 1181, 352, 925, 1437, 224, 736, 1309, 480, 1053, - 1565, 784, 16, 528, 1101, 272, 845, 1357, 144, 656, 1229, 400, - 973, 1485, 80, 592, 1165, 336, 909, 1421, 208, 720, 1293, 464, - 1037, 1549, 813, 48, 560, 1133, 304, 877, 1389, 176, 688, 1261, - 432, 1005, 1517, 112, 624, 1197, 368, 941, 1453, 240, 752, - 1325, 496, 1069, 1581, 792, 8, 520, 1093, 264, 837, 1349, 136, - 648, 1221, 392, 965, 1477, 72, 584, 1157, 328, 901, 1413, 200, - 712, 1285, 456, 1029, 1541, 776, 40, 552, 1125, 296, 869, 1381, - 168, 680, 1253, 424, 997, 1509, 104, 616, 1189, 360, 933, 1445, - 232, 744, 1317, 488, 1061, 1573, 805, 24, 536, 1109, 280, 853, - 1365, 152, 664, 1237, 408, 981, 1493, 88, 600, 1173, 344, 917, - 1429, 216, 728, 1301, 472, 1045, 1557, 821, 56, 568, 1141, 312, - 885, 1397, 184, 696, 1269, 440, 1013, 1525, 120, 632, 1205, - 376, 949, 1461, 248, 760, 1333, 504, 1077, 1589, 796, 4, 516, - 1089, 260, 833, 1345, 132, 644, 1217, 388, 961, 1473, 68, 580, - 1153, 324, 897, 1409, 196, 708, 1281, 452, 1025, 1537, 772, 36, - 548, 1121, 292, 865, 1377, 164, 676, 1249, 420, 993, 1505, 100, - 612, 1185, 356, 929, 1441, 228, 740, 1313, 484, 1057, 1569, - 788, 20, 532, 1105, 276, 849, 1361, 148, 660, 1233, 404, 977, - 1489, 84, 596, 1169, 340, 913, 1425, 212, 724, 1297, 468, 1041, - 1553, 817, 52, 564, 1137, 308, 881, 1393, 180, 692, 1265, 436, - 1009, 1521, 116, 628, 1201, 372, 945, 1457, 244, 756, 1329, - 500, 1073, 1585, 801, 12, 524, 1097, 268, 841, 1353, 140, 652, - 1225, 396, 969, 1481, 76, 588, 1161, 332, 905, 1417, 204, 716, - 1289, 460, 1033, 1545, 780, 44, 556, 1129, 300, 873, 1385, 172, - 684, 1257, 428, 1001, 1513, 108, 620, 1193, 364, 937, 1449, - 236, 748, 1321, 492, 1065, 1577, 809, 28, 540, 1113, 284, 857, - 1369, 156, 668, 1241, 412, 985, 1497, 92, 604, 1177, 348, 921, - 1433, 220, 732, 1305, 476, 1049, 1561, 825, 60, 572, 1145, 316, - 889, 1401, 188, 700, 1273, 444, 1017, 1529, 124, 636, 1209, - 380, 953, 1465, 252, 764, 1337, 508, 1081, 1593, 2, 514, 1087, - 258, 831, 1343, 130, 642, 1215, 386, 959, 1471, 66, 578, 1151, - 322, 895, 1407, 194, 706, 1279, 450, 1023, 1535, 770, 34, 546, - 1119, 290, 863, 1375, 162, 674, 1247, 418, 991, 1503, 98, 610, - 1183, 354, 927, 1439, 226, 738, 1311, 482, 1055, 1567, 786, 18, - 530, 1103, 274, 847, 1359, 146, 658, 1231, 402, 975, 1487, 82, - 594, 1167, 338, 911, 1423, 210, 722, 1295, 466, 1039, 1551, - 815, 50, 562, 1135, 306, 879, 1391, 178, 690, 1263, 434, 1007, - 1519, 114, 626, 1199, 370, 943, 1455, 242, 754, 1327, 498, - 1071, 1583, 794, 10, 522, 1095, 266, 839, 1351, 138, 650, 1223, - 394, 967, 1479, 74, 586, 1159, 330, 903, 1415, 202, 714, 1287, - 458, 1031, 1543, 778, 42, 554, 1127, 298, 871, 1383, 170, 682, - 1255, 426, 999, 1511, 106, 618, 1191, 362, 935, 1447, 234, 746, - 1319, 490, 1063, 1575, 807, 26, 538, 1111, 282, 855, 1367, 154, - 666, 1239, 410, 983, 1495, 90, 602, 1175, 346, 919, 1431, 218, - 730, 1303, 474, 1047, 1559, 823, 58, 570, 1143, 314, 887, 1399, - 186, 698, 1271, 442, 1015, 1527, 122, 634, 1207, 378, 951, - 1463, 250, 762, 1335, 506, 1079, 1591, 799, 6, 518, 1091, 262, - 835, 1347, 134, 646, 1219, 390, 963, 1475, 70, 582, 1155, 326, - 899, 1411, 198, 710, 1283, 454, 1027, 1539, 774, 38, 550, 1123, - 294, 867, 1379, 166, 678, 1251, 422, 995, 1507, 102, 614, 1187, - 358, 931, 1443, 230, 742, 1315, 486, 1059, 1571, 790, 22, 534, - 1107, 278, 851, 1363, 150, 662, 1235, 406, 979, 1491, 86, 598, - 1171, 342, 915, 1427, 214, 726, 1299, 470, 1043, 1555, 819, 54, - 566, 1139, 310, 883, 1395, 182, 694, 1267, 438, 1011, 1523, - 118, 630, 1203, 374, 947, 1459, 246, 758, 1331, 502, 1075, - 1587, 803, 14, 526, 1099, 270, 843, 1355, 142, 654, 1227, 398, - 971, 1483, 78, 590, 1163, 334, 907, 1419, 206, 718, 1291, 462, - 1035, 1547, 782, 46, 558, 1131, 302, 875, 1387, 174, 686, 1259, - 430, 1003, 1515, 110, 622, 1195, 366, 939, 1451, 238, 750, - 1323, 494, 1067, 1579, 811, 30, 542, 1115, 286, 859, 1371, 158, - 670, 1243, 414, 987, 1499, 94, 606, 1179, 350, 923, 1435, 222, - 734, 1307, 478, 1051, 1563, 827, 62, 574, 1147, 318, 891, 1403, - 190, 702, 1275, 446, 1019, 1531, 126, 638, 1211, 382, 955, - 1467, 254, 766, 1339, 510, 1083, 1595, 798, 1, 513, 1086, 257, - 830, 1342, 129, 641, 1214, 385, 958, 1470, 65, 577, 1150, 321, - 894, 1406, 193, 705, 1278, 449, 1022, 1534, 769, 33, 545, 1118, - 289, 862, 1374, 161, 673, 1246, 417, 990, 1502, 97, 609, 1182, - 353, 926, 1438, 225, 737, 1310, 481, 1054, 1566, 785, 17, 529, - 1102, 273, 846, 1358, 145, 657, 1230, 401, 974, 1486, 81, 593, - 1166, 337, 910, 1422, 209, 721, 1294, 465, 1038, 1550, 814, 49, - 561, 1134, 305, 878, 1390, 177, 689, 1262, 433, 1006, 1518, - 113, 625, 1198, 369, 942, 1454, 241, 753, 1326, 497, 1070, - 1582, 793, 9, 521, 1094, 265, 838, 1350, 137, 649, 1222, 393, - 966, 1478, 73, 585, 1158, 329, 902, 1414, 201, 713, 1286, 457, - 1030, 1542, 777, 41, 553, 1126, 297, 870, 1382, 169, 681, 1254, - 425, 998, 1510, 105, 617, 1190, 361, 934, 1446, 233, 745, 1318, - 489, 1062, 1574, 806, 25, 537, 1110, 281, 854, 1366, 153, 665, - 1238, 409, 982, 1494, 89, 601, 1174, 345, 918, 1430, 217, 729, - 1302, 473, 1046, 1558, 822, 57, 569, 1142, 313, 886, 1398, 185, - 697, 1270, 441, 1014, 1526, 121, 633, 1206, 377, 950, 1462, - 249, 761, 1334, 505, 1078, 1590, 797, 5, 517, 1090, 261, 834, - 1346, 133, 645, 1218, 389, 962, 1474, 69, 581, 1154, 325, 898, - 1410, 197, 709, 1282, 453, 1026, 1538, 773, 37, 549, 1122, 293, - 866, 1378, 165, 677, 1250, 421, 994, 1506, 101, 613, 1186, 357, - 930, 1442, 229, 741, 1314, 485, 1058, 1570, 789, 21, 533, 1106, - 277, 850, 1362, 149, 661, 1234, 405, 978, 1490, 85, 597, 1170, - 341, 914, 1426, 213, 725, 1298, 469, 1042, 1554, 818, 53, 565, - 1138, 309, 882, 1394, 181, 693, 1266, 437, 1010, 1522, 117, - 629, 1202, 373, 946, 1458, 245, 757, 1330, 501, 1074, 1586, - 802, 13, 525, 1098, 269, 842, 1354, 141, 653, 1226, 397, 970, - 1482, 77, 589, 1162, 333, 906, 1418, 205, 717, 1290, 461, 1034, - 1546, 781, 45, 557, 1130, 301, 874, 1386, 173, 685, 1258, 429, - 1002, 1514, 109, 621, 1194, 365, 938, 1450, 237, 749, 1322, - 493, 1066, 1578, 810, 29, 541, 1114, 285, 858, 1370, 157, 669, - 1242, 413, 986, 1498, 93, 605, 1178, 349, 922, 1434, 221, 733, - 1306, 477, 1050, 1562, 826, 61, 573, 1146, 317, 890, 1402, 189, - 701, 1274, 445, 1018, 1530, 125, 637, 1210, 381, 954, 1466, - 253, 765, 1338, 509, 1082, 1594, 3, 515, 1088, 259, 832, 1344, - 131, 643, 1216, 387, 960, 1472, 67, 579, 1152, 323, 896, 1408, - 195, 707, 1280, 451, 1024, 1536, 771, 35, 547, 1120, 291, 864, - 1376, 163, 675, 1248, 419, 992, 1504, 99, 611, 1184, 355, 928, - 1440, 227, 739, 1312, 483, 1056, 1568, 787, 19, 531, 1104, 275, - 848, 1360, 147, 659, 1232, 403, 976, 1488, 83, 595, 1168, 339, - 912, 1424, 211, 723, 1296, 467, 1040, 1552, 816, 51, 563, 1136, - 307, 880, 1392, 179, 691, 1264, 435, 1008, 1520, 115, 627, - 1200, 371, 944, 1456, 243, 755, 1328, 499, 1072, 1584, 795, 11, - 523, 1096, 267, 840, 1352, 139, 651, 1224, 395, 968, 1480, 75, - 587, 1160, 331, 904, 1416, 203, 715, 1288, 459, 1032, 1544, - 779, 43, 555, 1128, 299, 872, 1384, 171, 683, 1256, 427, 1000, - 1512, 107, 619, 1192, 363, 936, 1448, 235, 747, 1320, 491, - 1064, 1576, 808, 27, 539, 1112, 283, 856, 1368, 155, 667, 1240, - 411, 984, 1496, 91, 603, 1176, 347, 920, 1432, 219, 731, 1304, - 475, 1048, 1560, 824, 59, 571, 1144, 315, 888, 1400, 187, 699, - 1272, 443, 1016, 1528, 123, 635, 1208, 379, 952, 1464, 251, - 763, 1336, 507, 1080, 1592, 800, 7, 519, 1092, 263, 836, 1348, - 135, 647, 1220, 391, 964, 1476, 71, 583, 1156, 327, 900, 1412, - 199, 711, 1284, 455, 1028, 1540, 775, 39, 551, 1124, 295, 868, - 1380, 167, 679, 1252, 423, 996, 1508, 103, 615, 1188, 359, 932, - 1444, 231, 743, 1316, 487, 1060, 1572, 791, 23, 535, 1108, 279, - 852, 1364, 151, 663, 1236, 407, 980, 1492, 87, 599, 1172, 343, - 916, 1428, 215, 727, 1300, 471, 1044, 1556, 820, 55, 567, 1140, - 311, 884, 1396, 183, 695, 1268, 439, 1012, 1524, 119, 631, - 1204, 375, 948, 1460, 247, 759, 1332, 503, 1076, 1588, 804, 15, - 527, 1100, 271, 844, 1356, 143, 655, 1228, 399, 972, 1484, 79, - 591, 1164, 335, 908, 1420, 207, 719, 1292, 463, 1036, 1548, - 783, 47, 559, 1132, 303, 876, 1388, 175, 687, 1260, 431, 1004, - 1516, 111, 623, 1196, 367, 940, 1452, 239, 751, 1324, 495, - 1068, 1580, 812, 31, 543, 1116, 287, 860, 1372, 159, 671, 1244, - 415, 988, 1500, 95, 607, 1180, 351, 924, 1436, 223, 735, 1308, - 479, 1052, 1564, 828, 63, 575, 1148, 319, 892, 1404, 191, 703, - 1276, 447, 1020, 1532, 127, 639, 1212, 383, 956, 1468, 255, - 767, 1340, 511, 1084, 1596]; - - return (unsafe { *PERM1597.get_unchecked((index % 1597) as usize) } as u32 * 2550409 + - unsafe { *PERM1597.get_unchecked(((index / 1597) % 1597) as usize) } as u32 * 1597 + - unsafe { - *PERM1597.get_unchecked(((index / 2550409) % 1597) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (4073003173u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1601(index: u32) -> f32 { - const PERM1601: [u16; 1601] = [0, 512, 1089, 256, 833, 1345, 128, 640, 1217, 384, 961, 1473, - 768, 64, 576, 1153, 320, 897, 1409, 192, 704, 1281, 448, 1025, - 1537, 32, 544, 1121, 288, 865, 1377, 160, 672, 1249, 416, 993, - 1505, 801, 96, 608, 1185, 352, 929, 1441, 224, 736, 1313, 480, - 1057, 1569, 16, 528, 1105, 272, 849, 1361, 144, 656, 1233, 400, - 977, 1489, 784, 80, 592, 1169, 336, 913, 1425, 208, 720, 1297, - 464, 1041, 1553, 48, 560, 1137, 304, 881, 1393, 176, 688, 1265, - 432, 1009, 1521, 817, 112, 624, 1201, 368, 945, 1457, 240, 752, - 1329, 496, 1073, 1585, 8, 520, 1097, 264, 841, 1353, 136, 648, - 1225, 392, 969, 1481, 776, 72, 584, 1161, 328, 905, 1417, 200, - 712, 1289, 456, 1033, 1545, 40, 552, 1129, 296, 873, 1385, 168, - 680, 1257, 424, 1001, 1513, 809, 104, 616, 1193, 360, 937, - 1449, 232, 744, 1321, 488, 1065, 1577, 24, 536, 1113, 280, 857, - 1369, 152, 664, 1241, 408, 985, 1497, 792, 88, 600, 1177, 344, - 921, 1433, 216, 728, 1305, 472, 1049, 1561, 56, 568, 1145, 312, - 889, 1401, 184, 696, 1273, 440, 1017, 1529, 825, 120, 632, - 1209, 376, 953, 1465, 248, 760, 1337, 504, 1081, 1593, 4, 516, - 1093, 260, 837, 1349, 132, 644, 1221, 388, 965, 1477, 772, 68, - 580, 1157, 324, 901, 1413, 196, 708, 1285, 452, 1029, 1541, 36, - 548, 1125, 292, 869, 1381, 164, 676, 1253, 420, 997, 1509, 805, - 100, 612, 1189, 356, 933, 1445, 228, 740, 1317, 484, 1061, - 1573, 20, 532, 1109, 276, 853, 1365, 148, 660, 1237, 404, 981, - 1493, 788, 84, 596, 1173, 340, 917, 1429, 212, 724, 1301, 468, - 1045, 1557, 52, 564, 1141, 308, 885, 1397, 180, 692, 1269, 436, - 1013, 1525, 821, 116, 628, 1205, 372, 949, 1461, 244, 756, - 1333, 500, 1077, 1589, 12, 524, 1101, 268, 845, 1357, 140, 652, - 1229, 396, 973, 1485, 780, 76, 588, 1165, 332, 909, 1421, 204, - 716, 1293, 460, 1037, 1549, 44, 556, 1133, 300, 877, 1389, 172, - 684, 1261, 428, 1005, 1517, 813, 108, 620, 1197, 364, 941, - 1453, 236, 748, 1325, 492, 1069, 1581, 28, 540, 1117, 284, 861, - 1373, 156, 668, 1245, 412, 989, 1501, 796, 92, 604, 1181, 348, - 925, 1437, 220, 732, 1309, 476, 1053, 1565, 60, 572, 1149, 316, - 893, 1405, 188, 700, 1277, 444, 1021, 1533, 829, 124, 636, - 1213, 380, 957, 1469, 252, 764, 1341, 508, 1085, 1597, 2, 514, - 1091, 258, 835, 1347, 130, 642, 1219, 386, 963, 1475, 770, 66, - 578, 1155, 322, 899, 1411, 194, 706, 1283, 450, 1027, 1539, 34, - 546, 1123, 290, 867, 1379, 162, 674, 1251, 418, 995, 1507, 803, - 98, 610, 1187, 354, 931, 1443, 226, 738, 1315, 482, 1059, 1571, - 18, 530, 1107, 274, 851, 1363, 146, 658, 1235, 402, 979, 1491, - 786, 82, 594, 1171, 338, 915, 1427, 210, 722, 1299, 466, 1043, - 1555, 50, 562, 1139, 306, 883, 1395, 178, 690, 1267, 434, 1011, - 1523, 819, 114, 626, 1203, 370, 947, 1459, 242, 754, 1331, 498, - 1075, 1587, 10, 522, 1099, 266, 843, 1355, 138, 650, 1227, 394, - 971, 1483, 778, 74, 586, 1163, 330, 907, 1419, 202, 714, 1291, - 458, 1035, 1547, 42, 554, 1131, 298, 875, 1387, 170, 682, 1259, - 426, 1003, 1515, 811, 106, 618, 1195, 362, 939, 1451, 234, 746, - 1323, 490, 1067, 1579, 26, 538, 1115, 282, 859, 1371, 154, 666, - 1243, 410, 987, 1499, 794, 90, 602, 1179, 346, 923, 1435, 218, - 730, 1307, 474, 1051, 1563, 58, 570, 1147, 314, 891, 1403, 186, - 698, 1275, 442, 1019, 1531, 827, 122, 634, 1211, 378, 955, - 1467, 250, 762, 1339, 506, 1083, 1595, 6, 518, 1095, 262, 839, - 1351, 134, 646, 1223, 390, 967, 1479, 774, 70, 582, 1159, 326, - 903, 1415, 198, 710, 1287, 454, 1031, 1543, 38, 550, 1127, 294, - 871, 1383, 166, 678, 1255, 422, 999, 1511, 807, 102, 614, 1191, - 358, 935, 1447, 230, 742, 1319, 486, 1063, 1575, 22, 534, 1111, - 278, 855, 1367, 150, 662, 1239, 406, 983, 1495, 790, 86, 598, - 1175, 342, 919, 1431, 214, 726, 1303, 470, 1047, 1559, 54, 566, - 1143, 310, 887, 1399, 182, 694, 1271, 438, 1015, 1527, 823, - 118, 630, 1207, 374, 951, 1463, 246, 758, 1335, 502, 1079, - 1591, 14, 526, 1103, 270, 847, 1359, 142, 654, 1231, 398, 975, - 1487, 782, 78, 590, 1167, 334, 911, 1423, 206, 718, 1295, 462, - 1039, 1551, 46, 558, 1135, 302, 879, 1391, 174, 686, 1263, 430, - 1007, 1519, 815, 110, 622, 1199, 366, 943, 1455, 238, 750, - 1327, 494, 1071, 1583, 30, 542, 1119, 286, 863, 1375, 158, 670, - 1247, 414, 991, 1503, 798, 94, 606, 1183, 350, 927, 1439, 222, - 734, 1311, 478, 1055, 1567, 62, 574, 1151, 318, 895, 1407, 190, - 702, 1279, 446, 1023, 1535, 831, 126, 638, 1215, 382, 959, - 1471, 254, 766, 1343, 510, 1087, 1599, 800, 1, 513, 1090, 257, - 834, 1346, 129, 641, 1218, 385, 962, 1474, 769, 65, 577, 1154, - 321, 898, 1410, 193, 705, 1282, 449, 1026, 1538, 33, 545, 1122, - 289, 866, 1378, 161, 673, 1250, 417, 994, 1506, 802, 97, 609, - 1186, 353, 930, 1442, 225, 737, 1314, 481, 1058, 1570, 17, 529, - 1106, 273, 850, 1362, 145, 657, 1234, 401, 978, 1490, 785, 81, - 593, 1170, 337, 914, 1426, 209, 721, 1298, 465, 1042, 1554, 49, - 561, 1138, 305, 882, 1394, 177, 689, 1266, 433, 1010, 1522, - 818, 113, 625, 1202, 369, 946, 1458, 241, 753, 1330, 497, 1074, - 1586, 9, 521, 1098, 265, 842, 1354, 137, 649, 1226, 393, 970, - 1482, 777, 73, 585, 1162, 329, 906, 1418, 201, 713, 1290, 457, - 1034, 1546, 41, 553, 1130, 297, 874, 1386, 169, 681, 1258, 425, - 1002, 1514, 810, 105, 617, 1194, 361, 938, 1450, 233, 745, - 1322, 489, 1066, 1578, 25, 537, 1114, 281, 858, 1370, 153, 665, - 1242, 409, 986, 1498, 793, 89, 601, 1178, 345, 922, 1434, 217, - 729, 1306, 473, 1050, 1562, 57, 569, 1146, 313, 890, 1402, 185, - 697, 1274, 441, 1018, 1530, 826, 121, 633, 1210, 377, 954, - 1466, 249, 761, 1338, 505, 1082, 1594, 5, 517, 1094, 261, 838, - 1350, 133, 645, 1222, 389, 966, 1478, 773, 69, 581, 1158, 325, - 902, 1414, 197, 709, 1286, 453, 1030, 1542, 37, 549, 1126, 293, - 870, 1382, 165, 677, 1254, 421, 998, 1510, 806, 101, 613, 1190, - 357, 934, 1446, 229, 741, 1318, 485, 1062, 1574, 21, 533, 1110, - 277, 854, 1366, 149, 661, 1238, 405, 982, 1494, 789, 85, 597, - 1174, 341, 918, 1430, 213, 725, 1302, 469, 1046, 1558, 53, 565, - 1142, 309, 886, 1398, 181, 693, 1270, 437, 1014, 1526, 822, - 117, 629, 1206, 373, 950, 1462, 245, 757, 1334, 501, 1078, - 1590, 13, 525, 1102, 269, 846, 1358, 141, 653, 1230, 397, 974, - 1486, 781, 77, 589, 1166, 333, 910, 1422, 205, 717, 1294, 461, - 1038, 1550, 45, 557, 1134, 301, 878, 1390, 173, 685, 1262, 429, - 1006, 1518, 814, 109, 621, 1198, 365, 942, 1454, 237, 749, - 1326, 493, 1070, 1582, 29, 541, 1118, 285, 862, 1374, 157, 669, - 1246, 413, 990, 1502, 797, 93, 605, 1182, 349, 926, 1438, 221, - 733, 1310, 477, 1054, 1566, 61, 573, 1150, 317, 894, 1406, 189, - 701, 1278, 445, 1022, 1534, 830, 125, 637, 1214, 381, 958, - 1470, 253, 765, 1342, 509, 1086, 1598, 3, 515, 1092, 259, 836, - 1348, 131, 643, 1220, 387, 964, 1476, 771, 67, 579, 1156, 323, - 900, 1412, 195, 707, 1284, 451, 1028, 1540, 35, 547, 1124, 291, - 868, 1380, 163, 675, 1252, 419, 996, 1508, 804, 99, 611, 1188, - 355, 932, 1444, 227, 739, 1316, 483, 1060, 1572, 19, 531, 1108, - 275, 852, 1364, 147, 659, 1236, 403, 980, 1492, 787, 83, 595, - 1172, 339, 916, 1428, 211, 723, 1300, 467, 1044, 1556, 51, 563, - 1140, 307, 884, 1396, 179, 691, 1268, 435, 1012, 1524, 820, - 115, 627, 1204, 371, 948, 1460, 243, 755, 1332, 499, 1076, - 1588, 11, 523, 1100, 267, 844, 1356, 139, 651, 1228, 395, 972, - 1484, 779, 75, 587, 1164, 331, 908, 1420, 203, 715, 1292, 459, - 1036, 1548, 43, 555, 1132, 299, 876, 1388, 171, 683, 1260, 427, - 1004, 1516, 812, 107, 619, 1196, 363, 940, 1452, 235, 747, - 1324, 491, 1068, 1580, 27, 539, 1116, 283, 860, 1372, 155, 667, - 1244, 411, 988, 1500, 795, 91, 603, 1180, 347, 924, 1436, 219, - 731, 1308, 475, 1052, 1564, 59, 571, 1148, 315, 892, 1404, 187, - 699, 1276, 443, 1020, 1532, 828, 123, 635, 1212, 379, 956, - 1468, 251, 763, 1340, 507, 1084, 1596, 7, 519, 1096, 263, 840, - 1352, 135, 647, 1224, 391, 968, 1480, 775, 71, 583, 1160, 327, - 904, 1416, 199, 711, 1288, 455, 1032, 1544, 39, 551, 1128, 295, - 872, 1384, 167, 679, 1256, 423, 1000, 1512, 808, 103, 615, - 1192, 359, 936, 1448, 231, 743, 1320, 487, 1064, 1576, 23, 535, - 1112, 279, 856, 1368, 151, 663, 1240, 407, 984, 1496, 791, 87, - 599, 1176, 343, 920, 1432, 215, 727, 1304, 471, 1048, 1560, 55, - 567, 1144, 311, 888, 1400, 183, 695, 1272, 439, 1016, 1528, - 824, 119, 631, 1208, 375, 952, 1464, 247, 759, 1336, 503, 1080, - 1592, 15, 527, 1104, 271, 848, 1360, 143, 655, 1232, 399, 976, - 1488, 783, 79, 591, 1168, 335, 912, 1424, 207, 719, 1296, 463, - 1040, 1552, 47, 559, 1136, 303, 880, 1392, 175, 687, 1264, 431, - 1008, 1520, 816, 111, 623, 1200, 367, 944, 1456, 239, 751, - 1328, 495, 1072, 1584, 31, 543, 1120, 287, 864, 1376, 159, 671, - 1248, 415, 992, 1504, 799, 95, 607, 1184, 351, 928, 1440, 223, - 735, 1312, 479, 1056, 1568, 63, 575, 1152, 319, 896, 1408, 191, - 703, 1280, 447, 1024, 1536, 832, 127, 639, 1216, 383, 960, - 1472, 255, 767, 1344, 511, 1088, 1600]; - - return (unsafe { *PERM1601.get_unchecked((index % 1601) as usize) } as u32 * 2563201 + - unsafe { *PERM1601.get_unchecked(((index / 1601) % 1601) as usize) } as u32 * 1601 + - unsafe { - *PERM1601.get_unchecked(((index / 2563201) % 1601) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (4103684801u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1607(index: u32) -> f32 { - const PERM1607: [u16; 1607] = [0, 512, 1095, 256, 839, 1351, 128, 640, 1223, 384, 967, 1479, - 768, 64, 576, 1159, 320, 903, 1415, 192, 704, 1287, 448, 1031, - 1543, 32, 544, 1127, 288, 871, 1383, 160, 672, 1255, 416, 999, - 1511, 807, 96, 608, 1191, 352, 935, 1447, 224, 736, 1319, 480, - 1063, 1575, 16, 528, 1111, 272, 855, 1367, 144, 656, 1239, 400, - 983, 1495, 784, 80, 592, 1175, 336, 919, 1431, 208, 720, 1303, - 464, 1047, 1559, 48, 560, 1143, 304, 887, 1399, 176, 688, 1271, - 432, 1015, 1527, 823, 112, 624, 1207, 368, 951, 1463, 240, 752, - 1335, 496, 1079, 1591, 8, 520, 1103, 264, 847, 1359, 136, 648, - 1231, 392, 975, 1487, 776, 72, 584, 1167, 328, 911, 1423, 200, - 712, 1295, 456, 1039, 1551, 40, 552, 1135, 296, 879, 1391, 168, - 680, 1263, 424, 1007, 1519, 815, 104, 616, 1199, 360, 943, - 1455, 232, 744, 1327, 488, 1071, 1583, 24, 536, 1119, 280, 863, - 1375, 152, 664, 1247, 408, 991, 1503, 792, 88, 600, 1183, 344, - 927, 1439, 216, 728, 1311, 472, 1055, 1567, 56, 568, 1151, 312, - 895, 1407, 184, 696, 1279, 440, 1023, 1535, 831, 120, 632, - 1215, 376, 959, 1471, 248, 760, 1343, 504, 1087, 1599, 800, 4, - 516, 1099, 260, 843, 1355, 132, 644, 1227, 388, 971, 1483, 772, - 68, 580, 1163, 324, 907, 1419, 196, 708, 1291, 452, 1035, 1547, - 36, 548, 1131, 292, 875, 1387, 164, 676, 1259, 420, 1003, 1515, - 811, 100, 612, 1195, 356, 939, 1451, 228, 740, 1323, 484, 1067, - 1579, 20, 532, 1115, 276, 859, 1371, 148, 660, 1243, 404, 987, - 1499, 788, 84, 596, 1179, 340, 923, 1435, 212, 724, 1307, 468, - 1051, 1563, 52, 564, 1147, 308, 891, 1403, 180, 692, 1275, 436, - 1019, 1531, 827, 116, 628, 1211, 372, 955, 1467, 244, 756, - 1339, 500, 1083, 1595, 12, 524, 1107, 268, 851, 1363, 140, 652, - 1235, 396, 979, 1491, 780, 76, 588, 1171, 332, 915, 1427, 204, - 716, 1299, 460, 1043, 1555, 44, 556, 1139, 300, 883, 1395, 172, - 684, 1267, 428, 1011, 1523, 819, 108, 620, 1203, 364, 947, - 1459, 236, 748, 1331, 492, 1075, 1587, 28, 540, 1123, 284, 867, - 1379, 156, 668, 1251, 412, 995, 1507, 796, 92, 604, 1187, 348, - 931, 1443, 220, 732, 1315, 476, 1059, 1571, 60, 572, 1155, 316, - 899, 1411, 188, 700, 1283, 444, 1027, 1539, 835, 124, 636, - 1219, 380, 963, 1475, 252, 764, 1347, 508, 1091, 1603, 802, 2, - 514, 1097, 258, 841, 1353, 130, 642, 1225, 386, 969, 1481, 770, - 66, 578, 1161, 322, 905, 1417, 194, 706, 1289, 450, 1033, 1545, - 34, 546, 1129, 290, 873, 1385, 162, 674, 1257, 418, 1001, 1513, - 809, 98, 610, 1193, 354, 937, 1449, 226, 738, 1321, 482, 1065, - 1577, 18, 530, 1113, 274, 857, 1369, 146, 658, 1241, 402, 985, - 1497, 786, 82, 594, 1177, 338, 921, 1433, 210, 722, 1305, 466, - 1049, 1561, 50, 562, 1145, 306, 889, 1401, 178, 690, 1273, 434, - 1017, 1529, 825, 114, 626, 1209, 370, 953, 1465, 242, 754, - 1337, 498, 1081, 1593, 10, 522, 1105, 266, 849, 1361, 138, 650, - 1233, 394, 977, 1489, 778, 74, 586, 1169, 330, 913, 1425, 202, - 714, 1297, 458, 1041, 1553, 42, 554, 1137, 298, 881, 1393, 170, - 682, 1265, 426, 1009, 1521, 817, 106, 618, 1201, 362, 945, - 1457, 234, 746, 1329, 490, 1073, 1585, 26, 538, 1121, 282, 865, - 1377, 154, 666, 1249, 410, 993, 1505, 794, 90, 602, 1185, 346, - 929, 1441, 218, 730, 1313, 474, 1057, 1569, 58, 570, 1153, 314, - 897, 1409, 186, 698, 1281, 442, 1025, 1537, 833, 122, 634, - 1217, 378, 961, 1473, 250, 762, 1345, 506, 1089, 1601, 805, 6, - 518, 1101, 262, 845, 1357, 134, 646, 1229, 390, 973, 1485, 774, - 70, 582, 1165, 326, 909, 1421, 198, 710, 1293, 454, 1037, 1549, - 38, 550, 1133, 294, 877, 1389, 166, 678, 1261, 422, 1005, 1517, - 813, 102, 614, 1197, 358, 941, 1453, 230, 742, 1325, 486, 1069, - 1581, 22, 534, 1117, 278, 861, 1373, 150, 662, 1245, 406, 989, - 1501, 790, 86, 598, 1181, 342, 925, 1437, 214, 726, 1309, 470, - 1053, 1565, 54, 566, 1149, 310, 893, 1405, 182, 694, 1277, 438, - 1021, 1533, 829, 118, 630, 1213, 374, 957, 1469, 246, 758, - 1341, 502, 1085, 1597, 14, 526, 1109, 270, 853, 1365, 142, 654, - 1237, 398, 981, 1493, 782, 78, 590, 1173, 334, 917, 1429, 206, - 718, 1301, 462, 1045, 1557, 46, 558, 1141, 302, 885, 1397, 174, - 686, 1269, 430, 1013, 1525, 821, 110, 622, 1205, 366, 949, - 1461, 238, 750, 1333, 494, 1077, 1589, 30, 542, 1125, 286, 869, - 1381, 158, 670, 1253, 414, 997, 1509, 798, 94, 606, 1189, 350, - 933, 1445, 222, 734, 1317, 478, 1061, 1573, 62, 574, 1157, 318, - 901, 1413, 190, 702, 1285, 446, 1029, 1541, 837, 126, 638, - 1221, 382, 965, 1477, 254, 766, 1349, 510, 1093, 1605, 803, 1, - 513, 1096, 257, 840, 1352, 129, 641, 1224, 385, 968, 1480, 769, - 65, 577, 1160, 321, 904, 1416, 193, 705, 1288, 449, 1032, 1544, - 33, 545, 1128, 289, 872, 1384, 161, 673, 1256, 417, 1000, 1512, - 808, 97, 609, 1192, 353, 936, 1448, 225, 737, 1320, 481, 1064, - 1576, 17, 529, 1112, 273, 856, 1368, 145, 657, 1240, 401, 984, - 1496, 785, 81, 593, 1176, 337, 920, 1432, 209, 721, 1304, 465, - 1048, 1560, 49, 561, 1144, 305, 888, 1400, 177, 689, 1272, 433, - 1016, 1528, 824, 113, 625, 1208, 369, 952, 1464, 241, 753, - 1336, 497, 1080, 1592, 9, 521, 1104, 265, 848, 1360, 137, 649, - 1232, 393, 976, 1488, 777, 73, 585, 1168, 329, 912, 1424, 201, - 713, 1296, 457, 1040, 1552, 41, 553, 1136, 297, 880, 1392, 169, - 681, 1264, 425, 1008, 1520, 816, 105, 617, 1200, 361, 944, - 1456, 233, 745, 1328, 489, 1072, 1584, 25, 537, 1120, 281, 864, - 1376, 153, 665, 1248, 409, 992, 1504, 793, 89, 601, 1184, 345, - 928, 1440, 217, 729, 1312, 473, 1056, 1568, 57, 569, 1152, 313, - 896, 1408, 185, 697, 1280, 441, 1024, 1536, 832, 121, 633, - 1216, 377, 960, 1472, 249, 761, 1344, 505, 1088, 1600, 801, 5, - 517, 1100, 261, 844, 1356, 133, 645, 1228, 389, 972, 1484, 773, - 69, 581, 1164, 325, 908, 1420, 197, 709, 1292, 453, 1036, 1548, - 37, 549, 1132, 293, 876, 1388, 165, 677, 1260, 421, 1004, 1516, - 812, 101, 613, 1196, 357, 940, 1452, 229, 741, 1324, 485, 1068, - 1580, 21, 533, 1116, 277, 860, 1372, 149, 661, 1244, 405, 988, - 1500, 789, 85, 597, 1180, 341, 924, 1436, 213, 725, 1308, 469, - 1052, 1564, 53, 565, 1148, 309, 892, 1404, 181, 693, 1276, 437, - 1020, 1532, 828, 117, 629, 1212, 373, 956, 1468, 245, 757, - 1340, 501, 1084, 1596, 13, 525, 1108, 269, 852, 1364, 141, 653, - 1236, 397, 980, 1492, 781, 77, 589, 1172, 333, 916, 1428, 205, - 717, 1300, 461, 1044, 1556, 45, 557, 1140, 301, 884, 1396, 173, - 685, 1268, 429, 1012, 1524, 820, 109, 621, 1204, 365, 948, - 1460, 237, 749, 1332, 493, 1076, 1588, 29, 541, 1124, 285, 868, - 1380, 157, 669, 1252, 413, 996, 1508, 797, 93, 605, 1188, 349, - 932, 1444, 221, 733, 1316, 477, 1060, 1572, 61, 573, 1156, 317, - 900, 1412, 189, 701, 1284, 445, 1028, 1540, 836, 125, 637, - 1220, 381, 964, 1476, 253, 765, 1348, 509, 1092, 1604, 804, 3, - 515, 1098, 259, 842, 1354, 131, 643, 1226, 387, 970, 1482, 771, - 67, 579, 1162, 323, 906, 1418, 195, 707, 1290, 451, 1034, 1546, - 35, 547, 1130, 291, 874, 1386, 163, 675, 1258, 419, 1002, 1514, - 810, 99, 611, 1194, 355, 938, 1450, 227, 739, 1322, 483, 1066, - 1578, 19, 531, 1114, 275, 858, 1370, 147, 659, 1242, 403, 986, - 1498, 787, 83, 595, 1178, 339, 922, 1434, 211, 723, 1306, 467, - 1050, 1562, 51, 563, 1146, 307, 890, 1402, 179, 691, 1274, 435, - 1018, 1530, 826, 115, 627, 1210, 371, 954, 1466, 243, 755, - 1338, 499, 1082, 1594, 11, 523, 1106, 267, 850, 1362, 139, 651, - 1234, 395, 978, 1490, 779, 75, 587, 1170, 331, 914, 1426, 203, - 715, 1298, 459, 1042, 1554, 43, 555, 1138, 299, 882, 1394, 171, - 683, 1266, 427, 1010, 1522, 818, 107, 619, 1202, 363, 946, - 1458, 235, 747, 1330, 491, 1074, 1586, 27, 539, 1122, 283, 866, - 1378, 155, 667, 1250, 411, 994, 1506, 795, 91, 603, 1186, 347, - 930, 1442, 219, 731, 1314, 475, 1058, 1570, 59, 571, 1154, 315, - 898, 1410, 187, 699, 1282, 443, 1026, 1538, 834, 123, 635, - 1218, 379, 962, 1474, 251, 763, 1346, 507, 1090, 1602, 806, 7, - 519, 1102, 263, 846, 1358, 135, 647, 1230, 391, 974, 1486, 775, - 71, 583, 1166, 327, 910, 1422, 199, 711, 1294, 455, 1038, 1550, - 39, 551, 1134, 295, 878, 1390, 167, 679, 1262, 423, 1006, 1518, - 814, 103, 615, 1198, 359, 942, 1454, 231, 743, 1326, 487, 1070, - 1582, 23, 535, 1118, 279, 862, 1374, 151, 663, 1246, 407, 990, - 1502, 791, 87, 599, 1182, 343, 926, 1438, 215, 727, 1310, 471, - 1054, 1566, 55, 567, 1150, 311, 894, 1406, 183, 695, 1278, 439, - 1022, 1534, 830, 119, 631, 1214, 375, 958, 1470, 247, 759, - 1342, 503, 1086, 1598, 15, 527, 1110, 271, 854, 1366, 143, 655, - 1238, 399, 982, 1494, 783, 79, 591, 1174, 335, 918, 1430, 207, - 719, 1302, 463, 1046, 1558, 47, 559, 1142, 303, 886, 1398, 175, - 687, 1270, 431, 1014, 1526, 822, 111, 623, 1206, 367, 950, - 1462, 239, 751, 1334, 495, 1078, 1590, 31, 543, 1126, 287, 870, - 1382, 159, 671, 1254, 415, 998, 1510, 799, 95, 607, 1190, 351, - 934, 1446, 223, 735, 1318, 479, 1062, 1574, 63, 575, 1158, 319, - 902, 1414, 191, 703, 1286, 447, 1030, 1542, 838, 127, 639, - 1222, 383, 966, 1478, 255, 767, 1350, 511, 1094, 1606]; - - return (unsafe { *PERM1607.get_unchecked((index % 1607) as usize) } as u32 * 2582449 + - unsafe { *PERM1607.get_unchecked(((index / 1607) % 1607) as usize) } as u32 * 1607 + - unsafe { - *PERM1607.get_unchecked(((index / 2582449) % 1607) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (4149995543u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1609(index: u32) -> f32 { - const PERM1609: [u16; 1609] = [0, 512, 1097, 256, 841, 1353, 128, 640, 1225, 384, 969, 1481, - 768, 64, 576, 1161, 320, 905, 1417, 192, 704, 1289, 448, 1033, - 1545, 32, 544, 1129, 288, 873, 1385, 160, 672, 1257, 416, 1001, - 1513, 809, 96, 608, 1193, 352, 937, 1449, 224, 736, 1321, 480, - 1065, 1577, 16, 528, 1113, 272, 857, 1369, 144, 656, 1241, 400, - 985, 1497, 784, 80, 592, 1177, 336, 921, 1433, 208, 720, 1305, - 464, 1049, 1561, 48, 560, 1145, 304, 889, 1401, 176, 688, 1273, - 432, 1017, 1529, 825, 112, 624, 1209, 368, 953, 1465, 240, 752, - 1337, 496, 1081, 1593, 800, 8, 520, 1105, 264, 849, 1361, 136, - 648, 1233, 392, 977, 1489, 776, 72, 584, 1169, 328, 913, 1425, - 200, 712, 1297, 456, 1041, 1553, 40, 552, 1137, 296, 881, 1393, - 168, 680, 1265, 424, 1009, 1521, 817, 104, 616, 1201, 360, 945, - 1457, 232, 744, 1329, 488, 1073, 1585, 24, 536, 1121, 280, 865, - 1377, 152, 664, 1249, 408, 993, 1505, 792, 88, 600, 1185, 344, - 929, 1441, 216, 728, 1313, 472, 1057, 1569, 56, 568, 1153, 312, - 897, 1409, 184, 696, 1281, 440, 1025, 1537, 833, 120, 632, - 1217, 376, 961, 1473, 248, 760, 1345, 504, 1089, 1601, 4, 516, - 1101, 260, 845, 1357, 132, 644, 1229, 388, 973, 1485, 772, 68, - 580, 1165, 324, 909, 1421, 196, 708, 1293, 452, 1037, 1549, 36, - 548, 1133, 292, 877, 1389, 164, 676, 1261, 420, 1005, 1517, - 813, 100, 612, 1197, 356, 941, 1453, 228, 740, 1325, 484, 1069, - 1581, 20, 532, 1117, 276, 861, 1373, 148, 660, 1245, 404, 989, - 1501, 788, 84, 596, 1181, 340, 925, 1437, 212, 724, 1309, 468, - 1053, 1565, 52, 564, 1149, 308, 893, 1405, 180, 692, 1277, 436, - 1021, 1533, 829, 116, 628, 1213, 372, 957, 1469, 244, 756, - 1341, 500, 1085, 1597, 805, 12, 524, 1109, 268, 853, 1365, 140, - 652, 1237, 396, 981, 1493, 780, 76, 588, 1173, 332, 917, 1429, - 204, 716, 1301, 460, 1045, 1557, 44, 556, 1141, 300, 885, 1397, - 172, 684, 1269, 428, 1013, 1525, 821, 108, 620, 1205, 364, 949, - 1461, 236, 748, 1333, 492, 1077, 1589, 28, 540, 1125, 284, 869, - 1381, 156, 668, 1253, 412, 997, 1509, 796, 92, 604, 1189, 348, - 933, 1445, 220, 732, 1317, 476, 1061, 1573, 60, 572, 1157, 316, - 901, 1413, 188, 700, 1285, 444, 1029, 1541, 837, 124, 636, - 1221, 380, 965, 1477, 252, 764, 1349, 508, 1093, 1605, 2, 514, - 1099, 258, 843, 1355, 130, 642, 1227, 386, 971, 1483, 770, 66, - 578, 1163, 322, 907, 1419, 194, 706, 1291, 450, 1035, 1547, 34, - 546, 1131, 290, 875, 1387, 162, 674, 1259, 418, 1003, 1515, - 811, 98, 610, 1195, 354, 939, 1451, 226, 738, 1323, 482, 1067, - 1579, 18, 530, 1115, 274, 859, 1371, 146, 658, 1243, 402, 987, - 1499, 786, 82, 594, 1179, 338, 923, 1435, 210, 722, 1307, 466, - 1051, 1563, 50, 562, 1147, 306, 891, 1403, 178, 690, 1275, 434, - 1019, 1531, 827, 114, 626, 1211, 370, 955, 1467, 242, 754, - 1339, 498, 1083, 1595, 802, 10, 522, 1107, 266, 851, 1363, 138, - 650, 1235, 394, 979, 1491, 778, 74, 586, 1171, 330, 915, 1427, - 202, 714, 1299, 458, 1043, 1555, 42, 554, 1139, 298, 883, 1395, - 170, 682, 1267, 426, 1011, 1523, 819, 106, 618, 1203, 362, 947, - 1459, 234, 746, 1331, 490, 1075, 1587, 26, 538, 1123, 282, 867, - 1379, 154, 666, 1251, 410, 995, 1507, 794, 90, 602, 1187, 346, - 931, 1443, 218, 730, 1315, 474, 1059, 1571, 58, 570, 1155, 314, - 899, 1411, 186, 698, 1283, 442, 1027, 1539, 835, 122, 634, - 1219, 378, 963, 1475, 250, 762, 1347, 506, 1091, 1603, 6, 518, - 1103, 262, 847, 1359, 134, 646, 1231, 390, 975, 1487, 774, 70, - 582, 1167, 326, 911, 1423, 198, 710, 1295, 454, 1039, 1551, 38, - 550, 1135, 294, 879, 1391, 166, 678, 1263, 422, 1007, 1519, - 815, 102, 614, 1199, 358, 943, 1455, 230, 742, 1327, 486, 1071, - 1583, 22, 534, 1119, 278, 863, 1375, 150, 662, 1247, 406, 991, - 1503, 790, 86, 598, 1183, 342, 927, 1439, 214, 726, 1311, 470, - 1055, 1567, 54, 566, 1151, 310, 895, 1407, 182, 694, 1279, 438, - 1023, 1535, 831, 118, 630, 1215, 374, 959, 1471, 246, 758, - 1343, 502, 1087, 1599, 807, 14, 526, 1111, 270, 855, 1367, 142, - 654, 1239, 398, 983, 1495, 782, 78, 590, 1175, 334, 919, 1431, - 206, 718, 1303, 462, 1047, 1559, 46, 558, 1143, 302, 887, 1399, - 174, 686, 1271, 430, 1015, 1527, 823, 110, 622, 1207, 366, 951, - 1463, 238, 750, 1335, 494, 1079, 1591, 30, 542, 1127, 286, 871, - 1383, 158, 670, 1255, 414, 999, 1511, 798, 94, 606, 1191, 350, - 935, 1447, 222, 734, 1319, 478, 1063, 1575, 62, 574, 1159, 318, - 903, 1415, 190, 702, 1287, 446, 1031, 1543, 839, 126, 638, - 1223, 382, 967, 1479, 254, 766, 1351, 510, 1095, 1607, 804, 1, - 513, 1098, 257, 842, 1354, 129, 641, 1226, 385, 970, 1482, 769, - 65, 577, 1162, 321, 906, 1418, 193, 705, 1290, 449, 1034, 1546, - 33, 545, 1130, 289, 874, 1386, 161, 673, 1258, 417, 1002, 1514, - 810, 97, 609, 1194, 353, 938, 1450, 225, 737, 1322, 481, 1066, - 1578, 17, 529, 1114, 273, 858, 1370, 145, 657, 1242, 401, 986, - 1498, 785, 81, 593, 1178, 337, 922, 1434, 209, 721, 1306, 465, - 1050, 1562, 49, 561, 1146, 305, 890, 1402, 177, 689, 1274, 433, - 1018, 1530, 826, 113, 625, 1210, 369, 954, 1466, 241, 753, - 1338, 497, 1082, 1594, 801, 9, 521, 1106, 265, 850, 1362, 137, - 649, 1234, 393, 978, 1490, 777, 73, 585, 1170, 329, 914, 1426, - 201, 713, 1298, 457, 1042, 1554, 41, 553, 1138, 297, 882, 1394, - 169, 681, 1266, 425, 1010, 1522, 818, 105, 617, 1202, 361, 946, - 1458, 233, 745, 1330, 489, 1074, 1586, 25, 537, 1122, 281, 866, - 1378, 153, 665, 1250, 409, 994, 1506, 793, 89, 601, 1186, 345, - 930, 1442, 217, 729, 1314, 473, 1058, 1570, 57, 569, 1154, 313, - 898, 1410, 185, 697, 1282, 441, 1026, 1538, 834, 121, 633, - 1218, 377, 962, 1474, 249, 761, 1346, 505, 1090, 1602, 5, 517, - 1102, 261, 846, 1358, 133, 645, 1230, 389, 974, 1486, 773, 69, - 581, 1166, 325, 910, 1422, 197, 709, 1294, 453, 1038, 1550, 37, - 549, 1134, 293, 878, 1390, 165, 677, 1262, 421, 1006, 1518, - 814, 101, 613, 1198, 357, 942, 1454, 229, 741, 1326, 485, 1070, - 1582, 21, 533, 1118, 277, 862, 1374, 149, 661, 1246, 405, 990, - 1502, 789, 85, 597, 1182, 341, 926, 1438, 213, 725, 1310, 469, - 1054, 1566, 53, 565, 1150, 309, 894, 1406, 181, 693, 1278, 437, - 1022, 1534, 830, 117, 629, 1214, 373, 958, 1470, 245, 757, - 1342, 501, 1086, 1598, 806, 13, 525, 1110, 269, 854, 1366, 141, - 653, 1238, 397, 982, 1494, 781, 77, 589, 1174, 333, 918, 1430, - 205, 717, 1302, 461, 1046, 1558, 45, 557, 1142, 301, 886, 1398, - 173, 685, 1270, 429, 1014, 1526, 822, 109, 621, 1206, 365, 950, - 1462, 237, 749, 1334, 493, 1078, 1590, 29, 541, 1126, 285, 870, - 1382, 157, 669, 1254, 413, 998, 1510, 797, 93, 605, 1190, 349, - 934, 1446, 221, 733, 1318, 477, 1062, 1574, 61, 573, 1158, 317, - 902, 1414, 189, 701, 1286, 445, 1030, 1542, 838, 125, 637, - 1222, 381, 966, 1478, 253, 765, 1350, 509, 1094, 1606, 3, 515, - 1100, 259, 844, 1356, 131, 643, 1228, 387, 972, 1484, 771, 67, - 579, 1164, 323, 908, 1420, 195, 707, 1292, 451, 1036, 1548, 35, - 547, 1132, 291, 876, 1388, 163, 675, 1260, 419, 1004, 1516, - 812, 99, 611, 1196, 355, 940, 1452, 227, 739, 1324, 483, 1068, - 1580, 19, 531, 1116, 275, 860, 1372, 147, 659, 1244, 403, 988, - 1500, 787, 83, 595, 1180, 339, 924, 1436, 211, 723, 1308, 467, - 1052, 1564, 51, 563, 1148, 307, 892, 1404, 179, 691, 1276, 435, - 1020, 1532, 828, 115, 627, 1212, 371, 956, 1468, 243, 755, - 1340, 499, 1084, 1596, 803, 11, 523, 1108, 267, 852, 1364, 139, - 651, 1236, 395, 980, 1492, 779, 75, 587, 1172, 331, 916, 1428, - 203, 715, 1300, 459, 1044, 1556, 43, 555, 1140, 299, 884, 1396, - 171, 683, 1268, 427, 1012, 1524, 820, 107, 619, 1204, 363, 948, - 1460, 235, 747, 1332, 491, 1076, 1588, 27, 539, 1124, 283, 868, - 1380, 155, 667, 1252, 411, 996, 1508, 795, 91, 603, 1188, 347, - 932, 1444, 219, 731, 1316, 475, 1060, 1572, 59, 571, 1156, 315, - 900, 1412, 187, 699, 1284, 443, 1028, 1540, 836, 123, 635, - 1220, 379, 964, 1476, 251, 763, 1348, 507, 1092, 1604, 7, 519, - 1104, 263, 848, 1360, 135, 647, 1232, 391, 976, 1488, 775, 71, - 583, 1168, 327, 912, 1424, 199, 711, 1296, 455, 1040, 1552, 39, - 551, 1136, 295, 880, 1392, 167, 679, 1264, 423, 1008, 1520, - 816, 103, 615, 1200, 359, 944, 1456, 231, 743, 1328, 487, 1072, - 1584, 23, 535, 1120, 279, 864, 1376, 151, 663, 1248, 407, 992, - 1504, 791, 87, 599, 1184, 343, 928, 1440, 215, 727, 1312, 471, - 1056, 1568, 55, 567, 1152, 311, 896, 1408, 183, 695, 1280, 439, - 1024, 1536, 832, 119, 631, 1216, 375, 960, 1472, 247, 759, - 1344, 503, 1088, 1600, 808, 15, 527, 1112, 271, 856, 1368, 143, - 655, 1240, 399, 984, 1496, 783, 79, 591, 1176, 335, 920, 1432, - 207, 719, 1304, 463, 1048, 1560, 47, 559, 1144, 303, 888, 1400, - 175, 687, 1272, 431, 1016, 1528, 824, 111, 623, 1208, 367, 952, - 1464, 239, 751, 1336, 495, 1080, 1592, 31, 543, 1128, 287, 872, - 1384, 159, 671, 1256, 415, 1000, 1512, 799, 95, 607, 1192, 351, - 936, 1448, 223, 735, 1320, 479, 1064, 1576, 63, 575, 1160, 319, - 904, 1416, 191, 703, 1288, 447, 1032, 1544, 840, 127, 639, - 1224, 383, 968, 1480, 255, 767, 1352, 511, 1096, 1608]; - - return (unsafe { *PERM1609.get_unchecked((index % 1609) as usize) } as u32 * 2588881 + - unsafe { *PERM1609.get_unchecked(((index / 1609) % 1609) as usize) } as u32 * 1609 + - unsafe { - *PERM1609.get_unchecked(((index / 2588881) % 1609) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (4165509529u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1613(index: u32) -> f32 { - const PERM1613: [u16; 1613] = [0, 512, 1101, 256, 845, 1357, 128, 640, 1229, 384, 973, 1485, - 768, 64, 576, 1165, 320, 909, 1421, 192, 704, 1293, 448, 1037, - 1549, 32, 544, 1133, 288, 877, 1389, 160, 672, 1261, 416, 1005, - 1517, 813, 96, 608, 1197, 352, 941, 1453, 224, 736, 1325, 480, - 1069, 1581, 16, 528, 1117, 272, 861, 1373, 144, 656, 1245, 400, - 989, 1501, 784, 80, 592, 1181, 336, 925, 1437, 208, 720, 1309, - 464, 1053, 1565, 48, 560, 1149, 304, 893, 1405, 176, 688, 1277, - 432, 1021, 1533, 829, 112, 624, 1213, 368, 957, 1469, 240, 752, - 1341, 496, 1085, 1597, 800, 8, 520, 1109, 264, 853, 1365, 136, - 648, 1237, 392, 981, 1493, 776, 72, 584, 1173, 328, 917, 1429, - 200, 712, 1301, 456, 1045, 1557, 40, 552, 1141, 296, 885, 1397, - 168, 680, 1269, 424, 1013, 1525, 821, 104, 616, 1205, 360, 949, - 1461, 232, 744, 1333, 488, 1077, 1589, 24, 536, 1125, 280, 869, - 1381, 152, 664, 1253, 408, 997, 1509, 792, 88, 600, 1189, 344, - 933, 1445, 216, 728, 1317, 472, 1061, 1573, 56, 568, 1157, 312, - 901, 1413, 184, 696, 1285, 440, 1029, 1541, 837, 120, 632, - 1221, 376, 965, 1477, 248, 760, 1349, 504, 1093, 1605, 804, 4, - 516, 1105, 260, 849, 1361, 132, 644, 1233, 388, 977, 1489, 772, - 68, 580, 1169, 324, 913, 1425, 196, 708, 1297, 452, 1041, 1553, - 36, 548, 1137, 292, 881, 1393, 164, 676, 1265, 420, 1009, 1521, - 817, 100, 612, 1201, 356, 945, 1457, 228, 740, 1329, 484, 1073, - 1585, 20, 532, 1121, 276, 865, 1377, 148, 660, 1249, 404, 993, - 1505, 788, 84, 596, 1185, 340, 929, 1441, 212, 724, 1313, 468, - 1057, 1569, 52, 564, 1153, 308, 897, 1409, 180, 692, 1281, 436, - 1025, 1537, 833, 116, 628, 1217, 372, 961, 1473, 244, 756, - 1345, 500, 1089, 1601, 809, 12, 524, 1113, 268, 857, 1369, 140, - 652, 1241, 396, 985, 1497, 780, 76, 588, 1177, 332, 921, 1433, - 204, 716, 1305, 460, 1049, 1561, 44, 556, 1145, 300, 889, 1401, - 172, 684, 1273, 428, 1017, 1529, 825, 108, 620, 1209, 364, 953, - 1465, 236, 748, 1337, 492, 1081, 1593, 28, 540, 1129, 284, 873, - 1385, 156, 668, 1257, 412, 1001, 1513, 796, 92, 604, 1193, 348, - 937, 1449, 220, 732, 1321, 476, 1065, 1577, 60, 572, 1161, 316, - 905, 1417, 188, 700, 1289, 444, 1033, 1545, 841, 124, 636, - 1225, 380, 969, 1481, 252, 764, 1353, 508, 1097, 1609, 2, 514, - 1103, 258, 847, 1359, 130, 642, 1231, 386, 975, 1487, 770, 66, - 578, 1167, 322, 911, 1423, 194, 706, 1295, 450, 1039, 1551, 34, - 546, 1135, 290, 879, 1391, 162, 674, 1263, 418, 1007, 1519, - 815, 98, 610, 1199, 354, 943, 1455, 226, 738, 1327, 482, 1071, - 1583, 18, 530, 1119, 274, 863, 1375, 146, 658, 1247, 402, 991, - 1503, 786, 82, 594, 1183, 338, 927, 1439, 210, 722, 1311, 466, - 1055, 1567, 50, 562, 1151, 306, 895, 1407, 178, 690, 1279, 434, - 1023, 1535, 831, 114, 626, 1215, 370, 959, 1471, 242, 754, - 1343, 498, 1087, 1599, 802, 10, 522, 1111, 266, 855, 1367, 138, - 650, 1239, 394, 983, 1495, 778, 74, 586, 1175, 330, 919, 1431, - 202, 714, 1303, 458, 1047, 1559, 42, 554, 1143, 298, 887, 1399, - 170, 682, 1271, 426, 1015, 1527, 823, 106, 618, 1207, 362, 951, - 1463, 234, 746, 1335, 490, 1079, 1591, 26, 538, 1127, 282, 871, - 1383, 154, 666, 1255, 410, 999, 1511, 794, 90, 602, 1191, 346, - 935, 1447, 218, 730, 1319, 474, 1063, 1575, 58, 570, 1159, 314, - 903, 1415, 186, 698, 1287, 442, 1031, 1543, 839, 122, 634, - 1223, 378, 967, 1479, 250, 762, 1351, 506, 1095, 1607, 807, 6, - 518, 1107, 262, 851, 1363, 134, 646, 1235, 390, 979, 1491, 774, - 70, 582, 1171, 326, 915, 1427, 198, 710, 1299, 454, 1043, 1555, - 38, 550, 1139, 294, 883, 1395, 166, 678, 1267, 422, 1011, 1523, - 819, 102, 614, 1203, 358, 947, 1459, 230, 742, 1331, 486, 1075, - 1587, 22, 534, 1123, 278, 867, 1379, 150, 662, 1251, 406, 995, - 1507, 790, 86, 598, 1187, 342, 931, 1443, 214, 726, 1315, 470, - 1059, 1571, 54, 566, 1155, 310, 899, 1411, 182, 694, 1283, 438, - 1027, 1539, 835, 118, 630, 1219, 374, 963, 1475, 246, 758, - 1347, 502, 1091, 1603, 811, 14, 526, 1115, 270, 859, 1371, 142, - 654, 1243, 398, 987, 1499, 782, 78, 590, 1179, 334, 923, 1435, - 206, 718, 1307, 462, 1051, 1563, 46, 558, 1147, 302, 891, 1403, - 174, 686, 1275, 430, 1019, 1531, 827, 110, 622, 1211, 366, 955, - 1467, 238, 750, 1339, 494, 1083, 1595, 30, 542, 1131, 286, 875, - 1387, 158, 670, 1259, 414, 1003, 1515, 798, 94, 606, 1195, 350, - 939, 1451, 222, 734, 1323, 478, 1067, 1579, 62, 574, 1163, 318, - 907, 1419, 190, 702, 1291, 446, 1035, 1547, 843, 126, 638, - 1227, 382, 971, 1483, 254, 766, 1355, 510, 1099, 1611, 806, 1, - 513, 1102, 257, 846, 1358, 129, 641, 1230, 385, 974, 1486, 769, - 65, 577, 1166, 321, 910, 1422, 193, 705, 1294, 449, 1038, 1550, - 33, 545, 1134, 289, 878, 1390, 161, 673, 1262, 417, 1006, 1518, - 814, 97, 609, 1198, 353, 942, 1454, 225, 737, 1326, 481, 1070, - 1582, 17, 529, 1118, 273, 862, 1374, 145, 657, 1246, 401, 990, - 1502, 785, 81, 593, 1182, 337, 926, 1438, 209, 721, 1310, 465, - 1054, 1566, 49, 561, 1150, 305, 894, 1406, 177, 689, 1278, 433, - 1022, 1534, 830, 113, 625, 1214, 369, 958, 1470, 241, 753, - 1342, 497, 1086, 1598, 801, 9, 521, 1110, 265, 854, 1366, 137, - 649, 1238, 393, 982, 1494, 777, 73, 585, 1174, 329, 918, 1430, - 201, 713, 1302, 457, 1046, 1558, 41, 553, 1142, 297, 886, 1398, - 169, 681, 1270, 425, 1014, 1526, 822, 105, 617, 1206, 361, 950, - 1462, 233, 745, 1334, 489, 1078, 1590, 25, 537, 1126, 281, 870, - 1382, 153, 665, 1254, 409, 998, 1510, 793, 89, 601, 1190, 345, - 934, 1446, 217, 729, 1318, 473, 1062, 1574, 57, 569, 1158, 313, - 902, 1414, 185, 697, 1286, 441, 1030, 1542, 838, 121, 633, - 1222, 377, 966, 1478, 249, 761, 1350, 505, 1094, 1606, 805, 5, - 517, 1106, 261, 850, 1362, 133, 645, 1234, 389, 978, 1490, 773, - 69, 581, 1170, 325, 914, 1426, 197, 709, 1298, 453, 1042, 1554, - 37, 549, 1138, 293, 882, 1394, 165, 677, 1266, 421, 1010, 1522, - 818, 101, 613, 1202, 357, 946, 1458, 229, 741, 1330, 485, 1074, - 1586, 21, 533, 1122, 277, 866, 1378, 149, 661, 1250, 405, 994, - 1506, 789, 85, 597, 1186, 341, 930, 1442, 213, 725, 1314, 469, - 1058, 1570, 53, 565, 1154, 309, 898, 1410, 181, 693, 1282, 437, - 1026, 1538, 834, 117, 629, 1218, 373, 962, 1474, 245, 757, - 1346, 501, 1090, 1602, 810, 13, 525, 1114, 269, 858, 1370, 141, - 653, 1242, 397, 986, 1498, 781, 77, 589, 1178, 333, 922, 1434, - 205, 717, 1306, 461, 1050, 1562, 45, 557, 1146, 301, 890, 1402, - 173, 685, 1274, 429, 1018, 1530, 826, 109, 621, 1210, 365, 954, - 1466, 237, 749, 1338, 493, 1082, 1594, 29, 541, 1130, 285, 874, - 1386, 157, 669, 1258, 413, 1002, 1514, 797, 93, 605, 1194, 349, - 938, 1450, 221, 733, 1322, 477, 1066, 1578, 61, 573, 1162, 317, - 906, 1418, 189, 701, 1290, 445, 1034, 1546, 842, 125, 637, - 1226, 381, 970, 1482, 253, 765, 1354, 509, 1098, 1610, 3, 515, - 1104, 259, 848, 1360, 131, 643, 1232, 387, 976, 1488, 771, 67, - 579, 1168, 323, 912, 1424, 195, 707, 1296, 451, 1040, 1552, 35, - 547, 1136, 291, 880, 1392, 163, 675, 1264, 419, 1008, 1520, - 816, 99, 611, 1200, 355, 944, 1456, 227, 739, 1328, 483, 1072, - 1584, 19, 531, 1120, 275, 864, 1376, 147, 659, 1248, 403, 992, - 1504, 787, 83, 595, 1184, 339, 928, 1440, 211, 723, 1312, 467, - 1056, 1568, 51, 563, 1152, 307, 896, 1408, 179, 691, 1280, 435, - 1024, 1536, 832, 115, 627, 1216, 371, 960, 1472, 243, 755, - 1344, 499, 1088, 1600, 803, 11, 523, 1112, 267, 856, 1368, 139, - 651, 1240, 395, 984, 1496, 779, 75, 587, 1176, 331, 920, 1432, - 203, 715, 1304, 459, 1048, 1560, 43, 555, 1144, 299, 888, 1400, - 171, 683, 1272, 427, 1016, 1528, 824, 107, 619, 1208, 363, 952, - 1464, 235, 747, 1336, 491, 1080, 1592, 27, 539, 1128, 283, 872, - 1384, 155, 667, 1256, 411, 1000, 1512, 795, 91, 603, 1192, 347, - 936, 1448, 219, 731, 1320, 475, 1064, 1576, 59, 571, 1160, 315, - 904, 1416, 187, 699, 1288, 443, 1032, 1544, 840, 123, 635, - 1224, 379, 968, 1480, 251, 763, 1352, 507, 1096, 1608, 808, 7, - 519, 1108, 263, 852, 1364, 135, 647, 1236, 391, 980, 1492, 775, - 71, 583, 1172, 327, 916, 1428, 199, 711, 1300, 455, 1044, 1556, - 39, 551, 1140, 295, 884, 1396, 167, 679, 1268, 423, 1012, 1524, - 820, 103, 615, 1204, 359, 948, 1460, 231, 743, 1332, 487, 1076, - 1588, 23, 535, 1124, 279, 868, 1380, 151, 663, 1252, 407, 996, - 1508, 791, 87, 599, 1188, 343, 932, 1444, 215, 727, 1316, 471, - 1060, 1572, 55, 567, 1156, 311, 900, 1412, 183, 695, 1284, 439, - 1028, 1540, 836, 119, 631, 1220, 375, 964, 1476, 247, 759, - 1348, 503, 1092, 1604, 812, 15, 527, 1116, 271, 860, 1372, 143, - 655, 1244, 399, 988, 1500, 783, 79, 591, 1180, 335, 924, 1436, - 207, 719, 1308, 463, 1052, 1564, 47, 559, 1148, 303, 892, 1404, - 175, 687, 1276, 431, 1020, 1532, 828, 111, 623, 1212, 367, 956, - 1468, 239, 751, 1340, 495, 1084, 1596, 31, 543, 1132, 287, 876, - 1388, 159, 671, 1260, 415, 1004, 1516, 799, 95, 607, 1196, 351, - 940, 1452, 223, 735, 1324, 479, 1068, 1580, 63, 575, 1164, 319, - 908, 1420, 191, 703, 1292, 447, 1036, 1548, 844, 127, 639, - 1228, 383, 972, 1484, 255, 767, 1356, 511, 1100, 1612]; - - return (unsafe { *PERM1613.get_unchecked((index % 1613) as usize) } as u32 * 2601769 + - unsafe { *PERM1613.get_unchecked(((index / 1613) % 1613) as usize) } as u32 * 1613 + - unsafe { - *PERM1613.get_unchecked(((index / 2601769) % 1613) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (4196653397u32 as f32)); // Results in [0,1). -} - - - -#[inline(always)] -fn halton1619(index: u32) -> f32 { - const PERM1619: [u16; 1619] = [0, 512, 1107, 256, 851, 1363, 128, 640, 1235, 384, 979, 1491, - 768, 64, 576, 1171, 320, 915, 1427, 192, 704, 1299, 448, 1043, - 1555, 32, 544, 1139, 288, 883, 1395, 160, 672, 1267, 416, 1011, - 1523, 819, 96, 608, 1203, 352, 947, 1459, 224, 736, 1331, 480, - 1075, 1587, 800, 16, 528, 1123, 272, 867, 1379, 144, 656, 1251, - 400, 995, 1507, 784, 80, 592, 1187, 336, 931, 1443, 208, 720, - 1315, 464, 1059, 1571, 48, 560, 1155, 304, 899, 1411, 176, 688, - 1283, 432, 1027, 1539, 835, 112, 624, 1219, 368, 963, 1475, - 240, 752, 1347, 496, 1091, 1603, 8, 520, 1115, 264, 859, 1371, - 136, 648, 1243, 392, 987, 1499, 776, 72, 584, 1179, 328, 923, - 1435, 200, 712, 1307, 456, 1051, 1563, 40, 552, 1147, 296, 891, - 1403, 168, 680, 1275, 424, 1019, 1531, 827, 104, 616, 1211, - 360, 955, 1467, 232, 744, 1339, 488, 1083, 1595, 811, 24, 536, - 1131, 280, 875, 1387, 152, 664, 1259, 408, 1003, 1515, 792, 88, - 600, 1195, 344, 939, 1451, 216, 728, 1323, 472, 1067, 1579, 56, - 568, 1163, 312, 907, 1419, 184, 696, 1291, 440, 1035, 1547, - 843, 120, 632, 1227, 376, 971, 1483, 248, 760, 1355, 504, 1099, - 1611, 4, 516, 1111, 260, 855, 1367, 132, 644, 1239, 388, 983, - 1495, 772, 68, 580, 1175, 324, 919, 1431, 196, 708, 1303, 452, - 1047, 1559, 36, 548, 1143, 292, 887, 1399, 164, 676, 1271, 420, - 1015, 1527, 823, 100, 612, 1207, 356, 951, 1463, 228, 740, - 1335, 484, 1079, 1591, 804, 20, 532, 1127, 276, 871, 1383, 148, - 660, 1255, 404, 999, 1511, 788, 84, 596, 1191, 340, 935, 1447, - 212, 724, 1319, 468, 1063, 1575, 52, 564, 1159, 308, 903, 1415, - 180, 692, 1287, 436, 1031, 1543, 839, 116, 628, 1223, 372, 967, - 1479, 244, 756, 1351, 500, 1095, 1607, 12, 524, 1119, 268, 863, - 1375, 140, 652, 1247, 396, 991, 1503, 780, 76, 588, 1183, 332, - 927, 1439, 204, 716, 1311, 460, 1055, 1567, 44, 556, 1151, 300, - 895, 1407, 172, 684, 1279, 428, 1023, 1535, 831, 108, 620, - 1215, 364, 959, 1471, 236, 748, 1343, 492, 1087, 1599, 815, 28, - 540, 1135, 284, 879, 1391, 156, 668, 1263, 412, 1007, 1519, - 796, 92, 604, 1199, 348, 943, 1455, 220, 732, 1327, 476, 1071, - 1583, 60, 572, 1167, 316, 911, 1423, 188, 700, 1295, 444, 1039, - 1551, 847, 124, 636, 1231, 380, 975, 1487, 252, 764, 1359, 508, - 1103, 1615, 808, 2, 514, 1109, 258, 853, 1365, 130, 642, 1237, - 386, 981, 1493, 770, 66, 578, 1173, 322, 917, 1429, 194, 706, - 1301, 450, 1045, 1557, 34, 546, 1141, 290, 885, 1397, 162, 674, - 1269, 418, 1013, 1525, 821, 98, 610, 1205, 354, 949, 1461, 226, - 738, 1333, 482, 1077, 1589, 802, 18, 530, 1125, 274, 869, 1381, - 146, 658, 1253, 402, 997, 1509, 786, 82, 594, 1189, 338, 933, - 1445, 210, 722, 1317, 466, 1061, 1573, 50, 562, 1157, 306, 901, - 1413, 178, 690, 1285, 434, 1029, 1541, 837, 114, 626, 1221, - 370, 965, 1477, 242, 754, 1349, 498, 1093, 1605, 10, 522, 1117, - 266, 861, 1373, 138, 650, 1245, 394, 989, 1501, 778, 74, 586, - 1181, 330, 925, 1437, 202, 714, 1309, 458, 1053, 1565, 42, 554, - 1149, 298, 893, 1405, 170, 682, 1277, 426, 1021, 1533, 829, - 106, 618, 1213, 362, 957, 1469, 234, 746, 1341, 490, 1085, - 1597, 813, 26, 538, 1133, 282, 877, 1389, 154, 666, 1261, 410, - 1005, 1517, 794, 90, 602, 1197, 346, 941, 1453, 218, 730, 1325, - 474, 1069, 1581, 58, 570, 1165, 314, 909, 1421, 186, 698, 1293, - 442, 1037, 1549, 845, 122, 634, 1229, 378, 973, 1485, 250, 762, - 1357, 506, 1101, 1613, 6, 518, 1113, 262, 857, 1369, 134, 646, - 1241, 390, 985, 1497, 774, 70, 582, 1177, 326, 921, 1433, 198, - 710, 1305, 454, 1049, 1561, 38, 550, 1145, 294, 889, 1401, 166, - 678, 1273, 422, 1017, 1529, 825, 102, 614, 1209, 358, 953, - 1465, 230, 742, 1337, 486, 1081, 1593, 806, 22, 534, 1129, 278, - 873, 1385, 150, 662, 1257, 406, 1001, 1513, 790, 86, 598, 1193, - 342, 937, 1449, 214, 726, 1321, 470, 1065, 1577, 54, 566, 1161, - 310, 905, 1417, 182, 694, 1289, 438, 1033, 1545, 841, 118, 630, - 1225, 374, 969, 1481, 246, 758, 1353, 502, 1097, 1609, 14, 526, - 1121, 270, 865, 1377, 142, 654, 1249, 398, 993, 1505, 782, 78, - 590, 1185, 334, 929, 1441, 206, 718, 1313, 462, 1057, 1569, 46, - 558, 1153, 302, 897, 1409, 174, 686, 1281, 430, 1025, 1537, - 833, 110, 622, 1217, 366, 961, 1473, 238, 750, 1345, 494, 1089, - 1601, 817, 30, 542, 1137, 286, 881, 1393, 158, 670, 1265, 414, - 1009, 1521, 798, 94, 606, 1201, 350, 945, 1457, 222, 734, 1329, - 478, 1073, 1585, 62, 574, 1169, 318, 913, 1425, 190, 702, 1297, - 446, 1041, 1553, 849, 126, 638, 1233, 382, 977, 1489, 254, 766, - 1361, 510, 1105, 1617, 809, 1, 513, 1108, 257, 852, 1364, 129, - 641, 1236, 385, 980, 1492, 769, 65, 577, 1172, 321, 916, 1428, - 193, 705, 1300, 449, 1044, 1556, 33, 545, 1140, 289, 884, 1396, - 161, 673, 1268, 417, 1012, 1524, 820, 97, 609, 1204, 353, 948, - 1460, 225, 737, 1332, 481, 1076, 1588, 801, 17, 529, 1124, 273, - 868, 1380, 145, 657, 1252, 401, 996, 1508, 785, 81, 593, 1188, - 337, 932, 1444, 209, 721, 1316, 465, 1060, 1572, 49, 561, 1156, - 305, 900, 1412, 177, 689, 1284, 433, 1028, 1540, 836, 113, 625, - 1220, 369, 964, 1476, 241, 753, 1348, 497, 1092, 1604, 9, 521, - 1116, 265, 860, 1372, 137, 649, 1244, 393, 988, 1500, 777, 73, - 585, 1180, 329, 924, 1436, 201, 713, 1308, 457, 1052, 1564, 41, - 553, 1148, 297, 892, 1404, 169, 681, 1276, 425, 1020, 1532, - 828, 105, 617, 1212, 361, 956, 1468, 233, 745, 1340, 489, 1084, - 1596, 812, 25, 537, 1132, 281, 876, 1388, 153, 665, 1260, 409, - 1004, 1516, 793, 89, 601, 1196, 345, 940, 1452, 217, 729, 1324, - 473, 1068, 1580, 57, 569, 1164, 313, 908, 1420, 185, 697, 1292, - 441, 1036, 1548, 844, 121, 633, 1228, 377, 972, 1484, 249, 761, - 1356, 505, 1100, 1612, 5, 517, 1112, 261, 856, 1368, 133, 645, - 1240, 389, 984, 1496, 773, 69, 581, 1176, 325, 920, 1432, 197, - 709, 1304, 453, 1048, 1560, 37, 549, 1144, 293, 888, 1400, 165, - 677, 1272, 421, 1016, 1528, 824, 101, 613, 1208, 357, 952, - 1464, 229, 741, 1336, 485, 1080, 1592, 805, 21, 533, 1128, 277, - 872, 1384, 149, 661, 1256, 405, 1000, 1512, 789, 85, 597, 1192, - 341, 936, 1448, 213, 725, 1320, 469, 1064, 1576, 53, 565, 1160, - 309, 904, 1416, 181, 693, 1288, 437, 1032, 1544, 840, 117, 629, - 1224, 373, 968, 1480, 245, 757, 1352, 501, 1096, 1608, 13, 525, - 1120, 269, 864, 1376, 141, 653, 1248, 397, 992, 1504, 781, 77, - 589, 1184, 333, 928, 1440, 205, 717, 1312, 461, 1056, 1568, 45, - 557, 1152, 301, 896, 1408, 173, 685, 1280, 429, 1024, 1536, - 832, 109, 621, 1216, 365, 960, 1472, 237, 749, 1344, 493, 1088, - 1600, 816, 29, 541, 1136, 285, 880, 1392, 157, 669, 1264, 413, - 1008, 1520, 797, 93, 605, 1200, 349, 944, 1456, 221, 733, 1328, - 477, 1072, 1584, 61, 573, 1168, 317, 912, 1424, 189, 701, 1296, - 445, 1040, 1552, 848, 125, 637, 1232, 381, 976, 1488, 253, 765, - 1360, 509, 1104, 1616, 810, 3, 515, 1110, 259, 854, 1366, 131, - 643, 1238, 387, 982, 1494, 771, 67, 579, 1174, 323, 918, 1430, - 195, 707, 1302, 451, 1046, 1558, 35, 547, 1142, 291, 886, 1398, - 163, 675, 1270, 419, 1014, 1526, 822, 99, 611, 1206, 355, 950, - 1462, 227, 739, 1334, 483, 1078, 1590, 803, 19, 531, 1126, 275, - 870, 1382, 147, 659, 1254, 403, 998, 1510, 787, 83, 595, 1190, - 339, 934, 1446, 211, 723, 1318, 467, 1062, 1574, 51, 563, 1158, - 307, 902, 1414, 179, 691, 1286, 435, 1030, 1542, 838, 115, 627, - 1222, 371, 966, 1478, 243, 755, 1350, 499, 1094, 1606, 11, 523, - 1118, 267, 862, 1374, 139, 651, 1246, 395, 990, 1502, 779, 75, - 587, 1182, 331, 926, 1438, 203, 715, 1310, 459, 1054, 1566, 43, - 555, 1150, 299, 894, 1406, 171, 683, 1278, 427, 1022, 1534, - 830, 107, 619, 1214, 363, 958, 1470, 235, 747, 1342, 491, 1086, - 1598, 814, 27, 539, 1134, 283, 878, 1390, 155, 667, 1262, 411, - 1006, 1518, 795, 91, 603, 1198, 347, 942, 1454, 219, 731, 1326, - 475, 1070, 1582, 59, 571, 1166, 315, 910, 1422, 187, 699, 1294, - 443, 1038, 1550, 846, 123, 635, 1230, 379, 974, 1486, 251, 763, - 1358, 507, 1102, 1614, 7, 519, 1114, 263, 858, 1370, 135, 647, - 1242, 391, 986, 1498, 775, 71, 583, 1178, 327, 922, 1434, 199, - 711, 1306, 455, 1050, 1562, 39, 551, 1146, 295, 890, 1402, 167, - 679, 1274, 423, 1018, 1530, 826, 103, 615, 1210, 359, 954, - 1466, 231, 743, 1338, 487, 1082, 1594, 807, 23, 535, 1130, 279, - 874, 1386, 151, 663, 1258, 407, 1002, 1514, 791, 87, 599, 1194, - 343, 938, 1450, 215, 727, 1322, 471, 1066, 1578, 55, 567, 1162, - 311, 906, 1418, 183, 695, 1290, 439, 1034, 1546, 842, 119, 631, - 1226, 375, 970, 1482, 247, 759, 1354, 503, 1098, 1610, 15, 527, - 1122, 271, 866, 1378, 143, 655, 1250, 399, 994, 1506, 783, 79, - 591, 1186, 335, 930, 1442, 207, 719, 1314, 463, 1058, 1570, 47, - 559, 1154, 303, 898, 1410, 175, 687, 1282, 431, 1026, 1538, - 834, 111, 623, 1218, 367, 962, 1474, 239, 751, 1346, 495, 1090, - 1602, 818, 31, 543, 1138, 287, 882, 1394, 159, 671, 1266, 415, - 1010, 1522, 799, 95, 607, 1202, 351, 946, 1458, 223, 735, 1330, - 479, 1074, 1586, 63, 575, 1170, 319, 914, 1426, 191, 703, 1298, - 447, 1042, 1554, 850, 127, 639, 1234, 383, 978, 1490, 255, 767, - 1362, 511, 1106, 1618]; - - return (unsafe { *PERM1619.get_unchecked((index % 1619) as usize) } as u32 * 2621161 + - unsafe { *PERM1619.get_unchecked(((index / 1619) % 1619) as usize) } as u32 * 1619 + - unsafe { - *PERM1619.get_unchecked(((index / 2621161) % 1619) as usize) - } as u32) as f32 * (0.999999940395355224609375f32 / (4243659659u32 as f32)); // Results in [0,1). -}