> Well, I can tell you why it needs to be backward compatible! I use random
> numbers fairly frequently, and to unit test them I set a specific seed and
> then make sure I get the same answers.
Hmm, I guess that makes sense. I tried to adjust my algorithms to do the same
thing with the same bit's as the original one, but I couldn't get it to work.
> Have you benchmarked it using the generator interface? The structure of this
> as a no monolithic generator makes it a good deal slower than generating in
> straight C (with everything inline). While I'm not sure a factor of 2 is
> enough to justify a change (for me 10x, 1.2x is not but I don't know where
> the cutoff is).
I originally benchmarked my implementation against a bunch of other ones in c
(because I was developing a c library
https://github.com/camel-cdr/cauldron/blob/main/cauldron/random.h#L1928).
But I did run the built-in benchmark: ./runtests.py --bench
bench_random.RNG.time_normal_zig and the results are:
new old
PCG64 589±3μs 1.06±0.03ms
MT19937 985±4μs 1.44±0.01ms
Philox 981±30μs 1.39±0.01ms
SFC64 508±4μs 900±4μs
numpy 2.99±0.06ms 2.98±0.01ms # no change for /dev/urandom
I'm not yet 100% certain about the implementations, but I attached a diff of my
current progress.
diff --git a/numpy/random/src/distributions/distributions.c b/numpy/random/src/distributions/distributions.c
index 93e0bdc5f..447d5e161 100644
--- a/numpy/random/src/distributions/distributions.c
+++ b/numpy/random/src/distributions/distributions.c
@@ -46,9 +46,9 @@ void random_standard_uniform_fill_f(bitgen_t *bitgen_state, npy_intp cnt, float
static double standard_exponential_unlikely(bitgen_t *bitgen_state,
uint8_t idx, double x) {
if (idx == 0) {
/* Switch to 1.0 - U to avoid log(0.0), see GH 13361 */
- return ziggurat_exp_r - log(1.0 - next_double(bitgen_state));
+ return (double)ZIGGURAT_EXP_R - log(1.0 - next_double(bitgen_state));
} else if ((fe_double[idx - 1] - fe_double[idx]) * next_double(bitgen_state) +
fe_double[idx] <
exp(-x)) {
return x;
@@ -83,9 +83,9 @@ void random_standard_exponential_fill(bitgen_t * bitgen_state, npy_intp cnt, dou
static float standard_exponential_unlikely_f(bitgen_t *bitgen_state,
uint8_t idx, float x) {
if (idx == 0) {
/* Switch to 1.0 - U to avoid log(0.0), see GH 13361 */
- return ziggurat_exp_r_f - logf(1.0f - next_float(bitgen_state));
+ return (float)ZIGGURAT_EXP_R - logf(1.0f - next_float(bitgen_state));
} else if ((fe_float[idx - 1] - fe_float[idx]) * next_float(bitgen_state) +
fe_float[idx] <
expf(-x)) {
return x;
@@ -132,41 +132,36 @@ void random_standard_exponential_inv_fill_f(bitgen_t * bitgen_state, npy_intp cn
out[i] = -log(1.0 - next_float(bitgen_state));
}
}
-
double random_standard_normal(bitgen_t *bitgen_state) {
- uint64_t r;
- int sign;
- uint64_t rabs;
- int idx;
- double x, xx, yy;
- for (;;) {
- /* r = e3n52sb8 */
- r = next_uint64(bitgen_state);
- idx = r & 0xff;
- r >>= 8;
- sign = r & 0x1;
- rabs = (r >> 1) & 0x000fffffffffffff;
- x = rabs * wi_double[idx];
- if (sign & 0x1)
- x = -x;
- if (rabs < ki_double[idx])
- return x; /* 99.3% of the time return here */
+ while (1) {
+ double x, y, f0, f1;
+ union { uint64_t u; double f; } u;
+ const uint64_t u64 = next_uint64(bitgen_state);
+ const uint_fast8_t idx = (u64 >> 1) & 0xff;
+ const double uf64 = ((u64 >> 11) * (1.0 / (UINT64_C(1) << 53))) *
+ xtbl_double[idx];
+
+ if (uf64 < xtbl_double[idx + 1])
+ return u.f = uf64, u.u |= (u64 & 1) << 63, u.f;
+
if (idx == 0) {
- for (;;) {
- /* Switch to 1.0 - U to avoid log(0.0), see GH 13361 */
- xx = -ziggurat_nor_inv_r * log(1.0 - next_double(bitgen_state));
- yy = -log(1.0 - next_double(bitgen_state));
- if (yy + yy > xx * xx)
- return ((rabs >> 8) & 0x1) ? -(ziggurat_nor_r + xx)
- : ziggurat_nor_r + xx;
- }
- } else {
- if (((fi_double[idx - 1] - fi_double[idx]) * next_double(bitgen_state) +
- fi_double[idx]) < exp(-0.5 * x * x))
- return x;
+ do {
+ x = log(next_double(bitgen_state)) * 1.0 / ZIGGURAT_NORM_R;
+ y = log(next_double(bitgen_state));
+ } while (-(y + y) < x * x);
+ if (u64 & 1)
+ return x - (double)ZIGGURAT_NORM_R;
+ else
+ return (double)ZIGGURAT_NORM_R - x;
}
+
+ y = uf64 * uf64;
+ f0 = exp(-0.5 * (xtbl_double[idx] * xtbl_double[idx] - y));
+ f1 = exp(-0.5 * (xtbl_double[idx + 1] * xtbl_double[idx + 1] - y));
+ if (f1 + next_double(bitgen_state) * (f0 - f1) < 1)
+ return u.f = uf64, u.u |= (u64 & 1) << 63, u.f;
}
}
void random_standard_normal_fill(bitgen_t *bitgen_state, npy_intp cnt, double *out) {
@@ -176,38 +171,35 @@ void random_standard_normal_fill(bitgen_t *bitgen_state, npy_intp cnt, double *o
}
}
float random_standard_normal_f(bitgen_t *bitgen_state) {
- uint32_t r;
- int sign;
- uint32_t rabs;
- int idx;
- float x, xx, yy;
- for (;;) {
- /* r = n23sb8 */
- r = next_uint32(bitgen_state);
- idx = r & 0xff;
- sign = (r >> 8) & 0x1;
- rabs = (r >> 9) & 0x0007fffff;
- x = rabs * wi_float[idx];
- if (sign & 0x1)
- x = -x;
- if (rabs < ki_float[idx])
- return x; /* # 99.3% of the time return here */
+ while (1) {
+ float x, y, f0, f1;
+ union { uint32_t u; float f; } u;
+ const uint32_t u32 = next_uint32(bitgen_state);
+ const uint_fast8_t idx = (u32 >> 1) & 0xff;
+ const float uf32 = ((u32 >> 9) * (1.0 / (UINT32_C(1) << 23))) *
+ xtbl_float[idx];
+
+ if (uf32 < xtbl_float[idx + 1])
+ return u.f = uf32, u.u |= (u32 & 1) << 31, u.f;
+
if (idx == 0) {
- for (;;) {
- /* Switch to 1.0 - U to avoid log(0.0), see GH 13361 */
- xx = -ziggurat_nor_inv_r_f * logf(1.0f - next_float(bitgen_state));
- yy = -logf(1.0f - next_float(bitgen_state));
- if (yy + yy > xx * xx)
- return ((rabs >> 8) & 0x1) ? -(ziggurat_nor_r_f + xx)
- : ziggurat_nor_r_f + xx;
- }
- } else {
- if (((fi_float[idx - 1] - fi_float[idx]) * next_float(bitgen_state) +
- fi_float[idx]) < exp(-0.5 * x * x))
- return x;
+ do {
+ x = logf(next_float(bitgen_state)) * 1.0f / ZIGGURAT_NORM_R;
+ y = logf(next_float(bitgen_state));
+ } while (-(y + y) < x * x);
+ if (u32 & 1)
+ return x - (float)ZIGGURAT_NORM_R;
+ else
+ return (float)ZIGGURAT_NORM_R - x;
}
+
+ y = uf32 * uf32;
+ f0 = expf(-0.5f * (xtbl_float[idx] * xtbl_float[idx] - y));
+ f1 = expf(-0.5f * (xtbl_float[idx + 1] * xtbl_float[idx + 1] - y));
+ if (f1 + next_float(bitgen_state) * (f0 - f1) < 1)
+ return u.f = uf32, u.u |= (u32 & 1) << 31, u.f;
}
}
void random_standard_normal_fill_f(bitgen_t *bitgen_state, npy_intp cnt, float *out) {
diff --git a/numpy/random/src/distributions/ziggurat_constants.h b/numpy/random/src/distributions/ziggurat_constants.h
index c254466de..20055c63b 100644
--- a/numpy/random/src/distributions/ziggurat_constants.h
+++ b/numpy/random/src/distributions/ziggurat_constants.h
@@ -1,665 +1,139 @@
-static const uint64_t ki_double[] = {
- 0x000EF33D8025EF6AULL, 0x0000000000000000ULL, 0x000C08BE98FBC6A8ULL,
- 0x000DA354FABD8142ULL, 0x000E51F67EC1EEEAULL, 0x000EB255E9D3F77EULL,
- 0x000EEF4B817ECAB9ULL, 0x000F19470AFA44AAULL, 0x000F37ED61FFCB18ULL,
- 0x000F4F469561255CULL, 0x000F61A5E41BA396ULL, 0x000F707A755396A4ULL,
- 0x000F7CB2EC28449AULL, 0x000F86F10C6357D3ULL, 0x000F8FA6578325DEULL,
- 0x000F9724C74DD0DAULL, 0x000F9DA907DBF509ULL, 0x000FA360F581FA74ULL,
- 0x000FA86FDE5B4BF8ULL, 0x000FACF160D354DCULL, 0x000FB0FB6718B90FULL,
- 0x000FB49F8D5374C6ULL, 0x000FB7EC2366FE77ULL, 0x000FBAECE9A1E50EULL,
- 0x000FBDAB9D040BEDULL, 0x000FC03060FF6C57ULL, 0x000FC2821037A248ULL,
- 0x000FC4A67AE25BD1ULL, 0x000FC6A2977AEE31ULL, 0x000FC87AA92896A4ULL,
- 0x000FCA325E4BDE85ULL, 0x000FCBCCE902231AULL, 0x000FCD4D12F839C4ULL,
- 0x000FCEB54D8FEC99ULL, 0x000FD007BF1DC930ULL, 0x000FD1464DD6C4E6ULL,
- 0x000FD272A8E2F450ULL, 0x000FD38E4FF0C91EULL, 0x000FD49A9990B478ULL,
- 0x000FD598B8920F53ULL, 0x000FD689C08E99ECULL, 0x000FD76EA9C8E832ULL,
- 0x000FD848547B08E8ULL, 0x000FD9178BAD2C8CULL, 0x000FD9DD07A7ADD2ULL,
- 0x000FDA9970105E8CULL, 0x000FDB4D5DC02E20ULL, 0x000FDBF95C5BFCD0ULL,
- 0x000FDC9DEBB99A7DULL, 0x000FDD3B8118729DULL, 0x000FDDD288342F90ULL,
- 0x000FDE6364369F64ULL, 0x000FDEEE708D514EULL, 0x000FDF7401A6B42EULL,
- 0x000FDFF46599ED40ULL, 0x000FE06FE4BC24F2ULL, 0x000FE0E6C225A258ULL,
- 0x000FE1593C28B84CULL, 0x000FE1C78CBC3F99ULL, 0x000FE231E9DB1CAAULL,
- 0x000FE29885DA1B91ULL, 0x000FE2FB8FB54186ULL, 0x000FE35B33558D4AULL,
- 0x000FE3B799D0002AULL, 0x000FE410E99EAD7FULL, 0x000FE46746D47734ULL,
- 0x000FE4BAD34C095CULL, 0x000FE50BAED29524ULL, 0x000FE559F74EBC78ULL,
- 0x000FE5A5C8E41212ULL, 0x000FE5EF3E138689ULL, 0x000FE6366FD91078ULL,
- 0x000FE67B75C6D578ULL, 0x000FE6BE661E11AAULL, 0x000FE6FF55E5F4F2ULL,
- 0x000FE73E5900A702ULL, 0x000FE77B823E9E39ULL, 0x000FE7B6E37070A2ULL,
- 0x000FE7F08D774243ULL, 0x000FE8289053F08CULL, 0x000FE85EFB35173AULL,
- 0x000FE893DC840864ULL, 0x000FE8C741F0CEBCULL, 0x000FE8F9387D4EF6ULL,
- 0x000FE929CC879B1DULL, 0x000FE95909D388EAULL, 0x000FE986FB939AA2ULL,
- 0x000FE9B3AC714866ULL, 0x000FE9DF2694B6D5ULL, 0x000FEA0973ABE67CULL,
- 0x000FEA329CF166A4ULL, 0x000FEA5AAB32952CULL, 0x000FEA81A6D5741AULL,
- 0x000FEAA797DE1CF0ULL, 0x000FEACC85F3D920ULL, 0x000FEAF07865E63CULL,
- 0x000FEB13762FEC13ULL, 0x000FEB3585FE2A4AULL, 0x000FEB56AE3162B4ULL,
- 0x000FEB76F4E284FAULL, 0x000FEB965FE62014ULL, 0x000FEBB4F4CF9D7CULL,
- 0x000FEBD2B8F449D0ULL, 0x000FEBEFB16E2E3EULL, 0x000FEC0BE31EBDE8ULL,
- 0x000FEC2752B15A15ULL, 0x000FEC42049DAFD3ULL, 0x000FEC5BFD29F196ULL,
- 0x000FEC75406CEEF4ULL, 0x000FEC8DD2500CB4ULL, 0x000FECA5B6911F12ULL,
- 0x000FECBCF0C427FEULL, 0x000FECD38454FB15ULL, 0x000FECE97488C8B3ULL,
- 0x000FECFEC47F91B7ULL, 0x000FED1377358528ULL, 0x000FED278F844903ULL,
- 0x000FED3B10242F4CULL, 0x000FED4DFBAD586EULL, 0x000FED605498C3DDULL,
- 0x000FED721D414FE8ULL, 0x000FED8357E4A982ULL, 0x000FED9406A42CC8ULL,
- 0x000FEDA42B85B704ULL, 0x000FEDB3C8746AB4ULL, 0x000FEDC2DF416652ULL,
- 0x000FEDD171A46E52ULL, 0x000FEDDF813C8AD3ULL, 0x000FEDED0F909980ULL,
- 0x000FEDFA1E0FD414ULL, 0x000FEE06AE124BC4ULL, 0x000FEE12C0D95A06ULL,
- 0x000FEE1E579006E0ULL, 0x000FEE29734B6524ULL, 0x000FEE34150AE4BCULL,
- 0x000FEE3E3DB89B3CULL, 0x000FEE47EE2982F4ULL, 0x000FEE51271DB086ULL,
- 0x000FEE59E9407F41ULL, 0x000FEE623528B42EULL, 0x000FEE6A0B5897F1ULL,
- 0x000FEE716C3E077AULL, 0x000FEE7858327B82ULL, 0x000FEE7ECF7B06BAULL,
- 0x000FEE84D2484AB2ULL, 0x000FEE8A60B66343ULL, 0x000FEE8F7ACCC851ULL,
- 0x000FEE94207E25DAULL, 0x000FEE9851A829EAULL, 0x000FEE9C0E13485CULL,
- 0x000FEE9F557273F4ULL, 0x000FEEA22762CCAEULL, 0x000FEEA4836B42ACULL,
- 0x000FEEA668FC2D71ULL, 0x000FEEA7D76ED6FAULL, 0x000FEEA8CE04FA0AULL,
- 0x000FEEA94BE8333BULL, 0x000FEEA950296410ULL, 0x000FEEA8D9C0075EULL,
- 0x000FEEA7E7897654ULL, 0x000FEEA678481D24ULL, 0x000FEEA48AA29E83ULL,
- 0x000FEEA21D22E4DAULL, 0x000FEE9F2E352024ULL, 0x000FEE9BBC26AF2EULL,
- 0x000FEE97C524F2E4ULL, 0x000FEE93473C0A3AULL, 0x000FEE8E40557516ULL,
- 0x000FEE88AE369C7AULL, 0x000FEE828E7F3DFDULL, 0x000FEE7BDEA7B888ULL,
- 0x000FEE749BFF37FFULL, 0x000FEE6CC3A9BD5EULL, 0x000FEE64529E007EULL,
- 0x000FEE5B45A32888ULL, 0x000FEE51994E57B6ULL, 0x000FEE474A0006CFULL,
- 0x000FEE3C53E12C50ULL, 0x000FEE30B2E02AD8ULL, 0x000FEE2462AD8205ULL,
- 0x000FEE175EB83C5AULL, 0x000FEE09A22A1447ULL, 0x000FEDFB27E349CCULL,
- 0x000FEDEBEA76216CULL, 0x000FEDDBE422047EULL, 0x000FEDCB0ECE39D3ULL,
- 0x000FEDB964042CF4ULL, 0x000FEDA6DCE938C9ULL, 0x000FED937237E98DULL,
- 0x000FED7F1C38A836ULL, 0x000FED69D2B9C02BULL, 0x000FED538D06AE00ULL,
- 0x000FED3C41DEA422ULL, 0x000FED23E76A2FD8ULL, 0x000FED0A732FE644ULL,
- 0x000FECEFDA07FE34ULL, 0x000FECD4100EB7B8ULL, 0x000FECB708956EB4ULL,
- 0x000FEC98B61230C1ULL, 0x000FEC790A0DA978ULL, 0x000FEC57F50F31FEULL,
- 0x000FEC356686C962ULL, 0x000FEC114CB4B335ULL, 0x000FEBEB948E6FD0ULL,
- 0x000FEBC429A0B692ULL, 0x000FEB9AF5EE0CDCULL, 0x000FEB6FE1C98542ULL,
- 0x000FEB42D3AD1F9EULL, 0x000FEB13B00B2D4BULL, 0x000FEAE2591A02E9ULL,
- 0x000FEAAEAE992257ULL, 0x000FEA788D8EE326ULL, 0x000FEA3FCFFD73E5ULL,
- 0x000FEA044C8DD9F6ULL, 0x000FE9C5D62F563BULL, 0x000FE9843BA947A4ULL,
- 0x000FE93F471D4728ULL, 0x000FE8F6BD76C5D6ULL, 0x000FE8AA5DC4E8E6ULL,
- 0x000FE859E07AB1EAULL, 0x000FE804F690A940ULL, 0x000FE7AB488233C0ULL,
- 0x000FE74C751F6AA5ULL, 0x000FE6E8102AA202ULL, 0x000FE67DA0B6ABD8ULL,
- 0x000FE60C9F38307EULL, 0x000FE5947338F742ULL, 0x000FE51470977280ULL,
- 0x000FE48BD436F458ULL, 0x000FE3F9BFFD1E37ULL, 0x000FE35D35EEB19CULL,
- 0x000FE2B5122FE4FEULL, 0x000FE20003995557ULL, 0x000FE13C82788314ULL,
- 0x000FE068C4EE67B0ULL, 0x000FDF82B02B71AAULL, 0x000FDE87C57EFEAAULL,
- 0x000FDD7509C63BFDULL, 0x000FDC46E529BF13ULL, 0x000FDAF8F82E0282ULL,
- 0x000FD985E1B2BA75ULL, 0x000FD7E6EF48CF04ULL, 0x000FD613ADBD650BULL,
- 0x000FD40149E2F012ULL, 0x000FD1A1A7B4C7ACULL, 0x000FCEE204761F9EULL,
- 0x000FCBA8D85E11B2ULL, 0x000FC7D26ECD2D22ULL, 0x000FC32B2F1E22EDULL,
- 0x000FBD6581C0B83AULL, 0x000FB606C4005434ULL, 0x000FAC40582A2874ULL,
- 0x000F9E971E014598ULL, 0x000F89FA48A41DFCULL, 0x000F66C5F7F0302CULL,
- 0x000F1A5A4B331C4AULL};
-
-static const double wi_double[] = {
- 8.68362706080130616677e-16, 4.77933017572773682428e-17,
- 6.35435241740526230246e-17, 7.45487048124769627714e-17,
- 8.32936681579309972857e-17, 9.06806040505948228243e-17,
- 9.71486007656776183958e-17, 1.02947503142410192108e-16,
- 1.08234302884476839838e-16, 1.13114701961090307945e-16,
- 1.17663594570229211411e-16, 1.21936172787143633280e-16,
- 1.25974399146370927864e-16, 1.29810998862640315416e-16,
- 1.33472037368241227547e-16, 1.36978648425712032797e-16,
- 1.40348230012423820659e-16, 1.43595294520569430270e-16,
- 1.46732087423644219083e-16, 1.49769046683910367425e-16,
- 1.52715150035961979750e-16, 1.55578181694607639484e-16,
- 1.58364940092908853989e-16, 1.61081401752749279325e-16,
- 1.63732852039698532012e-16, 1.66323990584208352778e-16,
- 1.68859017086765964015e-16, 1.71341701765596607184e-16,
- 1.73775443658648593310e-16, 1.76163319230009959832e-16,
- 1.78508123169767272927e-16, 1.80812402857991522674e-16,
- 1.83078487648267501776e-16, 1.85308513886180189386e-16,
- 1.87504446393738816849e-16, 1.89668097007747596212e-16,
- 1.91801140648386198029e-16, 1.93905129306251037069e-16,
- 1.95981504266288244037e-16, 1.98031606831281739736e-16,
- 2.00056687762733300198e-16, 2.02057915620716538808e-16,
- 2.04036384154802118313e-16, 2.05993118874037063144e-16,
- 2.07929082904140197311e-16, 2.09845182223703516690e-16,
- 2.11742270357603418769e-16, 2.13621152594498681022e-16,
- 2.15482589785814580926e-16, 2.17327301775643674990e-16,
- 2.19155970504272708519e-16, 2.20969242822353175995e-16,
- 2.22767733047895534948e-16, 2.24552025294143552381e-16,
- 2.26322675592856786566e-16, 2.28080213834501706782e-16,
- 2.29825145544246839061e-16, 2.31557953510408037008e-16,
- 2.33279099280043561128e-16, 2.34989024534709550938e-16,
- 2.36688152357916037468e-16, 2.38376888404542434981e-16,
- 2.40055621981350627349e-16, 2.41724727046750252175e-16,
- 2.43384563137110286400e-16, 2.45035476226149539878e-16,
- 2.46677799523270498158e-16, 2.48311854216108767769e-16,
- 2.49937950162045242375e-16, 2.51556386532965786439e-16,
- 2.53167452417135826983e-16, 2.54771427381694417303e-16,
- 2.56368581998939683749e-16, 2.57959178339286723500e-16,
- 2.59543470433517070146e-16, 2.61121704706701939097e-16,
- 2.62694120385972564623e-16, 2.64260949884118951286e-16,
- 2.65822419160830680292e-16, 2.67378748063236329361e-16,
- 2.68930150647261591777e-16, 2.70476835481199518794e-16,
- 2.72019005932773206655e-16, 2.73556860440867908686e-16,
- 2.75090592773016664571e-16, 2.76620392269639032183e-16,
- 2.78146444075954410103e-16, 2.79668929362423005309e-16,
- 2.81188025534502074329e-16, 2.82703906432447923059e-16,
- 2.84216742521840606520e-16, 2.85726701075460149289e-16,
- 2.87233946347097994381e-16, 2.88738639737848191815e-16,
- 2.90240939955384233230e-16, 2.91741003166694553259e-16,
- 2.93238983144718163965e-16, 2.94735031409293489611e-16,
- 2.96229297362806647792e-16, 2.97721928420902891115e-16,
- 2.99213070138601307081e-16, 3.00702866332133102993e-16,
- 3.02191459196806151971e-16, 3.03678989421180184427e-16,
- 3.05165596297821922381e-16, 3.06651417830895451744e-16,
- 3.08136590840829717032e-16, 3.09621251066292253306e-16,
- 3.11105533263689296831e-16, 3.12589571304399892784e-16,
- 3.14073498269944617203e-16, 3.15557446545280064031e-16,
- 3.17041547910402852545e-16, 3.18525933630440648871e-16,
- 3.20010734544401137886e-16, 3.21496081152744704901e-16,
- 3.22982103703941557538e-16, 3.24468932280169778077e-16,
- 3.25956696882307838340e-16, 3.27445527514370671802e-16,
- 3.28935554267536967851e-16, 3.30426907403912838589e-16,
- 3.31919717440175233652e-16, 3.33414115231237245918e-16,
- 3.34910232054077845412e-16, 3.36408199691876507948e-16,
- 3.37908150518594979994e-16, 3.39410217584148914282e-16,
- 3.40914534700312603713e-16, 3.42421236527501816058e-16,
- 3.43930458662583133920e-16, 3.45442337727858401604e-16,
- 3.46957011461378353333e-16, 3.48474618808741370700e-16,
- 3.49995300016538099813e-16, 3.51519196727607440975e-16,
- 3.53046452078274009054e-16, 3.54577210797743572160e-16,
- 3.56111619309838843415e-16, 3.57649825837265051035e-16,
- 3.59191980508602994994e-16, 3.60738235468235137839e-16,
- 3.62288744989419151904e-16, 3.63843665590734438546e-16,
- 3.65403156156136995766e-16, 3.66967378058870090021e-16,
- 3.68536495289491401456e-16, 3.70110674588289834952e-16,
- 3.71690085582382297792e-16, 3.73274900927794352614e-16,
- 3.74865296456848868882e-16, 3.76461451331202869131e-16,
- 3.78063548200896037651e-16, 3.79671773369794425924e-16,
- 3.81286316967837738238e-16, 3.82907373130524317507e-16,
- 3.84535140186095955858e-16, 3.86169820850914927119e-16,
- 3.87811622433558721164e-16, 3.89460757048192620674e-16,
- 3.91117441837820542060e-16, 3.92781899208054153270e-16,
- 3.94454357072087711446e-16, 3.96135049107613542983e-16,
- 3.97824215026468259474e-16, 3.99522100857856502444e-16,
- 4.01228959246062907451e-16, 4.02945049763632792393e-16,
- 4.04670639241074995115e-16, 4.06406002114225038723e-16,
- 4.08151420790493873480e-16, 4.09907186035326643447e-16,
- 4.11673597380302570170e-16, 4.13450963554423599878e-16,
- 4.15239602940268833891e-16, 4.17039844056831587498e-16,
- 4.18852026071011229572e-16, 4.20676499339901510978e-16,
- 4.22513625986204937320e-16, 4.24363780509307796137e-16,
- 4.26227350434779809917e-16, 4.28104737005311666397e-16,
- 4.29996355916383230161e-16, 4.31902638100262944617e-16,
- 4.33824030562279080411e-16, 4.35760997273684900553e-16,
- 4.37714020125858747008e-16, 4.39683599951052137423e-16,
- 4.41670257615420348435e-16, 4.43674535190656726604e-16,
- 4.45696997211204306674e-16, 4.47738232024753387312e-16,
- 4.49798853244554968009e-16, 4.51879501313005876278e-16,
- 4.53980845187003400947e-16, 4.56103584156742206384e-16,
- 4.58248449810956667052e-16, 4.60416208163115281428e-16,
- 4.62607661954784567754e-16, 4.64823653154320737780e-16,
- 4.67065065671263059081e-16, 4.69332828309332890697e-16,
- 4.71627917983835129766e-16, 4.73951363232586715165e-16,
- 4.76304248053313737663e-16, 4.78687716104872284247e-16,
- 4.81102975314741720538e-16, 4.83551302941152515162e-16,
- 4.86034051145081195402e-16, 4.88552653135360343280e-16,
- 4.91108629959526955862e-16, 4.93703598024033454728e-16,
- 4.96339277440398725619e-16, 4.99017501309182245754e-16,
- 5.01740226071808946011e-16, 5.04509543081872748637e-16,
- 5.07327691573354207058e-16, 5.10197073234156184149e-16,
- 5.13120268630678373200e-16, 5.16100055774322824569e-16,
- 5.19139431175769859873e-16, 5.22241633800023428760e-16,
- 5.25410172417759732697e-16, 5.28648856950494511482e-16,
- 5.31961834533840037535e-16, 5.35353631181649688145e-16,
- 5.38829200133405320160e-16, 5.42393978220171234073e-16,
- 5.46053951907478041166e-16, 5.49815735089281410703e-16,
- 5.53686661246787600374e-16, 5.57674893292657647836e-16,
- 5.61789555355541665830e-16, 5.66040892008242216739e-16,
- 5.70440462129138908417e-16, 5.75001376891989523684e-16,
- 5.79738594572459365014e-16, 5.84669289345547900201e-16,
- 5.89813317647789942685e-16, 5.95193814964144415532e-16,
- 6.00837969627190832234e-16, 6.06778040933344851394e-16,
- 6.13052720872528159123e-16, 6.19708989458162555387e-16,
- 6.26804696330128439415e-16, 6.34412240712750598627e-16,
- 6.42623965954805540945e-16, 6.51560331734499356881e-16,
- 6.61382788509766415145e-16, 6.72315046250558662913e-16,
- 6.84680341756425875856e-16, 6.98971833638761995415e-16,
- 7.15999493483066421560e-16, 7.37242430179879890722e-16,
- 7.65893637080557275482e-16, 8.11384933765648418565e-16};
-
-static const double fi_double[] = {
- 1.00000000000000000000e+00, 9.77101701267671596263e-01,
- 9.59879091800106665211e-01, 9.45198953442299649730e-01,
- 9.32060075959230460718e-01, 9.19991505039347012840e-01,
- 9.08726440052130879366e-01, 8.98095921898343418910e-01,
- 8.87984660755833377088e-01, 8.78309655808917399966e-01,
- 8.69008688036857046555e-01, 8.60033621196331532488e-01,
- 8.51346258458677951353e-01, 8.42915653112204177333e-01,
- 8.34716292986883434679e-01, 8.26726833946221373317e-01,
- 8.18929191603702366642e-01, 8.11307874312656274185e-01,
- 8.03849483170964274059e-01, 7.96542330422958966274e-01,
- 7.89376143566024590648e-01, 7.82341832654802504798e-01,
- 7.75431304981187174974e-01, 7.68637315798486264740e-01,
- 7.61953346836795386565e-01, 7.55373506507096115214e-01,
- 7.48892447219156820459e-01, 7.42505296340151055290e-01,
- 7.36207598126862650112e-01, 7.29995264561476231435e-01,
- 7.23864533468630222401e-01, 7.17811932630721960535e-01,
- 7.11834248878248421200e-01, 7.05928501332754310127e-01,
- 7.00091918136511615067e-01, 6.94321916126116711609e-01,
- 6.88616083004671808432e-01, 6.82972161644994857355e-01,
- 6.77388036218773526009e-01, 6.71861719897082099173e-01,
- 6.66391343908750100056e-01, 6.60975147776663107813e-01,
- 6.55611470579697264149e-01, 6.50298743110816701574e-01,
- 6.45035480820822293424e-01, 6.39820277453056585060e-01,
- 6.34651799287623608059e-01, 6.29528779924836690007e-01,
- 6.24450015547026504592e-01, 6.19414360605834324325e-01,
- 6.14420723888913888899e-01, 6.09468064925773433949e-01,
- 6.04555390697467776029e-01, 5.99681752619125263415e-01,
- 5.94846243767987448159e-01, 5.90047996332826008015e-01,
- 5.85286179263371453274e-01, 5.80559996100790898232e-01,
- 5.75868682972353718164e-01, 5.71211506735253227163e-01,
- 5.66587763256164445025e-01, 5.61996775814524340831e-01,
- 5.57437893618765945014e-01, 5.52910490425832290562e-01,
- 5.48413963255265812791e-01, 5.43947731190026262382e-01,
- 5.39511234256952132426e-01, 5.35103932380457614215e-01,
- 5.30725304403662057062e-01, 5.26374847171684479008e-01,
- 5.22052074672321841931e-01, 5.17756517229756352272e-01,
- 5.13487720747326958914e-01, 5.09245245995747941592e-01,
- 5.05028667943468123624e-01, 5.00837575126148681903e-01,
- 4.96671569052489714213e-01, 4.92530263643868537748e-01,
- 4.88413284705458028423e-01, 4.84320269426683325253e-01,
- 4.80250865909046753544e-01, 4.76204732719505863248e-01,
- 4.72181538467730199660e-01, 4.68180961405693596422e-01,
- 4.64202689048174355069e-01, 4.60246417812842867345e-01,
- 4.56311852678716434184e-01, 4.52398706861848520777e-01,
- 4.48506701507203064949e-01, 4.44635565395739396077e-01,
- 4.40785034665803987508e-01, 4.36954852547985550526e-01,
- 4.33144769112652261445e-01, 4.29354541029441427735e-01,
- 4.25583931338021970170e-01, 4.21832709229495894654e-01,
- 4.18100649837848226120e-01, 4.14387534040891125642e-01,
- 4.10693148270188157500e-01, 4.07017284329473372217e-01,
- 4.03359739221114510510e-01, 3.99720314980197222177e-01,
- 3.96098818515832451492e-01, 3.92495061459315619512e-01,
- 3.88908860018788715696e-01, 3.85340034840077283462e-01,
- 3.81788410873393657674e-01, 3.78253817245619183840e-01,
- 3.74736087137891138443e-01, 3.71235057668239498696e-01,
- 3.67750569779032587814e-01, 3.64282468129004055601e-01,
- 3.60830600989648031529e-01, 3.57394820145780500731e-01,
- 3.53974980800076777232e-01, 3.50570941481406106455e-01,
- 3.47182563956793643900e-01, 3.43809713146850715049e-01,
- 3.40452257044521866547e-01, 3.37110066637006045021e-01,
- 3.33783015830718454708e-01, 3.30470981379163586400e-01,
- 3.27173842813601400970e-01, 3.23891482376391093290e-01,
- 3.20623784956905355514e-01, 3.17370638029913609834e-01,
- 3.14131931596337177215e-01, 3.10907558126286509559e-01,
- 3.07697412504292056035e-01, 3.04501391976649993243e-01,
- 3.01319396100803049698e-01, 2.98151326696685481377e-01,
- 2.94997087799961810184e-01, 2.91856585617095209972e-01,
- 2.88729728482182923521e-01, 2.85616426815501756042e-01,
- 2.82516593083707578948e-01, 2.79430141761637940157e-01,
- 2.76356989295668320494e-01, 2.73297054068577072172e-01,
- 2.70250256365875463072e-01, 2.67216518343561471038e-01,
- 2.64195763997261190426e-01, 2.61187919132721213522e-01,
- 2.58192911337619235290e-01, 2.55210669954661961700e-01,
- 2.52241126055942177508e-01, 2.49284212418528522415e-01,
- 2.46339863501263828249e-01, 2.43408015422750312329e-01,
- 2.40488605940500588254e-01, 2.37581574431238090606e-01,
- 2.34686861872330010392e-01, 2.31804410824338724684e-01,
- 2.28934165414680340644e-01, 2.26076071322380278694e-01,
- 2.23230075763917484855e-01, 2.20396127480151998723e-01,
- 2.17574176724331130872e-01, 2.14764175251173583536e-01,
- 2.11966076307030182324e-01, 2.09179834621125076977e-01,
- 2.06405406397880797353e-01, 2.03642749310334908452e-01,
- 2.00891822494656591136e-01, 1.98152586545775138971e-01,
- 1.95425003514134304483e-01, 1.92709036903589175926e-01,
- 1.90004651670464985713e-01, 1.87311814223800304768e-01,
- 1.84630492426799269756e-01, 1.81960655599522513892e-01,
- 1.79302274522847582272e-01, 1.76655321443734858455e-01,
- 1.74019770081838553999e-01, 1.71395595637505754327e-01,
- 1.68782774801211288285e-01, 1.66181285764481906364e-01,
- 1.63591108232365584074e-01, 1.61012223437511009516e-01,
- 1.58444614155924284882e-01, 1.55888264724479197465e-01,
- 1.53343161060262855866e-01, 1.50809290681845675763e-01,
- 1.48286642732574552861e-01, 1.45775208005994028060e-01,
- 1.43274978973513461566e-01, 1.40785949814444699690e-01,
- 1.38308116448550733057e-01, 1.35841476571253755301e-01,
- 1.33386029691669155683e-01, 1.30941777173644358090e-01,
- 1.28508722279999570981e-01, 1.26086870220185887081e-01,
- 1.23676228201596571932e-01, 1.21276805484790306533e-01,
- 1.18888613442910059947e-01, 1.16511665625610869035e-01,
- 1.14145977827838487895e-01, 1.11791568163838089811e-01,
- 1.09448457146811797824e-01, 1.07116667774683801961e-01,
- 1.04796225622487068629e-01, 1.02487158941935246892e-01,
- 1.00189498768810017482e-01, 9.79032790388624646338e-02,
- 9.56285367130089991594e-02, 9.33653119126910124859e-02,
- 9.11136480663737591268e-02, 8.88735920682758862021e-02,
- 8.66451944505580717859e-02, 8.44285095703534715916e-02,
- 8.22235958132029043366e-02, 8.00305158146630696292e-02,
- 7.78493367020961224423e-02, 7.56801303589271778804e-02,
- 7.35229737139813238622e-02, 7.13779490588904025339e-02,
- 6.92451443970067553879e-02, 6.71246538277884968737e-02,
- 6.50165779712428976156e-02, 6.29210244377581412456e-02,
- 6.08381083495398780614e-02, 5.87679529209337372930e-02,
- 5.67106901062029017391e-02, 5.46664613248889208474e-02,
- 5.26354182767921896513e-02, 5.06177238609477817000e-02,
- 4.86135532158685421122e-02, 4.66230949019303814174e-02,
- 4.46465522512944634759e-02, 4.26841449164744590750e-02,
- 4.07361106559409394401e-02, 3.88027074045261474722e-02,
- 3.68842156885673053135e-02, 3.49809414617161251737e-02,
- 3.30932194585785779961e-02, 3.12214171919203004046e-02,
- 2.93659397581333588001e-02, 2.75272356696031131329e-02,
- 2.57058040085489103443e-02, 2.39022033057958785407e-02,
- 2.21170627073088502113e-02, 2.03510962300445102935e-02,
- 1.86051212757246224594e-02, 1.68800831525431419000e-02,
- 1.51770883079353092332e-02, 1.34974506017398673818e-02,
- 1.18427578579078790488e-02, 1.02149714397014590439e-02,
- 8.61658276939872638800e-03, 7.05087547137322242369e-03,
- 5.52240329925099155545e-03, 4.03797259336302356153e-03,
- 2.60907274610215926189e-03, 1.26028593049859797236e-03};
-
-static const uint32_t ki_float[] = {
- 0x007799ECUL, 0x00000000UL, 0x006045F5UL, 0x006D1AA8UL, 0x00728FB4UL,
- 0x007592AFUL, 0x00777A5CUL, 0x0078CA38UL, 0x0079BF6BUL, 0x007A7A35UL,
- 0x007B0D2FUL, 0x007B83D4UL, 0x007BE597UL, 0x007C3788UL, 0x007C7D33UL,
- 0x007CB926UL, 0x007CED48UL, 0x007D1B08UL, 0x007D437FUL, 0x007D678BUL,
- 0x007D87DBUL, 0x007DA4FCUL, 0x007DBF61UL, 0x007DD767UL, 0x007DED5DUL,
- 0x007E0183UL, 0x007E1411UL, 0x007E2534UL, 0x007E3515UL, 0x007E43D5UL,
- 0x007E5193UL, 0x007E5E67UL, 0x007E6A69UL, 0x007E75AAUL, 0x007E803EUL,
- 0x007E8A32UL, 0x007E9395UL, 0x007E9C72UL, 0x007EA4D5UL, 0x007EACC6UL,
- 0x007EB44EUL, 0x007EBB75UL, 0x007EC243UL, 0x007EC8BCUL, 0x007ECEE8UL,
- 0x007ED4CCUL, 0x007EDA6BUL, 0x007EDFCBUL, 0x007EE4EFUL, 0x007EE9DCUL,
- 0x007EEE94UL, 0x007EF31BUL, 0x007EF774UL, 0x007EFBA0UL, 0x007EFFA3UL,
- 0x007F037FUL, 0x007F0736UL, 0x007F0ACAUL, 0x007F0E3CUL, 0x007F118FUL,
- 0x007F14C4UL, 0x007F17DCUL, 0x007F1ADAUL, 0x007F1DBDUL, 0x007F2087UL,
- 0x007F233AUL, 0x007F25D7UL, 0x007F285DUL, 0x007F2AD0UL, 0x007F2D2EUL,
- 0x007F2F7AUL, 0x007F31B3UL, 0x007F33DCUL, 0x007F35F3UL, 0x007F37FBUL,
- 0x007F39F3UL, 0x007F3BDCUL, 0x007F3DB7UL, 0x007F3F84UL, 0x007F4145UL,
- 0x007F42F8UL, 0x007F449FUL, 0x007F463AUL, 0x007F47CAUL, 0x007F494EUL,
- 0x007F4AC8UL, 0x007F4C38UL, 0x007F4D9DUL, 0x007F4EF9UL, 0x007F504CUL,
- 0x007F5195UL, 0x007F52D5UL, 0x007F540DUL, 0x007F553DUL, 0x007F5664UL,
- 0x007F5784UL, 0x007F589CUL, 0x007F59ACUL, 0x007F5AB5UL, 0x007F5BB8UL,
- 0x007F5CB3UL, 0x007F5DA8UL, 0x007F5E96UL, 0x007F5F7EUL, 0x007F605FUL,
- 0x007F613BUL, 0x007F6210UL, 0x007F62E0UL, 0x007F63AAUL, 0x007F646FUL,
- 0x007F652EUL, 0x007F65E8UL, 0x007F669CUL, 0x007F674CUL, 0x007F67F6UL,
- 0x007F689CUL, 0x007F693CUL, 0x007F69D9UL, 0x007F6A70UL, 0x007F6B03UL,
- 0x007F6B91UL, 0x007F6C1BUL, 0x007F6CA0UL, 0x007F6D21UL, 0x007F6D9EUL,
- 0x007F6E17UL, 0x007F6E8CUL, 0x007F6EFCUL, 0x007F6F68UL, 0x007F6FD1UL,
- 0x007F7035UL, 0x007F7096UL, 0x007F70F3UL, 0x007F714CUL, 0x007F71A1UL,
- 0x007F71F2UL, 0x007F723FUL, 0x007F7289UL, 0x007F72CFUL, 0x007F7312UL,
- 0x007F7350UL, 0x007F738BUL, 0x007F73C3UL, 0x007F73F6UL, 0x007F7427UL,
- 0x007F7453UL, 0x007F747CUL, 0x007F74A1UL, 0x007F74C3UL, 0x007F74E0UL,
- 0x007F74FBUL, 0x007F7511UL, 0x007F7524UL, 0x007F7533UL, 0x007F753FUL,
- 0x007F7546UL, 0x007F754AUL, 0x007F754BUL, 0x007F7547UL, 0x007F753FUL,
- 0x007F7534UL, 0x007F7524UL, 0x007F7511UL, 0x007F74F9UL, 0x007F74DEUL,
- 0x007F74BEUL, 0x007F749AUL, 0x007F7472UL, 0x007F7445UL, 0x007F7414UL,
- 0x007F73DFUL, 0x007F73A5UL, 0x007F7366UL, 0x007F7323UL, 0x007F72DAUL,
- 0x007F728DUL, 0x007F723AUL, 0x007F71E3UL, 0x007F7186UL, 0x007F7123UL,
- 0x007F70BBUL, 0x007F704DUL, 0x007F6FD9UL, 0x007F6F5FUL, 0x007F6EDFUL,
- 0x007F6E58UL, 0x007F6DCBUL, 0x007F6D37UL, 0x007F6C9CUL, 0x007F6BF9UL,
- 0x007F6B4FUL, 0x007F6A9CUL, 0x007F69E2UL, 0x007F691FUL, 0x007F6854UL,
- 0x007F677FUL, 0x007F66A1UL, 0x007F65B8UL, 0x007F64C6UL, 0x007F63C8UL,
- 0x007F62C0UL, 0x007F61ABUL, 0x007F608AUL, 0x007F5F5DUL, 0x007F5E21UL,
- 0x007F5CD8UL, 0x007F5B7FUL, 0x007F5A17UL, 0x007F589EUL, 0x007F5713UL,
- 0x007F5575UL, 0x007F53C4UL, 0x007F51FEUL, 0x007F5022UL, 0x007F4E2FUL,
- 0x007F4C22UL, 0x007F49FAUL, 0x007F47B6UL, 0x007F4553UL, 0x007F42CFUL,
- 0x007F4028UL, 0x007F3D5AUL, 0x007F3A64UL, 0x007F3741UL, 0x007F33EDUL,
- 0x007F3065UL, 0x007F2CA4UL, 0x007F28A4UL, 0x007F245FUL, 0x007F1FCEUL,
- 0x007F1AEAUL, 0x007F15A9UL, 0x007F1000UL, 0x007F09E4UL, 0x007F0346UL,
- 0x007EFC16UL, 0x007EF43EUL, 0x007EEBA8UL, 0x007EE237UL, 0x007ED7C8UL,
- 0x007ECC2FUL, 0x007EBF37UL, 0x007EB09DUL, 0x007EA00AUL, 0x007E8D0DUL,
- 0x007E7710UL, 0x007E5D47UL, 0x007E3E93UL, 0x007E1959UL, 0x007DEB2CUL,
- 0x007DB036UL, 0x007D6203UL, 0x007CF4B9UL, 0x007C4FD2UL, 0x007B3630UL,
- 0x0078D2D2UL};
-
-static const float wi_float[] = {
- 4.66198677960027669255e-07f, 2.56588335019207033255e-08f,
- 3.41146697750176784592e-08f, 4.00230311410932959821e-08f,
- 4.47179475877737745459e-08f, 4.86837785973537366722e-08f,
- 5.21562578925932412861e-08f, 5.52695199001886257153e-08f,
- 5.81078488992733116465e-08f, 6.07279932024587421409e-08f,
- 6.31701613261172047795e-08f, 6.54639842900233842742e-08f,
- 6.76319905583641815324e-08f, 6.96917493470166688656e-08f,
- 7.16572544283857476692e-08f, 7.35398519048393832969e-08f,
- 7.53488822443557479279e-08f, 7.70921367281667127885e-08f,
- 7.87761895947956022626e-08f, 8.04066446825615346857e-08f,
- 8.19883218760237408659e-08f, 8.35254002936857088917e-08f,
- 8.50215298165053411740e-08f, 8.64799190652369040985e-08f,
- 8.79034055989140110861e-08f, 8.92945125124233511541e-08f,
- 9.06554945027956262312e-08f, 9.19883756905278607229e-08f,
- 9.32949809202232869780e-08f, 9.45769618559625849039e-08f,
- 9.58358188855612866442e-08f, 9.70729196232813152662e-08f,
- 9.82895146313061088986e-08f, 9.94867508514382224721e-08f,
- 1.00665683139461669691e-07f, 1.01827284217853923044e-07f,
- 1.02972453302539369464e-07f, 1.04102023612124921572e-07f,
- 1.05216768930574060431e-07f, 1.06317409364335657741e-07f,
- 1.07404616410877866490e-07f, 1.08479017436113134283e-07f,
- 1.09541199642370962438e-07f, 1.10591713595628691212e-07f,
- 1.11631076370069356306e-07f, 1.12659774359245895023e-07f,
- 1.13678265795837113569e-07f, 1.14686983015899673063e-07f,
- 1.15686334498432158725e-07f, 1.16676706706789039179e-07f,
- 1.17658465754873988919e-07f, 1.18631958917986203582e-07f,
- 1.19597516005596215528e-07f, 1.20555450611113917226e-07f,
- 1.21506061251817163689e-07f, 1.22449632410483948386e-07f,
- 1.23386435488872536840e-07f, 1.24316729681986364321e-07f,
- 1.25240762781015530062e-07f, 1.26158771911939892267e-07f,
- 1.27070984215989333455e-07f, 1.27977617477468922011e-07f,
- 1.28878880703854958297e-07f, 1.29774974662539874521e-07f,
- 1.30666092378141980504e-07f, 1.31552419593887221722e-07f,
- 1.32434135200211397569e-07f, 1.33311411633413359243e-07f,
- 1.34184415246907777059e-07f, 1.35053306657377859830e-07f,
- 1.35918241067904315860e-07f, 1.36779368569952053923e-07f,
- 1.37636834425917531047e-07f, 1.38490779333783508675e-07f,
- 1.39341339675287344817e-07f, 1.40188647748881762555e-07f,
- 1.41032831988654882776e-07f, 1.41874017170273235693e-07f,
- 1.42712324604921442006e-07f, 1.43547872322127921816e-07f,
- 1.44380775242292721080e-07f, 1.45211145339665544509e-07f,
- 1.46039091796461362146e-07f, 1.46864721148745476208e-07f,
- 1.47688137424670065700e-07f, 1.48509442275598857119e-07f,
- 1.49328735100614641423e-07f, 1.50146113164867617390e-07f,
- 1.50961671712187416111e-07f, 1.51775504072350982845e-07f,
- 1.52587701763369746341e-07f, 1.53398354589133671168e-07f,
- 1.54207550732725568797e-07f, 1.55015376845697999657e-07f,
- 1.55821918133584372604e-07f, 1.56627258437898192833e-07f,
- 1.57431480314857468671e-07f, 1.58234665111056041043e-07f,
- 1.59036893036289199880e-07f, 1.59838243233728855017e-07f,
- 1.60638793847630850137e-07f, 1.61438622088746393909e-07f,
- 1.62237804297600106296e-07f, 1.63036416005787357730e-07f,
- 1.63834531995435479082e-07f, 1.64632226356965902954e-07f,
- 1.65429572545287097020e-07f, 1.66226643434541294491e-07f,
- 1.67023511371523209274e-07f, 1.67820248227882200051e-07f,
- 1.68616925451215588827e-07f, 1.69413614115155757272e-07f,
- 1.70210384968549673733e-07f, 1.71007308483826142122e-07f,
- 1.71804454904642543391e-07f, 1.72601894292900061024e-07f,
- 1.73399696575213681990e-07f, 1.74197931588920988271e-07f,
- 1.74996669127712165834e-07f, 1.75795978986961275677e-07f,
- 1.76595931008838063924e-07f, 1.77396595127278238022e-07f,
- 1.78198041412889183130e-07f, 1.79000340117867431104e-07f,
- 1.79803561721004406185e-07f, 1.80607776972855859813e-07f,
- 1.81413056941151359868e-07f, 1.82219473056520464354e-07f,
- 1.83027097158612474240e-07f, 1.83836001542687613069e-07f,
- 1.84646259006759307383e-07f, 1.85457942899367347876e-07f,
- 1.86271127168064649331e-07f, 1.87085886408701333260e-07f,
- 1.87902295915592424729e-07f, 1.88720431732658022414e-07f,
- 1.89540370705627262627e-07f, 1.90362190535400839128e-07f,
- 1.91185969832669990437e-07f, 1.92011788173893651535e-07f,
- 1.92839726158739913768e-07f, 1.93669865469102145482e-07f,
- 1.94502288929804890433e-07f, 1.95337080571120616772e-07f,
- 1.96174325693223683314e-07f, 1.97014110932714374919e-07f,
- 1.97856524331352952716e-07f, 1.98701655407150388211e-07f,
- 1.99549595227971635348e-07f, 2.00400436487814600236e-07f,
- 2.01254273585938820883e-07f, 2.02111202709026498408e-07f,
- 2.02971321916571014951e-07f, 2.03834731229698846698e-07f,
- 2.04701532723644121196e-07f, 2.05571830624108885378e-07f,
- 2.06445731407757185541e-07f, 2.07323343907107312957e-07f,
- 2.08204779420104330037e-07f, 2.09090151824673600213e-07f,
- 2.09979577698577670508e-07f, 2.10873176444920111011e-07f,
- 2.11771070423665379388e-07f, 2.12673385089569268965e-07f,
- 2.13580249136944118603e-07f, 2.14491794651713402832e-07f,
- 2.15408157271244625533e-07f, 2.16329476352486921685e-07f,
- 2.17255895148978920488e-07f, 2.18187560997337924713e-07f,
- 2.19124625513888206785e-07f, 2.20067244802139479285e-07f,
- 2.21015579671883851683e-07f, 2.21969795870742159701e-07f,
- 2.22930064329060010376e-07f, 2.23896561419128954210e-07f,
- 2.24869469229791575583e-07f, 2.25848975857580322189e-07f,
- 2.26835275715640744118e-07f, 2.27828569861799901001e-07f,
- 2.28829066347263833069e-07f, 2.29836980587561823183e-07f,
- 2.30852535757505260518e-07f, 2.31875963212094114516e-07f,
- 2.32907502935486642699e-07f, 2.33947404020352726160e-07f,
- 2.34995925180156140289e-07f, 2.36053335297164516378e-07f,
- 2.37119914009265667728e-07f, 2.38195952338983970691e-07f,
- 2.39281753368440712742e-07f, 2.40377632964396957621e-07f,
- 2.41483920557958384709e-07f, 2.42600959984018662258e-07f,
- 2.43729110386077326413e-07f, 2.44868747192698939290e-07f,
- 2.46020263172594533433e-07f, 2.47184069576113545901e-07f,
- 2.48360597371852893654e-07f, 2.49550298588131851232e-07f,
- 2.50753647770270890721e-07f, 2.51971143565970967140e-07f,
- 2.53203310452642767375e-07f, 2.54450700622322097890e-07f,
- 2.55713896041856770961e-07f, 2.56993510708419870887e-07f,
- 2.58290193123138874550e-07f, 2.59604629008804833146e-07f,
- 2.60937544301314385690e-07f, 2.62289708448800566945e-07f,
- 2.63661938057441759882e-07f, 2.65055100928844238758e-07f,
- 2.66470120540847889467e-07f, 2.67907981031821866252e-07f,
- 2.69369732758258246335e-07f, 2.70856498507068313229e-07f,
- 2.72369480457841388042e-07f, 2.73909968006952220135e-07f,
- 2.75479346585437289399e-07f, 2.77079107626811561009e-07f,
- 2.78710859870496796972e-07f, 2.80376342222588603820e-07f,
- 2.82077438439999912690e-07f, 2.83816193958769527230e-07f,
- 2.85594835255375795814e-07f, 2.87415792215003905739e-07f,
- 2.89281724087851835900e-07f, 2.91195549750371467233e-07f,
- 2.93160483161771875581e-07f, 2.95180075129332912389e-07f,
- 2.97258262785797916083e-07f, 2.99399428561531794298e-07f,
- 3.01608470935804138388e-07f, 3.03890889921758510417e-07f,
- 3.06252891144972267537e-07f, 3.08701513613258141075e-07f,
- 3.11244787989714509378e-07f, 3.13891934589336184321e-07f,
- 3.16653613755314681314e-07f, 3.19542246256559459667e-07f,
- 3.22572428717978242099e-07f, 3.25761480217458181578e-07f,
- 3.29130173358915628534e-07f, 3.32703730345002116955e-07f,
- 3.36513208964639108346e-07f, 3.40597478255417943913e-07f,
- 3.45006114675213401550e-07f, 3.49803789521323211592e-07f,
- 3.55077180848341416206e-07f, 3.60946392031859609868e-07f,
- 3.67584959507244041831e-07f, 3.75257645787954431030e-07f,
- 3.84399301057791926300e-07f, 3.95804015855768440983e-07f,
- 4.11186015434435801956e-07f, 4.35608969373823260746e-07f};
+static double xtbl_double[257] = {
+ 3.910757959524894, 3.654152885361007, 3.449278298561430, 3.320244733839825,
+ 3.224575052047801, 3.147889289518000, 3.083526132002143, 3.027837791769593,
+ 2.978603279881843, 2.934366867208887, 2.894121053613412, 2.857138730873224,
+ 2.822877396826442, 2.790921174001927, 2.760944005279986, 2.732685359044011,
+ 2.705933656123062, 2.680514643285745, 2.656283037576743, 2.633116393631582,
+ 2.610910518488823, 2.589575986708286, 2.569035452681844, 2.549221550324783,
+ 2.530075232159854, 2.511544441626694, 2.493583041271046, 2.476149939670523,
+ 2.459208374334705, 2.442725318200364, 2.426670984937146, 2.411018413901119,
+ 2.395743119781927, 2.380822795172085, 2.366237056717290, 2.351967227379144,
+ 2.337996148796528, 2.324308018871132, 2.310888250601371, 2.297723348902863,
+ 2.284800802724491, 2.272108990228381, 2.259637095173787, 2.247375032947389,
+ 2.235313384929920, 2.223443340092510, 2.211756642884160, 2.200245546611276,
+ 2.188902771626360, 2.177721467740293, 2.166695180354308, 2.155817819876737,
+ 2.145083634047889, 2.134487182846017, 2.124023315689524, 2.113687150686653,
+ 2.103474055714877, 2.093379631138792, 2.083399693998305, 2.073530263518743,
+ 2.063767547811732, 2.054107931650652, 2.044547965217531, 2.035084353729619,
+ 2.025713947863854, 2.016433734906204, 2.007240830560529, 1.998132471358420,
+ 1.989106007617438, 1.980158896900477, 1.971288697933659, 1.962493064944363,
+ 1.953769742384647, 1.945116560008678, 1.936531428275694, 1.928012334052666,
+ 1.919557336593188, 1.911164563771253, 1.902832208550429, 1.894558525670704,
+ 1.886341828536783, 1.878180486292996, 1.870072921071267, 1.862017605399674,
+ 1.854013059760202, 1.846057850285185, 1.838150586582807, 1.830289919682757,
+ 1.822474540093886, 1.814703175966282, 1.806974591350821, 1.799287584549720,
+ 1.791640986552162, 1.784033659549441, 1.776464495524523, 1.768932414911268,
+ 1.761436365318910, 1.753975320317672, 1.746548278281722, 1.739154261285912,
+ 1.731792314052963, 1.724461502948045, 1.717160915017823, 1.709889657071302,
+ 1.702646854799923, 1.695431651934562, 1.688243209437196, 1.681080704725174,
+ 1.673943330926125, 1.666830296161666, 1.659740822858183, 1.652674147083056,
+ 1.645629517904782, 1.638606196775548, 1.631603456934874, 1.624620582833035,
+ 1.617656869573016, 1.610711622369830, 1.603784156026095, 1.596873794422788,
+ 1.589979870024191, 1.583101723396029, 1.576238702735906, 1.569390163415124,
+ 1.562555467531045, 1.555733983469176, 1.548925085474173, 1.542128153229002,
+ 1.535342571441514, 1.528567729437712, 1.521803020760998, 1.515047842776714,
+ 1.508301596281311, 1.501563685115464, 1.494833515780494, 1.488110497057447,
+ 1.481394039628187, 1.474683555697855, 1.467978458618079, 1.461278162510275,
+ 1.454582081888410, 1.447889631280576, 1.441200224848724, 1.434513276005892,
+ 1.427828197030256, 1.421144398675309, 1.414461289775471, 1.407778276846399,
+ 1.401094763679251, 1.394410150928141, 1.387723835689976, 1.381035211075855,
+ 1.374343665773166, 1.367648583597476, 1.360949343033283, 1.354245316762635,
+ 1.347535871180587, 1.340820365896404, 1.334098153219360, 1.327368577627926,
+ 1.320630975221056, 1.313884673150220, 1.307128989030731, 1.300363230330837,
+ 1.293586693736948, 1.286798664493243, 1.279998415713818, 1.273185207665356,
+ 1.266358287018229, 1.259516886063714, 1.252660221894897, 1.245787495548627,
+ 1.238897891105687, 1.231990574746136, 1.225064693756531, 1.218119375485481,
+ 1.211153726243699, 1.204166830144381, 1.197157747879441, 1.190125515426692,
+ 1.183069142682686, 1.175987612015452, 1.168879876730833, 1.161744859445611,
+ 1.154581450359927, 1.147388505420849, 1.140164844368151, 1.132909248652534,
+ 1.125620459215533, 1.118297174119345, 1.110938046013576, 1.103541679424640,
+ 1.096106627852021, 1.088631390653980, 1.081114409703404, 1.073554065792436,
+ 1.065948674762123, 1.058296483330675, 1.050595664590930, 1.042844313144149,
+ 1.035040439833441, 1.027181966035646, 1.019266717465484, 1.011292417439996,
+ 1.003256679544673, 0.995156999635091, 0.986990747099063, 0.978755155294225,
+ 0.970447311064225, 0.962064143223041, 0.953602409881086, 0.945058684468166,
+ 0.936429340286575, 0.927710533402000, 0.918898183649591, 0.909987953496719,
+ 0.900975224461222, 0.891855070732942, 0.882622229585166, 0.873271068088861,
+ 0.863795545553309, 0.854189171008164, 0.844444954909154, 0.834555354086382,
+ 0.824512208752292, 0.814306670135216, 0.803929116989971, 0.793369058840624,
+ 0.782615023307233, 0.771654424224568, 0.760473406430108, 0.749056662017816,
+ 0.737387211434296, 0.725446140910000, 0.713212285190976, 0.700661841106816,
+ 0.687767892795789, 0.674499822837294, 0.660822574244420, 0.646695714894994,
+ 0.632072236386062, 0.616896990007752, 0.601104617755993, 0.584616766106380,
+ 0.567338257053820, 0.549151702327166, 0.529909720661559, 0.509423329602093,
+ 0.487443966139237, 0.463634336790883, 0.437518402207873, 0.408389134611992,
+ 0.375121332878382, 0.335737519214427, 0.286174591792075, 0.215241895984885,
+ 0.000000000000000
+};
-static const float fi_float[] = {
- 1.00000000000000000000e+00f, 9.77101701267671596263e-01f,
- 9.59879091800106665211e-01f, 9.45198953442299649730e-01f,
- 9.32060075959230460718e-01f, 9.19991505039347012840e-01f,
- 9.08726440052130879366e-01f, 8.98095921898343418910e-01f,
- 8.87984660755833377088e-01f, 8.78309655808917399966e-01f,
- 8.69008688036857046555e-01f, 8.60033621196331532488e-01f,
- 8.51346258458677951353e-01f, 8.42915653112204177333e-01f,
- 8.34716292986883434679e-01f, 8.26726833946221373317e-01f,
- 8.18929191603702366642e-01f, 8.11307874312656274185e-01f,
- 8.03849483170964274059e-01f, 7.96542330422958966274e-01f,
- 7.89376143566024590648e-01f, 7.82341832654802504798e-01f,
- 7.75431304981187174974e-01f, 7.68637315798486264740e-01f,
- 7.61953346836795386565e-01f, 7.55373506507096115214e-01f,
- 7.48892447219156820459e-01f, 7.42505296340151055290e-01f,
- 7.36207598126862650112e-01f, 7.29995264561476231435e-01f,
- 7.23864533468630222401e-01f, 7.17811932630721960535e-01f,
- 7.11834248878248421200e-01f, 7.05928501332754310127e-01f,
- 7.00091918136511615067e-01f, 6.94321916126116711609e-01f,
- 6.88616083004671808432e-01f, 6.82972161644994857355e-01f,
- 6.77388036218773526009e-01f, 6.71861719897082099173e-01f,
- 6.66391343908750100056e-01f, 6.60975147776663107813e-01f,
- 6.55611470579697264149e-01f, 6.50298743110816701574e-01f,
- 6.45035480820822293424e-01f, 6.39820277453056585060e-01f,
- 6.34651799287623608059e-01f, 6.29528779924836690007e-01f,
- 6.24450015547026504592e-01f, 6.19414360605834324325e-01f,
- 6.14420723888913888899e-01f, 6.09468064925773433949e-01f,
- 6.04555390697467776029e-01f, 5.99681752619125263415e-01f,
- 5.94846243767987448159e-01f, 5.90047996332826008015e-01f,
- 5.85286179263371453274e-01f, 5.80559996100790898232e-01f,
- 5.75868682972353718164e-01f, 5.71211506735253227163e-01f,
- 5.66587763256164445025e-01f, 5.61996775814524340831e-01f,
- 5.57437893618765945014e-01f, 5.52910490425832290562e-01f,
- 5.48413963255265812791e-01f, 5.43947731190026262382e-01f,
- 5.39511234256952132426e-01f, 5.35103932380457614215e-01f,
- 5.30725304403662057062e-01f, 5.26374847171684479008e-01f,
- 5.22052074672321841931e-01f, 5.17756517229756352272e-01f,
- 5.13487720747326958914e-01f, 5.09245245995747941592e-01f,
- 5.05028667943468123624e-01f, 5.00837575126148681903e-01f,
- 4.96671569052489714213e-01f, 4.92530263643868537748e-01f,
- 4.88413284705458028423e-01f, 4.84320269426683325253e-01f,
- 4.80250865909046753544e-01f, 4.76204732719505863248e-01f,
- 4.72181538467730199660e-01f, 4.68180961405693596422e-01f,
- 4.64202689048174355069e-01f, 4.60246417812842867345e-01f,
- 4.56311852678716434184e-01f, 4.52398706861848520777e-01f,
- 4.48506701507203064949e-01f, 4.44635565395739396077e-01f,
- 4.40785034665803987508e-01f, 4.36954852547985550526e-01f,
- 4.33144769112652261445e-01f, 4.29354541029441427735e-01f,
- 4.25583931338021970170e-01f, 4.21832709229495894654e-01f,
- 4.18100649837848226120e-01f, 4.14387534040891125642e-01f,
- 4.10693148270188157500e-01f, 4.07017284329473372217e-01f,
- 4.03359739221114510510e-01f, 3.99720314980197222177e-01f,
- 3.96098818515832451492e-01f, 3.92495061459315619512e-01f,
- 3.88908860018788715696e-01f, 3.85340034840077283462e-01f,
- 3.81788410873393657674e-01f, 3.78253817245619183840e-01f,
- 3.74736087137891138443e-01f, 3.71235057668239498696e-01f,
- 3.67750569779032587814e-01f, 3.64282468129004055601e-01f,
- 3.60830600989648031529e-01f, 3.57394820145780500731e-01f,
- 3.53974980800076777232e-01f, 3.50570941481406106455e-01f,
- 3.47182563956793643900e-01f, 3.43809713146850715049e-01f,
- 3.40452257044521866547e-01f, 3.37110066637006045021e-01f,
- 3.33783015830718454708e-01f, 3.30470981379163586400e-01f,
- 3.27173842813601400970e-01f, 3.23891482376391093290e-01f,
- 3.20623784956905355514e-01f, 3.17370638029913609834e-01f,
- 3.14131931596337177215e-01f, 3.10907558126286509559e-01f,
- 3.07697412504292056035e-01f, 3.04501391976649993243e-01f,
- 3.01319396100803049698e-01f, 2.98151326696685481377e-01f,
- 2.94997087799961810184e-01f, 2.91856585617095209972e-01f,
- 2.88729728482182923521e-01f, 2.85616426815501756042e-01f,
- 2.82516593083707578948e-01f, 2.79430141761637940157e-01f,
- 2.76356989295668320494e-01f, 2.73297054068577072172e-01f,
- 2.70250256365875463072e-01f, 2.67216518343561471038e-01f,
- 2.64195763997261190426e-01f, 2.61187919132721213522e-01f,
- 2.58192911337619235290e-01f, 2.55210669954661961700e-01f,
- 2.52241126055942177508e-01f, 2.49284212418528522415e-01f,
- 2.46339863501263828249e-01f, 2.43408015422750312329e-01f,
- 2.40488605940500588254e-01f, 2.37581574431238090606e-01f,
- 2.34686861872330010392e-01f, 2.31804410824338724684e-01f,
- 2.28934165414680340644e-01f, 2.26076071322380278694e-01f,
- 2.23230075763917484855e-01f, 2.20396127480151998723e-01f,
- 2.17574176724331130872e-01f, 2.14764175251173583536e-01f,
- 2.11966076307030182324e-01f, 2.09179834621125076977e-01f,
- 2.06405406397880797353e-01f, 2.03642749310334908452e-01f,
- 2.00891822494656591136e-01f, 1.98152586545775138971e-01f,
- 1.95425003514134304483e-01f, 1.92709036903589175926e-01f,
- 1.90004651670464985713e-01f, 1.87311814223800304768e-01f,
- 1.84630492426799269756e-01f, 1.81960655599522513892e-01f,
- 1.79302274522847582272e-01f, 1.76655321443734858455e-01f,
- 1.74019770081838553999e-01f, 1.71395595637505754327e-01f,
- 1.68782774801211288285e-01f, 1.66181285764481906364e-01f,
- 1.63591108232365584074e-01f, 1.61012223437511009516e-01f,
- 1.58444614155924284882e-01f, 1.55888264724479197465e-01f,
- 1.53343161060262855866e-01f, 1.50809290681845675763e-01f,
- 1.48286642732574552861e-01f, 1.45775208005994028060e-01f,
- 1.43274978973513461566e-01f, 1.40785949814444699690e-01f,
- 1.38308116448550733057e-01f, 1.35841476571253755301e-01f,
- 1.33386029691669155683e-01f, 1.30941777173644358090e-01f,
- 1.28508722279999570981e-01f, 1.26086870220185887081e-01f,
- 1.23676228201596571932e-01f, 1.21276805484790306533e-01f,
- 1.18888613442910059947e-01f, 1.16511665625610869035e-01f,
- 1.14145977827838487895e-01f, 1.11791568163838089811e-01f,
- 1.09448457146811797824e-01f, 1.07116667774683801961e-01f,
- 1.04796225622487068629e-01f, 1.02487158941935246892e-01f,
- 1.00189498768810017482e-01f, 9.79032790388624646338e-02f,
- 9.56285367130089991594e-02f, 9.33653119126910124859e-02f,
- 9.11136480663737591268e-02f, 8.88735920682758862021e-02f,
- 8.66451944505580717859e-02f, 8.44285095703534715916e-02f,
- 8.22235958132029043366e-02f, 8.00305158146630696292e-02f,
- 7.78493367020961224423e-02f, 7.56801303589271778804e-02f,
- 7.35229737139813238622e-02f, 7.13779490588904025339e-02f,
- 6.92451443970067553879e-02f, 6.71246538277884968737e-02f,
- 6.50165779712428976156e-02f, 6.29210244377581412456e-02f,
- 6.08381083495398780614e-02f, 5.87679529209337372930e-02f,
- 5.67106901062029017391e-02f, 5.46664613248889208474e-02f,
- 5.26354182767921896513e-02f, 5.06177238609477817000e-02f,
- 4.86135532158685421122e-02f, 4.66230949019303814174e-02f,
- 4.46465522512944634759e-02f, 4.26841449164744590750e-02f,
- 4.07361106559409394401e-02f, 3.88027074045261474722e-02f,
- 3.68842156885673053135e-02f, 3.49809414617161251737e-02f,
- 3.30932194585785779961e-02f, 3.12214171919203004046e-02f,
- 2.93659397581333588001e-02f, 2.75272356696031131329e-02f,
- 2.57058040085489103443e-02f, 2.39022033057958785407e-02f,
- 2.21170627073088502113e-02f, 2.03510962300445102935e-02f,
- 1.86051212757246224594e-02f, 1.68800831525431419000e-02f,
- 1.51770883079353092332e-02f, 1.34974506017398673818e-02f,
- 1.18427578579078790488e-02f, 1.02149714397014590439e-02f,
- 8.61658276939872638800e-03f, 7.05087547137322242369e-03f,
- 5.52240329925099155545e-03f, 4.03797259336302356153e-03f,
- 2.60907274610215926189e-03f, 1.26028593049859797236e-03f};
+static float xtbl_float[257] = {
+ 3.910757959524894, 3.654152885361007, 3.449278298561430, 3.320244733839825,
+ 3.224575052047801, 3.147889289518000, 3.083526132002143, 3.027837791769593,
+ 2.978603279881843, 2.934366867208887, 2.894121053613412, 2.857138730873224,
+ 2.822877396826442, 2.790921174001927, 2.760944005279986, 2.732685359044011,
+ 2.705933656123062, 2.680514643285745, 2.656283037576743, 2.633116393631582,
+ 2.610910518488823, 2.589575986708286, 2.569035452681844, 2.549221550324783,
+ 2.530075232159854, 2.511544441626694, 2.493583041271046, 2.476149939670523,
+ 2.459208374334705, 2.442725318200364, 2.426670984937146, 2.411018413901119,
+ 2.395743119781927, 2.380822795172085, 2.366237056717290, 2.351967227379144,
+ 2.337996148796528, 2.324308018871132, 2.310888250601371, 2.297723348902863,
+ 2.284800802724491, 2.272108990228381, 2.259637095173787, 2.247375032947389,
+ 2.235313384929920, 2.223443340092510, 2.211756642884160, 2.200245546611276,
+ 2.188902771626360, 2.177721467740293, 2.166695180354308, 2.155817819876737,
+ 2.145083634047889, 2.134487182846017, 2.124023315689524, 2.113687150686653,
+ 2.103474055714877, 2.093379631138792, 2.083399693998305, 2.073530263518743,
+ 2.063767547811732, 2.054107931650652, 2.044547965217531, 2.035084353729619,
+ 2.025713947863854, 2.016433734906204, 2.007240830560529, 1.998132471358420,
+ 1.989106007617438, 1.980158896900477, 1.971288697933659, 1.962493064944363,
+ 1.953769742384647, 1.945116560008678, 1.936531428275694, 1.928012334052666,
+ 1.919557336593188, 1.911164563771253, 1.902832208550429, 1.894558525670704,
+ 1.886341828536783, 1.878180486292996, 1.870072921071267, 1.862017605399674,
+ 1.854013059760202, 1.846057850285185, 1.838150586582807, 1.830289919682757,
+ 1.822474540093886, 1.814703175966282, 1.806974591350821, 1.799287584549720,
+ 1.791640986552162, 1.784033659549441, 1.776464495524523, 1.768932414911268,
+ 1.761436365318910, 1.753975320317672, 1.746548278281722, 1.739154261285912,
+ 1.731792314052963, 1.724461502948045, 1.717160915017823, 1.709889657071302,
+ 1.702646854799923, 1.695431651934562, 1.688243209437196, 1.681080704725174,
+ 1.673943330926125, 1.666830296161666, 1.659740822858183, 1.652674147083056,
+ 1.645629517904782, 1.638606196775548, 1.631603456934874, 1.624620582833035,
+ 1.617656869573016, 1.610711622369830, 1.603784156026095, 1.596873794422788,
+ 1.589979870024191, 1.583101723396029, 1.576238702735906, 1.569390163415124,
+ 1.562555467531045, 1.555733983469176, 1.548925085474173, 1.542128153229002,
+ 1.535342571441514, 1.528567729437712, 1.521803020760998, 1.515047842776714,
+ 1.508301596281311, 1.501563685115464, 1.494833515780494, 1.488110497057447,
+ 1.481394039628187, 1.474683555697855, 1.467978458618079, 1.461278162510275,
+ 1.454582081888410, 1.447889631280576, 1.441200224848724, 1.434513276005892,
+ 1.427828197030256, 1.421144398675309, 1.414461289775471, 1.407778276846399,
+ 1.401094763679251, 1.394410150928141, 1.387723835689976, 1.381035211075855,
+ 1.374343665773166, 1.367648583597476, 1.360949343033283, 1.354245316762635,
+ 1.347535871180587, 1.340820365896404, 1.334098153219360, 1.327368577627926,
+ 1.320630975221056, 1.313884673150220, 1.307128989030731, 1.300363230330837,
+ 1.293586693736948, 1.286798664493243, 1.279998415713818, 1.273185207665356,
+ 1.266358287018229, 1.259516886063714, 1.252660221894897, 1.245787495548627,
+ 1.238897891105687, 1.231990574746136, 1.225064693756531, 1.218119375485481,
+ 1.211153726243699, 1.204166830144381, 1.197157747879441, 1.190125515426692,
+ 1.183069142682686, 1.175987612015452, 1.168879876730833, 1.161744859445611,
+ 1.154581450359927, 1.147388505420849, 1.140164844368151, 1.132909248652534,
+ 1.125620459215533, 1.118297174119345, 1.110938046013576, 1.103541679424640,
+ 1.096106627852021, 1.088631390653980, 1.081114409703404, 1.073554065792436,
+ 1.065948674762123, 1.058296483330675, 1.050595664590930, 1.042844313144149,
+ 1.035040439833441, 1.027181966035646, 1.019266717465484, 1.011292417439996,
+ 1.003256679544673, 0.995156999635091, 0.986990747099063, 0.978755155294225,
+ 0.970447311064225, 0.962064143223041, 0.953602409881086, 0.945058684468166,
+ 0.936429340286575, 0.927710533402000, 0.918898183649591, 0.909987953496719,
+ 0.900975224461222, 0.891855070732942, 0.882622229585166, 0.873271068088861,
+ 0.863795545553309, 0.854189171008164, 0.844444954909154, 0.834555354086382,
+ 0.824512208752292, 0.814306670135216, 0.803929116989971, 0.793369058840624,
+ 0.782615023307233, 0.771654424224568, 0.760473406430108, 0.749056662017816,
+ 0.737387211434296, 0.725446140910000, 0.713212285190976, 0.700661841106816,
+ 0.687767892795789, 0.674499822837294, 0.660822574244420, 0.646695714894994,
+ 0.632072236386062, 0.616896990007752, 0.601104617755993, 0.584616766106380,
+ 0.567338257053820, 0.549151702327166, 0.529909720661559, 0.509423329602093,
+ 0.487443966139237, 0.463634336790883, 0.437518402207873, 0.408389134611992,
+ 0.375121332878382, 0.335737519214427, 0.286174591792075, 0.215241895984885,
+ 0.000000000000000
+};
static const uint64_t ke_double[] = {
0x001C5214272497C6, 0x0000000000000000, 0x00137D5BD79C317E,
0x00186EF58E3F3C10, 0x001A9BB7320EB0AE, 0x001BD127F719447C,
@@ -1195,12 +669,6 @@ static const float fe_float[] = {
2.14596774e-03F, 1.53629978e-03F, 9.67269282e-04F, 4.54134354e-04F,
};
-static const double ziggurat_nor_r = 3.6541528853610087963519472518;
-static const double ziggurat_nor_inv_r =
- 0.27366123732975827203338247596; // 1.0 / ziggurat_nor_r;
-static const double ziggurat_exp_r = 7.6971174701310497140446280481;
-
-static const float ziggurat_nor_r_f = 3.6541528853610087963519472518f;
-static const float ziggurat_nor_inv_r_f = 0.27366123732975827203338247596f;
-static const float ziggurat_exp_r_f = 7.6971174701310497140446280481f;
+#define ZIGGURAT_NORM_R 3.65415288536100716461
+#define ZIGGURAT_EXP_R 7.6971174701310497140446280481
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@python.org
https://mail.python.org/mailman/listinfo/numpy-discussion