CMSIS-DSP: MVE versions of vlog q15 and q31 and PythonWrapper fix

PythonWrapper was no more building on windows due to a too long
link command line.

A temporary fix was made. But on long term the wrapper must be refactored
into submodules to allow to more easily add new functions.
pull/19/head
Christophe Favergeon 4 years ago
parent cd9ac529d6
commit 99dc566e87

@ -4,6 +4,7 @@ import numpy
import config
import sys
import os
import os.path
from config import ROOT
import re
@ -73,6 +74,97 @@ allsrcs = support + fastmath + filtering + matrix + statistics + complexf + basi
allsrcs = allsrcs + controller + transform + modulesrc + common+ interpolation
allsrcs = allsrcs + quaternion
missing=set(["arm_abs_f64"
,"arm_absmax_f64"
,"arm_absmin_f64"
,"arm_add_f64"
,"arm_barycenter_f32"
,"arm_braycurtis_distance_f32"
,"arm_canberra_distance_f32"
,"arm_chebyshev_distance_f32"
,"arm_chebyshev_distance_f64"
,"arm_circularRead_f32"
,"arm_cityblock_distance_f32"
,"arm_cityblock_distance_f64"
,"arm_cmplx_mag_f64"
,"arm_cmplx_mag_squared_f64"
,"arm_cmplx_mult_cmplx_f64"
,"arm_copy_f64"
,"arm_correlate_f64"
,"arm_correlation_distance_f32"
,"arm_cosine_distance_f32"
,"arm_cosine_distance_f64"
,"arm_dot_prod_f64"
,"arm_entropy_f32"
,"arm_entropy_f64"
,"arm_euclidean_distance_f32"
,"arm_euclidean_distance_f64"
,"arm_exponent_f32"
,"arm_fill_f64"
,"arm_fir_f64"
,"arm_fir_init_f64"
,"arm_gaussian_naive_bayes_predict_f32"
,"arm_jensenshannon_distance_f32"
,"arm_kullback_leibler_f32"
,"arm_kullback_leibler_f64"
,"arm_logsumexp_dot_prod_f32"
,"arm_logsumexp_f32"
,"arm_mat_cholesky_f32"
,"arm_mat_cholesky_f64"
,"arm_mat_init_f32"
,"arm_mat_ldlt_f32"
,"arm_mat_ldlt_f64"
,"arm_mat_mult_f64"
,"arm_mat_solve_lower_triangular_f32"
,"arm_mat_solve_lower_triangular_f64"
,"arm_mat_solve_upper_triangular_f32"
,"arm_mat_solve_upper_triangular_f64"
,"arm_mat_sub_f64"
,"arm_mat_trans_f64"
,"arm_max_f64"
,"arm_max_no_idx_f32"
,"arm_max_no_idx_f64"
,"arm_mean_f64"
,"arm_merge_sort_f32"
,"arm_merge_sort_init_f32"
,"arm_min_f64"
,"arm_minkowski_distance_f32"
,"arm_mult_f64"
,"arm_negate_f64"
,"arm_offset_f64"
,"arm_power_f64"
,"arm_scale_f64"
,"arm_sort_f32"
,"arm_sort_init_f32"
,"arm_spline_f32"
,"arm_spline_init_f32"
,"arm_std_f64"
,"arm_sub_f64"
,"arm_svm_linear_init_f32"
,"arm_svm_linear_predict_f32"
,"arm_svm_polynomial_init_f32"
,"arm_svm_polynomial_predict_f32"
,"arm_svm_rbf_init_f32"
,"arm_svm_rbf_predict_f32"
,"arm_svm_sigmoid_init_f32"
,"arm_svm_sigmoid_predict_f32"
,"arm_var_f64"
,"arm_vexp_f32"
,"arm_vexp_f64"
,"arm_vlog_f64"
,"arm_vsqrt_f32"
,"arm_weighted_sum_f32"
,"arm_circularRead_q15"
,"arm_circularRead_q7"
,"arm_div_q63_to_q31"
,"arm_fir_sparse_q15"
,"arm_fir_sparse_q31"
,"arm_fir_sparse_q7"
,"arm_mat_init_q15"
,"arm_mat_init_q31"
,"arm_vsqrt_q15"
,"arm_vsqrt_q31"])
def notf16(number):
if re.search(r'f16',number):
return(False)
@ -80,11 +172,16 @@ def notf16(number):
return(False)
return(True)
def isnotmissing(src):
name=os.path.splitext(os.path.basename(src))[0]
return(not (name in missing))
# If there are too many files, the linker command is failing on Windows.
# So f16 functions are removed since they are not currently available in the wrapper.
# A next version will have to structure this wrapper more cleanly so that the
# build can work even with more functions
srcs = list(filter(notf16, allsrcs))
srcs = list(filter(isnotmissing,list(filter(notf16, allsrcs))))
module1 = Extension(config.extensionName,
sources = (srcs

@ -6,9 +6,11 @@ import cmsisdsp.fixedpoint as f
x = np.array([0.9,0.5,2**-16])
r=dsp.arm_vlog_q15(f.toQ15(x))
print(f.Q15toF32(r)*16.0)
r=dsp.arm_vlog_q31(f.toQ31(x))
print(f.Q31toF32(r)*32.0)
print(np.log(x))
print("")

@ -26,18 +26,10 @@
* limitations under the License.
*/
/*
This is a first attempt at implement a log in Q15
without using an interpolation table since there are
already too many tables in CMSIS-DSP.
But the accuracy is not that great for very small values ...
*/
#include "dsp/fast_math_functions.h"
#define LOG_Q15_ACCURACY 15
/* Bit to represent the normalization factor
@ -50,36 +42,37 @@ But the accuracy is not that great for very small values ...
*/
#define LOG_Q15_INTEGER_PART 4
/* 2.0 in Q14 or 0.5 in Q16 */
/* 2.0 in q14 */
#define LOQ_Q15_THRESHOLD (1u << LOG_Q15_ACCURACY)
/* HALF */
#define LOQ_Q15_Q16_HALF LOQ_Q15_THRESHOLD
#define LOQ_Q15_Q14_HALF (LOQ_Q15_Q16_HALF >> 2)
/* 1.0 / Log2[Exp[1]] in Q15 */
/* 1.0 / Log2[Exp[1]] in q15 */
#define LOG_Q15_INVLOG2EXP 0x58b9u
/* Clay Turner algorithm */
static uint16_t arm_scalar_log_q15(uint16_t src)
{
int i;
int32_t c = __CLZ(src)-16;
int16_t c = __CLZ(src)-16;
int16_t normalization=0;
//printf("x q15 = %08X, c = %d\n",src,c);
/* 0.5 in q16 */
uint16_t inc = LOQ_Q15_Q16_HALF;
/* 0.5 in q11 */
uint16_t inc = LOQ_Q15_Q16_HALF >> (LOG_Q15_INTEGER_PART + 1);
/* Will compute y = log2(x) for 1 <= x < 2.0 */
uint32_t x;
uint16_t x;
/* q16 */
/* q11 */
uint16_t y=0;
/* q4.24 */
int32_t tmp;
/* q11 */
int16_t tmp;
/* Normalize and convert to q14 format */
@ -93,17 +86,19 @@ static uint16_t arm_scalar_log_q15(uint16_t src)
x = x << (c-1);
}
normalization = c;
//printf("normalization = %d\n",normalization);
//printf("x normalized q14 = %08X\n",x);
/* Compute the Log2. Result is in Q16
because we know 0 <= y < 1.0
/* Compute the Log2. Result is in q11 instead of q16
because we know 0 <= y < 1.0 but
we want a result allowing to do a
product on int16 rather than having to go
through int32
*/
for(i = 0; i < LOG_Q15_ACCURACY ; i++)
{
x = ((x*x) + LOQ_Q15_Q14_HALF) >> (LOG_Q15_ACCURACY - 1);
x = (((int32_t)x*x)) >> (LOG_Q15_ACCURACY - 1);
if (x >= LOQ_Q15_THRESHOLD)
{
y += inc ;
@ -112,8 +107,6 @@ static uint16_t arm_scalar_log_q15(uint16_t src)
inc = inc >> 1;
}
//printf("Log2 q16 = %04X\n",y);
/*
Convert the Log2 to Log and apply normalization.
@ -121,23 +114,94 @@ static uint16_t arm_scalar_log_q15(uint16_t src)
*/
/* q16 */
tmp = y - ((int32_t)normalization << (LOG_Q15_ACCURACY + 1));
//printf("Log2 q16 with normalization = %08X\n",tmp);
/* q12 * q15 -> q27 */
tmp = (tmp>>LOG_Q15_INTEGER_PART) * (int32_t)LOG_Q15_INVLOG2EXP ;
//printf("Log10 q27 = %08X\n",tmp);
/* q11 */
//tmp = y - ((int32_t)normalization << (LOG_Q15_ACCURACY + 1));
tmp = (int16_t)y - (normalization << (LOG_Q15_ACCURACY - LOG_Q15_INTEGER_PART));
/* q4.11 */
y = tmp >> 16;
//printf("Log10 q11 = %04X\n",y);
y = ((int32_t)tmp * LOG_Q15_INVLOG2EXP) >> 15;
return(y);
}
#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE)
q15x8_t vlogq_q15(q15x8_t src)
{
int i;
int16x8_t c = vclzq_s16(src);
int16x8_t normalization = c;
/* 0.5 in q11 */
uint16_t inc = LOQ_Q15_Q16_HALF >> (LOG_Q15_INTEGER_PART + 1);
/* Will compute y = log2(x) for 1 <= x < 2.0 */
uint16x8_t x;
/* q11 */
uint16x8_t y = vdupq_n_u16(0);
/* q11 */
int16x8_t vtmp;
mve_pred16_t p;
/* Normalize and convert to q14 format */
vtmp = vsubq_n_s16(c,1);
x = vshlq_u16(src,vtmp);
/* Compute the Log2. Result is in q11 instead of q16
because we know 0 <= y < 1.0 but
we want a result allowing to do a
product on int16 rather than having to go
through int32
*/
for(i = 0; i < LOG_Q15_ACCURACY ; i++)
{
x = vmulhq_u16(x,x);
x = vshlq_n_u16(x,2);
p = vcmphiq_u16(x,vdupq_n_u16(LOQ_Q15_THRESHOLD));
y = vaddq_m_n_u16(y, y,inc,p);
x = vshrq_m_n_u16(x,x,1,p);
inc = inc >> 1;
}
/*
Convert the Log2 to Log and apply normalization.
We compute (y - normalisation) * (1 / Log2[e]).
*/
/* q11 */
// tmp = (int16_t)y - (normalization << (LOG_Q15_ACCURACY - LOG_Q15_INTEGER_PART));
vtmp = vshlq_n_s16(normalization,LOG_Q15_ACCURACY - LOG_Q15_INTEGER_PART);
vtmp = vsubq_s16(y,vtmp);
/* q4.11 */
// y = ((int32_t)tmp * LOG_Q15_INVLOG2EXP) >> 15;
vtmp = vqdmulhq_n_s16(vtmp,LOG_Q15_INVLOG2EXP);
return(vtmp);
}
#endif
/**
@ingroup groupFastMath
*/
@ -155,15 +219,43 @@ static uint16_t arm_scalar_log_q15(uint16_t src)
@return none
*/
void arm_vlog_q15(
const q15_t * pSrc,
q15_t * pDst,
uint32_t blockSize)
{
uint32_t i;
for(i=0;i < blockSize; i++)
uint32_t blkCnt; /* loop counters */
#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE)
q15x8_t src;
q15x8_t dst;
blkCnt = blockSize >> 3;
while (blkCnt > 0U)
{
src = vld1q(pSrc);
dst = vlogq_q15(src);
vst1q(pDst, dst);
pSrc += 8;
pDst += 8;
/* Decrement loop counter */
blkCnt--;
}
blkCnt = blockSize & 7;
#else
blkCnt = blockSize;
#endif
while (blkCnt > 0U)
{
pDst[i]=arm_scalar_log_q15(pSrc[i]);
*pDst++ = arm_scalar_log_q15(*pSrc++);
/* Decrement loop counter */
blkCnt--;
}
}

@ -26,16 +26,6 @@
* limitations under the License.
*/
/*
This is a first attempt at implement a log in Q31
without using an interpolation table since there are
already too many tables in CMSIS-DSP.
But the accuracy is not that great for very small values ...
*/
#include "dsp/fast_math_functions.h"
#define LOG_Q31_ACCURACY 31
@ -50,8 +40,10 @@ But the accuracy is not that great for very small values ...
*/
#define LOG_Q31_INTEGER_PART 5
/* 2.0 in Q30 or 0.5 in Q32 */
/* 2.0 in Q30 */
#define LOQ_Q31_THRESHOLD (1u << LOG_Q31_ACCURACY)
/* HALF */
#define LOQ_Q31_Q32_HALF LOQ_Q31_THRESHOLD
#define LOQ_Q31_Q30_HALF (LOQ_Q31_Q32_HALF >> 2)
@ -62,24 +54,22 @@ But the accuracy is not that great for very small values ...
/* Clay Turner algorithm */
static uint32_t arm_scalar_log_q31(uint32_t src)
{
int i;
int32_t i;
int32_t c = __CLZ(src);
int32_t normalization=0;
//printf("x q31 = %08X\n",src);
/* 0.5 in q32 */
uint32_t inc = LOQ_Q31_Q32_HALF;
/* 0.5 in q26 */
uint32_t inc = LOQ_Q31_Q32_HALF >> (LOG_Q31_INTEGER_PART + 1);
/* Will compute y = log2(x) for 1 <= x < 2.0 */
uint64_t x;
uint32_t x;
/* q32 */
/* q26 */
uint32_t y=0;
/* q5.58 */
int64_t tmp;
/* q26 */
int32_t tmp;
/* Normalize and convert to q30 format */
@ -93,17 +83,16 @@ static uint32_t arm_scalar_log_q31(uint32_t src)
x = x << (c-1);
}
normalization = c;
//printf("normalization = %d\n",normalization);
//printf("x normalized q30 = %08llX\n",x);
/* Compute the Log2. Result is in Q32
because we know 0 <= y < 1.0
/* Compute the Log2. Result is in q26
because we know 0 <= y < 1.0 but
do not want to use q32 to allow
following computation with less instructions.
*/
for(i = 0; i < LOG_Q31_ACCURACY ; i++)
{
x = ((x*x) + LOQ_Q31_Q30_HALF) >> (LOG_Q31_ACCURACY - 1);
x = ((int64_t)x*x) >> (LOG_Q31_ACCURACY - 1);
if (x >= LOQ_Q31_THRESHOLD)
{
y += inc ;
@ -112,32 +101,101 @@ static uint32_t arm_scalar_log_q31(uint32_t src)
inc = inc >> 1;
}
//printf("Log2 q32 = %08X\n",y);
/*
Convert the Log2 to Log and apply normalization.
We compute (y - normalisation) * (1 / Log2[e]).
*/
/* q32 */
tmp = y - ((int64_t)normalization << (LOG_Q31_ACCURACY + 1));
//printf("Log2 q32 with normalization = %016llX\n",tmp);
/* q26 */
tmp = (int32_t)y - (normalization << (LOG_Q31_ACCURACY - LOG_Q31_INTEGER_PART));
/* q27 * q31 -> q58 */
tmp = (tmp>>LOG_Q31_INTEGER_PART) * (int64_t)LOG_Q31_INVLOG2EXP ;
//printf("Log10 q58 = %016llX\n",tmp);
/* q5.26 */
y = tmp >> 32;
//printf("Log10 q25 = %08X\n",y);
y = ((int64_t)tmp * LOG_Q31_INVLOG2EXP) >> 31;
return(y);
}
#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE)
q31x4_t vlogq_q31(q31x4_t src)
{
int32_t i;
int32x4_t c = vclzq_s32(src);
int32x4_t normalization = c;
/* 0.5 in q11 */
uint32_t inc = LOQ_Q31_Q32_HALF >> (LOG_Q31_INTEGER_PART + 1);
/* Will compute y = log2(x) for 1 <= x < 2.0 */
uint32x4_t x;
/* q11 */
uint32x4_t y = vdupq_n_u32(0);
/* q11 */
int32x4_t vtmp;
mve_pred16_t p;
/* Normalize and convert to q14 format */
vtmp = vsubq_n_s32(c,1);
x = vshlq_u32(src,vtmp);
/* Compute the Log2. Result is in Q26
because we know 0 <= y < 1.0 but
do not want to use Q32 to allow
following computation with less instructions.
*/
for(i = 0; i < LOG_Q31_ACCURACY ; i++)
{
x = vmulhq_u32(x,x);
x = vshlq_n_u32(x,2);
p = vcmphiq_u32(x,vdupq_n_u32(LOQ_Q31_THRESHOLD));
y = vaddq_m_n_u32(y, y,inc,p);
x = vshrq_m_n_u32(x,x,1,p);
inc = inc >> 1;
}
/*
Convert the Log2 to Log and apply normalization.
We compute (y - normalisation) * (1 / Log2[e]).
*/
/* q11 */
// tmp = (int16_t)y - (normalization << (LOG_Q15_ACCURACY - LOG_Q15_INTEGER_PART));
vtmp = vshlq_n_s32(normalization,LOG_Q31_ACCURACY - LOG_Q31_INTEGER_PART);
vtmp = vsubq_s32(y,vtmp);
/* q4.11 */
// y = ((int32_t)tmp * LOG_Q15_INVLOG2EXP) >> 15;
vtmp = vqdmulhq_n_s32(vtmp,LOG_Q31_INVLOG2EXP);
return(vtmp);
}
#endif
/**
@ingroup groupFastMath
*/
@ -160,10 +218,37 @@ void arm_vlog_q31(
q31_t * pDst,
uint32_t blockSize)
{
uint32_t i;
for(i=0;i < blockSize; i++)
uint32_t blkCnt; /* loop counters */
#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE)
q31x4_t src;
q31x4_t dst;
blkCnt = blockSize >> 2;
while (blkCnt > 0U)
{
src = vld1q(pSrc);
dst = vlogq_q31(src);
vst1q(pDst, dst);
pSrc += 4;
pDst += 4;
/* Decrement loop counter */
blkCnt--;
}
blkCnt = blockSize & 3;
#else
blkCnt = blockSize;
#endif
while (blkCnt > 0U)
{
pDst[i]=arm_scalar_log_q31(pSrc[i]);
*pDst++=arm_scalar_log_q31(*pSrc++);
blkCnt--;
}
}

@ -48,13 +48,13 @@ def divide(f,r):
def initLogValues(format):
if format == Tools.Q15:
exps = -np.linspace(0,15,num=125)
vals=np.linspace(np.float_power(2,-15),1.0,num=125)
elif format == Tools.F16:
exps = -np.linspace(0,10,num=125)
vals=np.linspace(np.float_power(2,-10),1.0,num=125)
else:
exps = -np.linspace(0,31,num=125)
basis=2.0*np.ones(exps.size)
vals=np.float_power(basis,exps)
vals=np.linspace(np.float_power(2,-31),1.0,num=125)
ref=np.log(vals)
if format==Tools.Q31 :
# Format must be Q5.26
@ -132,13 +132,6 @@ def writeTestsFloat(config,format):
data1 = data1 + 1e-3 # To avoid zero values
data1 = Tools.normalize(data1)
config.setOverwrite(True)
samples,v=initLogValues(format)
config.writeInput(1, samples,"LogInput")
config.writeReference(1, v,"Log")
config.setOverwrite(False)
samples=np.concatenate((np.array([0.0,1.0]),np.linspace(-0.4,0.4)))
config.writeInput(1, samples,"ExpInput")
@ -169,6 +162,7 @@ def generatePatterns():
configq31=Tools.Config(PATTERNDIR,PARAMDIR,"q31")
configq15=Tools.Config(PATTERNDIR,PARAMDIR,"q15")
configf64.setOverwrite(False)
configf32.setOverwrite(False)
configf16.setOverwrite(False)
configq31.setOverwrite(False)

@ -1,252 +1,252 @@
H
125
// 0.000000
0x0
// -0.055899
0xab28
// -0.111798
0xaf28
// -0.167697
0xb15e
// -0.223596
0xb328
// -0.279495
0xb479
// -0.335394
0xb55e
// -0.391293
0xb643
// -0.447192
0xb728
// -0.503091
0xb806
// -0.558990
0xb879
// -0.614889
0xb8eb
// -0.670788
0xb95e
// -0.726687
0xb9d0
// -0.782586
0xba43
// -0.838484
0xbab5
// -0.894383
0xbb28
// -0.950282
0xbb9a
// -1.006181
0xbc06
// -1.062080
0xbc40
// -1.117979
0xbc79
// -1.173878
0xbcb2
// -1.229777
0xbceb
// -1.285676
0xbd25
// -1.341575
0xbd5e
// -1.397474
0xbd97
// -1.453373
0xbdd0
// -1.509272
0xbe09
// -1.565171
0xbe43
// -1.621070
0xbe7c
// -1.676969
0xbeb5
// -1.732868
0xbeee
// -1.788767
0xbf28
// -1.844666
0xbf61
// -1.900565
0xbf9a
// -1.956464
0xbfd3
// -2.012363
0xc006
// -2.068262
0xc023
// -2.124161
0xc040
// -2.180060
0xc05c
// -2.235959
0xc079
// -2.291858
0xc095
// -2.347757
0xc0b2
// -2.403656
0xc0cf
// -2.459555
0xc0eb
// -2.515453
0xc108
// -2.571352
0xc125
// -2.627251
0xc141
// -2.683150
0xc15e
// -2.739049
0xc17a
// -2.794948
0xc197
// -2.850847
0xc1b4
// -2.906746
0xc1d0
// -2.962645
0xc1ed
// -3.018544
0xc209
// -3.074443
0xc226
// -3.130342
0xc243
// -3.186241
0xc25f
// -3.242140
0xc27c
// -3.298039
0xc299
// -3.353938
0xc2b5
// -3.409837
0xc2d2
// -3.465736
0xc2ee
// -3.521635
0xc30b
// -3.577534
0xc328
// -3.633433
0xc344
// -3.689332
0xc361
// -3.745231
0xc37e
// -3.801130
0xc39a
// -3.857029
0xc3b7
// -3.912928
0xc3d3
// -3.968827
0xc3f0
// -4.024726
0xc406
// -4.080625
0xc415
// -4.136523
0xc423
// -4.192422
0xc431
// -4.248321
0xc440
// -4.304220
0xc44e
// -4.360119
0xc45c
// -4.416018
0xc46b
// -4.471917
0xc479
// -4.527816
0xc487
// -4.583715
0xc495
// -4.639614
0xc4a4
// -4.695513
0xc4b2
// -4.751412
0xc4c0
// -4.807311
0xc4cf
// -4.863210
0xc4dd
// -4.919109
0xc4eb
// -4.975008
0xc4fa
// -5.030907
0xc508
// -5.086806
0xc516
// -5.142705
0xc525
// -5.198604
0xc533
// -5.254503
0xc541
// -5.310402
0xc54f
// -5.366301
0xc55e
// -5.422200
0xc56c
// -5.478099
0xc57a
// -5.533998
0xc589
// -5.589897
0xc597
// -5.645796
0xc5a5
// -5.701695
0xc5b4
// -5.757594
0xc5c2
// -5.813492
0xc5d0
// -5.869391
0xc5df
// -5.925290
0xc5ed
// -5.981189
0xc5fb
// -6.037088
0xc609
// -6.092987
0xc618
// -6.148886
0xc626
// -6.204785
0xc634
// -6.260684
0xc643
// -6.316583
0xc651
// -6.372482
0xc65f
// -6.428381
0xc66e
// -6.484280
0xc67c
// -6.540179
0xc68a
// -6.596078
0xc699
// -6.651977
0xc6a7
// -6.707876
0xc6b5
// -6.763775
0xc6c4
// -6.819674
0xc6d2
// -6.875573
0xc6e0
// -6.931472
0xc6ee
// -4.706848
0xc4b5
// -4.069271
0xc412
// -3.683037
0xc35e
// -3.405111
0xc2cf
// -3.187867
0xc260
// -3.009498
0xc205
// -2.858181
0xc1b7
// -2.726779
0xc174
// -2.610656
0xc139
// -2.506625
0xc103
// -2.412404
0xc0d3
// -2.326302
0xc0a7
// -2.247028
0xc07e
// -2.173581
0xc059
// -2.105160
0xc036
// -2.041123
0xc015
// -1.980940
0xbfec
// -1.924175
0xbfb2
// -1.870460
0xbf7b
// -1.819484
0xbf47
// -1.770981
0xbf15
// -1.724722
0xbee6
// -1.680508
0xbeb9
// -1.638167
0xbe8d
// -1.597546
0xbe64
// -1.558511
0xbe3c
// -1.520942
0xbe15
// -1.484734
0xbdf0
// -1.449792
0xbdcd
// -1.416029
0xbdaa
// -1.383369
0xbd89
// -1.351742
0xbd68
// -1.321085
0xbd49
// -1.291339
0xbd2a
// -1.262453
0xbd0d
// -1.234378
0xbcf0
// -1.207070
0xbcd4
// -1.180488
0xbcb9
// -1.154594
0xbc9e
// -1.129353
0xbc84
// -1.104735
0xbc6b
// -1.080707
0xbc53
// -1.057244
0xbc3b
// -1.034318
0xbc23
// -1.011906
0xbc0c
// -0.989986
0xbbeb
// -0.968535
0xbbc0
// -0.947536
0xbb95
// -0.926968
0xbb6a
// -0.906814
0xbb41
// -0.887059
0xbb19
// -0.867687
0xbaf1
// -0.848682
0xbaca
// -0.830032
0xbaa4
// -0.811724
0xba7e
// -0.793745
0xba5a
// -0.776083
0xba35
// -0.758728
0xba12
// -0.741669
0xb9ef
// -0.724896
0xb9cd
// -0.708400
0xb9ab
// -0.692171
0xb98a
// -0.676202
0xb969
// -0.660483
0xb949
// -0.645008
0xb929
// -0.629769
0xb90a
// -0.614758
0xb8eb
// -0.599970
0xb8cd
// -0.585397
0xb8af
// -0.571033
0xb891
// -0.556873
0xb874
// -0.542910
0xb858
// -0.529140
0xb83c
// -0.515557
0xb820
// -0.502156
0xb804
// -0.488932
0xb7d3
// -0.475880
0xb79d
// -0.462997
0xb768
// -0.450278
0xb734
// -0.437718
0xb701
// -0.425314
0xb6ce
// -0.413062
0xb69c
// -0.400959
0xb66a
// -0.389000
0xb639
// -0.377182
0xb609
// -0.365503
0xb5d9
// -0.353958
0xb5aa
// -0.342545
0xb57b
// -0.331261
0xb54d
// -0.320103
0xb51f
// -0.309068
0xb4f2
// -0.298153
0xb4c5
// -0.287357
0xb499
// -0.276675
0xb46d
// -0.266107
0xb442
// -0.255649
0xb417
// -0.245299
0xb3d9
// -0.235055
0xb386
// -0.224915
0xb333
// -0.214877
0xb2e0
// -0.204939
0xb28f
// -0.195098
0xb23e
// -0.185353
0xb1ee
// -0.175703
0xb19f
// -0.166145
0xb151
// -0.156677
0xb103
// -0.147298
0xb0b7
// -0.138006
0xb06b
// -0.128799
0xb01f
// -0.119677
0xafa9
// -0.110637
0xaf15
// -0.101678
0xae82
// -0.092799
0xadf0
// -0.083997
0xad60
// -0.075273
0xacd1
// -0.066624
0xac44
// -0.058049
0xab6e
// -0.049547
0xaa58
// -0.041117
0xa943
// -0.032757
0xa831
// -0.024467
0xa643
// -0.016245
0xa429
// -0.008089
0xa024
// 0.000000
0x0

@ -1,252 +1,252 @@
H
125
// 1.000000
0x3c00
// 0.945635
0x3b91
// 0.894225
0x3b27
// 0.845610
0x3ac4
// 0.799638
0x3a66
// 0.756166
0x3a0d
// 0.715056
0x39b8
// 0.676182
0x3969
// 0.639421
0x391e
// 0.604659
0x38d6
// 0.571786
0x3893
// 0.540701
0x3853
// 0.511306
0x3817
// 0.483508
0x37bc
// 0.457222
0x3751
// 0.432365
0x36eb
// 0.408860
0x368b
// 0.386632
0x3630
// 0.365612
0x35da
// 0.345736
0x3588
// 0.326940
0x353b
// 0.309166
0x34f2
// 0.292358
0x34ad
// 0.276464
0x346c
// 0.261434
0x342f
// 0.247221
0x33e9
// 0.233780
0x337b
// 0.221071
0x3313
// 0.209052
0x32b1
// 0.197687
0x3253
// 0.186940
0x31fb
// 0.176777
0x31a8
// 0.167166
0x3159
// 0.158078
0x310f
// 0.149484
0x30c9
// 0.141357
0x3086
// 0.133672
0x3047
// 0.126405
0x300c
// 0.119533
0x2fa6
// 0.113035
0x2f3c
// 0.106890
0x2ed7
// 0.101079
0x2e78
// 0.095583
0x2e1e
// 0.090387
0x2dc9
// 0.085473
0x2d78
// 0.080826
0x2d2c
// 0.076432
0x2ce4
// 0.072277
0x2ca0
// 0.068347
0x2c60
// 0.064632
0x2c23
// 0.061118
0x2bd3
// 0.057795
0x2b66
// 0.054653
0x2aff
// 0.051682
0x2a9e
// 0.048872
0x2a41
// 0.046215
0x29ea
// 0.043703
0x2998
// 0.041327
0x294a
// 0.039080
0x2901
// 0.036956
0x28bb
// 0.034946
0x2879
// 0.033047
0x283b
// 0.031250
0x2800
// 0.029551
0x2791
// 0.027945
0x2727
// 0.026425
0x26c4
// 0.024989
0x2666
// 0.023630
0x260d
// 0.022346
0x25b8
// 0.021131
0x2569
// 0.019982
0x251e
// 0.018896
0x24d6
// 0.017868
0x2493
// 0.016897
0x2453
// 0.015978
0x2417
// 0.015110
0x23bc
// 0.014288
0x2351
// 0.013511
0x22eb
// 0.012777
0x228b
// 0.012082
0x2230
// 0.011425
0x21da
// 0.010804
0x2188
// 0.010217
0x213b
// 0.009661
0x20f2
// 0.009136
0x20ad
// 0.008639
0x206c
// 0.008170
0x202f
// 0.007726
0x1fe9
// 0.007306
0x1f7b
// 0.006908
0x1f13
// 0.006533
0x1eb1
// 0.006178
0x1e53
// 0.005842
0x1dfb
// 0.005524
0x1da8
// 0.005224
0x1d59
// 0.004940
0x1d0f
// 0.004671
0x1cc9
// 0.004417
0x1c86
// 0.004177
0x1c47
// 0.003950
0x1c0c
// 0.003735
0x1ba6
// 0.003532
0x1b3c
// 0.003340
0x1ad7
// 0.003159
0x1a78
// 0.002987
0x1a1e
// 0.002825
0x19c9
// 0.002671
0x1978
// 0.002526
0x192c
// 0.002389
0x18e4
// 0.002259
0x18a0
// 0.002136
0x1860
// 0.002020
0x1823
// 0.001910
0x17d3
// 0.001806
0x1766
// 0.001708
0x16ff
// 0.001615
0x169e
// 0.001527
0x1641
// 0.001444
0x15ea
// 0.001366
0x1598
// 0.001291
0x154a
// 0.001221
0x1501
// 0.001155
0x14bb
// 0.001092
0x1479
// 0.001033
0x143b
// 0.000977
0x1400
// 0.009033
0x20a0
// 0.017090
0x2460
// 0.025146
0x2670
// 0.033203
0x2840
// 0.041260
0x2948
// 0.049316
0x2a50
// 0.057373
0x2b58
// 0.065430
0x2c30
// 0.073486
0x2cb4
// 0.081543
0x2d38
// 0.089600
0x2dbc
// 0.097656
0x2e40
// 0.105713
0x2ec4
// 0.113770
0x2f48
// 0.121826
0x2fcc
// 0.129883
0x3028
// 0.137939
0x306a
// 0.145996
0x30ac
// 0.154053
0x30ee
// 0.162109
0x3130
// 0.170166
0x3172
// 0.178223
0x31b4
// 0.186279
0x31f6
// 0.194336
0x3238
// 0.202393
0x327a
// 0.210449
0x32bc
// 0.218506
0x32fe
// 0.226562
0x3340
// 0.234619
0x3382
// 0.242676
0x33c4
// 0.250732
0x3403
// 0.258789
0x3424
// 0.266846
0x3445
// 0.274902
0x3466
// 0.282959
0x3487
// 0.291016
0x34a8
// 0.299072
0x34c9
// 0.307129
0x34ea
// 0.315186
0x350b
// 0.323242
0x352c
// 0.331299
0x354d
// 0.339355
0x356e
// 0.347412
0x358f
// 0.355469
0x35b0
// 0.363525
0x35d1
// 0.371582
0x35f2
// 0.379639
0x3613
// 0.387695
0x3634
// 0.395752
0x3655
// 0.403809
0x3676
// 0.411865
0x3697
// 0.419922
0x36b8
// 0.427979
0x36d9
// 0.436035
0x36fa
// 0.444092
0x371b
// 0.452148
0x373c
// 0.460205
0x375d
// 0.468262
0x377e
// 0.476318
0x379f
// 0.484375
0x37c0
// 0.492432
0x37e1
// 0.500488
0x3801
// 0.508545
0x3812
// 0.516602
0x3822
// 0.524658
0x3832
// 0.532715
0x3843
// 0.540771
0x3854
// 0.548828
0x3864
// 0.556885
0x3874
// 0.564941
0x3885
// 0.572998
0x3896
// 0.581055
0x38a6
// 0.589111
0x38b6
// 0.597168
0x38c7
// 0.605225
0x38d8
// 0.613281
0x38e8
// 0.621338
0x38f8
// 0.629395
0x3909
// 0.637451
0x391a
// 0.645508
0x392a
// 0.653564
0x393a
// 0.661621
0x394b
// 0.669678
0x395c
// 0.677734
0x396c
// 0.685791
0x397c
// 0.693848
0x398d
// 0.701904
0x399e
// 0.709961
0x39ae
// 0.718018
0x39be
// 0.726074
0x39cf
// 0.734131
0x39e0
// 0.742188
0x39f0
// 0.750244
0x3a00
// 0.758301
0x3a11
// 0.766357
0x3a22
// 0.774414
0x3a32
// 0.782471
0x3a42
// 0.790527
0x3a53
// 0.798584
0x3a64
// 0.806641
0x3a74
// 0.814697
0x3a84
// 0.822754
0x3a95
// 0.830811
0x3aa6
// 0.838867
0x3ab6
// 0.846924
0x3ac6
// 0.854980
0x3ad7
// 0.863037
0x3ae8
// 0.871094
0x3af8
// 0.879150
0x3b08
// 0.887207
0x3b19
// 0.895264
0x3b2a
// 0.903320
0x3b3a
// 0.911377
0x3b4a
// 0.919434
0x3b5b
// 0.927490
0x3b6c
// 0.935547
0x3b7c
// 0.943604
0x3b8c
// 0.951660
0x3b9d
// 0.959717
0x3bae
// 0.967773
0x3bbe
// 0.975830
0x3bce
// 0.983887
0x3bdf
// 0.991943
0x3bf0
// 1.000000
0x3c00

@ -1,252 +1,252 @@
W
125
// 0.000000
0x0
// -0.173287
0xbe317218
// -0.346574
0xbeb17218
// -0.519860
0xbf051592
// -0.693147
0xbf317218
// -0.866434
0xbf5dce9e
// -1.039721
0xbf851592
// -1.213008
0xbf9b43d5
// -1.386294
0xbfb17218
// -1.559581
0xbfc7a05b
// -1.732868
0xbfddce9e
// -1.906155
0xbff3fce1
// -2.079442
0xc0051592
// -2.252728
0xc0102cb3
// -2.426015
0xc01b43d5
// -2.599302
0xc0265af6
// -2.772589
0xc0317218
// -2.945876
0xc03c8939
// -3.119162
0xc047a05b
// -3.292449
0xc052b77c
// -3.465736
0xc05dce9e
// -3.639023
0xc068e5bf
// -3.812309
0xc073fce1
// -3.985596
0xc07f1402
// -4.158883
0xc0851592
// -4.332170
0xc08aa123
// -4.505457
0xc0902cb3
// -4.678743
0xc095b844
// -4.852030
0xc09b43d5
// -5.025317
0xc0a0cf66
// -5.198604
0xc0a65af6
// -5.371891
0xc0abe687
// -5.545177
0xc0b17218
// -5.718464
0xc0b6fda9
// -5.891751
0xc0bc8939
// -6.065038
0xc0c214ca
// -6.238325
0xc0c7a05b
// -6.411611
0xc0cd2bec
// -6.584898
0xc0d2b77c
// -6.758185
0xc0d8430d
// -6.931472
0xc0ddce9e
// -7.104759
0xc0e35a2f
// -7.278045
0xc0e8e5bf
// -7.451332
0xc0ee7150
// -7.624619
0xc0f3fce1
// -7.797906
0xc0f98872
// -7.971193
0xc0ff1402
// -8.144479
0xc1024fca
// -8.317766
0xc1051592
// -8.491053
0xc107db5a
// -8.664340
0xc10aa123
// -8.837627
0xc10d66eb
// -9.010913
0xc1102cb3
// -9.184200
0xc112f27c
// -9.357487
0xc115b844
// -9.530774
0xc1187e0d
// -9.704061
0xc11b43d5
// -9.877347
0xc11e099d
// -10.050634
0xc120cf66
// -10.223921
0xc123952e
// -10.397208
0xc1265af6
// -10.570495
0xc12920bf
// -10.743781
0xc12be687
// -10.917068
0xc12eac50
// -11.090355
0xc1317218
// -11.263642
0xc13437e0
// -11.436928
0xc136fda9
// -11.610215
0xc139c371
// -11.783502
0xc13c8939
// -11.956789
0xc13f4f02
// -12.130076
0xc14214ca
// -12.303362
0xc144da93
// -12.476649
0xc147a05b
// -12.649936
0xc14a6623
// -12.823223
0xc14d2bec
// -12.996510
0xc14ff1b4
// -13.169796
0xc152b77c
// -13.343083
0xc1557d45
// -13.516370
0xc158430d
// -13.689657
0xc15b08d6
// -13.862944
0xc15dce9e
// -14.036230
0xc1609466
// -14.209517
0xc1635a2f
// -14.382804
0xc1661ff7
// -14.556091
0xc168e5bf
// -14.729378
0xc16bab88
// -14.902664
0xc16e7150
// -15.075951
0xc1713719
// -15.249238
0xc173fce1
// -15.422525
0xc176c2a9
// -15.595812
0xc1798872
// -15.769098
0xc17c4e3a
// -15.942385
0xc17f1402
// -16.115672
0xc180ece5
// -16.288959
0xc1824fca
// -16.462246
0xc183b2ae
// -16.635532
0xc1851592
// -16.808819
0xc1867876
// -16.982106
0xc187db5a
// -17.155393
0xc1893e3f
// -17.328680
0xc18aa123
// -17.501966
0xc18c0407
// -17.675253
0xc18d66eb
// -17.848540
0xc18ec9cf
// -18.021827
0xc1902cb3
// -18.195113
0xc1918f98
// -18.368400
0xc192f27c
// -18.541687
0xc1945560
// -18.714974
0xc195b844
// -18.888261
0xc1971b28
// -19.061547
0xc1987e0d
// -19.234834
0xc199e0f1
// -19.408121
0xc19b43d5
// -19.581408
0xc19ca6b9
// -19.754695
0xc19e099d
// -19.927981
0xc19f6c82
// -20.101268
0xc1a0cf66
// -20.274555
0xc1a2324a
// -20.447842
0xc1a3952e
// -20.621129
0xc1a4f812
// -20.794415
0xc1a65af6
// -20.967702
0xc1a7bddb
// -21.140989
0xc1a920bf
// -21.314276
0xc1aa83a3
// -21.487563
0xc1abe687
// -4.820282
0xc09a3fbf
// -4.127134
0xc084117c
// -3.721669
0xc06e2fd4
// -3.433987
0xc05bc672
// -3.210844
0xc04d7e76
// -3.028522
0xc041d34e
// -2.874371
0xc037f5b3
// -2.740840
0xc02f69ec
// -2.623057
0xc027e02a
// -2.517696
0xc02121f0
// -2.422386
0xc01b0860
// -2.335375
0xc01576c8
// -2.255332
0xc010575d
// -2.181224
0xc00b992e
// -2.112231
0xc0072ecc
// -2.047693
0xc0030d66
// -1.987068
0xbffe5840
// -1.929910
0xbff70749
// -1.875843
0xbff01b9c
// -1.824549
0xbfe98ad5
// -1.775759
0xbfe34c13
// -1.729239
0xbfdd57b5
// -1.684787
0xbfd7a71d
// -1.642228
0xbfd23485
// -1.601406
0xbfccfadd
// -1.562185
0xbfc7f5ae
// -1.524445
0xbfc32101
// -1.488077
0xbfbe794f
// -1.452986
0xbfb9fb70
// -1.419084
0xbfb5a48d
// -1.386294
0xbfb17218
// -1.354546
0xbfad61c1
// -1.323774
0xbfa9716d
// -1.293921
0xbfa59f34
// -1.264934
0xbfa1e957
// -1.236763
0xbf9e4e3d
// -1.209364
0xbf9acc6e
// -1.182695
0xbf976290
// -1.156720
0xbf940f66
// -1.131402
0xbf90d1c9
// -1.106709
0xbf8da8a8
// -1.082612
0xbf8a9307
// -1.059081
0xbf878ffb
// -1.036092
0xbf849ea9
// -1.013619
0xbf81be45
// -0.991640
0xbf7ddc21
// -0.970134
0xbf785ab3
// -0.949081
0xbf72f6f1
// -0.928461
0xbf6dafa3
// -0.908259
0xbf6883a2
// -0.888456
0xbf6371d9
// -0.869038
0xbf5e7944
// -0.849990
0xbf5998ec
// -0.831298
0xbf54cfea
// -0.812948
0xbf501d63
// -0.794930
0xbf4b8086
// -0.777230
0xbf46f891
// -0.759839
0xbf4284c8
// -0.742744
0xbf3e247b
// -0.725937
0xbf39d702
// -0.709408
0xbf359bbe
// -0.693147
0xbf317218
// -0.677147
0xbf2d597f
// -0.661398
0xbf295169
// -0.645894
0xbf255954
// -0.630627
0xbf2170c2
// -0.615589
0xbf1d973d
// -0.600774
0xbf19cc51
// -0.586175
0xbf160f92
// -0.571786
0xbf126097
// -0.557602
0xbf0ebefc
// -0.543615
0xbf0b2a62
// -0.529822
0xbf07a26c
// -0.516216
0xbf0426c3
// -0.502793
0xbf00b712
// -0.489548
0xbefaa611
// -0.476476
0xbef3f4ae
// -0.463573
0xbeed5968
// -0.450834
0xbee6d3ad
// -0.438255
0xbee062f3
// -0.425832
0xbeda06b5
// -0.413562
0xbed3be71
// -0.401441
0xbecd89ab
// -0.389465
0xbec767ed
// -0.377630
0xbec158c3
// -0.365934
0xbebb5bbd
// -0.354373
0xbeb57070
// -0.342945
0xbeaf9674
// -0.331645
0xbea9cd66
// -0.320472
0xbea414e4
// -0.309422
0xbe9e6c91
// -0.298493
0xbe98d413
// -0.287682
0xbe934b11
// -0.276987
0xbe8dd136
// -0.266405
0xbe886632
// -0.255933
0xbe8309b3
// -0.245571
0xbe7b76db
// -0.235314
0xbe70f62d
// -0.225162
0xbe6690cb
// -0.215111
0xbe5c4628
// -0.205161
0xbe5215bd
// -0.195309
0xbe47ff04
// -0.185553
0xbe3e017f
// -0.175891
0xbe341caf
// -0.166321
0xbe2a501c
// -0.156842
0xbe209b50
// -0.147453
0xbe16fdd9
// -0.138150
0xbe0d7748
// -0.128934
0xbe040731
// -0.119801
0xbdf55a55
// -0.110751
0xbde2d19c
// -0.101783
0xbdd07372
// -0.092894
0xbdbe3f14
// -0.084083
0xbdac33c5
// -0.075349
0xbd9a50ce
// -0.066691
0xbd88957d
// -0.058108
0xbd6e0244
// -0.049597
0xbd4b262a
// -0.041158
0xbd28955e
// -0.032790
0xbd064e9f
// -0.024491
0xbcc8a164
// -0.016261
0xbc8534c9
// -0.008097
0xbc04aa29
// 0.000000
0x0

@ -1,252 +1,252 @@
W
125
// 1.000000
0x3f800000
// 0.840896
0x3f5744fd
// 0.707107
0x3f3504f3
// 0.594604
0x3f1837f0
// 0.500000
0x3f000000
// 0.420448
0x3ed744fd
// 0.353553
0x3eb504f3
// 0.297302
0x3e9837f0
// 0.250000
0x3e800000
// 0.210224
0x3e5744fd
// 0.176777
0x3e3504f3
// 0.148651
0x3e1837f0
// 0.125000
0x3e000000
// 0.105112
0x3dd744fd
// 0.088388
0x3db504f3
// 0.074325
0x3d9837f0
// 0.062500
0x3d800000
// 0.052556
0x3d5744fd
// 0.044194
0x3d3504f3
// 0.037163
0x3d1837f0
// 0.031250
0x3d000000
// 0.026278
0x3cd744fd
// 0.022097
0x3cb504f3
// 0.018581
0x3c9837f0
// 0.015625
0x3c800000
// 0.013139
0x3c5744fd
// 0.011049
0x3c3504f3
// 0.009291
0x3c1837f0
// 0.007812
0x3c000000
// 0.006570
0x3bd744fd
// 0.005524
0x3bb504f3
// 0.004645
0x3b9837f0
// 0.003906
0x3b800000
// 0.003285
0x3b5744fd
// 0.002762
0x3b3504f3
// 0.002323
0x3b1837f0
// 0.001953
0x3b000000
// 0.001642
0x3ad744fd
// 0.001381
0x3ab504f3
// 0.001161
0x3a9837f0
// 0.000977
0x3a800000
// 0.000821
0x3a5744fd
// 0.000691
0x3a3504f3
// 0.000581
0x3a1837f0
// 0.000488
0x3a000000
// 0.000411
0x39d744fd
// 0.000345
0x39b504f3
// 0.000290
0x399837f0
// 0.000244
0x39800000
// 0.000205
0x395744fd
// 0.000173
0x393504f3
// 0.000145
0x391837f0
// 0.000122
0x39000000
// 0.000103
0x38d744fd
// 0.000086
0x38b504f3
// 0.000073
0x389837f0
// 0.000061
0x38800000
// 0.000051
0x385744fd
// 0.000043
0x383504f3
// 0.000036
0x381837f0
// 0.000031
0x38000000
// 0.000026
0x37d744fd
// 0.000022
0x37b504f3
// 0.000018
0x379837f0
// 0.000015
0x37800000
// 0.000013
0x375744fd
// 0.000011
0x373504f3
// 0.000009
0x371837f0
// 0.000008
0x37000000
// 0.000006
0x36d744fd
// 0.000005
0x36b504f3
// 0.000005
0x369837f0
// 0.000004
0x36800000
// 0.000003
0x365744fd
// 0.000003
0x363504f3
// 0.000002
0x361837f0
// 0.000002
0x36000000
// 0.000002
0x35d744fd
// 0.000001
0x35b504f3
// 0.000001
0x359837f0
// 0.000001
0x35800000
// 0.000001
0x355744fd
// 0.000001
0x353504f3
// 0.000001
0x351837f0
// 0.000000
0x35000000
// 0.000000
0x34d744fd
// 0.000000
0x34b504f3
// 0.000000
0x349837f0
// 0.000000
0x34800000
// 0.000000
0x345744fd
// 0.000000
0x343504f3
// 0.000000
0x341837f0
// 0.000000
0x34000000
// 0.000000
0x33d744fd
// 0.000000
0x33b504f3
// 0.000000
0x339837f0
// 0.000000
0x33800000
// 0.000000
0x335744fd
// 0.000000
0x333504f3
// 0.000000
0x331837f0
// 0.000000
0x33000000
// 0.000000
0x32d744fd
// 0.000000
0x32b504f3
// 0.000000
0x329837f0
// 0.000000
0x32800000
// 0.000000
0x325744fd
// 0.000000
0x323504f3
// 0.000000
0x321837f0
// 0.000000
0x32000000
// 0.000000
0x31d744fd
// 0.000000
0x31b504f3
// 0.000000
0x319837f0
// 0.000000
0x31800000
// 0.000000
0x315744fd
// 0.000000
0x313504f3
// 0.000000
0x311837f0
// 0.000000
0x31000000
// 0.000000
0x30d744fd
// 0.000000
0x30b504f3
// 0.000000
0x309837f0
// 0.000000
0x30800000
// 0.000000
0x305744fd
// 0.000000
0x303504f3
// 0.000000
0x301837f0
// 0.000000
0x30000000
// 0.008065
0x3c042109
// 0.016129
0x3c842109
// 0.024194
0x3cc6318d
// 0.032258
0x3d042108
// 0.040323
0x3d25294a
// 0.048387
0x3d46318d
// 0.056452
0x3d6739cf
// 0.064516
0x3d842108
// 0.072581
0x3d94a529
// 0.080645
0x3da5294a
// 0.088710
0x3db5ad6b
// 0.096774
0x3dc6318c
// 0.104839
0x3dd6b5ad
// 0.112903
0x3de739cf
// 0.120968
0x3df7bdf0
// 0.129032
0x3e042108
// 0.137097
0x3e0c6319
// 0.145161
0x3e14a529
// 0.153226
0x3e1ce73a
// 0.161290
0x3e25294a
// 0.169355
0x3e2d6b5b
// 0.177419
0x3e35ad6b
// 0.185484
0x3e3def7c
// 0.193548
0x3e46318c
// 0.201613
0x3e4e739d
// 0.209677
0x3e56b5ad
// 0.217742
0x3e5ef7be
// 0.225806
0x3e6739ce
// 0.233871
0x3e6f7bdf
// 0.241935
0x3e77bdf0
// 0.250000
0x3e800000
// 0.258065
0x3e842108
// 0.266129
0x3e884211
// 0.274194
0x3e8c6319
// 0.282258
0x3e908421
// 0.290323
0x3e94a529
// 0.298387
0x3e98c632
// 0.306452
0x3e9ce73a
// 0.314516
0x3ea10842
// 0.322581
0x3ea5294a
// 0.330645
0x3ea94a53
// 0.338710
0x3ead6b5b
// 0.346774
0x3eb18c63
// 0.354839
0x3eb5ad6b
// 0.362903
0x3eb9ce74
// 0.370968
0x3ebdef7c
// 0.379032
0x3ec21084
// 0.387097
0x3ec6318c
// 0.395161
0x3eca5295
// 0.403226
0x3ece739d
// 0.411290
0x3ed294a5
// 0.419355
0x3ed6b5ad
// 0.427419
0x3edad6b6
// 0.435484
0x3edef7be
// 0.443548
0x3ee318c6
// 0.451613
0x3ee739ce
// 0.459677
0x3eeb5ad7
// 0.467742
0x3eef7bdf
// 0.475806
0x3ef39ce7
// 0.483871
0x3ef7bdef
// 0.491935
0x3efbdef8
// 0.500000
0x3f000000
// 0.508065
0x3f021084
// 0.516129
0x3f042108
// 0.524194
0x3f06318c
// 0.532258
0x3f084211
// 0.540323
0x3f0a5295
// 0.548387
0x3f0c6319
// 0.556452
0x3f0e739d
// 0.564516
0x3f108421
// 0.572581
0x3f1294a5
// 0.580645
0x3f14a529
// 0.588710
0x3f16b5ad
// 0.596774
0x3f18c632
// 0.604839
0x3f1ad6b6
// 0.612903
0x3f1ce73a
// 0.620968
0x3f1ef7be
// 0.629032
0x3f210842
// 0.637097
0x3f2318c6
// 0.645161
0x3f25294a
// 0.653226
0x3f2739ce
// 0.661290
0x3f294a53
// 0.669355
0x3f2b5ad7
// 0.677419
0x3f2d6b5b
// 0.685484
0x3f2f7bdf
// 0.693548
0x3f318c63
// 0.701613
0x3f339ce7
// 0.709677
0x3f35ad6b
// 0.717742
0x3f37bdef
// 0.725806
0x3f39ce74
// 0.733871
0x3f3bdef8
// 0.741935
0x3f3def7c
// 0.750000
0x3f400000
// 0.758065
0x3f421084
// 0.766129
0x3f442108
// 0.774194
0x3f46318c
// 0.782258
0x3f484211
// 0.790323
0x3f4a5295
// 0.798387
0x3f4c6319
// 0.806452
0x3f4e739d
// 0.814516
0x3f508421
// 0.822581
0x3f5294a5
// 0.830645
0x3f54a529
// 0.838710
0x3f56b5ad
// 0.846774
0x3f58c632
// 0.854839
0x3f5ad6b6
// 0.862903
0x3f5ce73a
// 0.870968
0x3f5ef7be
// 0.879032
0x3f610842
// 0.887097
0x3f6318c6
// 0.895161
0x3f65294a
// 0.903226
0x3f6739ce
// 0.911290
0x3f694a53
// 0.919355
0x3f6b5ad7
// 0.927419
0x3f6d6b5b
// 0.935484
0x3f6f7bdf
// 0.943548
0x3f718c63
// 0.951613
0x3f739ce7
// 0.959677
0x3f75ad6b
// 0.967742
0x3f77bdef
// 0.975806
0x3f79ce74
// 0.983871
0x3f7bdef8
// 0.991935
0x3f7def7c
// 1.000000
0x3f800000

@ -1,252 +1,252 @@
D
125
// 0.000000
0x0
// -0.173287
0xbfc62e42fefa39f1
// -0.346574
0xbfd62e42fefa39ee
// -0.519860
0xbfe0a2b23f3bab74
// -0.693147
0xbfe62e42fefa39ef
// -0.866434
0xbfebb9d3beb8c86b
// -1.039721
0xbff0a2b23f3bab73
// -1.213008
0xbff3687a9f1af2b1
// -1.386294
0xbff62e42fefa39ef
// -1.559581
0xbff8f40b5ed9812d
// -1.732868
0xbffbb9d3beb8c86b
// -1.906155
0xbffe7f9c1e980fa9
// -2.079442
0xc000a2b23f3bab73
// -2.252728
0xc00205966f2b4f12
// -2.426015
0xc003687a9f1af2b1
// -2.599302
0xc004cb5ecf0a9650
// -2.772589
0xc0062e42fefa39ef
// -2.945876
0xc00791272ee9dd8e
// -3.119162
0xc008f40b5ed9812d
// -3.292449
0xc00a56ef8ec924cc
// -3.465736
0xc00bb9d3beb8c86b
// -3.639023
0xc00d1cb7eea86c0a
// -3.812309
0xc00e7f9c1e980fa9
// -3.985596
0xc00fe2804e87b348
// -4.158883
0xc010a2b23f3bab73
// -4.332170
0xc011542457337d43
// -4.505457
0xc01205966f2b4f12
// -4.678743
0xc012b708872320e2
// -4.852030
0xc013687a9f1af2b1
// -5.025317
0xc01419ecb712c481
// -5.198604
0xc014cb5ecf0a9650
// -5.371891
0xc0157cd0e7026820
// -5.545177
0xc0162e42fefa39ef
// -5.718464
0xc016dfb516f20bbf
// -5.891751
0xc01791272ee9dd8e
// -6.065038
0xc018429946e1af5e
// -6.238325
0xc018f40b5ed9812d
// -6.411611
0xc019a57d76d152fd
// -6.584898
0xc01a56ef8ec924cc
// -6.758185
0xc01b0861a6c0f69c
// -6.931472
0xc01bb9d3beb8c86b
// -7.104759
0xc01c6b45d6b09a3b
// -7.278045
0xc01d1cb7eea86c0a
// -7.451332
0xc01dce2a06a03dd9
// -7.624619
0xc01e7f9c1e980fa9
// -7.797906
0xc01f310e368fe178
// -7.971193
0xc01fe2804e87b348
// -8.144479
0xc02049f9333fc28c
// -8.317766
0xc020a2b23f3bab73
// -8.491053
0xc020fb6b4b37945b
// -8.664340
0xc021542457337d43
// -8.837627
0xc021acdd632f662b
// -9.010913
0xc02205966f2b4f12
// -9.184200
0xc0225e4f7b2737fa
// -9.357487
0xc022b708872320e2
// -9.530774
0xc0230fc1931f09ca
// -9.704061
0xc023687a9f1af2b1
// -9.877347
0xc023c133ab16db99
// -10.050634
0xc02419ecb712c481
// -10.223921
0xc02472a5c30ead69
// -10.397208
0xc024cb5ecf0a9650
// -10.570495
0xc0252417db067f38
// -10.743781
0xc0257cd0e7026820
// -10.917068
0xc025d589f2fe5107
// -11.090355
0xc0262e42fefa39ef
// -11.263642
0xc02686fc0af622d7
// -11.436928
0xc026dfb516f20bbf
// -11.610215
0xc027386e22edf4a6
// -11.783502
0xc02791272ee9dd8e
// -11.956789
0xc027e9e03ae5c676
// -12.130076
0xc028429946e1af5e
// -12.303362
0xc0289b5252dd9845
// -12.476649
0xc028f40b5ed9812d
// -12.649936
0xc0294cc46ad56a15
// -12.823223
0xc029a57d76d152fd
// -12.996510
0xc029fe3682cd3be4
// -13.169796
0xc02a56ef8ec924cc
// -13.343083
0xc02aafa89ac50db4
// -13.516370
0xc02b0861a6c0f69b
// -13.689657
0xc02b611ab2bcdf83
// -13.862944
0xc02bb9d3beb8c86b
// -14.036230
0xc02c128ccab4b153
// -14.209517
0xc02c6b45d6b09a3a
// -14.382804
0xc02cc3fee2ac8322
// -14.556091
0xc02d1cb7eea86c0a
// -14.729378
0xc02d7570faa454f2
// -14.902664
0xc02dce2a06a03dd9
// -15.075951
0xc02e26e3129c26c1
// -15.249238
0xc02e7f9c1e980fa9
// -15.422525
0xc02ed8552a93f891
// -15.595812
0xc02f310e368fe178
// -15.769098
0xc02f89c7428bca60
// -15.942385
0xc02fe2804e87b348
// -16.115672
0xc0301d9cad41ce18
// -16.288959
0xc03049f9333fc28c
// -16.462246
0xc0307655b93db700
// -16.635532
0xc030a2b23f3bab73
// -16.808819
0xc030cf0ec5399fe7
// -16.982106
0xc030fb6b4b37945b
// -17.155393
0xc03127c7d13588cf
// -17.328680
0xc031542457337d43
// -17.501966
0xc0318080dd3171b7
// -17.675253
0xc031acdd632f662b
// -17.848540
0xc031d939e92d5a9e
// -18.021827
0xc03205966f2b4f12
// -18.195113
0xc03231f2f5294386
// -18.368400
0xc0325e4f7b2737fa
// -18.541687
0xc0328aac01252c6e
// -18.714974
0xc032b708872320e2
// -18.888261
0xc032e3650d211556
// -19.061547
0xc0330fc1931f09ca
// -19.234834
0xc0333c1e191cfe3d
// -19.408121
0xc033687a9f1af2b1
// -19.581408
0xc03394d72518e725
// -19.754695
0xc033c133ab16db99
// -19.927981
0xc033ed903114d00d
// -20.101268
0xc03419ecb712c481
// -20.274555
0xc03446493d10b8f5
// -20.447842
0xc03472a5c30ead69
// -20.621129
0xc0349f02490ca1dc
// -20.794415
0xc034cb5ecf0a9650
// -20.967702
0xc034f7bb55088ac4
// -21.140989
0xc0352417db067f38
// -21.314276
0xc0355074610473ac
// -21.487563
0xc0357cd0e7026820
// -4.820282
0xc01347f7e02f242b
// -4.127134
0xc010822f823fdceb
// -3.721669
0xc00dc5fa88327177
// -3.433987
0xc00b78ce46b12b5a
// -3.210844
0xc009afceca9ab4eb
// -3.028522
0xc0083a69c9be8da6
// -2.874371
0xc006feb66fe9ad6f
// -2.740840
0xc005ed3d87ea9cde
// -2.623057
0xc004fc054c94d380
// -2.517696
0xc004243e0ba28cd6
// -2.422386
0xc003610c0feab3ef
// -2.335375
0xc002aed90aa5547f
// -2.255332
0xc0020aeb9c541e77
// -2.181224
0xc0017325b0b8d5cf
// -2.112231
0xc000e5d98e4cbbee
// -2.047693
0xc00061acc8a80e62
// -1.987068
0xbfffcb080b5e2846
// -1.929910
0xbffee0e91a88fbcf
// -1.875843
0xbffe0373836252b6
// -1.824549
0xbffd315a988e631b
// -1.775759
0xbffc698266a03f72
// -1.729239
0xbffbaaf6a10ca7fd
// -1.684787
0xbffaf4e393eca332
// -1.642228
0xbffa46909672e15c
// -1.601406
0xbff99f5b9fc2bdea
// -1.562185
0xbff8feb5b9c3bd80
// -1.524445
0xbff864201fa290ff
// -1.488077
0xbff7cf29e2824581
// -1.452986
0xbff73f6df817c089
// -1.419084
0xbff6b4919da09f29
// -1.386294
0xbff62e42fe9a39ef
// -1.354546
0xbff5ac38124effcd
// -1.323774
0xbff52e2da618e0f2
// -1.293921
0xbff4b3e68c55c003
// -1.264934
0xbff43d2ae9ab4a03
// -1.236763
0xbff3c9c79b7a17bb
// -1.209364
0xbff3598db35bc2e4
// -1.182695
0xbff2ec52044da189
// -1.156720
0xbff281ecbec6b69b
// -1.131402
0xbff21a3919747956
// -1.106709
0xbff1b51504be7039
// -1.082612
0xbff15260e7819c62
// -1.059081
0xbff0f1ff63b67110
// -1.036092
0xbff093d521e9b991
// -1.013619
0xbff037c8a29ccfd8
// -0.991640
0xbfefbb84298b9206
// -0.970134
0xbfef0b56618c848e
// -0.949081
0xbfee5ede2e90de1f
// -0.928461
0xbfedb5f4670dc25c
// -0.908259
0xbfed10744129fa38
// -0.888456
0xbfec6e3b229981af
// -0.869038
0xbfebcf287525de9a
// -0.849990
0xbfeb331d7f5a723b
// -0.831298
0xbfea99fd40ddde93
// -0.812948
0xbfea03ac5210df38
// -0.794930
0xbfe97010c69807ee
// -0.777230
0xbfe8df121281141c
// -0.759839
0xbfe85098f1be1aff
// -0.742744
0xbfe7c48f51b95355
// -0.725937
0xbfe73ae03ccb48a7
// -0.709408
0xbfe6b377c763a7b1
// -0.693147
0xbfe62e42feba39ef
// -0.677147
0xbfe5ab2fd8e2688e
// -0.661398
0xbfe52a2d261fc5ab
// -0.645894
0xbfe4ab2a835dbdfa
// -0.630627
0xbfe42e184dafc604
// -0.615589
0xbfe3b2e796c2253b
// -0.600774
0xbfe3398a1a25facc
// -0.586175
0xbfe2c1f2336547bb
// -0.571786
0xbfe24c12d4cdb92c
// -0.557602
0xbfe1d7df7ee2a4b0
// -0.543615
0xbfe1654c38682e6b
// -0.529822
0xbfe0f44d86faebba
// -0.516216
0xbfe084d868288a1e
// -0.502793
0xbfe016e24aff162d
// -0.489548
0xbfdf54c21412e9d9
// -0.476476
0xbfde7e95cb60fd94
// -0.463573
0xbfddab2cfdf1e345
// -0.450834
0xbfdcda75a52e420d
// -0.438255
0xbfdc0c5e68a3d7e0
// -0.425832
0xbfdb40d6955e1e86
// -0.413562
0xbfda77ce15c6dca3
// -0.401441
0xbfd9b1356a04bfd7
// -0.389465
0xbfd8ecfda0cef178
// -0.377630
0xbfd82b1850ad5735
// -0.365934
0xbfd76b77919ddf42
// -0.354373
0xbfd6ae0df717d59b
// -0.342945
0xbfd5f2ce8a66cf7c
// -0.331645
0xbfd539acc5573cde
// -0.320472
0xbfd4829c8d2f2686
// -0.309422
0xbfd3cd922dee0bc0
// -0.298493
0xbfd31a8255cf35be
// -0.287682
0xbfd26962110a30e8
// -0.276987
0xbfd1ba26c5cd6f1c
// -0.266405
0xbfd10cc6306f617e
// -0.255933
0xbfd061365fd29db5
// -0.245571
0xbfcf6edb63f3c41f
// -0.235314
0xbfce1ec5a1920ccd
// -0.225162
0xbfccd2195de03a36
// -0.215111
0xbfcb88c509fc71c6
// -0.205161
0xbfca42b79d32f2f8
// -0.195309
0xbfc8ffe08fb45634
// -0.185553
0xbfc7c02fd58dd5e8
// -0.175891
0xbfc68395d9dfcdc0
// -0.166321
0xbfc54a037a4edd8b
// -0.156842
0xbfc4136a02ac59f1
// -0.147453
0xbfc2dfbb28d2ed6a
// -0.138150
0xbfc1aee908b47f9a
// -0.128934
0xbfc080e62096a99b
// -0.119801
0xbfbeab4a9af6542b
// -0.110751
0xbfbc5a338f63eb20
// -0.101783
0xbfba0e6e3f254b64
// -0.092894
0xbfb7c7e274b65c08
// -0.084083
0xbfb586789e63baf2
// -0.075349
0xbfb34a19c891a728
// -0.066691
0xbfb112af984257f1
// -0.058108
0xbfadc0488bb0f9a5
// -0.049597
0xbfa964c53025a7b6
// -0.041158
0xbfa512abbe7be48e
// -0.032790
0xbfa0c9d3e1330da4
// -0.024491
0xbf99142c87ba162b
// -0.016261
0xbf90a699154f4b19
// -0.008097
0xbf80954528f93190
// 0.000000
0x0

@ -1,252 +1,252 @@
D
125
// 1.000000
0x3ff0000000000000
// 0.840896
0x3feae89f995ad3ad
// 0.707107
0x3fe6a09e667f3bcd
// 0.594604
0x3fe306fe0a31b715
// 0.500000
0x3fe0000000000000
// 0.420448
0x3fdae89f995ad3ad
// 0.353553
0x3fd6a09e667f3bcd
// 0.297302
0x3fd306fe0a31b715
// 0.250000
0x3fd0000000000000
// 0.210224
0x3fcae89f995ad3ad
// 0.176777
0x3fc6a09e667f3bcd
// 0.148651
0x3fc306fe0a31b715
// 0.125000
0x3fc0000000000000
// 0.105112
0x3fbae89f995ad3ad
// 0.088388
0x3fb6a09e667f3bcd
// 0.074325
0x3fb306fe0a31b715
// 0.062500
0x3fb0000000000000
// 0.052556
0x3faae89f995ad3ad
// 0.044194
0x3fa6a09e667f3bcd
// 0.037163
0x3fa306fe0a31b715
// 0.031250
0x3fa0000000000000
// 0.026278
0x3f9ae89f995ad3ad
// 0.022097
0x3f96a09e667f3bcd
// 0.018581
0x3f9306fe0a31b715
// 0.015625
0x3f90000000000000
// 0.013139
0x3f8ae89f995ad3ad
// 0.011049
0x3f86a09e667f3bcd
// 0.009291
0x3f8306fe0a31b715
// 0.007812
0x3f80000000000000
// 0.006570
0x3f7ae89f995ad3ad
// 0.005524
0x3f76a09e667f3bcd
// 0.004645
0x3f7306fe0a31b715
// 0.003906
0x3f70000000000000
// 0.003285
0x3f6ae89f995ad3ad
// 0.002762
0x3f66a09e667f3bcd
// 0.002323
0x3f6306fe0a31b715
// 0.001953
0x3f60000000000000
// 0.001642
0x3f5ae89f995ad3ad
// 0.001381
0x3f56a09e667f3bcd
// 0.001161
0x3f5306fe0a31b715
// 0.000977
0x3f50000000000000
// 0.000821
0x3f4ae89f995ad3ad
// 0.000691
0x3f46a09e667f3bcd
// 0.000581
0x3f4306fe0a31b715
// 0.000488
0x3f40000000000000
// 0.000411
0x3f3ae89f995ad3ad
// 0.000345
0x3f36a09e667f3bcd
// 0.000290
0x3f3306fe0a31b715
// 0.000244
0x3f30000000000000
// 0.000205
0x3f2ae89f995ad3ad
// 0.000173
0x3f26a09e667f3bcd
// 0.000145
0x3f2306fe0a31b715
// 0.000122
0x3f20000000000000
// 0.000103
0x3f1ae89f995ad3ad
// 0.000086
0x3f16a09e667f3bcd
// 0.000073
0x3f1306fe0a31b715
// 0.000061
0x3f10000000000000
// 0.000051
0x3f0ae89f995ad3ad
// 0.000043
0x3f06a09e667f3bcd
// 0.000036
0x3f0306fe0a31b715
// 0.000031
0x3f00000000000000
// 0.000026
0x3efae89f995ad3ad
// 0.000022
0x3ef6a09e667f3bcd
// 0.000018
0x3ef306fe0a31b715
// 0.000015
0x3ef0000000000000
// 0.000013
0x3eeae89f995ad3ad
// 0.000011
0x3ee6a09e667f3bcd
// 0.000009
0x3ee306fe0a31b715
// 0.000008
0x3ee0000000000000
// 0.000006
0x3edae89f995ad3ad
// 0.000005
0x3ed6a09e667f3bcd
// 0.000005
0x3ed306fe0a31b715
// 0.000004
0x3ed0000000000000
// 0.000003
0x3ecae89f995ad3ad
// 0.000003
0x3ec6a09e667f3bcd
// 0.000002
0x3ec306fe0a31b715
// 0.000002
0x3ec0000000000000
// 0.000002
0x3ebae89f995ad3ad
// 0.000001
0x3eb6a09e667f3bcd
// 0.000001
0x3eb306fe0a31b715
// 0.000001
0x3eb0000000000000
// 0.000001
0x3eaae89f995ad3ad
// 0.000001
0x3ea6a09e667f3bcd
// 0.000001
0x3ea306fe0a31b715
// 0.000000
0x3ea0000000000000
// 0.000000
0x3e9ae89f995ad3ad
// 0.000000
0x3e96a09e667f3bcd
// 0.000000
0x3e9306fe0a31b715
// 0.000000
0x3e90000000000000
// 0.000000
0x3e8ae89f995ad3ad
// 0.000000
0x3e86a09e667f3bcd
// 0.000000
0x3e8306fe0a31b715
// 0.000000
0x3e80000000000000
// 0.000000
0x3e7ae89f995ad3ad
// 0.000000
0x3e76a09e667f3bcd
// 0.000000
0x3e7306fe0a31b715
// 0.000000
0x3e70000000000000
// 0.000000
0x3e6ae89f995ad3ad
// 0.000000
0x3e66a09e667f3bcd
// 0.000000
0x3e6306fe0a31b715
// 0.000000
0x3e60000000000000
// 0.000000
0x3e5ae89f995ad3ad
// 0.000000
0x3e56a09e667f3bcd
// 0.000000
0x3e5306fe0a31b715
// 0.000000
0x3e50000000000000
// 0.000000
0x3e4ae89f995ad3ad
// 0.000000
0x3e46a09e667f3bcd
// 0.000000
0x3e4306fe0a31b715
// 0.000000
0x3e40000000000000
// 0.000000
0x3e3ae89f995ad3ad
// 0.000000
0x3e36a09e667f3bcd
// 0.000000
0x3e3306fe0a31b715
// 0.000000
0x3e30000000000000
// 0.000000
0x3e2ae89f995ad3ad
// 0.000000
0x3e26a09e667f3bcd
// 0.000000
0x3e2306fe0a31b715
// 0.000000
0x3e20000000000000
// 0.000000
0x3e1ae89f995ad3ad
// 0.000000
0x3e16a09e667f3bcd
// 0.000000
0x3e1306fe0a31b715
// 0.000000
0x3e10000000000000
// 0.000000
0x3e0ae89f995ad3ad
// 0.000000
0x3e06a09e667f3bcd
// 0.000000
0x3e0306fe0a31b715
// 0.000000
0x3e00000000000000
// 0.008065
0x3f80842118210842
// 0.016129
0x3f90842110210842
// 0.024194
0x3f98c63194318c63
// 0.032258
0x3fa084210c210842
// 0.040323
0x3fa4a5294e294a52
// 0.048387
0x3fa8c63190318c63
// 0.056452
0x3face739d239ce74
// 0.064516
0x3fb084210a210842
// 0.072581
0x3fb294a52b25294a
// 0.080645
0x3fb4a5294c294a52
// 0.088710
0x3fb6b5ad6d2d6b5b
// 0.096774
0x3fb8c6318e318c63
// 0.104839
0x3fbad6b5af35ad6b
// 0.112903
0x3fbce739d039ce74
// 0.120968
0x3fbef7bdf13def7c
// 0.129032
0x3fc0842109210842
// 0.137097
0x3fc18c6319a318c6
// 0.145161
0x3fc294a52a25294a
// 0.153226
0x3fc39ce73aa739ce
// 0.161290
0x3fc4a5294b294a52
// 0.169355
0x3fc5ad6b5bab5ad7
// 0.177419
0x3fc6b5ad6c2d6b5b
// 0.185484
0x3fc7bdef7caf7bdf
// 0.193548
0x3fc8c6318d318c63
// 0.201613
0x3fc9ce739db39ce7
// 0.209677
0x3fcad6b5ae35ad6b
// 0.217742
0x3fcbdef7beb7bdef
// 0.225806
0x3fcce739cf39ce74
// 0.233871
0x3fcdef7bdfbbdef8
// 0.241935
0x3fcef7bdf03def7c
// 0.250000
0x3fd0000000600000
// 0.258065
0x3fd0842108a10842
// 0.266129
0x3fd1084210e21084
// 0.274194
0x3fd18c63192318c6
// 0.282258
0x3fd2108421642108
// 0.290323
0x3fd294a529a5294a
// 0.298387
0x3fd318c631e6318c
// 0.306452
0x3fd39ce73a2739ce
// 0.314516
0x3fd4210842684210
// 0.322581
0x3fd4a5294aa94a52
// 0.330645
0x3fd5294a52ea5295
// 0.338710
0x3fd5ad6b5b2b5ad7
// 0.346774
0x3fd6318c636c6319
// 0.354839
0x3fd6b5ad6bad6b5b
// 0.362903
0x3fd739ce73ee739d
// 0.370968
0x3fd7bdef7c2f7bdf
// 0.379032
0x3fd8421084708421
// 0.387097
0x3fd8c6318cb18c63
// 0.395161
0x3fd94a5294f294a5
// 0.403226
0x3fd9ce739d339ce7
// 0.411290
0x3fda5294a574a529
// 0.419355
0x3fdad6b5adb5ad6b
// 0.427419
0x3fdb5ad6b5f6b5ad
// 0.435484
0x3fdbdef7be37bdef
// 0.443548
0x3fdc6318c678c631
// 0.451613
0x3fdce739ceb9ce74
// 0.459677
0x3fdd6b5ad6fad6b6
// 0.467742
0x3fddef7bdf3bdef8
// 0.475806
0x3fde739ce77ce73a
// 0.483871
0x3fdef7bdefbdef7c
// 0.491935
0x3fdf7bdef7fef7be
// 0.500000
0x3fe0000000200000
// 0.508065
0x3fe0421084408421
// 0.516129
0x3fe0842108610842
// 0.524194
0x3fe0c6318c818c63
// 0.532258
0x3fe1084210a21084
// 0.540323
0x3fe14a5294c294a5
// 0.548387
0x3fe18c6318e318c6
// 0.556452
0x3fe1ce739d039ce7
// 0.564516
0x3fe2108421242108
// 0.572581
0x3fe25294a544a529
// 0.580645
0x3fe294a52965294a
// 0.588710
0x3fe2d6b5ad85ad6b
// 0.596774
0x3fe318c631a6318c
// 0.604839
0x3fe35ad6b5c6b5ad
// 0.612903
0x3fe39ce739e739ce
// 0.620968
0x3fe3def7be07bdef
// 0.629032
0x3fe4210842284210
// 0.637097
0x3fe46318c648c631
// 0.645161
0x3fe4a5294a694a52
// 0.653226
0x3fe4e739ce89ce74
// 0.661290
0x3fe5294a52aa5295
// 0.669355
0x3fe56b5ad6cad6b6
// 0.677419
0x3fe5ad6b5aeb5ad7
// 0.685484
0x3fe5ef7bdf0bdef8
// 0.693548
0x3fe6318c632c6319
// 0.701613
0x3fe6739ce74ce73a
// 0.709677
0x3fe6b5ad6b6d6b5b
// 0.717742
0x3fe6f7bdef8def7c
// 0.725806
0x3fe739ce73ae739d
// 0.733871
0x3fe77bdef7cef7be
// 0.741935
0x3fe7bdef7bef7bdf
// 0.750000
0x3fe8000000100000
// 0.758065
0x3fe8421084308421
// 0.766129
0x3fe8842108510842
// 0.774194
0x3fe8c6318c718c63
// 0.782258
0x3fe9084210921084
// 0.790323
0x3fe94a5294b294a5
// 0.798387
0x3fe98c6318d318c6
// 0.806452
0x3fe9ce739cf39ce7
// 0.814516
0x3fea108421142108
// 0.822581
0x3fea5294a534a529
// 0.830645
0x3fea94a52955294a
// 0.838710
0x3fead6b5ad75ad6b
// 0.846774
0x3feb18c63196318c
// 0.854839
0x3feb5ad6b5b6b5ad
// 0.862903
0x3feb9ce739d739ce
// 0.870968
0x3febdef7bdf7bdef
// 0.879032
0x3fec210842184210
// 0.887097
0x3fec6318c638c631
// 0.895161
0x3feca5294a594a52
// 0.903226
0x3fece739ce79ce74
// 0.911290
0x3fed294a529a5295
// 0.919355
0x3fed6b5ad6bad6b6
// 0.927419
0x3fedad6b5adb5ad7
// 0.935484
0x3fedef7bdefbdef8
// 0.943548
0x3fee318c631c6319
// 0.951613
0x3fee739ce73ce73a
// 0.959677
0x3feeb5ad6b5d6b5b
// 0.967742
0x3feef7bdef7def7c
// 0.975806
0x3fef39ce739e739d
// 0.983871
0x3fef7bdef7bef7be
// 0.991935
0x3fefbdef7bdf7bdf
// 1.000000
0x3ff0000000000000

@ -1,252 +1,252 @@
H
125
// 0.000000
0x0000
// -0.005241
0xFF54
// -0.010481
0xFEA9
// -0.015722
0xFDFD
// -0.020962
0xFD51
// -0.026203
0xFCA5
// -0.031443
0xFBFA
// -0.036684
0xFB4E
// -0.041924
0xFAA2
// -0.047165
0xF9F7
// -0.052405
0xF94B
// -0.057646
0xF89F
// -0.062886
0xF7F3
// -0.068127
0xF748
// -0.073367
0xF69C
// -0.078608
0xF5F0
// -0.083848
0xF544
// -0.089089
0xF499
// -0.094330
0xF3ED
// -0.099570
0xF341
// -0.104811
0xF296
// -0.110051
0xF1EA
// -0.115292
0xF13E
// -0.120532
0xF092
// -0.125773
0xEFE7
// -0.131013
0xEF3B
// -0.136254
0xEE8F
// -0.141494
0xEDE4
// -0.146735
0xED38
// -0.151975
0xEC8C
// -0.157216
0xEBE0
// -0.162456
0xEB35
// -0.167697
0xEA89
// -0.172937
0xE9DD
// -0.178178
0xE931
// -0.183418
0xE886
// -0.188659
0xE7DA
// -0.193900
0xE72E
// -0.199140
0xE683
// -0.204381
0xE5D7
// -0.209621
0xE52B
// -0.214862
0xE47F
// -0.220102
0xE3D4
// -0.225343
0xE328
// -0.230583
0xE27C
// -0.235824
0xE1D1
// -0.241064
0xE125
// -0.246305
0xE079
// -0.251545
0xDFCD
// -0.256786
0xDF22
// -0.262026
0xDE76
// -0.267267
0xDDCA
// -0.272507
0xDD1E
// -0.277748
0xDC73
// -0.282989
0xDBC7
// -0.288229
0xDB1B
// -0.293470
0xDA70
// -0.298710
0xD9C4
// -0.303951
0xD918
// -0.309191
0xD86C
// -0.314432
0xD7C1
// -0.319672
0xD715
// -0.324913
0xD669
// -0.330153
0xD5BE
// -0.335394
0xD512
// -0.340634
0xD466
// -0.345875
0xD3BA
// -0.351115
0xD30F
// -0.356356
0xD263
// -0.361596
0xD1B7
// -0.366837
0xD10B
// -0.372077
0xD060
// -0.377318
0xCFB4
// -0.382559
0xCF08
// -0.387799
0xCE5D
// -0.393040
0xCDB1
// -0.398280
0xCD05
// -0.403521
0xCC59
// -0.408761
0xCBAE
// -0.414002
0xCB02
// -0.419242
0xCA56
// -0.424483
0xC9AB
// -0.429723
0xC8FF
// -0.434964
0xC853
// -0.440204
0xC7A7
// -0.445445
0xC6FC
// -0.450685
0xC650
// -0.455926
0xC5A4
// -0.461166
0xC4F8
// -0.466407
0xC44D
// -0.471648
0xC3A1
// -0.476888
0xC2F5
// -0.482129
0xC24A
// -0.487369
0xC19E
// -0.492610
0xC0F2
// -0.497850
0xC046
// -0.503091
0xBF9B
// -0.508331
0xBEEF
// -0.513572
0xBE43
// -0.518812
0xBD98
// -0.524053
0xBCEC
// -0.529293
0xBC40
// -0.534534
0xBB94
// -0.539774
0xBAE9
// -0.545015
0xBA3D
// -0.550255
0xB991
// -0.555496
0xB8E6
// -0.560737
0xB83A
// -0.565977
0xB78E
// -0.571218
0xB6E2
// -0.576458
0xB637
// -0.581699
0xB58B
// -0.586939
0xB4DF
// -0.592180
0xB433
// -0.597420
0xB388
// -0.602661
0xB2DC
// -0.607901
0xB230
// -0.613142
0xB185
// -0.618382
0xB0D9
// -0.623623
0xB02D
// -0.628863
0xAF81
// -0.634104
0xAED6
// -0.639344
0xAE2A
// -0.644585
0xAD7E
// -0.649825
0xACD3
// -0.301033
0xD978
// -0.257830
0xDEFF
// -0.232527
0xE23D
// -0.214567
0xE489
// -0.200632
0xE652
// -0.189245
0xE7C7
// -0.179616
0xE902
// -0.171275
0xEA14
// -0.163917
0xEB05
// -0.157334
0xEBDC
// -0.151380
0xECA0
// -0.145943
0xED52
// -0.140942
0xEDF6
// -0.136312
0xEE8D
// -0.132001
0xEF1B
// -0.127968
0xEF9F
// -0.124180
0xF01B
// -0.120608
0xF090
// -0.117230
0xF0FF
// -0.114024
0xF168
// -0.110976
0xF1CC
// -0.108069
0xF22B
// -0.105291
0xF286
// -0.102631
0xF2DD
// -0.100080
0xF331
// -0.097629
0xF381
// -0.095271
0xF3CE
// -0.092998
0xF419
// -0.090805
0xF460
// -0.088687
0xF4A6
// -0.086638
0xF4E9
// -0.084654
0xF52A
// -0.082731
0xF569
// -0.080865
0xF5A6
// -0.079053
0xF5E2
// -0.077293
0xF61B
// -0.075581
0xF653
// -0.073914
0xF68A
// -0.072291
0xF6BF
// -0.070709
0xF6F3
// -0.069165
0xF726
// -0.067660
0xF757
// -0.066189
0xF787
// -0.064752
0xF7B6
// -0.063348
0xF7E4
// -0.061974
0xF811
// -0.060630
0xF83D
// -0.059315
0xF868
// -0.058026
0xF893
// -0.056763
0xF8BC
// -0.055526
0xF8E5
// -0.054312
0xF90C
// -0.053122
0xF933
// -0.051954
0xF95A
// -0.050807
0xF97F
// -0.049681
0xF9A4
// -0.048575
0xF9C8
// -0.047488
0xF9EC
// -0.046419
0xFA0F
// -0.045369
0xFA31
// -0.044336
0xFA53
// -0.043320
0xFA74
// -0.042320
0xFA95
// -0.041336
0xFAB6
// -0.040367
0xFAD5
// -0.039413
0xFAF5
// -0.038473
0xFB13
// -0.037547
0xFB32
// -0.036634
0xFB50
// -0.035735
0xFB6D
// -0.034849
0xFB8A
// -0.033975
0xFBA7
// -0.033113
0xFBC3
// -0.032262
0xFBDF
// -0.031423
0xFBFA
// -0.030596
0xFC15
// -0.029779
0xFC30
// -0.028972
0xFC4B
// -0.028176
0xFC65
// -0.027390
0xFC7E
// -0.026614
0xFC98
// -0.025847
0xFCB1
// -0.025089
0xFCCA
// -0.024341
0xFCE2
// -0.023601
0xFCFB
// -0.022870
0xFD13
// -0.022148
0xFD2A
// -0.021433
0xFD42
// -0.020727
0xFD59
// -0.020029
0xFD70
// -0.019338
0xFD86
// -0.018655
0xFD9D
// -0.017979
0xFDB3
// -0.017311
0xFDC9
// -0.016650
0xFDDE
// -0.015995
0xFDF4
// -0.015348
0xFE09
// -0.014707
0xFE1E
// -0.014072
0xFE33
// -0.013444
0xFE47
// -0.012822
0xFE5C
// -0.012206
0xFE70
// -0.011597
0xFE84
// -0.010993
0xFE98
// -0.010395
0xFEAB
// -0.009802
0xFEBF
// -0.009215
0xFED2
// -0.008634
0xFEE5
// -0.008058
0xFEF8
// -0.007487
0xFF0B
// -0.006922
0xFF1D
// -0.006361
0xFF30
// -0.005806
0xFF42
// -0.005255
0xFF54
// -0.004709
0xFF66
// -0.004168
0xFF77
// -0.003632
0xFF89
// -0.003100
0xFF9A
// -0.002572
0xFFAC
// -0.002049
0xFFBD
// -0.001531
0xFFCE
// -0.001016
0xFFDF
// -0.000506
0xFFEF
// 0.000000
0x0000

@ -1,252 +1,252 @@
H
125
// 1.000000
0x7FFF
// 0.919571
0x75B4
// 0.845610
0x6C3D
// 0.777598
0x6388
// 0.715056
0x5B87
// 0.657545
0x542A
// 0.604659
0x4D65
// 0.556027
0x472C
// 0.511306
0x4172
// 0.470182
0x3C2F
// 0.432365
0x3758
// 0.397590
0x32E4
// 0.365612
0x2ECC
// 0.336206
0x2B09
// 0.309166
0x2793
// 0.284300
0x2464
// 0.261434
0x2177
// 0.240407
0x1EC6
// 0.221071
0x1C4C
// 0.203290
0x1A05
// 0.186940
0x17EE
// 0.171904
0x1601
// 0.158078
0x143C
// 0.145364
0x129B
// 0.133672
0x111C
// 0.122921
0x0FBC
// 0.113035
0x0E78
// 0.103943
0x0D4E
// 0.095583
0x0C3C
// 0.087896
0x0B40
// 0.080826
0x0A59
// 0.074325
0x0983
// 0.068347
0x08C0
// 0.062850
0x080B
// 0.057795
0x0766
// 0.053147
0x06CE
// 0.048872
0x0641
// 0.044942
0x05C1
// 0.041327
0x054A
// 0.038003
0x04DD
// 0.034946
0x0479
// 0.032136
0x041D
// 0.029551
0x03C8
// 0.027174
0x037A
// 0.024989
0x0333
// 0.022979
0x02F1
// 0.021131
0x02B4
// 0.019431
0x027D
// 0.017868
0x024A
// 0.016431
0x021A
// 0.015110
0x01EF
// 0.013894
0x01C7
// 0.012777
0x01A3
// 0.011749
0x0181
// 0.010804
0x0162
// 0.009935
0x0146
// 0.009136
0x012B
// 0.008401
0x0113
// 0.007726
0x00FD
// 0.007104
0x00E9
// 0.006533
0x00D6
// 0.006007
0x00C5
// 0.005524
0x00B5
// 0.005080
0x00A6
// 0.004671
0x0099
// 0.004296
0x008D
// 0.003950
0x0081
// 0.003632
0x0077
// 0.003340
0x006D
// 0.003072
0x0065
// 0.002825
0x005D
// 0.002597
0x0055
// 0.002389
0x004E
// 0.002196
0x0048
// 0.002020
0x0042
// 0.001857
0x003D
// 0.001708
0x0038
// 0.001571
0x0033
// 0.001444
0x002F
// 0.001328
0x002C
// 0.001221
0x0028
// 0.001123
0x0025
// 0.001033
0x0022
// 0.000950
0x001F
// 0.000873
0x001D
// 0.000803
0x001A
// 0.000738
0x0018
// 0.000679
0x0016
// 0.000624
0x0014
// 0.000574
0x0013
// 0.000528
0x0011
// 0.000486
0x0010
// 0.000447
0x000F
// 0.000411
0x000D
// 0.000378
0x000C
// 0.000347
0x000B
// 0.000319
0x000A
// 0.000294
0x000A
// 0.000270
0x0009
// 0.000248
0x0008
// 0.000228
0x0007
// 0.000210
0x0007
// 0.000193
0x0006
// 0.000178
0x0006
// 0.000163
0x0005
// 0.000150
0x0005
// 0.000138
0x0005
// 0.000127
0x0004
// 0.000117
0x0004
// 0.000107
0x0004
// 0.000099
0x0003
// 0.000091
0x0003
// 0.000083
0x0003
// 0.000077
0x0003
// 0.000071
0x0002
// 0.000065
0x0002
// 0.000060
0x0002
// 0.000055
0x0002
// 0.000050
0x0002
// 0.000046
0x0002
// 0.000043
0x0001
// 0.000039
0x0001
// 0.000036
0x0001
// 0.000033
0x0001
// 0.000031
0x0001
// 0.008095
0x0109
// 0.016159
0x0212
// 0.024223
0x031A
// 0.032288
0x0422
// 0.040352
0x052A
// 0.048416
0x0632
// 0.056480
0x073B
// 0.064545
0x0843
// 0.072609
0x094B
// 0.080673
0x0A54
// 0.088737
0x0B5C
// 0.096802
0x0C64
// 0.104866
0x0D6C
// 0.112930
0x0E74
// 0.120995
0x0F7D
// 0.129059
0x1085
// 0.137123
0x118D
// 0.145187
0x1296
// 0.153252
0x139E
// 0.161316
0x14A6
// 0.169380
0x15AE
// 0.177444
0x16B6
// 0.185509
0x17BF
// 0.193573
0x18C7
// 0.201637
0x19CF
// 0.209702
0x1AD8
// 0.217766
0x1BE0
// 0.225830
0x1CE8
// 0.233894
0x1DF0
// 0.241959
0x1EF8
// 0.250023
0x2001
// 0.258087
0x2109
// 0.266151
0x2211
// 0.274216
0x231A
// 0.282280
0x2422
// 0.290344
0x252A
// 0.298409
0x2632
// 0.306473
0x273A
// 0.314537
0x2843
// 0.322601
0x294B
// 0.330666
0x2A53
// 0.338730
0x2B5C
// 0.346794
0x2C64
// 0.354858
0x2D6C
// 0.362923
0x2E74
// 0.370987
0x2F7C
// 0.379051
0x3085
// 0.387115
0x318D
// 0.395180
0x3295
// 0.403244
0x339E
// 0.411308
0x34A6
// 0.419373
0x35AE
// 0.427437
0x36B6
// 0.435501
0x37BE
// 0.443565
0x38C7
// 0.451630
0x39CF
// 0.459694
0x3AD7
// 0.467758
0x3BE0
// 0.475822
0x3CE8
// 0.483887
0x3DF0
// 0.491951
0x3EF8
// 0.500015
0x4000
// 0.508080
0x4109
// 0.516144
0x4211
// 0.524208
0x4319
// 0.532272
0x4422
// 0.540337
0x452A
// 0.548401
0x4632
// 0.556465
0x473A
// 0.564529
0x4842
// 0.572594
0x494B
// 0.580658
0x4A53
// 0.588722
0x4B5B
// 0.596786
0x4C64
// 0.604851
0x4D6C
// 0.612915
0x4E74
// 0.620979
0x4F7C
// 0.629044
0x5084
// 0.637108
0x518D
// 0.645172
0x5295
// 0.653236
0x539D
// 0.661301
0x54A6
// 0.669365
0x55AE
// 0.677429
0x56B6
// 0.685493
0x57BE
// 0.693558
0x58C6
// 0.701622
0x59CF
// 0.709686
0x5AD7
// 0.717751
0x5BDF
// 0.725815
0x5CE8
// 0.733879
0x5DF0
// 0.741943
0x5EF8
// 0.750008
0x6000
// 0.758072
0x6108
// 0.766136
0x6211
// 0.774200
0x6319
// 0.782265
0x6421
// 0.790329
0x652A
// 0.798393
0x6632
// 0.806458
0x673A
// 0.814522
0x6842
// 0.822586
0x694A
// 0.830650
0x6A53
// 0.838715
0x6B5B
// 0.846779
0x6C63
// 0.854843
0x6D6C
// 0.862907
0x6E74
// 0.870972
0x6F7C
// 0.879036
0x7084
// 0.887100
0x718C
// 0.895164
0x7295
// 0.903229
0x739D
// 0.911293
0x74A5
// 0.919357
0x75AE
// 0.927422
0x76B6
// 0.935486
0x77BE
// 0.943550
0x78C6
// 0.951614
0x79CE
// 0.959679
0x7AD7
// 0.967743
0x7BDF
// 0.975807
0x7CE7
// 0.983871
0x7DF0
// 0.991936
0x7EF8
// 1.000000
0x7FFF

@ -1,252 +1,252 @@
W
125
// 0.000000
0x00000000
// -0.005415
0xFF4E8DE8
// -0.010830
0xFE9D1BD0
// -0.016246
0xFDEBA9B8
// -0.021661
0xFD3A37A0
// -0.027076
0xFC88C588
// -0.032491
0xFBD75370
// -0.037906
0xFB25E158
// -0.043322
0xFA746F40
// -0.048737
0xF9C2FD28
// -0.054152
0xF9118B10
// -0.059567
0xF86018F8
// -0.064983
0xF7AEA6E0
// -0.070398
0xF6FD34C8
// -0.075813
0xF64BC2B0
// -0.081228
0xF59A5098
// -0.086643
0xF4E8DE81
// -0.092059
0xF4376C69
// -0.097474
0xF385FA51
// -0.102889
0xF2D48839
// -0.108304
0xF2231621
// -0.113719
0xF171A409
// -0.119135
0xF0C031F1
// -0.124550
0xF00EBFD9
// -0.129965
0xEF5D4DC1
// -0.135380
0xEEABDBA9
// -0.140796
0xEDFA6991
// -0.146211
0xED48F779
// -0.151626
0xEC978561
// -0.157041
0xEBE61349
// -0.162456
0xEB34A131
// -0.167872
0xEA832F19
// -0.173287
0xE9D1BD01
// -0.178702
0xE9204AE9
// -0.184117
0xE86ED8D1
// -0.189532
0xE7BD66B9
// -0.194948
0xE70BF4A1
// -0.200363
0xE65A8289
// -0.205778
0xE5A91071
// -0.211193
0xE4F79E59
// -0.216608
0xE4462C41
// -0.222024
0xE394BA29
// -0.227439
0xE2E34811
// -0.232854
0xE231D5F9
// -0.238269
0xE18063E1
// -0.243685
0xE0CEF1C9
// -0.249100
0xE01D7FB1
// -0.254515
0xDF6C0D9A
// -0.259930
0xDEBA9B82
// -0.265345
0xDE09296A
// -0.270761
0xDD57B752
// -0.276176
0xDCA6453A
// -0.281591
0xDBF4D322
// -0.287006
0xDB43610A
// -0.292421
0xDA91EEF2
// -0.297837
0xD9E07CDA
// -0.303252
0xD92F0AC2
// -0.308667
0xD87D98AA
// -0.314082
0xD7CC2692
// -0.319498
0xD71AB47A
// -0.324913
0xD6694262
// -0.330328
0xD5B7D04A
// -0.335743
0xD5065E32
// -0.341158
0xD454EC1A
// -0.346574
0xD3A37A02
// -0.351989
0xD2F207EA
// -0.357404
0xD24095D2
// -0.362819
0xD18F23BA
// -0.368234
0xD0DDB1A2
// -0.373650
0xD02C3F8A
// -0.379065
0xCF7ACD72
// -0.384480
0xCEC95B5A
// -0.389895
0xCE17E942
// -0.395311
0xCD66772A
// -0.400726
0xCCB50512
// -0.406141
0xCC0392FA
// -0.411556
0xCB5220E2
// -0.416971
0xCAA0AECA
// -0.422387
0xC9EF3CB2
// -0.427802
0xC93DCA9B
// -0.433217
0xC88C5883
// -0.438632
0xC7DAE66B
// -0.444047
0xC7297453
// -0.449463
0xC678023B
// -0.454878
0xC5C69023
// -0.460293
0xC5151E0B
// -0.465708
0xC463ABF3
// -0.471123
0xC3B239DB
// -0.476539
0xC300C7C3
// -0.481954
0xC24F55AB
// -0.487369
0xC19DE393
// -0.492784
0xC0EC717B
// -0.498200
0xC03AFF63
// -0.503615
0xBF898D4B
// -0.509030
0xBED81B33
// -0.514445
0xBE26A91B
// -0.519860
0xBD753703
// -0.525276
0xBCC3C4EB
// -0.530691
0xBC1252D3
// -0.536106
0xBB60E0BB
// -0.541521
0xBAAF6EA3
// -0.546936
0xB9FDFC8B
// -0.552352
0xB94C8A73
// -0.557767
0xB89B185B
// -0.563182
0xB7E9A643
// -0.568597
0xB738342B
// -0.574013
0xB686C213
// -0.579428
0xB5D54FFB
// -0.584843
0xB523DDE3
// -0.590258
0xB4726BCB
// -0.595673
0xB3C0F9B4
// -0.601089
0xB30F879C
// -0.606504
0xB25E1584
// -0.611919
0xB1ACA36C
// -0.617334
0xB0FB3154
// -0.622749
0xB049BF3C
// -0.628165
0xAF984D24
// -0.633580
0xAEE6DB0C
// -0.638995
0xAE3568F4
// -0.644410
0xAD83F6DC
// -0.649825
0xACD284C4
// -0.655241
0xAC2112AC
// -0.660656
0xAB6FA094
// -0.666071
0xAABE2E7C
// -0.671486
0xAA0CBC64
// -0.150634
0xECB80820
// -0.128973
0xEF7DD07E
// -0.116302
0xF11D02BC
// -0.107312
0xF24398DD
// -0.100339
0xF328189B
// -0.094641
0xF3E2CB1B
// -0.089824
0xF480A4C8
// -0.085651
0xF509613C
// -0.081971
0xF581FD5A
// -0.078678
0xF5EDE0FA
// -0.075700
0xF64F79F8
// -0.072980
0xF6A8937B
// -0.070479
0xF6FA8A32
// -0.068163
0xF7466D28
// -0.066007
0xF78D1339
// -0.063990
0xF7CF299C
// -0.062096
0xF80D3DFD
// -0.060310
0xF847C5B9
// -0.058620
0xF87F231F
// -0.057017
0xF8B3A95A
// -0.055492
0xF8E59F66
// -0.054039
0xF9154258
// -0.052650
0xF942C71B
// -0.051320
0xF96E5BDA
// -0.050044
0xF9982918
// -0.048818
0xF9C05292
// -0.047639
0xF9E6F7F8
// -0.046502
0xFA0C3587
// -0.045406
0xFA302482
// -0.044346
0xFA52DB99
// -0.043322
0xFA746F40
// -0.042330
0xFA94F1FB
// -0.041368
0xFAB47496
// -0.040435
0xFAD3065D
// -0.039529
0xFAF0B546
// -0.038649
0xFB0D8E19
// -0.037793
0xFB299C93
// -0.036959
0xFB44EB7F
// -0.036147
0xFB5F84D0
// -0.035356
0xFB7971BA
// -0.034585
0xFB92BABF
// -0.033832
0xFBAB67C6
// -0.033096
0xFBC38027
// -0.032378
0xFBDB0AB8
// -0.031676
0xFBF20DD7
// -0.030989
0xFC088F7B
// -0.030317
0xFC1E9534
// -0.029659
0xFC34243A
// -0.029014
0xFC494173
// -0.028383
0xFC5DF178
// -0.027764
0xFC72389C
// -0.027157
0xFC861AF1
// -0.026562
0xFC999C50
// -0.025978
0xFCACC058
// -0.025405
0xFCBF8A76
// -0.024842
0xFCD1FDE7
// -0.024288
0xFCE41DBE
// -0.023745
0xFCF5ECE2
// -0.023211
0xFD076E16
// -0.022686
0xFD18A3F8
// -0.022169
0xFD299107
// -0.021661
0xFD3A37A0
// -0.021161
0xFD4A9A05
// -0.020669
0xFD5ABA5B
// -0.020184
0xFD6A9AB0
// -0.019707
0xFD7A3CF6
// -0.019237
0xFD89A30D
// -0.018774
0xFD98CEBD
// -0.018318
0xFDA7C1BA
// -0.017868
0xFDB67DA5
// -0.017425
0xFDC50410
// -0.016988
0xFDD35679
// -0.016557
0xFDE1764F
// -0.016132
0xFDEF64F3
// -0.015712
0xFDFD23B7
// -0.015298
0xFE0AB3DF
// -0.014890
0xFE1816A3
// -0.014487
0xFE254D30
// -0.014089
0xFE3258A6
// -0.013695
0xFE3F3A19
// -0.013307
0xFE4BF297
// -0.012924
0xFE58831F
// -0.012545
0xFE64ECA9
// -0.012171
0xFE713026
// -0.011801
0xFE7D4E7B
// -0.011435
0xFE894887
// -0.011074
0xFE951F21
// -0.010717
0xFEA0D317
// -0.010364
0xFEAC6534
// -0.010015
0xFEB7D637
// -0.009669
0xFEC326DD
// -0.009328
0xFECE57DB
// -0.008990
0xFED969DF
// -0.008656
0xFEE45D94
// -0.008325
0xFEEF339D
// -0.007998
0xFEF9EC9A
// -0.007674
0xFF048925
// -0.007354
0xFF0F09D3
// -0.007036
0xFF196F35
// -0.006722
0xFF23B9D8
// -0.006411
0xFF2DEA43
// -0.006103
0xFF3800FC
// -0.005799
0xFF41FE81
// -0.005497
0xFF4BE351
// -0.005198
0xFF55AFE4
// -0.004901
0xFF5F64B0
// -0.004608
0xFF690227
// -0.004317
0xFF7288B8
// -0.004029
0xFF7BF8CF
// -0.003744
0xFF8552D6
// -0.003461
0xFF8E9732
// -0.003181
0xFF97C647
// -0.002903
0xFFA0E076
// -0.002628
0xFFA9E61E
// -0.002355
0xFFB2D799
// -0.002084
0xFFBBB542
// -0.001816
0xFFC47F6F
// -0.001550
0xFFCD3676
// -0.001286
0xFFD5DAA9
// -0.001025
0xFFDE6C58
// -0.000765
0xFFE6EBD3
// -0.000508
0xFFEF5967
// -0.000253
0xFFF7B55D
// 0.000000
0x00000000

@ -1,252 +1,252 @@
W
125
// 1.000000
0x7FFFFFFF
// 0.840896
0x6BA27E65
// 0.707107
0x5A82799A
// 0.594604
0x4C1BF829
// 0.500000
0x40000000
// 0.420448
0x35D13F33
// 0.353553
0x2D413CCD
// 0.297302
0x260DFC14
// 0.250000
0x20000000
// 0.210224
0x1AE89F99
// 0.176777
0x16A09E66
// 0.148651
0x1306FE0A
// 0.125000
0x10000000
// 0.105112
0x0D744FCD
// 0.088388
0x0B504F33
// 0.074325
0x09837F05
// 0.062500
0x08000000
// 0.052556
0x06BA27E6
// 0.044194
0x05A8279A
// 0.037163
0x04C1BF83
// 0.031250
0x04000000
// 0.026278
0x035D13F3
// 0.022097
0x02D413CD
// 0.018581
0x0260DFC1
// 0.015625
0x02000000
// 0.013139
0x01AE89FA
// 0.011049
0x016A09E6
// 0.009291
0x01306FE1
// 0.007812
0x01000000
// 0.006570
0x00D744FD
// 0.005524
0x00B504F3
// 0.004645
0x009837F0
// 0.003906
0x00800000
// 0.003285
0x006BA27E
// 0.002762
0x005A827A
// 0.002323
0x004C1BF8
// 0.001953
0x00400000
// 0.001642
0x0035D13F
// 0.001381
0x002D413D
// 0.001161
0x00260DFC
// 0.000977
0x00200000
// 0.000821
0x001AE8A0
// 0.000691
0x0016A09E
// 0.000581
0x001306FE
// 0.000488
0x00100000
// 0.000411
0x000D7450
// 0.000345
0x000B504F
// 0.000290
0x0009837F
// 0.000244
0x00080000
// 0.000205
0x0006BA28
// 0.000173
0x0005A828
// 0.000145
0x0004C1C0
// 0.000122
0x00040000
// 0.000103
0x00035D14
// 0.000086
0x0002D414
// 0.000073
0x000260E0
// 0.000061
0x00020000
// 0.000051
0x0001AE8A
// 0.000043
0x00016A0A
// 0.000036
0x00013070
// 0.000031
0x00010000
// 0.000026
0x0000D745
// 0.000022
0x0000B505
// 0.000018
0x00009838
// 0.000015
0x00008000
// 0.000013
0x00006BA2
// 0.000011
0x00005A82
// 0.000009
0x00004C1C
// 0.000008
0x00004000
// 0.000006
0x000035D1
// 0.000005
0x00002D41
// 0.000005
0x0000260E
// 0.000004
0x00002000
// 0.000003
0x00001AE9
// 0.000003
0x000016A1
// 0.000002
0x00001307
// 0.000002
0x00001000
// 0.000002
0x00000D74
// 0.000001
0x00000B50
// 0.000001
0x00000983
// 0.000001
0x00000800
// 0.000001
0x000006BA
// 0.000001
0x000005A8
// 0.000001
0x000004C2
// 0.000000
0x00000400
// 0.000000
0x0000035D
// 0.000000
0x000002D4
// 0.000000
0x00000261
// 0.000000
0x00000200
// 0.000000
0x000001AF
// 0.000000
0x0000016A
// 0.000000
0x00000130
// 0.000000
0x00000100
// 0.000000
0x000000D7
// 0.000000
0x000000B5
// 0.000000
0x00000098
// 0.000000
0x00000080
// 0.000000
0x0000006C
// 0.000000
0x0000005B
// 0.000000
0x0000004C
// 0.000000
0x00000040
// 0.000000
0x00000036
// 0.000000
0x0000002D
// 0.000000
0x00000026
// 0.000000
0x00000020
// 0.000000
0x0000001B
// 0.000000
0x00000017
// 0.000000
0x00000013
// 0.000000
0x00000010
// 0.000000
0x0000000D
// 0.000000
0x0000000B
// 0.000000
0x0000000A
// 0.000000
0x00000008
// 0.000000
0x00000007
// 0.000000
0x00000006
// 0.000000
0x00000005
// 0.000000
0x00000004
// 0.000000
0x00000003
// 0.000000
0x00000003
// 0.000000
0x00000002
// 0.000000
0x00000002
// 0.000000
0x00000002
// 0.000000
0x00000001
// 0.000000
0x00000001
// 0.000000
0x00000001
// 0.008065
0x01084212
// 0.016129
0x02108422
// 0.024194
0x0318C633
// 0.032258
0x04210843
// 0.040323
0x05294A54
// 0.048387
0x06318C64
// 0.056452
0x0739CE75
// 0.064516
0x08421085
// 0.072581
0x094A5296
// 0.080645
0x0A5294A6
// 0.088710
0x0B5AD6B7
// 0.096774
0x0C6318C7
// 0.104839
0x0D6B5AD8
// 0.112903
0x0E739CE8
// 0.120968
0x0F7BDEF9
// 0.129032
0x10842109
// 0.137097
0x118C631A
// 0.145161
0x1294A52A
// 0.153226
0x139CE73B
// 0.161290
0x14A5294B
// 0.169355
0x15AD6B5C
// 0.177419
0x16B5AD6C
// 0.185484
0x17BDEF7D
// 0.193548
0x18C6318D
// 0.201613
0x19CE739E
// 0.209677
0x1AD6B5AE
// 0.217742
0x1BDEF7BF
// 0.225806
0x1CE739CF
// 0.233871
0x1DEF7BE0
// 0.241935
0x1EF7BDF0
// 0.250000
0x20000001
// 0.258065
0x21084211
// 0.266129
0x22108422
// 0.274194
0x2318C632
// 0.282258
0x24210843
// 0.290323
0x25294A53
// 0.298387
0x26318C64
// 0.306452
0x2739CE74
// 0.314516
0x28421085
// 0.322581
0x294A5295
// 0.330645
0x2A5294A6
// 0.338710
0x2B5AD6B6
// 0.346774
0x2C6318C7
// 0.354839
0x2D6B5AD7
// 0.362903
0x2E739CE8
// 0.370968
0x2F7BDEF8
// 0.379032
0x30842109
// 0.387097
0x318C6319
// 0.395161
0x3294A52A
// 0.403226
0x339CE73A
// 0.411290
0x34A5294B
// 0.419355
0x35AD6B5B
// 0.427419
0x36B5AD6C
// 0.435484
0x37BDEF7C
// 0.443548
0x38C6318D
// 0.451613
0x39CE739D
// 0.459677
0x3AD6B5AE
// 0.467742
0x3BDEF7BE
// 0.475806
0x3CE739CF
// 0.483871
0x3DEF7BDF
// 0.491935
0x3EF7BDF0
// 0.500000
0x40000000
// 0.508065
0x41084211
// 0.516129
0x42108422
// 0.524194
0x4318C632
// 0.532258
0x44210843
// 0.540323
0x45294A53
// 0.548387
0x46318C64
// 0.556452
0x4739CE74
// 0.564516
0x48421085
// 0.572581
0x494A5295
// 0.580645
0x4A5294A6
// 0.588710
0x4B5AD6B6
// 0.596774
0x4C6318C7
// 0.604839
0x4D6B5AD7
// 0.612903
0x4E739CE8
// 0.620968
0x4F7BDEF8
// 0.629032
0x50842109
// 0.637097
0x518C6319
// 0.645161
0x5294A52A
// 0.653226
0x539CE73A
// 0.661290
0x54A5294B
// 0.669355
0x55AD6B5B
// 0.677419
0x56B5AD6C
// 0.685484
0x57BDEF7C
// 0.693548
0x58C6318D
// 0.701613
0x59CE739D
// 0.709677
0x5AD6B5AE
// 0.717742
0x5BDEF7BE
// 0.725806
0x5CE739CF
// 0.733871
0x5DEF7BDF
// 0.741935
0x5EF7BDF0
// 0.750000
0x60000000
// 0.758065
0x61084211
// 0.766129
0x62108421
// 0.774194
0x6318C632
// 0.782258
0x64210842
// 0.790323
0x65294A53
// 0.798387
0x66318C63
// 0.806452
0x6739CE74
// 0.814516
0x68421084
// 0.822581
0x694A5295
// 0.830645
0x6A5294A5
// 0.838710
0x6B5AD6B6
// 0.846774
0x6C6318C6
// 0.854839
0x6D6B5AD7
// 0.862903
0x6E739CE7
// 0.870968
0x6F7BDEF8
// 0.879032
0x70842108
// 0.887097
0x718C6319
// 0.895161
0x7294A529
// 0.903226
0x739CE73A
// 0.911290
0x74A5294A
// 0.919355
0x75AD6B5B
// 0.927419
0x76B5AD6B
// 0.935484
0x77BDEF7C
// 0.943548
0x78C6318C
// 0.951613
0x79CE739D
// 0.959677
0x7AD6B5AD
// 0.967742
0x7BDEF7BE
// 0.975806
0x7CE739CE
// 0.983871
0x7DEF7BDF
// 0.991935
0x7EF7BDEF
// 1.000000
0x7FFFFFFF

@ -5,7 +5,7 @@
#define SNR_THRESHOLD 70
#define SNR_THRESHOLD 69
/*
Reference patterns are generated with
@ -14,20 +14,17 @@ a double precision computation.
*/
#define ABS_ERROR ((q15_t)10)
#define LOG_ABS_ERROR ((q15_t)1000)
#define LOG_ABS_ERROR ((q15_t)3)
void FastMathQ15::test_vlog_q15()
{
const q15_t *inp = input.ptr();
q15_t *outp = output.ptr();
//printf("Nb samples = %lu\n",ref.nbSamples());
arm_vlog_q15(inp,outp,ref.nbSamples());
//arm_vlog_q15(inp,outp,1);
//printf("in = %08X\n",inp[124]);
//printf("out = %08X\n",outp[124]);
//ASSERT_SNR(ref,output,(float32_t)SNR_THRESHOLD);
ASSERT_SNR(ref,output,(float32_t)SNR_THRESHOLD);
ASSERT_NEAR_EQ(ref,output,LOG_ABS_ERROR);
ASSERT_EMPTY_TAIL(output);

@ -13,32 +13,19 @@ a double precision computation.
*/
#define ABS_ERROR ((q31_t)2200)
/*
The error bounds is 0.014 and it is big
but the test is really extreme with input values as small
as 2^-31 !
#define LOG_ABS_ERROR ((q31_t)2)
The error is clearly diverging for the very small values.
So, we have an error converging to 0.014 for outputs around -21.
*/
#define LOG_ABS_ERROR ((q31_t)30000000)
void FastMathQ31::test_vlog_q31()
{
const q31_t *inp = input.ptr();
q31_t *outp = output.ptr();
//printf("Nb samples = %lu\n",ref.nbSamples());
arm_vlog_q31(inp,outp,ref.nbSamples());
//arm_vlog_q31(inp+124,outp+124,1);
//printf("in = %08X\n",inp[124]);
//printf("out = %08X\n",outp[124]);
//ASSERT_SNR(ref,output,(float32_t)SNR_THRESHOLD);
ASSERT_SNR(ref,output,(float32_t)SNR_THRESHOLD);
ASSERT_NEAR_EQ(ref,output,LOG_ABS_ERROR);
ASSERT_EMPTY_TAIL(output);

Loading…
Cancel
Save