diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinti/README.md b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/README.md new file mode 100644 index 000000000000..456ca6376d16 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/README.md @@ -0,0 +1,175 @@ + + +# sinti + +> Initialize a workspace array for performing a sine transform. + + + +
+ +
+ + + + + +
+ +## Usage + +```javascript +var sinti = require( '@stdlib/fft/base/fftpack/sinti' ); +``` + +#### sinti( N, workspace, strideW, offsetW ) + +Initializes a workspace array for performing a sine transform. + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); +var floor = require( '@stdlib/math/base/special/floor' ); + +var N = 7; +var workspace = new Float64Array( floor( 2.5*N ) + 34 ); + +var out = sinti( N, workspace, 1, 0 ); +// returns + +var bool = ( out === workspace ); +// returns true + +var sineTable = workspace.slice( 0, floor( N/2 ) ); +// returns [ ~0.765, ~1.414, ~1.848 ] + +var twiddleFactors = workspace.slice( floor( 3*N/2 ) + 1, floor( 5*N/2 ) + 2 ); +// returns [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] + +var factors = workspace.slice( floor( 5*N/2 ) + 2, floor(5*N/2) + 2 + 4 ); +// returns [ 8, 2, 2, 4 ] +``` + +The function accepts the following arguments: + +- **N**: length of the sequence to transform. +- **workspace**: workspace array. +- **strideW**: stride length for `workspace`. +- **offsetW**: starting index for `workspace`. + +
+ + + + + +
+ +## Notes + +- The workspace array is divided into four sections: + + ```text + size = N/2 N+1 N+1 2+ceil(log2(N+1)/2) + ↓ ↓ ↓ ↓ + | sine table | scratch/workspace | twiddle factors | radix factor table | + ↑ ↑ ↑ ↑ + i = 0 ... N/2 ... (3N/2)+1 ... (5N/2)+2 ... + ``` + + - **sine table**: a table of precomputed sine coefficients used by sine transforms. + - **scratch/workspace**: used as a scratch space when performing transforms. This section is not updated during initialization. + - **twiddle factors**: a table of reusable complex-exponential constants stored as cosine/sine pairs. + - **radix factor table**: a table containing the sequence length `N+1`, the number of factors into which `N+1` was decomposed, and the individual integer radix factors. + +- In general, a workspace array should have `2.5N + 34` indexed elements (as `log2(N+1)/2 ≤ 32` for all `2^64`). During initialization, only the sections for storing the sine coefficients, twiddle factors, and the factorization of `N+1` are updated. + +- The radix factor table is comprised as follows: + + ```text + | sequence_length | number_of_factors | integer_factors | + ``` + +
+ + + +
+ +## Examples + + + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); +var zeroTo = require( '@stdlib/array/zero-to' ); +var logEach = require( '@stdlib/console/log-each' ); +var floor = require( '@stdlib/math/base/special/floor' ); +var sinti = require( '@stdlib/fft/base/fftpack/sinti' ); + +var N = 7; +var workspace = new Float64Array( floor( 2.5*N ) + 34 ); + +sinti( N, workspace, 1, 0 ); +console.log( 'Sequence length: %d', N ); + +console.log( 'Sine table:' ); +var idx = zeroTo( floor( N/2 ), 'generic' ); +logEach( ' workspace[ %d ] = %0.4f', idx, workspace.slice( 0, floor( N/2 ) ) ); + +console.log( 'Twiddle factors:' ); +idx = zeroTo( N+1, 'generic' ); +logEach( ' workspace[ %d ] = %0.4f', idx, workspace.slice( floor( 3*N/2 ) + 1, floor( 5*N/2 ) + 2 ) ); + +console.log( 'Factorization:' ); +var nf = workspace[ floor( 5*N/2 ) + 3 ]; + +console.log( ' number of factors: %d', nf ); +idx = zeroTo( nf, 'generic' ); +logEach( ' factor[ %d ]: %d', idx, workspace.slice( floor( 5*N/2 ) + 4, floor( 5*N/2 ) + 4 + nf ) ); +``` + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinti/benchmark/benchmark.js b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/benchmark/benchmark.js new file mode 100644 index 000000000000..a4e586b1414e --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/benchmark/benchmark.js @@ -0,0 +1,102 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var bench = require( '@stdlib/bench' ); +var format = require( '@stdlib/string/format' ); +var isnan = require( '@stdlib/math/base/assert/is-nan' ); +var floor = require( '@stdlib/math/base/special/floor' ); +var Float64Array = require( '@stdlib/array/float64' ); +var pkg = require( './../package.json' ).name; +var sinti = require( './../lib' ); + + +// FUNCTIONS // + +/** +* Creates a benchmark function. +* +* @private +* @param {PositiveInteger} N - sequence length +* @returns {Function} benchmark function +*/ +function createBenchmark( N ) { + var workspace = new Float64Array( floor( 2.5*N ) + 34 ); + return benchmark; + + /** + * Benchmark function. + * + * @private + * @param {Benchmark} b - benchmark instance + */ + function benchmark( b ) { + var i; + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + sinti( N, workspace, 1, 0 ); + if ( isnan( workspace[ floor( 3*N/2 ) + 1 ] ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnan( workspace[ floor( 3*N/2 ) + 1 ] ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); + } +} + + +// MAIN // + +/** +* Main execution sequence. +* +* @private +*/ +function main() { + var lengths; + var N; + var f; + var i; + + lengths = [ + 7, + 15, + 31, + 63, + 127, + 255, + 511, + 1023 + ]; + + for ( i = 0; i < lengths.length; i++ ) { + N = lengths[ i ]; + f = createBenchmark( N ); + bench( format( '%s:N=%d', pkg, N ), f ); + } +} + +main(); diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinti/docs/repl.txt b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/docs/repl.txt new file mode 100644 index 000000000000..387fdf2987d4 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/docs/repl.txt @@ -0,0 +1,64 @@ + +{{alias}}( N, workspace, strideW, offsetW ) + Initializes a workspace array for performing a sine transform. + + The workspace array is divided into four sections: + + 1. sine table: the section ranges from indices 0 to N/2 and is used to + store a table of precomputed sine coefficients used by sine transforms. + + 2. scratch/workspace: the section ranges from indices N/2 to 3N/2 and is + used while performing transforms. This section is not updated during + initialization. + + 3. twiddle factors: the section ranges from indices (3N/2)+1 to (5N/2)+1 + and stores a table of reusable complex exponential constants as cosine/sine + pairs. + + 4. radix factor table: the section starts at index (5N/2)+2 and stores the + sequence length N+1, the number of factors into which N+1 was decomposed, + and the individual integer radix factors. + + Any remaining array space remains as unused storage. + + Parameters + ---------- + N: integer + Length of the sequence. + + workspace: ArrayLikeObject + Workspace array. + + strideW: integer + Stride length for `workspace`. + + offsetW: integer + Starting index for `workspace`. + + Returns + ------- + out: ArrayLikeObject + Workspace array. + + Examples + -------- + > var N = 7; + > var len = {{alias:@stdlib/math/base/special/floor}}( 2.5*N ) + 34; + > var workspace = new {{alias:@stdlib/array/float64}}( len ); + > var out = {{alias}}( N, workspace, 1, 0 ) + + > var bool = ( out === workspace ) + true + > var ns2 = {{alias:@stdlib/math/base/special/floor}}( N/2 ); + > var sineTable = workspace.slice( 0, ns2 ) + [ ~0.765, ~1.414, ~1.848 ] + > var iw = ns2 + N + 1; + > var twiddleFactors = workspace.slice( iw, iw + (N+1) ) + [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] + > var fw = ns2 + 2*(N+1); + > var factors = workspace.slice( fw, fw + 4 ) + [ 8, 2, 2, 4 ] + + See Also + -------- + diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinti/docs/types/index.d.ts b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/docs/types/index.d.ts new file mode 100644 index 000000000000..e728169090df --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/docs/types/index.d.ts @@ -0,0 +1,65 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +// TypeScript Version: 4.1 + +/// + +import { Collection } from '@stdlib/types/array'; + +/** +* Initializes a workspace array for performing a sine transform. +* +* ## Notes +* +* - The workspace array should have a length of at least `( 2.5*N ) + 34` elements. +* +* @param N - length of the sequence +* @param workspace - workspace array +* @param strideW - stride length for `workspace` +* @param offsetW - starting index for `workspace` +* @returns workspace array +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var floor = require( '@stdlib/math/base/special/floor' ); +* +* var N = 7; +* var workspace = new Float64Array( floor( 2.5*N ) + 34 ); +* +* var out = sinti( N, workspace, 1, 0 ); +* // returns +* +* var bool = ( out === workspace ); +* // returns true +* +* var sineTable = workspace.slice( 0, floor( N/2 ) ); +* // returns [ ~0.765, ~1.414, ~1.848 ] +* +* var twiddleFactors = workspace.slice( floor( 3*N/2 ) + 1, floor( 5*N/2 ) + 2 ); +* // returns [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] +* +* var factors = workspace.slice( floor( 5*N/2 ) + 2, floor(5*N/2) + 2 + 4 ); +* // returns [ 8, 2, 2, 4 ] +*/ +declare function sinti>( N: number, workspace: T, strideW: number, offsetW: number ): T; + + +// EXPORTS // + +export = sinti; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinti/docs/types/test.ts b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/docs/types/test.ts new file mode 100644 index 000000000000..1cf202c7bbcb --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/docs/types/test.ts @@ -0,0 +1,95 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +import floor = require( '@stdlib/math/base/special/floor' ); +import sinti = require( './index' ); + + +// TESTS // + +// The function returns a collection... +{ + const workspace = new Float64Array( floor( 2.5*7 ) + 34 ); + + sinti( 7, workspace, 1, 0 ); // $ExpectType Float64Array +} + +// The compiler throws an error if the function is provided a first argument which is not a number... +{ + const workspace = new Float64Array( floor( 2.5*7 ) + 34 ); + + sinti( '7', workspace, 1, 0 ); // $ExpectError + sinti( true, workspace, 1, 0 ); // $ExpectError + sinti( false, workspace, 1, 0 ); // $ExpectError + sinti( null, workspace, 1, 0 ); // $ExpectError + sinti( void 0, workspace, 1, 0 ); // $ExpectError + sinti( [], workspace, 1, 0 ); // $ExpectError + sinti( {}, workspace, 1, 0 ); // $ExpectError + sinti( ( x: number ): number => x, workspace, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a second argument which is not a collection... +{ + sinti( 7, '50', 1, 0 ); // $ExpectError + sinti( 7, 50, 1, 0 ); // $ExpectError + sinti( 7, true, 1, 0 ); // $ExpectError + sinti( 7, false, 1, 0 ); // $ExpectError + sinti( 7, null, 1, 0 ); // $ExpectError + sinti( 7, void 0, 1, 0 ); // $ExpectError + sinti( 7, {}, 1, 0 ); // $ExpectError + sinti( 7, ( x: number ): number => x, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a third argument which is not a number... +{ + const workspace = new Float64Array( floor( 2.5*7 ) + 34 ); + + sinti( 7, workspace, '1', 0 ); // $ExpectError + sinti( 7, workspace, true, 0 ); // $ExpectError + sinti( 7, workspace, false, 0 ); // $ExpectError + sinti( 7, workspace, null, 0 ); // $ExpectError + sinti( 7, workspace, void 0, 0 ); // $ExpectError + sinti( 7, workspace, [], 0 ); // $ExpectError + sinti( 7, workspace, {}, 0 ); // $ExpectError + sinti( 7, workspace, ( x: number ): number => x, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a fourth argument which is not a number... +{ + const workspace = new Float64Array( floor( 2.5*7 ) + 34 ); + + sinti( 7, workspace, 1, '0' ); // $ExpectError + sinti( 7, workspace, 1, true ); // $ExpectError + sinti( 7, workspace, 1, false ); // $ExpectError + sinti( 7, workspace, 1, null ); // $ExpectError + sinti( 7, workspace, 1, void 0 ); // $ExpectError + sinti( 7, workspace, 1, [] ); // $ExpectError + sinti( 7, workspace, 1, {} ); // $ExpectError + sinti( 7, workspace, 1, ( x: number ): number => x ); // $ExpectError +} + +// The compiler throws an error if the function is provided an unsupported number of arguments... +{ + const workspace = new Float64Array( floor( 2.5*7 ) + 34 ); + + sinti(); // $ExpectError + sinti( 7 ); // $ExpectError + sinti( 7, workspace ); // $ExpectError + sinti( 7, workspace, 1 ); // $ExpectError + sinti( 7, workspace, 1, 0, 123 ); // $ExpectError +} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinti/examples/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/examples/index.js new file mode 100644 index 000000000000..e006767c0961 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/examples/index.js @@ -0,0 +1,46 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +var Float64Array = require( '@stdlib/array/float64' ); +var zeroTo = require( '@stdlib/array/zero-to' ); +var logEach = require( '@stdlib/console/log-each' ); +var floor = require( '@stdlib/math/base/special/floor' ); +var sinti = require( './../lib' ); + +var N = 7; +var workspace = new Float64Array( floor( 2.5*N ) + 34 ); + +sinti( N, workspace, 1, 0 ); +console.log( 'Sequence length: %d', N ); + +console.log( 'Sine table:' ); +var idx = zeroTo( floor( N/2 ), 'generic' ); +logEach( ' workspace[ %d ] = %0.4f', idx, workspace.slice( 0, floor( N/2 ) ) ); + +console.log( 'Twiddle factors:' ); +idx = zeroTo( N+1, 'generic' ); +logEach( ' workspace[ %d ] = %0.4f', idx, workspace.slice( floor( 3*N/2 ) + 1, floor( 5*N/2 ) + 2 ) ); + +console.log( 'Factorization:' ); +var nf = workspace[ floor( 5*N/2 ) + 3 ]; + +console.log( ' number of factors: %d', nf ); +idx = zeroTo( nf, 'generic' ); +logEach( ' factor[ %d ]: %d', idx, workspace.slice( floor( 5*N/2 ) + 4, floor( 5*N/2 ) + 4 + nf ) ); diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinti/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/lib/index.js new file mode 100644 index 000000000000..a5d299466f1d --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/lib/index.js @@ -0,0 +1,57 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +/** +* Initialize a workspace array for performing a sine transform. +* +* @module @stdlib/fft/base/fftpack/sinti +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var floor = require( '@stdlib/math/base/special/floor' ); +* var sinti = require( '@stdlib/fft/base/fftpack/sinti' ); +* +* var N = 7; +* var workspace = new Float64Array( floor( 2.5*N ) + 34 ); +* +* var out = sinti( N, workspace, 1, 0 ); +* // returns +* +* var bool = ( out === workspace ); +* // returns true +* +* var sineTable = workspace.slice( 0, floor( N/2 ) ); +* // returns [ ~0.765, ~1.414, ~1.848 ] +* +* var twiddleFactors = workspace.slice( floor( 3*N/2 ) + 1, floor( 5*N/2 ) + 2 ); +* // returns [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] +* +* var factors = workspace.slice( floor( 5*N/2 ) + 2, floor(5*N/2) + 2 + 4 ); +* // returns [ 8, 2, 2, 4 ] +*/ + +// MODULES // + +var main = require( './main.js' ); + + +// EXPORTS // + +module.exports = main; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinti/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/lib/main.js new file mode 100644 index 000000000000..996bea9a1f79 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/lib/main.js @@ -0,0 +1,200 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +* +* ## Notice +* +* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript. +* +* ```text +* Copyright (c) 2004 the University Corporation for Atmospheric +* Research ("UCAR"). All rights reserved. Developed by NCAR's +* Computational and Information Systems Laboratory, UCAR, +* www.cisl.ucar.edu. +* +* Redistribution and use of the Software in source and binary forms, +* with or without modification, is permitted provided that the +* following conditions are met: +* +* - Neither the names of NCAR's Computational and Information Systems +* Laboratory, the University Corporation for Atmospheric Research, +* nor the names of its sponsors or contributors may be used to +* endorse or promote products derived from this Software without +* specific prior written permission. +* +* - Redistributions of source code must retain the above copyright +* notices, this list of conditions, and the disclaimer below. +* +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions, and the disclaimer below in the +* documentation and/or other materials provided with the +* distribution. +* +* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT +* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, +* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN +* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +* SOFTWARE. +* ``` +*/ + +'use strict'; + +// MODULES // + +var sin = require( '@stdlib/math/base/special/sin' ); +var PI = require( '@stdlib/constants/float64/pi' ); +var floor = require( '@stdlib/math/base/special/floor' ); +var rffti = require( '@stdlib/fft/base/fftpack/rffti' ); + + +// MAIN // + +/** +* Initializes a workspace array for performing a sine transform. +* +* ## Notes +* +* The workspace array is divided into four sections: +* +* ```text +* size = N/2 N+1 N+1 2+ceil(log2(N+1)/2) +* ↓ ↓ ↓ ↓ +* | sine table | scratch/workspace | twiddle factors | radix factor table | +* ↑ ↑ ↑ ↑ +* i = 0 ... N/2 ... (3N/2)+1 ... (5N/2)+2 ... +* ``` +* +* where +* +* - **sine table**: a table of precomputed sine coefficients used by sine transforms. +* - **scratch/workspace**: used as a scratch space when performing transforms. This section is not updated during initialization. +* - **twiddle factors**: a table of reusable complex-exponential constants stored as cosine/sine pairs. +* - **radix factor table**: a table containing the radix factorization of `N+1`. +* +* In general, a workspace array should have `2.5N + 34` indexed elements (as `log2(N+1)/2 ≤ 32` for all `2^64`). During initialization, only the sections for storing the sine coefficients, twiddle factors, and the factorization of `N+1` are updated. +* +* > Note: FFTPACK only requires `2.5N+15`, but we increase that number here to accommodate larger workspace arrays, where `N` may exceed `2^30` indexed elements. +* +* The factorization section is comprised as follows: +* +* ```text +* | sequence_length | number_of_factors | integer_factors | +* ``` +* +* The sequence length and number of factors (`nf`) comprise a single element each. Only the first `nf` elements in the integer factors section are written to, with the rest being unused. +* +* As for twiddle factors, these are small, reusable complex-exponential constants that appear inside each "butterfly" stage of a Cooley–Tukey–style FFT. Every arithmetic step in an FFT multiplies one intermediate value by some +* +* ```tex +* W_N^k +* ``` +* +* where `W_N^k` is an N-th root of unity. Formally, in a forward FFT, +* +* ```tex +* W_N^k = e^{-2\pi ik/N} +* ``` +* +* In a backward FFT, +* +* ```tex +* W_N^k = e^{+2\pi ik/N} +* ``` +* +* As may be observed, `W_N^k` for forward and backward FFTs is the same, except the sign of the exponent is flipped. As a consequence, both forward and backward FFT callers can reuse the same set of twiddle factors, with those performing a forward transform multiplying with `(cos,-sin)` and those performing a backward transform multiplying with `(cos,+sin)`. +* +* Because these constants only depend on the transform length `N` (and **not** on the input data), we can pre-compute and store them once, then "twiddle" them (i.e., reuse them with different indices) as we proceed through the factorization. +* +* > As a quick aside regarding the name "twiddle", early FFT papers (notably Gentleman & Sande, 1966) described how you "twiddle" one branch of each butterfly by a complex rotation before adding/subtracting. The coefficients themselves inherited the nickname "twiddle factors," and the term stuck. +* +* By reusing the workspace array when computing multiple transforms of the same length `N`, every subsequent `*f` (forward) or `*b` (backward) call can simply look up the pre-stored twiddle factors instead of recomputing sine and cosine on-the-fly. +* +* In short, twiddle factors are cached roots of unity that allow each stage of the algorithm to rotate data quickly and predictably. +* +* During initialization, `sinti` first writes the sine table, and then initializes the remaining three sections using `rffti`. +* +* @param {PositiveInteger} N - length of the sequence to transform +* @param {Collection} workspace - workspace array +* @param {integer} strideW - stride length for `workspace` +* @param {NonNegativeInteger} offsetW - starting index for `workspace` +* @returns {Collection} workspace array +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var floor = require( '@stdlib/math/base/special/floor' ); +* +* var N = 7; +* var workspace = new Float64Array( floor( 2.5*N ) + 34 ); +* +* var out = sinti( N, workspace, 1, 0 ); +* // returns +* +* var bool = ( out === workspace ); +* // returns true +* +* var sineTable = workspace.slice( 0, floor( N/2 ) ); +* // returns [ ~0.765, ~1.414, ~1.848 ] +* +* var twiddleFactors = workspace.slice( floor( 3*N/2 ) + 1, floor( 5*N/2 ) + 2 ); +* // returns [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] +* +* var factors = workspace.slice( floor( 5*N/2 ) + 2, floor(5*N/2) + 2 + 4 ); +* // returns [ 8, 2, 2, 4 ] +*/ +function sinti( N, workspace, strideW, offsetW ) { + var offsetR; + var ns2; + var dt; + var fk; + var iw; + var i; + + if ( N <= 1 ) { + return workspace; + } + + // Compute the number of sine values to store: + ns2 = floor( N / 2 ); + + // Compute the angular increment: + dt = PI / ( N + 1 ); + + // Compute and store the sine table: + fk = 0.0; + iw = offsetW; + for ( i = 0; i < ns2; i++ ) { + fk += 1.0; + workspace[ iw+(i*strideW) ] = sin( fk*dt ) * 2.0; + } + // Resolve the starting index for the `rffti` workspace: + offsetR = offsetW + (ns2*strideW); + + // Initialize the real FFT workspace for a sequence of length N+1: + rffti( N+1, workspace, strideW, offsetR ); + + return workspace; +} + + +// EXPORTS // + +module.exports = sinti; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinti/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/package.json new file mode 100644 index 000000000000..a88dc20f43a2 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/package.json @@ -0,0 +1,64 @@ +{ + "name": "@stdlib/fft/base/fftpack/sinti", + "version": "0.0.0", + "description": "Initialize a workspace array for performing a sine transform.", + "license": "Apache-2.0", + "author": { + "name": "The Stdlib Authors", + "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" + }, + "contributors": [ + { + "name": "The Stdlib Authors", + "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" + } + ], + "main": "./lib", + "directories": { + "benchmark": "./benchmark", + "doc": "./docs", + "example": "./examples", + "lib": "./lib", + "test": "./test" + }, + "types": "./docs/types", + "scripts": {}, + "homepage": "https://github.com/stdlib-js/stdlib", + "repository": { + "type": "git", + "url": "git://github.com/stdlib-js/stdlib.git" + }, + "bugs": { + "url": "https://github.com/stdlib-js/stdlib/issues" + }, + "dependencies": {}, + "devDependencies": {}, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "keywords": [ + "stdlib", + "fft", + "fftpack", + "sinti", + "fourier", + "transform", + "twiddle", + "workspace", + "initialization", + "sine" + ], + "__stdlib__": {} +} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinti/test/fixtures/c/fftpack/Makefile b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/test/fixtures/c/fftpack/Makefile new file mode 100644 index 000000000000..7ce16281940d --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/test/fixtures/c/fftpack/Makefile @@ -0,0 +1,137 @@ +#/ +# @license Apache-2.0 +# +# Copyright (c) 2026 The Stdlib Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#/ + +# VARIABLES # + +ifndef VERBOSE + QUIET := @ +endif + +# Specify the path to FFTPACK: +FFTPACK ?= + +# Specify a list of FFTPACK source files: +FFTPACK_SRC ?= + +# Determine the OS: +# +# [1]: https://en.wikipedia.org/wiki/Uname#Examples +# [2]: http://stackoverflow.com/a/27776822/2225624 +OS ?= $(shell uname) +ifneq (, $(findstring MINGW,$(OS))) + OS := WINNT +else +ifneq (, $(findstring MSYS,$(OS))) + OS := WINNT +else +ifneq (, $(findstring CYGWIN,$(OS))) + OS := WINNT +endif +endif +endif + +# Define the program used for compiling C source files: +ifdef C_COMPILER + CC := $(C_COMPILER) +else + CC := gcc +endif + +# Define the command-line options when compiling C files: +CFLAGS ?= \ + -std=c99 \ + -O3 \ + -Wall \ + -pedantic + +# Determine whether to generate [position independent code][1]: +# +# [1]: https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options +# [2]: http://stackoverflow.com/questions/5311515/gcc-fpic-option +ifeq ($(OS), WINNT) + fPIC ?= +else + fPIC ?= -fPIC +endif + +# List of C targets: +c_targets := runner.out + + +# RULES # + +#/ +# Compiles C source files. +# +# @param {string} [C_COMPILER] - C compiler +# @param {string} [CFLAGS] - C compiler flags +# @param {(string|void)} [fPIC] - flag indicating whether to generate position independent code +# +# @example +# make +# +# @example +# make all +#/ +all: $(c_targets) + +.PHONY: all + +#/ +# Compiles C source files. +# +# @private +# @param {string} CC - C compiler +# @param {string} CFLAGS - C compiler flags +# @param {(string|void)} fPIC - flag indicating whether to generate position independent code +#/ +$(c_targets): %.out: %.c + $(QUIET) $(CC) $(CFLAGS) -DFFTPACK_DOUBLE_PRECISION $(fPIC) -o $@ $(FFTPACK_SRC) $< -lm + +#/ +# Generates test fixtures. +# +# @example +# make run +#/ +run: $(c_targets) + $(QUIET) ./$< + +.PHONY: run + +#/ +# Removes generated files. +# +# @example +# make clean +#/ +clean: + $(QUIET) -rm -f *.o *.out + +.PHONY: clean + +#/ +# Removes generated test fixtures. +# +# @example +# make clean-fixtures +#/ +clean-fixtures: + $(QUIET) -rm -f *.json + +.PHONY: clean-fixtures diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinti/test/fixtures/c/fftpack/large.json b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/test/fixtures/c/fftpack/large.json new file mode 100644 index 000000000000..867e4abd85b0 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/test/fixtures/c/fftpack/large.json @@ -0,0 +1 @@ +{"lengths":[419,396,152,478,671,757,345,777,323,568],"offsets":[0,420,817,970,1449,2121,2879,3225,4003,4327],"sines":[0.014959825515465829,0.029918814030527239,0.044876128591609873,0.059830932338796911,0.074782388552651249,0.089729660701029848,0.10467191248588767,0.11960830789006834,0.1345380112240793,0.14946018717284851,0.16437400084246018,0.17927861780686699,0.19417320415457626,0.20905692653530694,0.22392895220661571,0.23878844908048869,0.25363458576989661,0.26846653163531092,0.28328345683117812,0.29808453235234889,0.31286893008046174,0.32763582283027542,0.34238438439595004,0.3571137895972733,0.37182321432582921,0.38651183559110652,0.40117883156654555,0.41582338163551869,0.43044466643724411,0.44504186791262879,0.45961416935003907,0.47416075543099501,0.48868081227578802,0.503173527489017,0.51763809020504159,0.53207369113335024,0.54647952260384003,0.56085477861200561,0.57519865486403454,0.58951034882180842,0.60378905974780417,0.61803398874989479,0.63224433882604869,0.64641931490892002,0.66055812391033408,0.67465997476565998,0.68872407847807016,0.70274964816268537,0.71673589909060054,0.73068204873279008,0.74458731680389034,0.75845092530585678,0.7722720985714927,0.78605006330784721,0.79978404863948194,0.81347328615160042,0.82711700993304127,0.84071445661913102,0.85426486543439362,0.86776747823511624,0.88122153955176752,0.89462629663126525,0.90798099947909361,0.92128490090126458,0.93453725654612396,0.94773732494599727,0.96088436755867535,0.97397764880873461,0.98701643612869372,1,1.0129276139938459,1.0257985548118123,1.0386121023263379,1.0513675396210094,1.0640641530306731,1.0767012321813647,1.0892780700300542,1.1017939629042051,1.1142482105411449,1.1266401161272441,1.1389689863369039,1.1512341313713472,1.1634348649972115,1.1755705045849463,1.1876403711470034,1.1996437893758274,1.2115800876816396,1.2234485982300127,1.2352486569792356,1.246979603717467,1.258640782099675,1.2702315396843575,1.2817512279700483,1.2931992024315995,1.3045748225562424,1.3158774518794252,1.3271064580204226,1.3382612127177165,1.3493410918641486,1.3603454755418389,1.3712737480568684,1.3821252979737293,1.3928995181495338,1.4035958057679827,1.4142135623730949,1.4247521939026897,1.4352111107216237,1.4455897276547831,1.4558874640198221,1.4661037436596527,1.4762379949746811,1.4862896509547885,1.496258149211054,1.5061429320072217,1.515943446290906,1.525659143724533,1.5352894807160222,1.544833918449199,1.5542919229139418,1.5636629649360596,1.5729465202069,1.5821420693126824,1.591249097763562,1.6002670960224126,1.6091955595333367,1.6180339887498949,1.6267818891630557,1.6354387713288627,1.6440041508958199,1.6524775486319898,1.6608584904518076,1.6691465074426053,1.6773411358908481,1.6854419173080784,1.6934483984565682,1.7013601313746791,1.7091766734019234,1.7168975872037322,1.724522440795925,1.7320508075688774,1.7394822663113907,1.7468164012342595,1.7540528019935333,1.761191063713476,1.7682307870092195,1.7751715780091082,1.7820130483767358,1.7887548153326738,1.7953965016758868,1.8019377358048383,1.80837815173828,1.8147173891357298,1.8209550933176317,1.8270909152852017,1.8331245117399524,1.8390555451029011,1.8448836835334586,1.8506086009479934,1.8562299770380779,1.8617474972884085,1.8671608529944035,1.8724697412794744,1.8776738651119722,1.8827729333218064,1.8877666606167351,1.8926547675983285,1.8974369807775995,1.9021130325903071,1.9066826614119254,1.9111456115722816,1.9155016333698609,1.9197504830857781,1.9238919229974119,1.9279257213917065,1.9318516525781366,1.9356694969013331,1.9393790407533738,1.9429800765857348,1.9464724029209028,1.9498558243636472,1.9531301516119528,1.9562952014676114,1.9593507968464712,1.9622967667883453,1.9651329464665765,1.9678591771972593,1.9704753064481184,1.9729811878470429,1.9753766811902755,1.977661652450257,1.9798359737831259,1.9818995235358694,1.9838521862531324,1.9856938526836747,1.9874244197864852,1.9890437907365466,1.9905518749302529,1.9919485879904781,1.9932338517712975,1.9944075943623603,1.9954697500929122,1.9964202595354703,1.9972590695091477,1.9979861330826292,1.9986014095767972,1.9991048645670066,1.9994964698850131,1.9997762036205469,1.9999440501225396,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.015826498063018463,0.031652005062964277,0.04747552999882565,0.063296081993708606,0.079112670356886197,0.094924304645836038,0.11072999472826232,0.12652875084409831,0.14231958366748573,0.15810150436872675,0.17387352467620495,0.18963465693827145,0.20538391418509211,0.22112031019045214,0.23684285953351392,0.25255057766052458,0.26824248094646935,0.28391758675666662,0.29957491350830084,0.31521348073188987,0.33083230913268236,0.34643042065198193,0.3620068385283931,0.3775605873589874,0.39309069316038281,0.40859618342973558,0.4240760872056385,0.43952943512892323,0.45495525950336191,0.47035259435626492,0.48572047549897024,0.50105794058722175,0.51636402918143165,0.5316377828068235,0.5468782450134525,0.5620844614360988,0.57725547985403036,0.59239035025063158,0.60748812487289328,0.62254785829076242,0.63756860745634447,0.65254943176295799,0.66748939310403599,0.68238755593187006,0.69724298731619538,0.71205475700261123,0.72682193747083357,0.7415436039927773,0.7562188346904628,0.77084671059374466,0.78542631569785781,0.7999567370207783,0.814437064660395,0.82886639185148747,0.84324381502250823,0.85756843385216552,0.87183935132580104,0.88605567379156147,0.90021651101636024,0.91432097624162356,0.92836818623881956,0.94235726136476727,0.95628732561671981,0.97015750668722001,0.98396693601872509,0.99771474885799583,1.011400084310248,1.0250220853930618,1.0385798990900477,1.0520726764042598,1.0654995724113645,1.0788597463125469,1.0921523614871631,1.1053765855451299,1.1185315903790496,1.1316165522160662,1.14463065166945,1.1575730737899093,1.1704430081166217,1.1832396487279861,1.1959621942920899,1.2086098481168888,1.2211818182000953,1.2336773172787756,1.2460955628786479,1.2584357773630801,1.2706971879817879,1.2828790269192234,1.2949805313426561,1.3070009434499426,1.3189395105169797,1.3307954849448413,1.3425681243065923,1.3542566913937808,1.3658604542626021,1.3773786862797321,1.3888106661678321,1.4001556780507134,1.4114130114981658,1.4225819615704469,1.4336618288624241,1.4446519195473717,1.45555154542042,1.4663600239416499,1.477076678278834,1.4877008373498204,1.4982318358645561,1.5086690143667485,1.5190117192751591,1.5292593029245329,1.539411123606155,1.5494665456080339,1.5594249392547108,1.5692856809466906,1.5790481531994909,1.5887117446823105,1.5982758502563099,1.6077398710125061,1.6171032143092769,1.6263652938094715,1.635525529517128,1.6445833478137928,1.6535381814944403,1.6623894698029931,1.6711366584674348,1.6797791997345199,1.6883165524040751,1.6967481818628878,1.705073560118185,1.7132921658306961,1.7214034843473001,1.7294070077332517,1.7373022348039906,1.7450886711565246,1.7527658292003891,1.7603332281881816,1.7677903942456652,1.7751368604014428,1.7823721666162,1.7894958598115125,1.7965074938982175,1.8034066298043487,1.8101928355026313,1.8168656860375354,1.8234247635518872,1.8298696573130349,1.8361999637385695,1.8424152864215972,1.8485152361555628,1.8544994309586211,1.8603674960975585,1.8661190641112568,1.8717537748337054,1.8772712754165553,1.8826712203512126,1.8879532714904768,1.8931170980697143,1.8981623767275715,1.9030887915262238,1.9078960339711599,1.9125838030304996,1.9171518051538445,1.9215997542906611,1.9259273719081922,1.9301343870088994,1.9342205361474336,1.9381855634471314,1.9420292206160377,1.9457512669624553,1.949351469410016,1.9528296025122764,1.9561854484668355,1.9594187971289734,1.9625294460248102,1.9655172003639867,1.9683818730518601,1.9711232847012214,1.9737412636435285,1.9762356459396555,1.9786062753901597,1.9808530035450616,1.9829756897131419,1.9849742009707518,1.9868484121701357,1.9885982059472691,1.990223472729207,1.9917241107409465,1.9931000260117988,1.9943511323812748,1.9954773515044801,1.9964786128570207,1.9973548537394192,1.9981060192810418,1.9987320624435341,1.9992329440237657,1.9996086326562865,1.9998591048152903,1.9999843448160872,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.041063684976780777,0.082110057463206612,0.12312181226788566,0.16408165879427511,0.20497232833041376,0.2457765813294282,0.28647721467774295,0.32705706894792996,0.36749903563314062,0.40778606436006892,0.44790117007740593,0.48782744021675423,0.52754804182298365,0.56704622865102161,0.60630534822608695,0.64530884886438966,0.68404028665133743,0.72248333237430573,0.76062177840705125,0.79843954554286178,0.83592068977356671,0.8730494090115466,0.90981004975190871,0.94618711367202002,0.98216526416561634,1.0177293328087298,1.0528643257547114,1.0875554300556531,1.1217880199075394,1.155547662816502,1.1888201256835735,1.2215913808053755,1.2538476117882129,1.2855752193730785,1.3167608271691154,1.3473912872931142,1.3774536859126771,1.4069353486906995,1.4358238461288837,1.4641069988080293,1.4917728825228866,1.5188098333094142,1.5452064523623177,1.5709516108407975,1.5960344545604788,1.6204444085695469,1.6441711816071565,1.6672047704422388,1.6895354640908729,1.7111538479104462,1.7320508075688772,1.7522175328872269,1.7716455215540796,1.7903265827101247,1.8082528404014317,1.8254167368999608,1.8418110358899071,1.8574288255185405,1.8722635213102476,1.8863088689425549,1.8995589468829555,1.9120081688854353,1.9236512863456381,1.9344833905136831,1.944499914563699,1.9536966355192014,1.962069676033505,1.969615506024416,1.9763309441625188,1.982213159212427,1.9872596712264354,1.9914683525900689,1.9948374289190862,1.997365479807562,1.9990514394267318,1.9998945969743462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0131172030504425,0.026233841854996595,0.039349352192045314,0.052463169888513538,0.065574730844136273,0.078683471055723875,0.091788826641423016,0.10489023386497247,0.11798712915995264,0.13107894915402779,0.14416513069317982,0.15724511086593293,0.17031832702756744,0.18338421682432243,0.19644221821758592,0.20949176950807125,0.22253230935997889,0.23556327682514283,0.24858411136716022,0.26159425288550303,0.27459314173961147,0.28758021877296691,0.30055492533714495,0.31351670331584558,0.32646499514890126,0.33939924385626064,0.35231889306194741,0.36522338701799339,0.37811217062834435,0.39098468947273762,0.40384038983055143,0.41667871870462297,0.42949912384503636,0.44230105377287798,0.45508395780395872,0.46784728607250198,0.48059048955479677,0.49331302009281397,0.50601433041778621,0.51869387417374857,0.53135110594104096,0.5439854812597692,0.55659645665322566,0.56918348965126742,0.58174603881365083,0.59428356375332192,0.60679552515966151,0.61928138482168427,0.63174060565118995,0.64417265170586691,0.65657698821234589,0.66895308158920364,0.68130039946991527,0.69361841072575492,0.70590658548864171,0.71816439517393316,0.73039131250316214,0.74258681152671857,0.75475036764647319,0.76688145763834348,0.77897955967480115,0.79104415334731804,0.80307471968875233,0.81507074119567235,0.82703170185061714,0.83895708714429351,0.85084638409770774,0.86269908128423212,0.874514668851604,0.88629263854385776,0.89803248372318756,0.90973369939174065,0.92139578221334051,0.9330182305351381,0.94460054440919072,0.95614222561396767,0.96764277767578177,0.97910170589014522,0.99051851734305008,1.0018927209321706,1.0132238273879894,1.0245113492948432,1.0357548011118884,1.0469536991939894,1.0581075618125197,1.0692159091760869,1.0802782634511692,1.0912941487826708,1.1022630913143909,1.1131846192094061,1.1240582626703688,1.1348835539597133,1.1456600274197783,1.1563872194928357,1.1670646687410324,1.1776919158662373,1.1882685037298009,1.1987939773722172,1.2092678840326954,1.2196897731686358,1.2300591964750085,1.2403757079036408,1.2506388636824004,1.2608482223342876,1.2710033446964246,1.2811037939389462,1.2911491355837907,1.3011389375233893,1.311072770039253,1.3209502058204583,1.3307708199820276,1.3405341900832051,1.3502398961456301,1.3598875206714021,1.3694766486610386,1.3790068676313283,1.3884777676330728,1.3978889412687228,1.4072399837099001,1.4165304927148139,1.4257600686455623,1.4349283144853227,1.4440348358554314,1.4530792410323456,1.4620611409644966,1.4709801492890218,1.4798358823483881,1.4886279592068918,1.4973560016670471,1.5060196342858534,1.5146184843909456,1.523152182096625,1.5316203603197696,1.5400226547956253,1.5483587040934748,1.5566281496321843,1.5648306356956281,1.5729658094479908,1.5810333209489444,1.5890328231687005,1.5969639720029396,1.6048264262876109,1.6126198478136096,1.6203439013413243,1.627998254615058,1.6355825783773199,1.6430965463829887,1.6505398354133465,1.6579121252899818,1.6652130988885634,1.6724424421524802,1.6795998441063513,1.6866849968694033,1.6936975956687133,1.7006373388523184,1.7075039279021935,1.7142970674470899,1.7210164652752429,1.7276618323469397,1.7342328828069538,1.7407293339968417,1.7471509064670998,1.7534973239891876,1.7597683135674071,1.7659636054506487,1.7720829331439922,1.7781260334201727,1.784092646330901,1.7899825152180475,1.7957953867246816,1.8015310108059706,1.8071891407399343,1.8127695331380596,1.8182719479557683,1.8236961485027445,1.8290419014531152,1.8343089768554866,1.8394971481428357,1.8446061921422574,1.849635889084563,1.854586022613735,1.8594563797962316,1.8642467511301493,1.8689569305542326,1.8735867154567385,1.8781359066841519,1.8826043085497521,1.8869917288420313,1.8912979788329618,1.8955228732861147,1.8996662304646275,1.9037278721390221,1.9077076235948718,1.9116053136403159,1.9154207746134242,1.919153842389409,1.9228043563876847,1.9263721595787762,1.9298570984910726,1.9332590232174292,1.9365777874216166,1.9398132483446144,1.9429652668107524,1.9460337072336982,1.9490184376222874,1.9519193295862045,1.9547362583415027,1.957469102715973,1.9601177451543563,1.9626820717234006,1.9651619721167606,1.9675573396597443,1.9698680713139005,1.9720940676814507,1.9742352330095667,1.9762914751944876,1.978262705785482,1.980148839988654,1.981949796670589,1.9836654983618449,1.9852958712602842,1.9868408452342483,1.9883003538255748,1.9896743342524557,1.9909627274121384,1.9921654778834679,1.993282533929271,1.9943138474985813,1.9952593742287068,1.9961190734471375,1.9968929081732953,1.9975808451201256,1.9981828546955271,1.9986989110036268,1.9991289918458928,1.9994730787220896,1.9997311568310734,1.9999032150714295,1.9999892460419495,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.009349944077611097,0.018699683807678551,0.028049014847124826,0.037397732861804533,0.046745633530970221,0.056092512551737916,0.065438165643552287,0.074782388552651249,0.084124977056530048,0.093465726968404675,0.10280443414167441,0.11214089447438358,0.12147490391368231,0.13080625846028615,0.14013475417293461,0.14946018717284851,0.15878235364818558,0.16810104985849508,0.17741607213917066,0.18672721690590136,0.19603428065912121,0.2053370599884568,0.21463535157717281,0.22392895220661571,0.23321765876065514,0.24250126823012308,0.25177957771725074,0.2610523844401032,0.27031948573701081,0.27958067907099893,0.2888357620342144,0.29808453235234889,0.3073267878890602,0.31656232665038986,0.32579094678917747,0.33501244660947282,0.3442266245709435,0.35343327929327989,0.36263220956059639,0.37182321432582921,0.38100609271512997,0.3901806440322565,0.39934666776295868,0.4085039635793607,0.41765233134433977,0.42679157111589999,0.43592148315154206,0.44504186791262879,0.45415252606874645,0.46325325850206062,0.47234386631166858,0.48142415081794604,0.49049391356688954,0.49955295633445368,0.50860108113088354,0.51763809020504159,0.52666378604872965,0.53567797140100615,0.54468044925249637,0.55367102284969871,0.56264949569928535,0.57161567157239546,0.58056935450892466,0.58951034882180842,0.59843845910129745,0.60735349021922946,0.61625524733329373,0.62514353589128902,0.63401816163537605,0.64287893060632317,0.65172564914774467,0.66055812391033408,0.66937616185608984,0.67817957026253339,0.68696815672692213,0.69574172917045451,0.70450009584246709,0.713243065324626,0.72197044653511089,0.73068204873279008,0.73937768152138994,0.7480571548536562,0.75672027903550709,0.76536686473017956,0.7739967229623671,0.78260966512235008,0.7912055029701176,0.79978404863948194,0.80834511464218428,0.81688851387199224,0.82541405960878944,0.83392156552265617,0.84241084567794156,0.85088171453732786,0.85933398696588492,0.86776747823511624,0.8761820040269972,0.8845773804380026,0.89295342398312605,0.90130995159989036,0.90964678065234872,0.91796372893507538,0.92626061467714882,0.93453725654612396,0.9427934736519954,0.9510290855511504,0.95924391225031358,0.9674377742104795,0.97561049235083808,0.98376188805268672,0.99189178316333537,1,1.0080863613536855,1.0161506904930588,1.0241928111683121,1.0322125476150132,1.0402097245579491,1.0481841672149554,1.056135701300736,1.0640641530306731,1.0719693491246252,1.079851116810713,1.0877092838290974,1.0955436784357429,1.1033541294061713,1.1111404660392044,1.1189025181606949,1.1266401161272441,1.1343530908299118,1.1420412736979104,1.1497044967022902,1.1573425923596115,1.1649553937356043,1.172542734448818,1.1801044486742562,1.1876403711470034,1.1951503371658332,1.2026341825968117,1.2100917438768823,1.2175228580174413,1.2249273626079002,1.2323050958192352,1.2396558964075231,1.246979603717467,1.2542760576859069,1.2615450988453165,1.268786568327291,1.2760003078660174,1.2831861598017336,1.2903439670841752,1.2974735732760072,1.3045748225562424,1.3116475597236481,1.3186916302001379,1.3257068800341487,1.3326931559040078,1.3396503051212818,1.346578175634114,1.3534766160305485,1.3603454755418389,1.3671846040457425,1.3739938520698032,1.3807730707946166,1.3875221120570831,1.3942408283536465,1.4009290728435169,1.4075866993518806,1.4142135623730949,1.4208095170738684,1.4273744192964244,1.4339081255616546,1.4404104930722532,1.4468813797158373,1.4533206440680542,1.4597281453956712,1.4661037436596527,1.4724472995182187,1.4787586743298926,1.4850377301565292,1.4912843297663312,1.4974983366368468,1.5036796149579548,1.5098280296348319,1.515943446290906,1.5220257312707921,1.5280747516432149,1.5340903752039121,1.5400724704785256,1.546020906725474,1.55193555393881,1.557816282851062,1.5636629649360596,1.5694754724117421,1.5752536782429507,1.5809974561442071,1.5867066805824703,1.5923812267798834,1.5980209707164981,1.603625789132987,1.6091955595333367,1.6147301601875248,1.6202294701341811,1.6256933691832305,1.6311217379185203,1.6365144577004302,1.6418714106684646,1.6471924797438295,1.6524775486319898,1.6577265018252125,1.6629392246050905,1.6681156030450497,1.6732555240128395,1.6783588751730043,1.6834255449893401,1.6884554227273303,1.6934483984565682,1.6984043630531578,1.7033232082020988,1.708204826399655,1.7130491109557029,1.7178559559960638,1.7226252564648179,1.7273569081265998,1.7320508075688774,1.7367068522042111,1.7413249402724964,1.7459049708431886,1.7504468438175074,1.7549504599306252,1.7594157207538368,1.7638425286967101,1.7682307870092195,1.7725803997838605,1.7768912719577445,1.7811633093146786,1.7853964184872231,1.7895905069587321,1.7937454830653767,1.7978612559981471,1.8019377358048383,1.8059748333920149,1.80997246052696,1.8139305298396009,1.8178489548244217,1.8217276498423516,1.8255665301226378,1.8293655117646976,1.8331245117399524,1.8368434478936422,1.8405222389466211,1.844160804497134,1.8477590650225735,1.8513169418812176,1.8548343573139499,1.8583112344459565,1.8617474972884085,1.8651430707401222,1.8684978805891996,1.8718118535146515,1.8750849170879984,1.8783169997748557,1.8815080309364947,1.8846579408313886,1.8877666606167351,1.8908341223499621,1.8938602589902114,1.8968450043998055,1.899788293345692,1.9026900615008691,1.9055502454457924,1.9083687826697608,1.9111456115722816,1.9138806714644176,1.9165739025701147,1.9192252460275057,1.921834643890199,1.9244020391285441,1.926927375630878,1.9294105982047518,1.9318516525781366,1.9342504854006102,1.9366070442445229,1.9389212776061429,1.9411931349067819,1.943422566493902,1.9456095236421986,1.9477539585546673,1.9498558243636472,1.9519150751318459,1.9539316658533434,1.9559055524545754,1.957836691795297,1.9597250416695249,1.9615705608064609,1.9633732088713929,1.9651329464665765,1.9668497351320968,1.9685235373467087,1.9701543165286557,1.9717420370364718,1.973286664169758,1.9747881641699425,1.9762465042210176,1.977661652450257,1.979033577928913,1.9803622506728911,1.9816476416434072,1.9828897227476208,1.9840884668392493,1.9852438477191616,1.9863558401359507,1.9874244197864852,1.9884495633164407,1.9894312483208101,1.9903694533443939,1.9912641578822676,1.9921153423802318,1.9929229882352384,1.9936870777957967,1.9944075943623603,1.9950845221876921,1.995717846477207,1.9963075533892971,1.9968536300356332,1.9973560644814459,1.9978148457457883,1.9982299638017738,1.9986014095767972,1.9989291749527314,1.9992132527661057,1.9994536368082627,1.9996503218254928,1.99980330351915,1.9999125785457454,1.9999781445170208,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0082891389431425707,0.016578135499353337,0.024866847284146346,0.033155131917927322,0.041442847028439381,0.049729850253208641,0.058015999241989677,0.066301151659210703,0.074585165186418584,0.082867897524723511,0.09114920639724329,0.099428949551547421,0.10770698476210053,0.11598316983270551,0.1242573625989461,0.13252942093062889,0.14079920273422478,0.14906656595530979,0.15733136858100527,0.16559346864241722,0.17385272421707501,0.18210899343136933,0.19036213446298908,0.19861200554335767,0.20685846496006821,0.2151013710593177,0.22334058224834041,0.23157595699784003,0.23980735384442078,0.24803463139301743,0.25625764831932418,0.26447626337222208,0.27269033537620557,0.28089972323380746,0.28910428592802262,0.29730388252473022,0.30549837217511483,0.31368761411808566,0.32187146768269465,0.33004979229055276,0.33822244745824465,0.34638929279974212,0.35455018802881533,0.36270499296144265,0.37085356751821891,0.37899577172676108,0.38713146572411322,0.39526050975914861,0.40338276419497066,0.411498089511311,0.41960634630692673,0.42770739530199448,0.4358010973405031,0.44388731339264409,0.4519659045571997,0.46003673206392887,0.46809965727595093,0.47615454169212729,0.48420124694944028,0.49223963482536992,0.50026956724026839,0.50829090625973172,0.5163035140969694,0.5243072531151709,0.53230198582987009,0.54028757491130697,0.54826388318678654,0.5562307736430353,0.56418810942855424,0.57213575385597026,0.5800735704043839,0.58800142272171418,0.59591917462704114,0.60382669011294487,0.61172383334784197,0.61961046867831859,0.62748646063146074,0.6353516739171815,0.64320597343054442,0.65104922425408529,0.65888129166012865,0.66670204111310272,0.67451133827185006,0.68230904899193567,0.69009503932795047,0.69786917553581296,0.70563132407506635,0.71338135161117211,0.72111912501780073,0.72884451137911832,0.73655737799207011,0.74425759236865918,0.75194502223822335,0.75961953554970618,0.767281000473926,0.77492928540584027,0.78256425896680626,0.79018579000683742,0.79779374760685662,0.80538800108094499,0.8129684199785866,0.82053487408690928,0.82808723343292179,0.83562536828574574,0.84314914915884442,0.85065844681224734,0.85815313225476963,0.86563307674622825,0.87309815179965322,0.88054822918349485,0.88798318092382633,0.89540287930654205,0.90280719687955135,0.91019600645496801,0.91756918111129493,0.92492659419560397,0.93226811932571219,0.93959363039235244,0.94690300156133944,0.95419610727573168,0.96147282225798802,0.96873302151211904,0.97597658032583567,0.98320337427268967,0.99041327921421241,0.9976061713020461,1.0047819269800724,1.0119404229865334,1.0190815363561503,1.0262051444222349,1.0333111248187969,1.0403993554826458,1.0474697146554874,1.0545220808860161,1.0615563330319999,1.068572350262363,1.0755700120592593,1.0825491982201445,1.08950978885984,1.0964516644125919,1.1033747056341254,1.1102787936036937,1.117163809726119,1.1240296357338313,1.1308761536888992,1.1377032459850562,1.1445107953497202,1.1512986848460087,1.1580667978747472,1.1648150181764723,1.1715432298334274,1.1782513172715563,1.1849391652624865,1.1916066589255097,1.1982536837295537,1.204880125495152,1.2114858703964027,1.2180708049629259,1.224634816081811,1.2311777909995614,1.2376996173240293,1.2442001830263489,1.2506793764428581,1.257137086277019,1.2635732016013275,1.2699876118592206,1.2763802068669745,1.2827508768155975,1.2890995122727162,1.2954260041844556,1.3017302438773115,1.3080121230600186,1.3142715338254094,1.3205083686522685,1.3267225204071795,1.3329138823463651,1.33908234811752,1.3452278117616401,1.3513501677148394,1.357449310810166,1.3635251362794067,1.3695775397548886,1.3756064172712699,1.3816116652673269,1.3875931805877331,1.3935508604848299,1.3994846026203933,1.4053943050673905,1.411279866311731,1.4171411852540108,1.4229781612112486,1.4287906939186155,1.4345786835311576,1.4403420306255101,1.4460806362016063,1.4517944016843776,1.4574832289254467,1.4631470202048131,1.4687856782325341,1.4743991061503918,1.4799872075335614,1.4855498863922636,1.491087047173417,1.4965985947622762,1.5020844344840685,1.5075444721056175,1.5129786138369643,1.5183867663329769,1.5237688366949542,1.5291247324722219,1.5344543616637201,1.5397576327195843,1.5450344545427175,1.5502847364903551,1.5555083883756224,1.5607053204690828,1.5658754435002802,1.5710186686592718,1.5761349075981537,1.5812240724325783,1.5862860757432655,1.5913208305775015,1.5963282504506353,1.6013082493475619,1.6062607417242021,1.6111856425089695,1.6160828671042342,1.6209523313877741,1.6257939517142215,1.6306076449164981,1.6353933283072453,1.640150919680244,1.6448803373118259,1.6495814999622784,1.6542543268772398,1.658898737789086,1.66351465291831,1.6681019929748917,1.6726606791596603,1.6771906331656476,1.6816917771794335,1.6861640338824821,1.6906073264524704,1.6950215785646072,1.6994067143929452,1.7037626586116832,1.7080893363964587,1.7123866734256348,1.7166545958815767,1.7208930304519185,1.725101904330824,1.7292811452202363,1.7334306813311202,1.7375504413846956,1.7416403546136603,1.7457003507634083,1.7497303600932343,1.7537303133775326,1.7577001419069862,1.761639777489747,1.7655491524526068,1.7694281996421608,1.7732768524259601,1.777095044693656,1.7808827108581371,1.7846397858566545,1.7883662051519409,1.7920619047333166,1.7957268211177919,1.7993608913511565,1.8029640530090605,1.8065362441980861,1.810077403556813,1.8135874702568706,1.8170663840039833,1.820514085039006,1.8239305141389512,1.8273156126180063,1.8306693223285408,1.8339915856621061,1.8372823455504246,1.8405415454663696,1.8437691294249379,1.846965041984209,1.8501292282462996,1.8532616338583059,1.8563622050132367,1.8594308884509385,1.8624676314590096,1.8654723818737067,1.8684450880808396,1.8713856990166586,1.8742941641687316,1.8771704335768113,1.8800144578336944,1.8828261880860691,1.8856055760353547,1.8883525739385323,1.8910671346089629,1.8937492114171997,1.8963987582917878,1.8990157297200572,1.9016000807489029,1.9041517669855577,1.9066707445983548,1.9091569703174815,1.9116104014357214,1.9140309958091875,1.916418711858048,1.9187735085672393,1.9210953454871702,1.923384182734418,1.9256399809924125,1.9278627015121115,1.9300523061126669,1.9322087571820805,1.9343320176778496,1.9364220511276031,1.93847882162973,1.9405022938539926,1.9424924330421367,1.9444492050084869,1.9463725761405344,1.9482625133995142,1.9501189843209721,1.951941957015324,1.9537314001684016,1.9554872830419918,1.9572095754743641,1.9588982478807888,1.9605532712540452,1.9621746171649197,1.9637622577626948,1.9653161657756264,1.9668363145114134,1.9683226778576555,1.9697752302823015,1.9711939468340893,1.9725788031429727,1.9739297754205412,1.9752468404604278,1.9765299756387087,1.9777791589142912,1.9789943688292921,1.9801755845094067,1.9813227856642674,1.9824359525877921,1.9835150661585228,1.984560107839954,1.9855710596808507,1.9865479043155576,1.9874906249642972,1.9883992054334565,1.9892736301158682,1.9901138839910757,1.9909199526255934,1.9916918221731528,1.9924294793749417,1.993132911559832,1.9938021066445957,1.9944370531341147,1.9950377401215764,1.9956041572886623,1.9961362949057246,1.9966341438319535,1.997097695515534,1.9975269419937933,1.9979218758933375,1.9982824904301772,1.9986087794098459,1.9989007372275047,1.9991583588680395,1.999381639906147,1.99957057650641,1.999725165423365,1.9998454040015561,1.9999312901755812,1.9999828224701284,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.018159245591526024,0.036316994112159981,0.054471748614430215,0.072622012397695668,0.090766289131535768,0.10890308297910978,0.12703089872047546,0.1451482418758569,0.16325361882885114,0.18134553694956404,0.19942250471766432,0.21748303184534645,0.23552562940019189,0.25354880992791839,0.27155108757500779,0.28953097821120144,0.30748699955185382,0.32541767128013405,0.34332151516906489,0.36119705520338963,0.37904281770125675,0.39685733143571222,0.41463912775598877,0.43238674070858391,0.45009870715811445,0.46777356690793959,0.48540986282054127,0.50300614093765206,0.52056095060012209,0.53807284456751203,0.55554037913740661,0.57296211426443455,0.5903366136789876,0.60766244500562927,0.62493817988118017,0.64216239407247588,0.65933366759378054,0.67645058482385423,0.69351173462265692,0.71051571044768558,0.72746111046993078,0.7443465376894457,0.76117060005051629,0.77793191055642374,0.79462908738379112,0.81126075399650144,0.82782553925918234,0.84432207755024291,0.86074900887445815,0.87710497897508832,0.89338863944552549,0.90959864784045819,0.92573366778654387,0.94179236909258146,0.95777342785917385,0.97367552658787193,0.98949735428979091,1.0052376065936894,1.0208949858535039,1.0364682012553286,1.0519559689238303,1.0673570120280946,1.0826700608868878,1.0978938530733329,1.113027133518983,1.1280686546172929,1.1430171763264727,1.1578714662717184,1.1726302998468101,1.1872924603150701,1.2018567389096728,1.2163219349332963,1.2306868558571098,1.244950317419087,1.259111143721638,1.2731681673285518,1.2871202293612416,1.3009661795942837,1.314704876550244,1.3283351875937821,1.3418559890250279,1.3552661661722205,1.3685646134836034,1.3817502346185666,1.3948219425380322,1.4077786595940691,1.4206193176187369,1.433342858012147,1.4459482318297345,1.4584343998687344,1.470800332753855,1.4830450110221416,1.4951674252070208,1.5071665759215229,1.5190414739406735,1.5307911402830447,1.5424146062914657,1.553910913712877,1.5652791147773339,1.5765182722761386,1.5876274596391065,1.5986057610109525,1.6094522713267976,1.620166096386781,1.6307463529297805,1.6411921687062294,1.6515026825500256,1.6616770444495272,1.6717144156176289,1.6816139685609126,1.6913748871478664,1.7009963666761683,1.7104776139390261,1.719817847290571,1.7290162967102973,1.7380722038665437,1.746984822179011,1.7557534168803111,1.7643772650765435,1.7728556558068884,1.7811878901022233,1.7893732810427434,1.7974111538145938,1.8053008457655024,1.8130417064594078,1.8206330977300846,1.8280743937337529,1.8353649810006736,1.8425042584857252,1.8494916376179529,1.8563265423490918,1.8630084092010575,1.8695366873123995,1.8759108384837146,1.8821303372220177,1.8881946707840624,1.8941033392186146,1.899855855407667,1.9054517451065982,1.9108905469832713,1.9161718126560647,1.921295106730839,1.9262600068368303,1.9310661036614716,1.9357130009841363,1.9402003157088041,1.9445276778956435,1.9486947307915095,1.952701130859356,1.9565465478065562,1.960230664612133,1.9637531775528949,1.9671137962284744,1.9703122435852694,1.9733482559392841,1.9762215829978678,1.9789319878803477,1.9814792471375597,1.9838631507702682,1.98608350224648,1.988140118517645,1.9900328300337493,1.9917614807572905,1.9933259281761435,1.9947260433153089,1.9959617107475454,1.9970328286028862,1.9979393085770374,1.9986810759386573,1.999258069535518,1.9996702417995467,1.9999175587507467,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0080760517119036028,0.016151971737975081,0.024227628394529539,0.032302890002176524,0.04037762488796711,0.048451701387540985,0.056524987847273278,0.0645973526264213,0.072668664099270988,0.08073879065728326,0.088807600711239859,0.096874962693389091,0.10494074505959118,0.11300481629146301,0.12106704489852285,0.12912729942033421,0.13718544842864952,0.14524136052955311,0.1532949043656037,0.1613459486179763,0.16939436200860333,0.17744001330231546,0.18548277130898116,0.19352250488564621,0.20155908293867175,0.20959237442587203,0.21762224835865121,0.22564857380413902,0.23367121988732592,0.24169005579319691,0.24970495076886479,0.25771577412570201,0.26572239524147168,0.27372468356245744,0.28172250860559234,0.28971573996058642,0.29770424729205303,0.30568790034163401,0.31366656893012401,0.32164012295959277,0.32960843241550652,0.33757136736884819,0.34552879797823582,0.35348059449203956,0.36142662725049768,0.36936676668783069,0.37730088333435385,0.38522884781858824,0.39315053086937068,0.40106580331796099,0.40897453610014861,0.41687660025835688,0.42477186694374597,0.43266020741831357,0.4405414930569943,0.44841559534975695,0.45628238590370002,0.464141736445145,0.47199351882172813,0.4798376050044903,0.48767386708996413,0.49550217730225971,0.50332240799514849,0.51113443165414385,0.51893812089858093,0.52673334848369391,0.53451998730268968,0.54229791038882158,0.55006699091745936,0.55782710220815657,0.56557811772671718,0.57331991108725766,0.58105235605426897,0.58877532654467413,0.59648869662988413,0.60419234053785176,0.61188613265512204,0.61956994752888028,0.62724365986899833,0.63490714455007691,0.64256027661348591,0.65020293126940243,0.65783498389884509,0.66545631005570605,0.67306678546878063,0.68066628604379287,0.68825468786541988,0.69583186719931178,0.70339770049410932,0.71095206438345859,0.71849483568802297,0.72602589141749052,0.73354510877258083,0.74105236514704653,0.74854753812967256,0.75603050550627215,0.76350114526168023,0.77095933558174168,0.77840495485529893,0.7858378816761743,0.79325799484514947,0.80066517337194221,0.80805929647717867,0.81544024359436307,0.82280789437184398,0.83016212867477579,0.83750282658707853,0.84482986841339269,0.85214313468103109,0.85944250614192697,0.86672786377457811,0.87399908878598831,0.88125606261360367,0.88849866692724611,0.89572678363104274,0.90294029486535188,0.91013908300868396,0.91732303067962051,0.92449202073872749,0.93164593629046544,0.93878466068509558,0.94590807752058204,0.95301607064448923,0.96010852415587689,0.96718532240718913,0.97424635000614002,0.98129149181759556,0.98832063296545147,0.9953336588345052,1.0023304550723253,1.0093109075911171,1.016274902569581,1.0232223264547695,1.0301530659639395,1.0370670080863977,1.0439640400853452,1.050844049499714,1.057706924146002,1.0645525521201018,1.0713808217991252,1.0781916218432239,1.0849848411974041,1.091760369093338,1.0985180950511697,1.1052579088813168,1.1119797006862671,1.1186833608623701,1.125368780101625,1.1320358493934621,1.1386844600265216,1.1453145035904244,1.1519258719775416,1.1585184573847562,1.1650921523152211,1.171646849580112,1.1781824423003757,1.1846988239084717,1.1911958881501106,1.1976735290859872,1.2041316410935063,1.2105701188685067,1.2169888574269772,1.2233877521067684,1.2297666985693001,1.2361255928012622,1.2424643311163102,1.2487828101567566,1.2550809268952556,1.2613585786364843,1.2676156630188149,1.2738520780159863,1.2800677219387662,1.2862624934366098,1.2924362914993117,1.2985890154586539,1.3047205649900471,1.3108308401141651,1.3169197411985776,1.3229871689593726,1.3290330244627762,1.3350572091267658,1.3410596247226776,1.3470401733768071,1.3529987575720079,1.358935280149278,1.3648496443093467,1.370741753614253,1.376611511988916,1.3824588237227031,1.3882835934709914,1.3940857262567201,1.3998651274719407,1.4056217028793596,1.4113553586138738,1.4170660011841028,1.4227535374739118,1.4284178747439307,1.4340589206330658,1.4396765831600065,1.4452707707247248,1.4508413921099685,1.4563883564827491,1.4619115733958226,1.4674109527891646,1.4728864049914383,1.4783378407214576,1.4837651710896411,1.4891683075994637,1.4945471621488986,1.4999016470318529,1.5052316749395993,1.5105371589621992,1.5158180125899194,1.5210741497146429,1.5263054846312736,1.5315119320391324,1.5366934070433496,1.5418498251562485,1.5469811022987225,1.5520871548016075,1.5571678994070441,1.5622232532698375,1.5672531339588065,1.5722574594581284,1.577236148168677,1.5821891189093511,1.5871162909184007,1.5920175838547419,1.5968929177992679,1.6017422132561523,1.6065653911541444,1.6113623728478597,1.6161330801190605,1.6208774351779343,1.6255953606643587,1.6302867796491649,1.6349516156353927,1.6395897925595353,1.6442012347927821,1.6487858671422506,1.6533436148522125,1.657874403605313,1.662378159523783,1.6668548091706425,1.671304279550899,1.6757264981127376,1.6801213927487038,1.6844888917968792,1.6888289240420509,1.693141418716871,1.6974263055030119,1.7016835145323126,1.7059129763879175,1.7101146221054095,1.7142883831739326,1.7184341915373103,1.7225519795951556,1.7266416802039721,1.7307032266782498,1.7347365527915519,1.7387415927775955,1.7427182813313222,1.7466665536099655,1.7505863452341053,1.7544775922887201,1.7583402313242276,1.76217419935752,1.7659794338729911,1.7697558728235547,1.7735034546316577,1.7772221181902832,1.7809118028639463,1.7845724484896857,1.7882039953780404,1.7918063843140271,1.7953795565581026,1.798923453847123,1.8024380183952946,1.8059231928951143,1.8093789205183048,1.8128051449167419,1.8162018102233721,1.8195688610531247,1.8229062425038138,1.8262139001570341,1.8294917800790489,1.8327398288216683,1.8359579934231212,1.8391462214089187,1.8423044607927108,1.845432660077132,1.8485307682546437,1.8515987348083631,1.854636509712889,1.8576440434351165,1.8606212869350449,1.8635681916665776,1.8664847095783135,1.8693707931143297,1.8722263952149589,1.8750514693175544,1.8778459693572511,1.8806098497677155,1.8833430654818899,1.8860455719327263,1.8887173250539124,1.8913582812805925,1.8939683975500756,1.8965476313025382,1.8990959404817189,1.9016132835356039,1.9040996194171036,1.9065549075847232,1.9089791080032235,1.9113721811442723,1.913734087987091,1.9160647900190899,1.9183642492364956,1.920632428144972,1.9228692897602302,1.9250747976086326,1.9272489157277874,1.9293916086671352,1.931502841488526,1.9335825797667903,1.9356307895902993,1.9376474375615189,1.9396324907975531,1.9415859169306813,1.9435076841088854,1.9453977609963691,1.9472561167740692,1.949082721140158,1.9508775443105379,1.9526405570193255,1.9543717305193311,1.9560710365825251,1.9577384475005002,1.9593739360849216,1.9609774756679721,1.962549040102785,1.9640886037638721,1.9655961415475403,1.9670716288723016,1.9685150416792743,1.9699263564325737,1.9713055501196983,1.9726526002519025,1.9739674848645654,1.9752501825175472,1.9765006722955405,1.9777189338084096,1.9789049471915243,1.9800586931060837,1.9811801527394304,1.9822693078053586,1.9833261405444114,1.984350633724171,1.985342770639539,1.9863025351130097,1.9872299114949328,1.9881248846637691,1.9889874400263379,1.9898175635180533,1.9906152416031546,1.9913804612749268,1.9921132100559129,1.9928134759981171,1.9934812476831993,1.994116514222662,1.9947192652580275,1.9952894909610059,1.9958271820336577,1.9963323297085431,1.9968049257488656,1.9972449624486071,1.9976524326326526,1.9980273296569075,1.9983696474084067,1.9986793803054124,1.9989565232975073,1.9992010718656754,1.9994130220223767,1.999592370311611,1.9997391138089757,1.9998532501217126,1.9999347773887466,1.9999836942807176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.019392243371956792,0.038782663543648739,0.058169437486222803,0.077550742513633419,0.096924756454005917,0.11628965782095164,0.13564362598481869,0.15498484134386187,0.17431148549531633,0.19362174140635818,0.21291379358493651,0.23218582825046044,0.25143603350432536,0.27066259950026217,0.28986371861449345,0.30903758561568095,0.32818239783464792,0.34729635533386066,0.36637766107665326,0.38542452109617936,0.40443514466407587,0.42340774445882146,0.44234053673377555,0.46123174148488028,0.48007958261801176,0.49888228811596252,0.51763809020504148,0.53634522552127462,0.55500193527619146,0.57360646542218041,0.59215706681739977,0.61065199539022619,0.62908951230322729,0.64746788411664202,0.66578538295135314,0.68404028665133743,0.70223087894557756,0.72035544960942077,0.73841229462536884,0.75639971634328496,0.77431602364000118,0.79215953207831358,0.80992856406534719,0.82762144901027823,0.84523652348139888,0.86277213136250686,0.88022662400860963,0.89759836040092422,0.91488570730116148,0.93208703940507753,0.94920073949528072,0.96622519859327682,0.98315881611074107,0.99999999999999989,1.0167471669037111,1.0333987423037256,1.0499531606691204,1.0664088656033823,1.0827643099907391,1.099017956141612,1.1151682759371855,1.1312137509730771,1.1471528727020921,1.1629841425760532,1.1787060721866895,1.1943171834055724,1.2098160085230834,1.2252010903864057,1.2404709825365201,1.2556242493441971,1.2706594661449702,1.2855752193730785,1.3003701066943669,1.3150427371381272,1.3295917312278756,1.3440157211110448,1.3583133506875864,1.3724832757374672,1.3865241640470485,1.400434695534337,1.4142135623730949,1.427859469115798,1.4413711328154291,1.4547472831460975,1.4679866625224705,1.4810880262180091,1.4940501424819919,1.5068717926553215,1.5195517712850988,1.532088886237956,1.5444819588121381,1.55672982384832,1.5688313298391514,1.5807853390375186,1.5925907275635114,1.6042463855100875,1.6157512170474222,1.627104140525935,1.6383040885779834,1.6493500082182133,1.6602408609425574,1.6709756228258728,1.6815532846182062,1.6919728518396819,1.7022333448739995,1.712333799060533,1.7222732647850274,1.7320508075688772,1.7416655081569841,1.7511164626041815,1.7604027823602222,1.7695235943533154,1.7784780410722123,1.7872652806468243,1.7958844869273762,1.8043348495620752,1.8126155740732999,1.8207258819322933,1.8286650106323588,1.836432213760548,1.8440267610678369,1.8514479385377807,1.8586950484536449,1.8657674094640009,1.8726643566467862,1.8793852415718166,1.8859294323617519,1.8922963137515008,1.8984852871460676,1.9044957706768306,1.9103271992562461,1.9159790246309778,1.9214507154334408,1.9267417572317607,1.9318516525781364,1.9367799210556118,1.9415260993232399,1.9460897411596476,1.9504704175049861,1.9546677165012709,1.958681243531103,1.9625106212547694,1.9661554896457198,1.969615506024416,1.9728903450905477,1.975979698953618,1.9788832771618889,1.9816008067296906,1.9841320321630846,1.986476715483886,1.9886346362520368,1.9906055915863317,1.9923893961834911,1.993985882335584,1.9953948999457953,1.9966163165425364,1.9976500172919007,1.9984959050084601,1.9991539001644012,1.9996239408970029,1.9999059830144523,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.011042448829909478,0.022084561040137427,0.033126000021263882,0.044166429184391696,0.055205511971407183,0.066242911865239743,0.077278292400120421,0.088311317171838627,0.099341649847997274,0.11036895417826548,0.12139289400462894,0.1324131332716374,0.14342933603664898,0.15444116648007122,0.16544828891559807,0.17645036780044318,0.18744706774556852,0.19843805352590849,0.20942299009058898,0.22040154257314104,0.23137337630170904,0.24233815680925294,0.25329554984374408,0.26424522137835466,0.27518683762164031,0.28612006502771525,0.29704457030642045,0.30796002043348342,0.31886608266067035,0.32976242452592941,0.34064871386352608,0.3515246188141683,0.36238980783512342,0.37324394971032482,0.38408671356046853,0.39491776885310031,0.40573678541269109,0.4165434334307026,0.42733738347564088,0.43811830650309908,0.44888587386578765,0.4596397573235535,0.47037962905338543,0.48110516165940809,0.49181602818286208,0.5025119021120712,0.51319245739239538,0.52385736843617103,0.53450631013263572,0.54513895785783884,0.55575498748453767,0.56635407539207827,0.5769358984762607,0.58750013415918834,0.59804646039910137,0.6085745557001947,0.61908409912241746,0.62957477029125741,0.64004624940750654,0.65049821725701062,0.66093035522039956,0.67134234528280101,0.68173387004353347,0.69210461272578361,0.70245425718626153,0.71278248792483923,0.72308899009416738,0.73337344950927397,0.74363555265714132,0.75387498670626407,0.76409143951618463,0.77428459964700924,0.78445415636890148,0.79459979967155514,0.80472122027364423,0.81481810963225076,0.82489015995227144,0.83493706419579983,0.84495851609148631,0.85495421014387429,0.8649238416427133,0.87486710667224787,0.88478370212048174,0.8946733256884184,0.90453567589927575,0.91437045210767753,0.92417735450881711,0.93395608414759734,0.94370634292774358,0.95342783362089156,0.96312025987564753,0.97278332622662256,0.98241673810343899,0.99202020183971162,1.001593424681998,1.0111361147987239,1.0206479812890796,1.030128734191887,1.0395780844944402,1.0489957441413138,1.0583814260431457,1.0677348440853882,1.0770557131370302,1.0863437490592882,1.09559866871427,1.1048201899736034,1.1140080317270389,1.1231619138910176,1.13228155741721,1.1413666843010231,1.150417017590073,1.1594322813926303,1.1684122008860287,1.1773565023250427,1.1862649130502343,1.1951371614962618,1.2039729772001608,1.2127720908095883,1.2215342340910327,1.2302591399379925,1.2389465423791168,1.2475961765863148,1.2562077788828283,1.2647810867512692,1.2733158388416228,1.2818117749792146,1.2902686361726412,1.2986861646216665,1.3070641037250788,1.3154021980885142,1.3237001935322423,1.331957837098914,1.3401748770612729,1.348351062929829,1.3564861454604948,1.3645798766621831,1.3726320098043667,1.3806422994246004,1.3886105013360028,1.3965363726347007,1.4044196717072337,1.4122601582379202,1.4200575932161812,1.4278117389438292,1.4355223590423118,1.4431892184599193,1.4508120834789484,1.458390721722828,1.4659249021632033,1.4734143951269765,1.480858972303311,1.4882584067505895,1.4956124729033318,1.5029209465790727,1.5101836049851942,1.5174002267257178,1.524570591808055,1.5316944816497104,1.5387716790849482,1.5458019683714106,1.5527851351966946,1.5597209666848861,1.5666092514030479,1.5734497793676661,1.580242342051051,1.5869867323876932,1.5936827447805775,1.6003301751074479,1.6069288207270327,1.6134784804852198,1.6199789547211898,1.6264300452735021,1.6328315554861361,1.6391832902144854,1.645485055831307,1.651736660232624,1.6579379128435818,1.6640886246242572,1.6701886080754209,1.6762376772442547,1.6822356477300178,1.6881823366896702,1.6940775628434459,1.6999211464803785,1.7057129094637797,1.7114526752366699,1.7171402688271611,1.7227755168537886,1.728358247530799,1.7338882906733859,1.739365477702876,1.7447896416518716,1.750160617169338,1.7554782405256439,1.7607423496175543,1.765952783973171,1.7711093847568247,1.7762119947739161,1.7812604584757092,1.7862546219640729,1.7911943329961706,1.7960794409891041,1.800909797024502,1.8056852538530594,1.8104056658990277,1.8150708892646519,1.8196807817345562,1.8242352027800812,1.8287340135635664,1.8331770769425828,1.8375642574741138,1.841895421418684,1.8461704367444365,1.8503891731311564,1.8545515019742458,1.8586572963886419,1.8627064312126864,1.8666987830119401,1.8706342300829473,1.8745126524569429,1.8783339319035126,1.8820979519341954,1.8858045978060349,1.8894537565250773,1.8930453168498158,1.8965791692945821,1.900055206132883,1.9034733214006856,1.906833410899647,1.9101353722002896,1.9133791046451258,1.916564509351725,1.9196914892157275,1.9227599489138059,1.9257697949065706,1.9287209354414205,1.931613280555341,1.9344467420776459,1.9372212336326651,1.9399366706423782,1.9425929703289924,1.9451900517174658,1.9477278356379766,1.9502062447283355,1.9526252034363445,1.9549846380221003,1.957284476560242,1.9595246489421434,1.9617050868780503,1.963825723899163,1.9658864953596613,1.9678873384386764,1.9698281921422045,1.9717089973049682,1.9735296965922178,1.9752902345014804,1.9769905573642526,1.9786306133476346,1.9802103524559111,1.9817297265320766,1.9831886892593016,1.9845871961623454,1.985925204608912,1.9872026738109494,1.9884195648258929,1.9895758405578527,1.9906714657587448,1.991706407029364,1.9926806328204045,1.9935941134334196,1.9944468210217281,1.9952387295912626,1.9959698150013627,1.9966400549655101,1.997249429052008,1.9977979186846047,1.9982855071430592,1.9987121795636513,1.999077922939634,1.9993827261216313,1.9996265798179762,1.9998094765949965,1.9999314108772386,1.9999923789476397,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"twiddles":[0.99988810181027343,0.014959407015263619,0.99955243228350332,0.029915466169398455,0.9989930665413147,0.044864830350514924,0.99821012976773515,0.059804153945034168,0.99720379718118013,0.074730093586424254,0.99597429399523907,0.089639308903433496,0.99452189536827329,0.10452846326765347,0.99284692634183735,0.11939422454024434,0.99094976176793481,0.13423326581765546,0.98883082622512852,0.14904226617617444,0.98649059392352145,0.16381791141513771,0.98392958859862967,0.17855689479863665,0.98114838339417265,0.19325591779555326,0.97814760073380569,0.20791169081775934,0.97492791218182362,0.22252093395631439,0.9714900382928674,0.2370803777154975,0.96783474845066653,0.2515867637445085,0.96396286069585324,0.26603684556667512,0.95987524154288906,0.28042738930600281,0.95557280578614068,0.29475517441090421,0.95105651629515353,0.3090169943749474,0.94632738379916415,0.32320965745446001,0.9413864666609032,0.33732998738282999,0.9362348706397372,0.35137482408134268,0.93087374864420425,0.36534102436639504,0.9253043004739967,0.37922546265292839,0.91952777255145068,0.39302503165392361,0.91354545764260087,0.40673664307580021,0.90735869456786489,0.42035722830956551,0.90096886790241915,0.43388373911755812,0.89437740766633678,0.44731314831563262,0.88758578900455409,0.46064245045063229,0.880595531856738,0.47386866247299864,0.87340820061712976,0.4869888244043673,0.8660254037844386,0.5,0.8584487936018661,0.51289927740590613,0.85068006568733956,0.52568376981050469,0.84272095865403918,0.53835061609068235,0.83457325372130264,0.55089698145210253,0.82623877431599491,0.56332005806362206,0.81771938566443125,0.57561706568567361,0.80901699437494745,0.58778525229247314,0.80013354801120629,0.59982189468791369,0.79107103465634121,0.61172429911500636,0.7818314824680298,0.62348980185873348,0.77241695922459952,0.63511576984217877,0.76282957186226652,0.64659960121579974,0.75307146600361097,0.65793872593971259,0.74314482547739424,0.66913060635885824,0.73305187182982634,0.68017273777091947,0.72279486382739155,0.69106264898686465,0.71237609695134474,0.70179790288399135,0,0.99955243228350332,0.029915466169398455,0.99821012976773515,0.059804153945034168,0.99597429399523907,0.089639308903433496,0.99284692634183735,0.11939422454024434,0.98883082622512852,0.14904226617617444,0.98392958859862967,0.17855689479863665,0.97814760073380569,0.20791169081775934,0.9714900382928674,0.2370803777154975,0.96396286069585324,0.26603684556667512,0.95557280578614068,0.29475517441090421,0.94632738379916415,0.32320965745446001,0.9362348706397372,0.35137482408134268,0.9253043004739967,0.37922546265292839,0.91354545764260087,0.40673664307580021,0.90096886790241915,0.43388373911755812,0.88758578900455409,0.46064245045063229,0.87340820061712976,0.4869888244043673,0.8584487936018661,0.51289927740590613,0.84272095865403918,0.53835061609068235,0.82623877431599491,0.56332005806362206,0.80901699437494745,0.58778525229247314,0.79107103465634121,0.61172429911500636,0.77241695922459952,0.63511576984217877,0.75307146600361097,0.65793872593971259,0.73305187182982634,0.68017273777091947,0.71237609695134474,0.70179790288399135,0.69106264898686465,0.72279486382739155,0.66913060635885824,0.74314482547739424,0.64659960121579962,0.76282957186226652,0.62348980185873359,0.7818314824680298,0.59982189468791369,0.80013354801120629,0.5756170656856735,0.81771938566443136,0.55089698145210253,0.83457325372130264,0.52568376981050469,0.85068006568733956,0.49999999999999989,0.86602540378443871,0.47386866247299869,0.880595531856738,0.44731314831563262,0.89437740766633689,0.4203572283095654,0.90735869456786489,0.39302503165392366,0.91952777255145057,0.36534102436639498,0.93087374864420425,0.33732998738282988,0.9413864666609032,0.30901699437494745,0.95105651629515353,0.28042738930600275,0.95987524154288906,0.25158676374450839,0.96783474845066653,0.22252093395631445,0.97492791218182362,0.19325591779555323,0.98114838339417265,0.1638179114151376,0.98649059392352145,0.13423326581765554,0.9909497617679347,0.10452846326765346,0.99452189536827329,0.074730093586424171,0.99720379718118013,0.044864830350514986,0.99899306654131459,0.014959407015263606,0.99988810181027343,0,0.9989930665413147,0.044864830350514924,0.99597429399523907,0.089639308903433496,0.99094976176793481,0.13423326581765546,0.98392958859862967,0.17855689479863665,0.97492791218182362,0.22252093395631439,0.96396286069585324,0.26603684556667512,0.95105651629515353,0.3090169943749474,0.9362348706397372,0.35137482408134268,0.91952777255145068,0.39302503165392361,0.90096886790241915,0.43388373911755812,0.880595531856738,0.47386866247299864,0.8584487936018661,0.51289927740590613,0.83457325372130264,0.55089698145210253,0.80901699437494745,0.58778525229247314,0.7818314824680298,0.62348980185873348,0.75307146600361097,0.65793872593971259,0.72279486382739155,0.69106264898686465,0.69106264898686465,0.72279486382739155,0.65793872593971259,0.75307146600361086,0.62348980185873359,0.7818314824680298,0.58778525229247314,0.80901699437494745,0.55089698145210253,0.83457325372130264,0.51289927740590613,0.8584487936018661,0.47386866247299869,0.880595531856738,0.43388373911755818,0.90096886790241915,0.39302503165392366,0.91952777255145057,0.35137482408134274,0.9362348706397372,0.30901699437494745,0.95105651629515353,0.26603684556667517,0.96396286069585324,0.22252093395631445,0.97492791218182362,0.17855689479863671,0.98392958859862967,0.13423326581765554,0.9909497617679347,0.089639308903433551,0.99597429399523907,0.044864830350514986,0.99899306654131459,6.123233995736766e-17,1,-0.044864830350514862,0.9989930665413147,-0.08963930890343344,0.99597429399523907,-0.13423326581765541,0.99094976176793481,-0.1785568947986366,0.98392958859862967,-0.22252093395631434,0.97492791218182362,-0.26603684556667506,0.96396286069585335,-0.30901699437494734,0.95105651629515364,-0.35137482408134263,0.9362348706397372,-0.39302503165392355,0.91952777255145068,-0.43388373911755806,0.90096886790241915,-0.47386866247299858,0.880595531856738,-0.51289927740590613,0.85844879360186621,-0.55089698145210242,0.83457325372130275,-0.58778525229247303,0.80901699437494745,-0.62348980185873348,0.78183148246802991,-0.65793872593971259,0.75307146600361097,-0.69106264898686465,0.72279486382739155,0,0.99821012976773515,0.059804153945034168,0.99284692634183735,0.11939422454024434,0.98392958859862967,0.17855689479863665,0.9714900382928674,0.2370803777154975,0.95557280578614068,0.29475517441090421,0.9362348706397372,0.35137482408134268,0.91354545764260087,0.40673664307580021,0.88758578900455409,0.46064245045063229,0.8584487936018661,0.51289927740590613,0.82623877431599491,0.56332005806362206,0.79107103465634121,0.61172429911500636,0.75307146600361097,0.65793872593971259,0.71237609695134474,0.70179790288399135,0.66913060635885824,0.74314482547739424,0.62348980185873359,0.7818314824680298,0.5756170656856735,0.81771938566443136,0.52568376981050469,0.85068006568733956,0,0.99284692634183735,0.11939422454024434,0.9714900382928674,0.2370803777154975,0.9362348706397372,0.35137482408134268,0.88758578900455409,0.46064245045063229,0.82623877431599491,0.56332005806362206,0.75307146600361097,0.65793872593971259,0.66913060635885824,0.74314482547739424,0.5756170656856735,0.81771938566443136,0.47386866247299869,0.880595531856738,0.36534102436639498,0.93087374864420425,0.25158676374450839,0.96783474845066653,0.13423326581765554,0.9909497617679347,0.014959407015263606,0.99988810181027343,-0.10452846326765355,0.99452189536827329,-0.22252093395631434,0.97492791218182362,-0.33732998738282999,0.9413864666609032,-0.44731314831563268,0.89437740766633678,0,0.98392958859862967,0.17855689479863665,0.9362348706397372,0.35137482408134268,0.8584487936018661,0.51289927740590613,0,0.9362348706397372,0.35137482408134268,0.75307146600361097,0.65793872593971259,0.47386866247299869,0.880595531856738,0,0.8584487936018661,0.51289927740590613,0.47386866247299869,0.880595531856738,-0.044864830350514862,0.9989930665413147,0,0.75307146600361097,0.65793872593971259,0.13423326581765554,0.9909497617679347,-0.55089698145210242,0.83457325372130275,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99915688688806381,0.041055028731603306,0.99662896923169442,0.082040829397137555,0.99242050967193574,0.1228882906647141,0.9865386046236595,0.16352853447396498,0.97899317230940452,0.20389303218003446,0.96979693603500949,0.24391372010837711,0.95896540273524122,0.28352311432551081,0.94651683682559451,0.32265442443219483,0.93247222940435581,0.36124166618715287,0.91685526285686281,0.39921977277143089,0.89969227092164539,0.4365247045057733,0.88101219428578459,0.47309355683601001,0.86084653178436776,0.5088646664043649,0.83922928728632662,0.54377771502782657,0.81619691235622172,0.577773831408251,0.79178824478865817,0.61079569040268777,0.76604444311897801,0.64278760968653925,0.7390089172206592,0.6736956436465571,0.7107272551064473,0.70346767434534963,0.68124714605665415,0.73205349940401465,0.65061830020424227,0.75940491665470711,0.61889236471229458,0.78547580542039874,0.5861228366852147,0.81022220428477343,0.55236497296050591,0.8336023852211194,0.51767569693324256,0.85557692395522311,0,0.99662896923169442,0.082040829397137555,0.9865386046236595,0.16352853447396498,0.96979693603500949,0.24391372010837711,0.94651683682559451,0.32265442443219483,0.91685526285686281,0.39921977277143089,0.88101219428578459,0.47309355683601001,0.83922928728632662,0.54377771502782657,0.79178824478865817,0.61079569040268777,0.7390089172206592,0.6736956436465571,0.68124714605665415,0.73205349940401465,0.61889236471229458,0.78547580542039874,0.55236497296050591,0.8336023852211194,0.48211350257034896,0.87610876644361346,0.4086115932782316,0.91270836844998038,0.33235479947965985,0.94315443447127745,0.25385724917100799,0.96724169525684156,0.17364817766693041,0.98480775301220802,0.092268359463302238,0.99573417629503447,0.010266462302290088,0.99994729848717312,-0.071804651979327394,0.99741871445954311,-0.15339165487868509,0.98816547208125949,-0.23394448180164831,0.97224995728184949,-0.31292004063215423,0.94977947344147784,-0.38978587329267905,0.92090551794495379,-0.46402374560936321,0.88582276077703992,0,0.99242050967193574,0.1228882906647141,0.96979693603500949,0.24391372010837711,0.93247222940435581,0.36124166618715287,0.88101219428578459,0.47309355683601001,0.81619691235622172,0.577773831408251,0.7390089172206592,0.6736956436465571,0.65061830020424227,0.75940491665470711,0.55236497296050591,0.8336023852211194,0,0.96979693603500949,0.24391372010837711,0.88101219428578459,0.47309355683601001,0.7390089172206592,0.6736956436465571,0.55236497296050591,0.8336023852211194,0.33235479947965985,0.94315443447127745,0.092268359463302238,0.99573417629503447,-0.15339165487868509,0.98816547208125949,-0.38978587329267905,0.92090551794495379,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99995628927287272,0.0093498419038392754,0.99982516091274642,0.018698866430902267,0.99960662638305287,0.028046256275868958,0.9993007047883985,0.037391194276325625,0.99890742287289414,0.046732863484202337,0.9984268150178166,0.056070447237191789,0.99785892323860348,0.065403129230143076,0.99720379718118013,0.074730093586424254,0.9964614941176192,0.084050524929247541,0.99563207894113381,0.093363608452950678,0.99471562416040504,0.1026685299942284,0.9937122098932426,0.11196447610330786,0.99262192385958081,0.12125063411506154,0.99144486137381038,0.1305261922200516,0.99018112533644564,0.13979033953549946,0.98883082622512852,0.14904226617617444,0.98739408208497126,0.15828116332519493,0.98587101851823589,0.16750622330473641,0.98426176867335424,0.17671663964663994,0.98256647323328827,0.1859116071629146,0.98078528040323043,0.19509032201612825,0.97891834589764848,0.20425198178968035,0.97696583292667172,0.21339578555795,0.97492791218182362,0.22252093395631439,0.97280476182109932,0.23162662925103031,0.97059656745339096,0.24071207540897302,0.96830352212226145,0.24977647816722684,0.96592582628906831,0.25881904510252079,0.96346368781543901,0.26783898570050307,0.9609173219450996,0.27683551142484936,0.95828695128505736,0.28580783578619773,0.95557280578614068,0.29475517441090421,0.95277512272289633,0.30367674510961473,0.94989414667284588,0.31257176794564451,0.94693012949510569,0.32143946530316159,0.94388333030836757,0.33027906195516704,0.94075401546824733,0.3390897851312667,0.9375424585439992,0.34787086458522726,0.93424894029459982,0.356621532662313,0.93087374864420425,0.36534102436639504,0.92741717865697493,0.3740285774268281,0.92387953251128674,0.38268343236508978,0.92026111947331057,0.39130483256117504,0.91656225586997619,0.39989202431974097,0.9127832650613189,0.40844425693599612,0.90892447741221083,0.41696078276132809,0.90498623026347991,0.42544085726866393,0.90096886790241915,0.43388373911755812,0.89687274153268826,0.4422886902190013,0.89269820924361154,0.45065497579994518,0.88844563597887227,0.45898186446753769,0.88411539350460977,0.46726862827306198,0.87970786037691839,0.4755145427755752,0.87522342190875368,0.4837188871052398,0.8706624701362482,0.49188094402634336,0.8660254037844386,0.5,0.86131262823240895,0.50807534524652942,0.85652455547785145,0.51610627380750662,0.85166160410104941,0.52409208360747772,0.84672419922828424,0.53203207651533657,0.84171277249466991,0.5399255584053565,0.83662776200641975,0.54777183921787143,0.83146961230254524,0.55557023301960218,0.82623877431599491,0.56332005806362206,0.82093570533423232,0.57102063684895521,0.81556086895926017,0.57867129617980573,0.81011473506709053,0.58627136722440898,0.80459777976666824,0.59382018557350169,0.79901048535824903,0.60131709129840583,0.79335334029123517,0.60876142900872066,0.78762683912147535,0.61615254790961749,0.7818314824680298,0.62348980185873348,0.775967776969405,0.63077254942265826,0.77003623523926279,0.63800015393300868,0.76403737582160747,0.6451719835420876,0.75797172314545291,0.65228741127812118,0.75183980747897738,0.65934581510006895,0.74564216488316559,0.66634657795200392,0.7393793371649463,0.67328908781705699,0.73305187182982634,0.68017273777091947,0.72666032203402708,0.68699692603490159,0.7202052465361265,0.69376105602854155,0.71368720964821208,0.70046453642175843,0.70710678118654757,0.70710678118654746,0.70046453642175832,0.7136872096482122,0.69376105602854155,0.72020524653612661,0.68699692603490159,0.72666032203402708,0.68017273777091936,0.73305187182982634,0.67328908781705699,0.7393793371649463,0.66634657795200392,0.74564216488316559,0.65934581510006884,0.75183980747897738,0.65228741127812118,0.75797172314545302,0.64517198354208771,0.76403737582160747,0.63800015393300857,0.77003623523926279,0.63077254942265826,0.775967776969405,0.62348980185873359,0.7818314824680298,0.61615254790961749,0.78762683912147535,0.60876142900872066,0.79335334029123517,0.60131709129840571,0.79901048535824903,0.59382018557350158,0.80459777976666835,0.58627136722440887,0.81011473506709053,0.57867129617980562,0.81556086895926017,0.57102063684895521,0.82093570533423232,0.56332005806362195,0.82623877431599491,0.55557023301960218,0.83146961230254524,0.54777183921787131,0.83662776200641975,0.53992555840535639,0.84171277249467003,0.53203207651533657,0.84672419922828412,0.52409208360747761,0.85166160410104941,0.51610627380750662,0.85652455547785145,0.50807534524652953,0.86131262823240895,0.49999999999999989,0.86602540378443871,0.4918809440263433,0.8706624701362482,0.4837188871052398,0.87522342190875368,0.47551454277557509,0.87970786037691839,0.46726862827306198,0.88411539350460977,0.45898186446753775,0.88844563597887227,0.45065497579994512,0.89269820924361154,0.44228869021900125,0.89687274153268837,0.43388373911755818,0.90096886790241915,0.42544085726866387,0.90498623026348002,0.41696078276132803,0.90892447741221083,0.40844425693599617,0.9127832650613189,0.39989202431974086,0.91656225586997619,0.39130483256117499,0.92026111947331057,0.38268343236508984,0.92387953251128674,0.37402857742682799,0.92741717865697493,0.36534102436639498,0.93087374864420425,0.35662153266231306,0.93424894029459982,0.34787086458522715,0.9375424585439992,0.33908978513126664,0.94075401546824733,0.33027906195516715,0.94388333030836757,0.32143946530316148,0.94693012949510569,0.31257176794564445,0.949894146672846,0.30367674510961479,0.95277512272289622,0.2947551744109041,0.95557280578614079,0.28580783578619767,0.95828695128505736,0.27683551142484941,0.96091732194509949,0.26783898570050296,0.96346368781543901,0.25881904510252074,0.96592582628906831,0.2497764781672269,0.96830352212226145,0.24071207540897291,0.97059656745339096,0.23162662925103028,0.97280476182109932,0.22252093395631445,0.97492791218182362,0.21339578555794991,0.97696583292667172,0.20425198178968032,0.97891834589764848,0.19509032201612833,0.98078528040323043,0.18591160716291449,0.98256647323328827,0.17671663964663992,0.98426176867335435,0.16750622330473647,0.98587101851823589,0.15828116332519482,0.98739408208497126,0.14904226617617444,0.98883082622512852,0.13979033953549955,0.99018112533644553,0.13052619222005149,0.99144486137381038,0.12125063411506151,0.99262192385958081,0.11196447610330791,0.9937122098932426,0.10266852999422831,0.99471562416040504,0.09336360845295065,0.99563207894113381,0.084050524929247597,0.9964614941176192,0.074730093586424171,0.99720379718118013,0.065403129230143048,0.99785892323860348,0.056070447237191845,0.9984268150178166,0.046732863484202247,0.99890742287289414,0.037391194276325604,0.99930070478839861,0.028046256275869017,0.99960662638305287,0.01869886643090218,0.99982516091274642,0.0093498419038392615,0.99995628927287272,0,0,0.99982516091274642,0.018698866430902267,0.9993007047883985,0.037391194276325625,0.9984268150178166,0.056070447237191789,0.99720379718118013,0.074730093586424254,0.99563207894113381,0.093363608452950678,0.9937122098932426,0.11196447610330786,0.99144486137381038,0.1305261922200516,0.98883082622512852,0.14904226617617444,0.98587101851823589,0.16750622330473641,0.98256647323328827,0.1859116071629146,0.97891834589764848,0.20425198178968035,0.97492791218182362,0.22252093395631439,0.97059656745339096,0.24071207540897302,0.96592582628906831,0.25881904510252079,0.9609173219450996,0.27683551142484936,0.95557280578614068,0.29475517441090421,0.94989414667284588,0.31257176794564451,0.94388333030836757,0.33027906195516704,0.9375424585439992,0.34787086458522726,0.93087374864420425,0.36534102436639504,0.92387953251128674,0.38268343236508978,0.91656225586997619,0.39989202431974097,0.90892447741221083,0.41696078276132809,0.90096886790241915,0.43388373911755812,0.89269820924361154,0.45065497579994518,0.88411539350460977,0.46726862827306198,0.87522342190875368,0.4837188871052398,0.8660254037844386,0.5,0.85652455547785145,0.51610627380750662,0.84672419922828424,0.53203207651533657,0.83662776200641975,0.54777183921787143,0.82623877431599491,0.56332005806362206,0.81556086895926017,0.57867129617980573,0.80459777976666824,0.59382018557350169,0.79335334029123517,0.60876142900872066,0.7818314824680298,0.62348980185873348,0.77003623523926279,0.63800015393300868,0.75797172314545291,0.65228741127812118,0.74564216488316559,0.66634657795200392,0.73305187182982634,0.68017273777091947,0.7202052465361265,0.69376105602854155,0,0,0.9993007047883985,0.037391194276325625,0.99720379718118013,0.074730093586424254,0.9937122098932426,0.11196447610330786,0.98883082622512852,0.14904226617617444,0.98256647323328827,0.1859116071629146,0.97492791218182362,0.22252093395631439,0.96592582628906831,0.25881904510252079,0.95557280578614068,0.29475517441090421,0.94388333030836757,0.33027906195516704,0.93087374864420425,0.36534102436639504,0.91656225586997619,0.39989202431974097,0.90096886790241915,0.43388373911755812,0.88411539350460977,0.46726862827306198,0.8660254037844386,0.5,0.84672419922828424,0.53203207651533657,0.82623877431599491,0.56332005806362206,0.80459777976666824,0.59382018557350169,0.7818314824680298,0.62348980185873348,0.75797172314545291,0.65228741127812118,0.73305187182982634,0.68017273777091947,0.70710678118654757,0.70710678118654746,0.68017273777091936,0.73305187182982634,0.65228741127812118,0.75797172314545302,0.62348980185873359,0.7818314824680298,0.59382018557350158,0.80459777976666835,0.56332005806362195,0.82623877431599491,0.53203207651533657,0.84672419922828412,0.49999999999999989,0.86602540378443871,0.46726862827306198,0.88411539350460977,0.43388373911755818,0.90096886790241915,0.39989202431974086,0.91656225586997619,0.36534102436639498,0.93087374864420425,0.33027906195516715,0.94388333030836757,0.2947551744109041,0.95557280578614079,0.25881904510252074,0.96592582628906831,0.22252093395631445,0.97492791218182362,0.18591160716291449,0.98256647323328827,0.14904226617617444,0.98883082622512852,0.11196447610330791,0.9937122098932426,0.074730093586424171,0.99720379718118013,0.037391194276325604,0.99930070478839861,0,0,0.9984268150178166,0.056070447237191789,0.9937122098932426,0.11196447610330786,0.98587101851823589,0.16750622330473641,0.97492791218182362,0.22252093395631439,0.9609173219450996,0.27683551142484936,0.94388333030836757,0.33027906195516704,0.92387953251128674,0.38268343236508978,0.90096886790241915,0.43388373911755812,0.87522342190875368,0.4837188871052398,0.84672419922828424,0.53203207651533657,0.81556086895926017,0.57867129617980573,0.7818314824680298,0.62348980185873348,0.74564216488316559,0.66634657795200392,0.70710678118654757,0.70710678118654746,0.66634657795200392,0.74564216488316559,0.62348980185873359,0.7818314824680298,0.57867129617980573,0.81556086895926017,0.53203207651533657,0.84672419922828412,0.4837188871052398,0.87522342190875368,0.43388373911755818,0.90096886790241915,0.38268343236508984,0.92387953251128674,0.33027906195516715,0.94388333030836757,0.27683551142484941,0.96091732194509949,0.22252093395631445,0.97492791218182362,0.16750622330473647,0.98587101851823589,0.11196447610330791,0.9937122098932426,0.056070447237191845,0.9984268150178166,6.123233995736766e-17,1,-0.056070447237191727,0.9984268150178166,-0.1119644761033078,0.9937122098932426,-0.16750622330473633,0.98587101851823589,-0.22252093395631434,0.97492791218182362,-0.2768355114248493,0.9609173219450996,-0.33027906195516699,0.94388333030836757,-0.38268343236508973,0.92387953251128674,-0.43388373911755806,0.90096886790241915,-0.48371888710523975,0.87522342190875368,-0.53203207651533646,0.84672419922828424,-0.57867129617980573,0.81556086895926017,-0.62348980185873348,0.78183148246802991,-0.66634657795200392,0.7456421648831657,0,0,0.99720379718118013,0.074730093586424254,0.98883082622512852,0.14904226617617444,0.97492791218182362,0.22252093395631439,0.95557280578614068,0.29475517441090421,0.93087374864420425,0.36534102436639504,0.90096886790241915,0.43388373911755812,0.8660254037844386,0.5,0.82623877431599491,0.56332005806362206,0.7818314824680298,0.62348980185873348,0.73305187182982634,0.68017273777091947,0,0.98883082622512852,0.14904226617617444,0.95557280578614068,0.29475517441090421,0.90096886790241915,0.43388373911755812,0.82623877431599491,0.56332005806362206,0.73305187182982634,0.68017273777091947,0.62348980185873359,0.7818314824680298,0.49999999999999989,0.86602540378443871,0.36534102436639498,0.93087374864420425,0.22252093395631445,0.97492791218182362,0.074730093586424171,0.99720379718118013,0,0.97492791218182362,0.22252093395631439,0.90096886790241915,0.43388373911755812,0.7818314824680298,0.62348980185873348,0.62348980185873359,0.7818314824680298,0.43388373911755818,0.90096886790241915,0.22252093395631445,0.97492791218182362,6.123233995736766e-17,1,-0.22252093395631434,0.97492791218182362,-0.43388373911755806,0.90096886790241915,-0.62348980185873348,0.78183148246802991,0,0.95557280578614068,0.29475517441090421,0.82623877431599491,0.56332005806362206,0.62348980185873359,0.7818314824680298,0,0.82623877431599491,0.56332005806362206,0.36534102436639498,0.93087374864420425,-0.22252093395631434,0.97492791218182362,0,0,0,0,0,0,0,0,0.99996564508779062,0.0082890677496766686,0.99986258271168249,0.016577565958963661,0.99969081995307352,0.02486492512660432,0.99945036861375247,0.033150575829605351,0.99914124521508874,0.041433948762361755,0.99876347099689677,0.049714474775773711,0.99831707191597674,0.057991584916352756,0.99780207864433113,0.066264710465314444,0.99721852656705734,0.074533282977654894,0.99656645577991598,0.082796734321208612,0.99584591108657639,0.091054496715684663,0.99505694199553796,0.099306002771678836,0.99419960271672836,0.10755068552965885,0.99327395215777892,0.11578797849892002,0.99228005391997698,0.12401731569650871,0.99121797629389607,0.13223813168611104,0.99008779225470334,0.14044986161690373,0.98888957945714562,0.14865194126236511,0.98762342023021388,0.15684380705904283,0.98628940157148637,0.16502489614527638,0.98488761514115086,0.17319464639987106,0.98341815725570669,0.18135249648072133,0.98188112888134749,0.18949788586338054,0.98027663562702261,0.19763025487957431,0.97860478773718207,0.2057490447556555,0.97686570008420082,0.21385369765099724,0.97505949216048615,0.22194365669632204,0.9731862880702673,0.23001836603196443,0.97124621652106835,0.23807727084606364,0.96923941081486498,0.24611981741268496,0.96716600883892478,0.25414545312986586,0.96502615305633355,0.26215362655758545,0.96281999049620626,0.27014378745565348,0.96054767274358521,0.27811538682151765,0.95820935592902412,0.28606787692798513,0.95580520071786068,0.29400071136085709,0.95333537229917753,0.30191334505647244,0.95080004037445154,0.3098052343391593,0.94819937914589403,0.31767583695859075,0.94553356730448146,0.32552461212704265,0.94280278801767747,0.33335102055655136,0.94000722891684729,0.34115452449596784,0.93714708208436581,0.34893458776790648,0.93422254404041993,0.35669067580558605,0.93123381572950492,0.36442225568955916,0.92818110250661845,0.37212879618432959,0.92506461412314989,0.37980976777485309,0.92188456471246905,0.38746464270292014,0.9186411727752124,0.39509289500341871,0.91533466116427054,0.4026940005404725,0.91196525706947573,0.41026743704345464,0.90853319200199167,0.41781268414287287,0.90503870177840673,0.42532922340612367,0.90148202650453024,0.43281653837311412,0.89786341055889618,0.44027411459174742,0.89418310257597045,0.44770143965327103,0.89044135542906866,0.455098003227484,0.88663842621298006,0.46246329709780198,0.88277457622630362,0.46979681519617622,0.87885007095349321,0.47709805363786584,0.87486518004661729,0.48436651075605952,0.87082017730683026,0.49160168713634483,0.86671534066556022,0.49880308565102305,0.86255095216541211,0.50597021149326671,0.85832729794078844,0.51310257221111755,0.85404466819822944,0.52019967774132292,0.84970335719647283,0.52726104044300803,0.84530366322623518,0.53428617513118148,0.84084588858971687,0.54127459911007225,0.83633033957983027,0.54822583220629595,0.83175732645915512,0.55513939680184687,0.82712716343862003,0.56201481786691565,0.82244016865591307,0.56885162299252812,0.81769666415362274,0.57564934242300436,0.81289697585711085,0.58240750908823613,0.80804143355211711,0.58912565863577815,0.80313037086210104,0.59580332946275483,0.79816412522531777,0.602440062747576,0.79314303787163287,0.60903540248146293,0.78806745379907683,0.61558889549978069,0.7829377217501402,0.62210009151317447,0.77775419418781133,0.62856854313850952,0.77251722727135885,0.6349938059296103,0.76722718083186014,0.64137543840779876,0.76188441834747722,0.64771300209222782,0.75648930691848226,0.65400606153000929,0.75104221724203435,0.66025418432613425,0.74554352358670861,0.66645694117318255,0.73999360376678081,0.67261390588082004,0.73439283911626718,0.67872465540508298,0.72874161446272334,0.6847887698774443,0.72304031810080338,0.69080583263366346,0.7172893417655789,0.69677543024241495,0.71148908060562432,0.70269715253369525,0.7056399331558656,0.70857059262700539,0.69974230131019688,0.71439534695930773,0.69379659029386664,0.72017101531275507,0.68780320863563515,0.72589720084218878,0.6817625681397036,0.73157351010240657,0.67567508385741992,0.73719955307519591,0.66954117405876024,0.7427749431961318,0.66336126020358999,0.7482992973811381,0.65713576691270481,0.75377223605280874,0.65086512193865587,0.75919338316648843,0.64454975613635834,0.76456236623611096,0.63819010343348748,0.76987881635979216,0.63178660080066396,0.77514236824517757,0.62533968822142927,0.78035266023454142,0.61884980866201489,0.78550933432963588,0.61231740804090573,0.79061203621628917,0.60574293519820155,0.79566041528875076,0.59912684186477705,0.80065412467378094,0.5924695826312435,0.80559282125448473,0.58577161491671392,0.81047616569388703,0.57903339893737382,0.81530382245824906,0.57225539767486033,0.82007545984012198,0.5654380768444498,0.82479074998113922,0.5585819048630597,0.82944936889454302,0.55168735281706294,0.83405099648744585,0.5447548944299202,0.83859531658282382,0.53778500602962975,0.84308201694124107,0.53077816651600018,0.84751078928230361,0.52373485732774383,0.85188132930584159,0.51665556240939869,0.85619333671281739,0.50954076817807525,0.86044651522595927,0.50239096349003631,0.86464057261011817,0.49520663960710626,0.8687752206923478,0.487988290162918,0.87285017538170417,0.48073641112899423,0.8768651566887663,0.47345150078066994,0.88081988874487349,0.46613405966285637,0.8847140998210804,0.45878459055564763,0.88854752234682799,0.45140359843977601,0.89231989292832725,0.44399159046191339,0.89603095236665831,0.43654907589982689,0.89968044567557826,0.42907656612738504,0.90326812209904306,0.42157457457942255,0.90679373512843531,0.41404361671646112,0.91025704251950301,0.40648420998929358,0.91365780630900317,0.39889687380342853,0.91699579283105304,0.39128212948340346,0.92027077273318481,0.38364050023696317,0.92348252099210448,0.3759725111191119,0.92663081692915295,0.36827868899603522,0.92971544422546926,0.36055956250890059,0.93273619093685334,0.35281566203753334,0.93569284950832932,0.34504751966397551,0.93858521678840567,0.3372556691359252,0.94141309404303453,0.3294406458300646,0.94417628696926614,0.32160298671527238,0.94687460570859983,0.31374323031573065,0.94950786486002858,0.30586191667392115,0.95207588349277883,0.29795958731352085,0.95457848515874077,0.29003678520219212,0.95701549790459373,0.2820940547142774,0.95938675428361964,0.27413194159339344,0.96169209136720901,0.26615099291493527,0.96393135075605574,0.25815175704848486,0.96610437859104026,0.25013478362013447,0.96821102556380156,0.24210062347472031,0.97025114692699632,0.23404982863797574,0.97222460250424347,0.22598295227860002,0.97413125669975709,0.21790054867025183,0.97597097850766201,0.20980317315346353,0.97774364152099591,0.20169138209748561,0.97944912394039441,0.19356573286205675,0.98108730858245985,0.1854267837591097,0.9826580828878132,0.1772750940144078,0.98416133892882773,0.16911122372912257,0.98559697341704466,0.16093573384134749,0.98696488771027058,0.15274918608755766,0.98826498781935435,0.14455214296401145,0.98949718441464607,0.13634516768810304,0.99066139283213372,0.12812882415966223,0.9917575330792614,0.11990367692221064,0.99278552984042534,0.11167029112417036,0.99374531248214859,0.10342923248003436,0.99463681505793411,0.095181067231494679,0.9954599763127967,0.086926362108537755,0.99621473968747087,0.07866568429050276,0.99690105332229784,0.070399601367112624,0.99751887006078821,0.06212868129947318,0.99806814745286232,0.053853492381050506,0.99854884775776698,0.04557460319862177,0.99896093794666874,0.037292582593209528,0.99930438970492297,0.029007999620994963,0.99957917943401975,0.020721423514219923,0.99978528825320501,0.012433423642073293,0.99992270200077804,0.0041445694715715143,0.99999141123506419,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99983512089977333,0.01815849705607999,0.99934053796932865,0.036311006198847834,0.99851641430144311,0.054451541489554889,0.99736302165765445,0.072574120937928449,0.99588074037864527,0.09067276847478202,0.99407005925882252,0.10874151592267323,0.9919315753851341,0.1267744049639592,0.98946599394017387,0.14476548910560072,0.98667412796964205,0.16270883564006702,0.98355689811423719,0.18059852760169481,0.98011533230606662,0.19842866571785611,0.97635056542967802,0.21619337035429195,0.97226383894782176,0.23388678345396979,0.96785650049206817,0.25150307046882603,0.96313000341841526,0.26903642228375602,0.95808590632803237,0.28648105713221728,0.9527258725532991,0.30383122250281464,0.94705166960930731,0.32108119703623794,0.94106516861100875,0.33822529241192711,0.93476834365619976,0.35525785522384279,0.92816327117454589,0.37217326884472285,0.92125212924286259,0.38896595527821187,0.91403719686687646,0.40563037699825072,0.90652085322970388,0.42216103877512146,0.89870557690729702,0.43855248948754416,0.89059394505111167,0.45479932392022909,0.88218863253827162,0.47089618454629073,0.87349241108950548,0.48683776329393597,0.86450814835514866,0.50261880329684472,0.85523880696951304,0.51823410062766428,0.84568744357393322,0.53367850601404732,0.83585720780881456,0.54894692653666644,0.82575134127501282,0.56403432730864644,0.81537317646489027,0.57893573313585922,0.80472613566339879,0.59364623015753504,0.79381372981955312,0.60816096746664816,0.78263955738866708,0.62247515870954351,0.77120730314573283,0.63658408366427588,0.75952073697033673,0.65048308979714187,0.74758371260351031,0.66416759379689105,0.73540016637692762,0.67763308308611025,0.72297411591486727,0.6908751173092833,0.71030965880936847,0.70388932979703456,0.69741097126901619,0.7166714290060735,0.68428230674180157,0.72921719993436718,0.67092799451251395,0.7415225055110708,0.65735243827512191,0.75358328796076146,0.6435601146806208,0.76539557014152237,0.62955557186081901,0.77695545685643852,0.6153434279285549,0.78825913613806931,0.60092836945483641,0.79930288050547627,0.58631514992340505,0.8100830481933905,0.57150858816323646,0.82059608435311471,0.55651356675949137,0.83083852222476362,0.541335030443444,0.8408069842804563,0.52597798446191513,0.85049818333808413,0.51044749292675207,0.85990892364528548,0.4947486771448954,0.86903610193327185,0.47888671392958704,0.87787670844015553,0.46286683389327199,0.88642782790344421,0.44669431972276274,0.8946866405213717,0.43037450443722902,0.90265042288275121,0.41391276962959123,0.91031654886504232,0.39731454369189556,0.91768249050033679,0.38058530002525809,0.92474581880897644,0.3637305552349655,0.93150420460052874,0.34675586731132851,0.93795541924185732,0.32966683379689027,0.94409733539203122,0.31246908994059008,0.9499279277038335,0.29516830683949391,0.95544527349163566,0.27777018956870336,0.96064755336541952,0.26028047530006099,0.96553305183073579,0.24270493141027075,0.97010015785440207,0.22504935357905728,0.97434736539575473,0.20731956387799441,0.97827327390327812,0.18952140885062835,0.98187658877644746,0.17166075758453253,0.98515612179263468,0.15374349977592697,0.98811079149893388,0.13577554378750387,0.99073962356877987,0.11776281470009585,0.99304175112324,0.099711252358832228,0.99501641501687466,0.081626809414425586,0.99666296408807176,0.063515449360237689,0.99798085537377268,0.045383144565767988,0.99896965428851869,0.027235874307215153,0.99962903476775899,0.0090796227957629927,0.99995877937537336,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99996738869437329,0.0080759858689875407,0.99986955690448787,0.016151445001088262,0.99970651101118835,0.024225850693770493,0.99947826164875364,0.03229867631321065,0.99918482370420336,0.04036939532864163,0.99882621631632629,0.048437481346694546,0.99840246287443279,0.056502408145731507,0.99791359101682886,0.064563649710167106,0.99735963262901361,0.072620680264776555,0.99674062384159967,0.080672974308988149,0.99605660502795645,0.088720006651157729,0.9953076208015772,0.096761252442823104,0.99449372001316894,0.10479618721293602,0.99361495574746639,0.11282428690206951,0.99267138531976951,0.12084502789659846,0.99166307027220568,0.12885788706285101,0.99059007636971519,0.13686234178122872,0.98945247359576216,0.14485786998029321,0.98825033614777025,0.15284395017081701,0.98698374243228271,0.16082006147979638,0.98565277505984916,0.16878568368442409,0.98425752083963702,0.17674029724601978,0.98279807077377013,0.18468338334391535,0.98127452005139248,0.19261442390929412,0.9796869680424608,0.20053290165898049,0.97803551829126256,0.20843830012917844,0.97632027850966274,0.21633010370915678,0.97454136057007901,0.22420779767487847,0.97269888049818454,0.2320708682225725,0.97079295846534064,0.23991880250224515,0.96882371878075946,0.24775108865112985,0.96679128988339502,0.25556721582707193,0.96469580433356761,0.26336667424184695,0.96253739880431632,0.27114895519441079,0.96031621407248602,0.27891355110407828,0.95803239500954496,0.28665995554362883,0.95568609057213605,0.29438766327233706,0.95327745379236162,0.30209617026892588,0.95080664176780183,0.30978497376444014,0.948273815651269,0.31745357227503845,0.94567914064029623,0.32510146563470121,0.94302278596636302,0.33272815502785302,0.94030492488385775,0.34033314302189643,0.9375257346587772,0.34791593359965589,0.93468539655716487,0.3554760321917293,0.93178409583328881,0.36301294570874526,0.92882202171755812,0.37052618257352327,0.92579936740418145,0.37801525275313608,0.92271633003856601,0.38547966779087084,0.91957311070445935,0.39291894083808715,0.91636991441083415,0.4003325866859711,0.91310695007851705,0.40772012179718153,0.90978443052656233,0.41508106433738789,0.90640257245837097,0.42241493420669635,0.90296159644755714,0.42972125307096348,0.89946172692356152,0.43699954439299415,0.89590319215701353,0.44424933346362305,0.89228622424484283,0.45147014743267594,0.88861105909514149,0.45866151533981026,0.88487793641177737,0.46582296814523272,0.88108709967875998,0.47295403876029102,0.87723879614435996,0.48005426207793844,0.87333327680498263,0.48712317500307001,0.86937079638879766,0.49416031648272574,0.86535161333912491,0.50116522753616266,0.86127598979757769,0.50813745128479049,0.8571441915869662,0.51507653298196976,0.85295648819395875,0.52198202004267258,0.84871315275150583,0.52885346207300099,0.84441446202102544,0.5356904108995626,0.84006069637435177,0.54249242059870206,0.8356521397754495,0.54925904752558485,0.83118907976189149,0.55598985034313353,0.82667180742610613,0.5626843900508125,0.82210061739639106,0.56934223001326079,0.81747580781769624,0.5759629359887708,0.81279768033217925,0.58254607615761056,0.80806654005953027,0.58909122115018786,0.80328269557707221,0.59559794407505529,0.79844645889963395,0.60206582054675317,0.79355814545920023,0.60849442871348858,0.78861807408433837,0.61488334928465005,0.78362656697940314,0.62123216555815508,0.77858394970352196,0.62754046344762782,0.77349055114936116,0.63380783150940745,0.76834670352167478,0.64003386096938308,0.76315274231563668,0.64621814574965586,0.75790900629495961,0.65236028249502354,0.75261583746979965,0.65845987059928879,0.7472735810744493,0.66451651223138808,0.74188258554482045,0.6705298123613388,0.73644320249571915,0.67649937878600386,0.73095578669791128,0.68242482215467337,0.72542069605498416,0.68830575599445798,0.71983829158000323,0.6941417967354957,0.71420893737196522,0.69993256373597035,0.70853300059205138,0.70567767930693692,0.7028108514396797,0.71137676873695588,0.69704286312835995,0.71702946031653292,0.69122941186135156,0.72263538536236238,0.68537087680712638,0.72819417824137456,0.67946764007463889,0.73370547639458228,0.67352008668840357,0.73916892036072879,0.66752860456338292,0.74458415379973186,0.6614935844796862,0.74995082351592646,0.65541542005708242,0.7552685794810996,0.64929450772932695,0.76053707485732147,0.64313124671830479,0.76575596601956619,0.63692603900799305,0.77092491257812423,0.63067928931824191,0.77604357740080376,0.6243914050783782,0.78111162663491873,0.61806279640063111,0.78612872972906422,0.6116938760533841,0.79109455945467555,0.60528505943425326,0.79600879192737095,0.5988367645429935,0.80087110662807615,0.59234941195423574,0.80568118642392983,0.585823424790056,0.81043871758896713,0.579259228692378,0.81514338982458245,0.5726572517952121,0.81979489627976765,0.56601792469673096,0.82439293357112531,0.55934168043118493,0.82893720180265651,0.55262895444065829,0.83342740458532127,0.54588018454666887,0.83786324905636878,0.53909581092161196,0.84224444589843961,0.53227627606005079,0.84657070935843548,0.52542202474985689,0.8508417572661563,0.51853350404319887,0.85505731105270477,0.51161116322738465,0.85921709576865513,0.50465545379555843,0.86332084010198606,0.49766682941725254,0.86736827639577596,0.49064574590879773,0.87135914066566111,0.4835926612035944,0.87529317261705264,0.47650803532224462,0.87917011566211378,0.46939233034254774,0.88298971693649553,0.46224601036936364,0.88675172731582885,0.45506954150434198,0.89045590143197317,0.44786339181552132,0.89410199768902021,0.44062803130680173,0.89768977827905128,0.43336393188728906,0.9012190091976473,0.42607156734051549,0.90468946025915242,0.41875141329353915,0.90810090511168606,0.41140394718592183,0.91145312125190692,0.40402964823858928,0.91474589003952445,0.39662899742257463,0.91797899671156058,0.3892024774276493,0.92115223039635541,0.38175057263084006,0.92426538412732184,0.37427376906483617,0.92731825485644448,0.36677255438629025,0.93031064346752246,0.35924741784401143,0.93324235478915674,0.35169885024705455,0.93611319760747946,0.34412734393270977,0.93892298467862556,0.33653339273439026,0.94167153274094495,0.32891749194942244,0.94435866252695622,0.32128013830674279,0.94698419877503781,0.31362182993449916,0.94954797024085946,0.30594306632756091,0.9520498097085518,0.2982443483149419,0.95448955400161173,0.29052617802713449,0.9568670439935455,0.28278905886335848,0.95918212461824781,0.27503349545872952,0.9614346448801151,0.26725999365134484,0.96362445786389372,0.25946906044929047,0.96575142074426301,0.25166120399757408,0.96781539479514966,0.24383693354498207,0.96981624539877653,0.23599675941086404,0.97175384205444271,0.22814119295184987,0.97362805838703459,0.22027074652849696,0.97543877215526897,0.21238593347187293,0.97718586525966555,0.20448726805007419,0.97886922375025009,0.19657526543468515,0.98048873783398605,0.18865044166717687,0.98204430188193603,0.18071331362524873,0.98353581443615079,0.17276439898911772,0.98496317821628687,0.16480421620775323,0.98632630012595124,0.1568332844650619,0.98762509125877362,0.14885212364602632,0.98885946690420479,0.14086125430279617,0.99002934655304187,0.13286119762073573,0.9911346539026793,0.12485247538443223,0.99217531686208549,0.11683560994366293,0.99315126755650485,0.10881112417932552,0.99406244233188457,0.10077954146933571,0.99490878175902664,0.092741385654490582,0.99569023063746342,0.084697181004301583,0.99640673799905854,0.076647452182801709,0.997058257111331,0.06859272421432476,0.99764474548050297,0.060533522449261357,0.99816616485427156,0.052470372529795445,0.99862248122430353,0.044403800355619936,0.99901366482845377,0.036334332049635432,0.99933969015270618,0.028262493923636507,0.99960053593283771,0.020188812443983573,0.99979618515580548,0.012113814197264716,0.99992662506085628,0.0040380258559516765,0.99999184714035882,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99981197044850145,0.01939133177182437,0.99924795250423004,0.03877537125681671,0.99830815827126818,0.058144828910475822,0.99699294116779202,0.077492420671930934,0.99530279579316583,0.096810870703179092,0.99323835774194302,0.11609291412523022,0.99080040336484532,0.13533129975013108,0.98798984947680901,0.15451879280784048,0.98480775301220802,0.17364817766693033,0.98125531062738469,0.19271226054808968,0.97733385825063557,0.21170387222941073,0.97304487057982381,0.23061587074244014,0.9683899605278059,0.24944114405798126,0.96337087861588033,0.26817261276063731,0.9579895123154889,0.28680323271109021,0.95224788533841531,0.30532599769511309,0.94614815687575049,0.32373394205832101,0.93969262078590843,0.34202014332566871,0.93288370473200055,0.36017772480471039,0.92572396926889045,0.37819985817164248,0.918216106880274,0.39607976603915679,0.91036294096614667,0.41381072450513912,0.90216742478103773,0.43138606568125343,0.89363264032341228,0.44879918020046211,0.88476179717665782,0.46604351970253877,0.87555823130209087,0.48311259929663841,0.86602540378443871,0.49999999999999994,0.85616689953026648,0.51669937115186282,0.84598642591984108,0.53320443280169116,0.83548781141293649,0.54950897807080601,0.82467500410910677,0.56560687548653854,0.81355207026296761,0.5814920712880266,0.80212319275504385,0.59715859170278618,0.79039266951875931,0.61260054519320284,0.77836491192416002,0.62781212467209857,0.76604444311897801,0.64278760968653925,0.75343589632766073,0.65752136856906362,0.74054401310900464,0.67200786055552242,0.72737364157304873,0.6862416378687336,0.7139297345578991,0.70021734776716849,0,0.99924795250423004,0.03877537125681671,0.99699294116779202,0.077492420671930934,0.99323835774194302,0.11609291412523022,0.98798984947680901,0.15451879280784048,0.98125531062738469,0.19271226054808968,0.97304487057982381,0.23061587074244014,0.96337087861588033,0.26817261276063731,0.95224788533841531,0.30532599769511309,0.93969262078590843,0.34202014332566871,0.92572396926889045,0.37819985817164248,0.91036294096614667,0.41381072450513912,0.89363264032341228,0.44879918020046211,0.87555823130209087,0.48311259929663841,0.85616689953026648,0.51669937115186282,0.83548781141293649,0.54950897807080601,0.81355207026296761,0.5814920712880266,0.79039266951875931,0.61260054519320284,0.76604444311897801,0.64278760968653925,0.74054401310900464,0.67200786055552242,0.7139297345578991,0.70021734776716849,0.6862416378687336,0.72737364157304873,0.65752136856906362,0.75343589632766073,0.62781212467209857,0.77836491192416002,0.59715859170278629,0.80212319275504373,0.56560687548653865,0.82467500410910666,0.53320443280169139,0.84598642591984097,0.50000000000000011,0.8660254037844386,0.46604351970253893,0.8847617971766577,0.43138606568125354,0.90216742478103762,0.3960797660391569,0.918216106880274,0.3601777248047105,0.93288370473200044,0.32373394205832112,0.94614815687575038,0.28680323271109032,0.9579895123154889,0.24944114405798137,0.9683899605278059,0.21170387222941084,0.97733385825063546,0.17364817766693041,0.98480775301220802,0.13533129975013117,0.99080040336484532,0.096810870703179161,0.99530279579316583,0.058144828910475899,0.99830815827126818,0.019391331771824435,0.99981197044850145,0,0.99830815827126818,0.058144828910475822,0.99323835774194302,0.11609291412523022,0.98480775301220802,0.1736481776669303,0.97304487057982381,0.23061587074244014,0.9579895123154889,0.28680323271109021,0.93969262078590843,0.34202014332566866,0.918216106880274,0.39607976603915673,0.89363264032341228,0.44879918020046211,0.86602540378443871,0.49999999999999994,0.83548781141293649,0.54950897807080601,0.80212319275504385,0.59715859170278618,0.76604444311897812,0.64278760968653925,0.72737364157304885,0.68624163786873349,0.68624163786873371,0.72737364157304862,0.64278760968653947,0.76604444311897801,0.59715859170278629,0.80212319275504373,0.54950897807080612,0.83548781141293638,0.50000000000000011,0.8660254037844386,0.44879918020046228,0.89363264032341216,0.3960797660391569,0.918216106880274,0.34202014332566882,0.93969262078590832,0.28680323271109032,0.9579895123154889,0.23061587074244025,0.97304487057982381,0.17364817766693064,0.98480775301220802,0.11609291412523053,0.99323835774194291,0.058144828910476121,0.99830815827126818,2.8327694488239898e-16,1,-0.058144828910475552,0.99830815827126818,-0.11609291412522996,0.99323835774194302,-0.17364817766693008,0.98480775301220813,-0.23061587074243992,0.97304487057982392,-0.28680323271108998,0.9579895123154889,-0.34202014332566849,0.93969262078590843,-0.39607976603915662,0.91821610688027411,-0.44879918020046178,0.8936326403234125,-0.49999999999999983,0.86602540378443871,-0.54950897807080568,0.8354878114129366,-0.59715859170278596,0.80212319275504396,-0.64278760968653903,0.76604444311897835,-0.68624163786873349,0.72737364157304885,0,0.99699294116779202,0.077492420671930934,0.98798984947680901,0.15451879280784048,0.97304487057982381,0.23061587074244014,0.95224788533841531,0.30532599769511309,0.92572396926889045,0.37819985817164248,0.89363264032341228,0.44879918020046211,0.85616689953026648,0.51669937115186282,0.81355207026296761,0.5814920712880266,0.76604444311897801,0.64278760968653925,0.7139297345578991,0.70021734776716849,0.65752136856906362,0.75343589632766073,0.59715859170278629,0.80212319275504373,0.53320443280169139,0.84598642591984097,0,0.98798984947680901,0.15451879280784048,0.95224788533841531,0.30532599769511309,0.89363264032341228,0.44879918020046211,0.81355207026296761,0.5814920712880266,0.7139297345578991,0.70021734776716849,0.59715859170278629,0.80212319275504373,0.46604351970253893,0.8847617971766577,0.32373394205832112,0.94614815687575038,0.17364817766693041,0.98480775301220802,0.019391331771824435,0.99981197044850145,-0.13533129975013106,0.99080040336484532,-0.28680323271108998,0.9579895123154889,-0.43138606568125326,0.90216742478103773,0,0.97304487057982381,0.23061587074244014,0.89363264032341228,0.44879918020046211,0.76604444311897812,0.64278760968653925,0.59715859170278629,0.80212319275504373,0,0.89363264032341228,0.44879918020046211,0.59715859170278629,0.80212319275504373,0.17364817766693064,0.98480775301220802,-0.28680323271108998,0.9579895123154889,0,0.76604444311897801,0.64278760968653925,0,0.17364817766693041,0.98480775301220802,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinti/test/fixtures/c/fftpack/medium.json b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/test/fixtures/c/fftpack/medium.json new file mode 100644 index 000000000000..5b71d20d3c92 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/test/fixtures/c/fftpack/medium.json @@ -0,0 +1 @@ +{"lengths":[93,90,82,46,115,67,62,84,109,94],"offsets":[0,94,185,268,315,431,499,562,647,757],"sines":[0.066829954015349136,0.1335852674902431,0.20019138324819669,0.26657391074755765,0.33265870916626006,0.39837197020767218,0.4636403005350565,0.52839080374257197,0.59255116177126799,0.65604971567913828,0.71881554567502559,0.78077855032698962,0.84186952485666999,0.90202023843220358,0.96116351037336756,1.0192332851838348,1.0761647063267454,1.1318941886611904,1.1863594894587104,1.2394997779204899,1.2912557031176046,1.3415694602784469,1.3903848553492846,1.4376473677558588,1.4833042112959152,1.5273043930946641,1.569598770557322,1.6101401062551257,1.6488831206835206,1.685784542833594,1.7208031585202788,1.753899856413343,1.7850376717197625,1.8141818274686814,1.8412997733528575,1.8663612220832051,1.8893381832158376,1.9102049944138249,1.9289383501087531,1.9455173275300743,1.9599234100731735,1.9721405079800571,1.9821549763095601,1.9899556301770081,1.9955337572463063,1.9988831274605092,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.069032277939416256,0.13798228880864985,0.20676786357674029,0.27530702917433642,0.34351810618255207,0.41131980617187314,0.47863132857511548,0.54537245697898751,0.6114636547195057,0.67682615966734094,0.74138207809013501,0.80505447747993497,0.86776747823511624,0.92944634408753701,0.99001757116716271,1.049408975598016,1.1075497795210663,1.1643706954415414,1.2198040088001456,1.2737836586697784,1.3262453164815904,1.377126462686554,1.4263664612611924,1.4739066319686733,1.5196903202891576,1.5636629649360596,1.605772162877765,1.6459677317873127,1.6842017698456233,1.7204287128270013,1.7546053883988839,1.7866910675711263,1.8166475132335078,1.8444390257236207,1.8700324853708297,1.8933973919656117,1.9145059011072314,1.933332857386439,1.9498558243636472,1.9640551113068607,1.9759137966574929,1.9854177481961079,1.9925556398840529,1.9973189653609122,1.9997020480816987,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.07568295343534058,0.1512574917689134,0.2266153552025397,0.30164859432274765,0.37624972473726753,0.450311881045388,0.52372896992161344,0.59639582209333086,0.6682083429947796,0.73906366188151384,0.80886027919175396,0.87749821194353028,0.944879136959342,1.0109065317131616,1.075485812598024,1.1385244704161319,1.1999322028973913,1.2596210440565425,1.3175054902035876,1.3735026224270022,1.4275322253742777,1.4795169021596415,1.5293821852343492,1.5770566430607318,1.6224719824371847,1.665563146327522,1.7062684070545533,1.7445294547243875,1.7802914807547932,1.8135032563879652,1.8441172060752271,1.8720894756285456,1.8973799950412329,1.9199525358878455,1.9397747632210545,1.9568182818911455,1.9710586772217984,1.9824755499838749,1.991052545617118,1.9967773776579025,1.9996418453394755,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1335852674902431,0.26657391074755765,0.39837197020767218,0.52839080374257197,0.65604971567913828,0.78077855032698962,0.90202023843220358,1.0192332851838348,1.1318941886611904,1.2394997779204899,1.3415694602784469,1.4376473677558588,1.5273043930946641,1.6101401062551257,1.685784542833594,1.753899856413343,1.8141818274686814,1.8663612220832051,1.9102049944138249,1.9455173275300743,1.9721405079800571,1.9899556301770081,1.9988831274605092,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.054158769352268987,0.10827781717083505,0.16231745105486256,0.21623803684788354,0.27000002770658021,0.32356399310552947,0.37689064775663655,0.42994088042204814,0.4826757825994113,0.53505667705844162,0.58704514620786952,0.63860306027196001,0.68969260525594089,0.74027631067982869,0.79031707706031085,0.8397782031205292,0.88862341270780709,0.9368168813995803,0.98432326277801463,1.0311077143540435,1.0771359231218087,1.1223741307247648,1.1667891582149879,1.2103484303875305,1.2530199996719733,1.2947725695636554,1.3355755175773911,1.3753989177068466,1.4142135623730949,1.4519909838462617,1.4887034751245405,1.5243241102552729,1.5588267640831832,1.5921861314112875,1.6243777455604222,1.6553779963137811,1.6851641472332983,1.7137143523351785,1.7410076721123442,1.7670240888920459,1.791744521517376,1.815150839341914,1.8372258755272435,1.8579534396335828,1.877318329494301,1.8953063423656049,1.9119042853432231,1.927099985038446,1.9408822965064227,1.9532411114201733,1.9641673654843119,1.9736530450830523,1.9816911931576136,1.9882759143087192,1.9934023791204456,1.9970668277022476,1.9992665724465679,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.092366917291479181,0.18453671892660398,0.27631270990376439,0.36749903563314068,0.45790109990026817,0.54732598014416567,0.63558283916380331,0.72248333237430584,0.80784200974378984,0.89147671155307651,0.97320895713371258,1.0528643257547114,1.1302728288451838,1.2052692727585128,1.2776936113039226,1.3473912872931144,1.4142135623730949,1.4780178344413182,1.5386679419657578,1.596034454560479,1.6499949491966046,1.7004342714592282,1.7472447812927392,1.7903265827101247,1.829587736976042,1.8649444588087116,1.8963212951819317,1.9236512863456381,1.9468761087213857,1.9659461993678036,1.9808208617504104,1.9914683525900689,1.9978659496047448,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.099691771321394326,0.19913569319163332,0.29808453235234889,0.39629228639879516,0.49351479538058729,0.58951034882180842,0.68404028665133754,0.77686959254938948,0.86776747823511624,0.95650795724263649,1.0428704067589962,1.1266401161272441,1.2076088206509548,1.2855752193730787,1.3603454755418389,1.4317336985194369,1.4995624059354684,1.5636629649360596,1.623876011431713,1.680051846301543,1.7320508075688774,1.7797436176229373,1.8230117046233463,1.8617474972884085,1.8958546923342636,1.9252484939000241,1.9498558243636472,1.9696155060244163,1.9844784132003441,1.9944075943623603,1.9993783640016325,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.073902998778289777,0.14770505494974792,0.22130536378300167,0.294603396109275,0.36749903563314068,0.43989271567933719,0.51168555518887116,0.58277949377864924,0.65307742568016658,0.72248333237430584,0.79090241374108505,0.85824121754521787,0.92440776708062633,0.98931168679955761,1.0528643257547114,1.1149788786857711,1.1755705045849463,1.2345564425795859,1.2918561249735747,1.3473912872931144,1.4010860751865819,1.4528671480324482,1.5026637791137465,1.5504079522222596,1.5960344545604788,1.639480965814442,1.6806881432757854,1.7195997028967447,1.7561624961673958,1.7903265827101247,1.8220452984921767,1.8512753195631124,1.8779767212301131,1.9021130325903071,1.9236512863456381,1.9425620638322276,1.9588195352027318,1.9724014947068051,1.9832893910214855,1.9914683525900689,1.9969272079348679,1.9996585009161054,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.057112101587392501,0.11417762172553596,0.17115001695767948,0.22798281978108123,0.28462967654657029,0.34104438526524755,0.3971809332914909,0.45299353485152871,0.50843666838697388,0.56346511368285934,0.61803398874989479,0.67209878643086018,0.72561541070128199,0.7785402126347829,0.83083002600377276,0.88244220248644256,0.93333464645134734,0.98346584929120751,1.0327949232779237,1.0812816349111951,1.1288864377335381,1.1755705045849463,1.2212957592708762,1.2660249076177408,1.30972146789057,1.3523498005480388,1.3938751373105867,1.4342636095179269,1.4734822757528097,1.5114991487085165,1.5482832212781648,1.5838044918445502,1.6180339887498949,1.6509437939255478,1.6825070656623622,1.7126980605031779,1.7414921542395543,1.7688658619956286,1.7947968573827167,1.8192639907090367,1.8422473062297002,1.8637280584229046,1.8836887272790492,1.9021130325903071,1.9189859472289947,1.9342937094039141,1.9480238338846669,1.9601651221847869,1.970707671695386,1.9796428837618654,1.9869634706971004,1.9926634617253827,1.9967382078522713,1.9991843856563785,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.066126738634616433,0.13218116865139889,0.1980910605009254,0.26378434268413781,0.32918918056146784,0.39423405490296065,0.45884784009350316,0.52295988190763953,0.58650007476892951,0.64939893840936702,0.71158769384503295,0.77299833858490452,0.83356372099058085,0.89321761370561314,0.95189478607414724,1.0095310754696876,1.0660634574559875,1.1214301147033454,1.1755705045849465,1.2284254253793356,1.2799370810066331,1.3300491442276965,1.3787068182371318,1.425856896582794,1.4714478213462634,1.5154297395206695,1.5577545575242249,1.5983759937898496,1.6372496293733849,1.6743329565250573,1.709585425171078,1.7429684872545546,1.7744456388872238,1.803982460265918,1.831546653310115,1.8571080769794142,1.8806387802323226,1.9021130325903073,1.9215073522736963,1.938800531878661,1.9539736615671985,1.9670101497447647,1.977895741202937,1.9866185327072763,1.9931689860133397,1.9975399382966097,1.999726609984938,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"twiddles":[0.99776687862315316,0.066792633745121552,0.99107748815478014,0.13328695537377883,0.97996170503658686,0.19918598510383609,0.96446917505437657,0.26419540187128598,0.94466909160791879,0.32802485783956914,0.92064988667642877,0.39038927516349481,0.89251883585988123,0.45101011921610179,0.86040157926013938,0.50961664259191741,0.8244415603417603,0.5659470943305952,0.78479938527866089,0.61974988896024497,0.74165210564795758,0.67078473013922346,0.69519242767464229,0.71882368387792939,0.64562785155880242,0.76365219654733207,0.59317974472935531,0.80507005312756286,0.53808235316337272,0.84289227141679701,0.48058175518668378,0.8769499282066715,0.420934762428335,0.9070909137343407,0.3594077728375128,0.93318061104160255,0.29627558088563394,0.95510249720691243,0.2318201502675282,0.97275866376503717,0.16632935458313017,0.98607025399002857,0.10009569162409844,0.99497781508850403,0.033414977007674644,0.99944156373025461,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99761727230124764,0.068991144404324925,0.99048044398756319,0.13765351458716821,0.97862352529595531,0.20565990308593657,0.96210301984360058,0.27268622848949375,0.94099765536237645,0.33841307983367042,0.91540800852536641,0.40252723873996749,0,0.99048044398756319,0.13765351458716821,0.96210301984360058,0.27268622848949375,0.91540800852536641,0.40252723873996749,0.85128444158435124,0.52470448779900802,0.7709531747949796,0.63689182933488919,0.67594364414475439,0.73695331598433667,0,0.97862352529595531,0.20565990308593657,0.91540800852536641,0.40252723873996749,0.81305609947853252,0.58218534772077069,0.67594364414475439,0.73695331598433667,0.50993260439013599,0.86021435641350064,0.32212044179849075,0.94669869598280587,0,0.96210301984360058,0.27268622848949375,0.85128444158435124,0.52470448779900802,0.67594364414475439,0.73695331598433667,0.44937040096716135,0.89334553378556314,0.18873759545291671,0.98202755565343036,-0.086200379880619196,0.99627781994202647,0,0.94099765536237645,0.33841307983367042,0.7709531747949796,0.63689182933488919,0.50993260439013577,0.86021435641350075,0.18873759545291671,0.98202755565343036,-0.15472933479028111,0.98795689832874645,-0.47993747795978653,0.87730269419944185,0,0.91540800852536641,0.40252723873996749,0.67594364414475439,0.73695331598433667,0.32212044179849075,0.94669869598280587,-0.086200379880619196,0.99627781994202647,-0.47993747795978614,0.87730269419944207,-0.79247684195109025,0.60990200440007303,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99853341385112382,0.054138908585417526,0.9941379571543596,0.10811901842394177,0.98682652254152614,0.16178199655276473,0.97662055571008666,0.21497044021102407,0.96354999251922291,0.26752833852922081,0.94765317118280246,0.31930153013598001,0.92897671981679142,0.37013815533991434,0.90757541967095701,0.4198891015602646,0.88351204444602294,0.46840844069979015,0.85685717616758927,0.51555385717702173,0.82768899815689057,0.56118706536238239,0.79609306570564375,0.60517421519376513,0.76216205512763646,0.64738628478182769,0.72599549192313084,0.68769945885342332,0,0.9941379571543596,0.10811901842394177,0.97662055571008666,0.21497044021102407,0.94765317118280246,0.31930153013598001,0.90757541967095701,0.4198891015602646,0.85685717616758927,0.51555385717702173,0.79609306570564375,0.60517421519376513,0.72599549192313084,0.68769945885342332,0.64738628478182758,0.76216205512763646,0.56118706536238228,0.82768899815689057,0.46840844069979015,0.88351204444602294,0.37013815533991434,0.92897671981679142,0.26752833852922075,0.96354999251922302,0.16178199655276462,0.98682652254152614,0.05413890858541761,0.99853341385112382,0,0.98682652254152614,0.16178199655276473,0.94765317118280246,0.31930153013598001,0.88351204444602294,0.46840844069979015,0.79609306570564375,0.60517421519376513,0.68769945885342321,0.72599549192313095,0.56118706536238228,0.82768899815689057,0.4198891015602646,0.90757541967095701,0.26752833852922075,0.96354999251922302,0.10811901842394164,0.9941379571543596,-0.054138908585417707,0.99853341385112382,-0.2149704402110241,0.97662055571008666,-0.37013815533991445,0.92897671981679142,-0.51555385717702185,0.85685717616758916,-0.64738628478182769,0.76216205512763646,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99573417629503447,0.092268359463301988,0.98297309968390179,0.18374951781657034,0.96182564317281904,0.27366299007208283,0.93247222940435581,0.36124166618715292,0.89516329135506234,0.44573835577653825,0.85021713572961422,0.52643216287735572,0.79801722728023949,0.60263463637925641,0.73900891722065909,0.67369564364655721,0,0.98297309968390179,0.18374951781657034,0.93247222940435581,0.36124166618715292,0.85021713572961422,0.52643216287735572,0.73900891722065909,0.67369564364655721,0.60263463637925641,0.79801722728023949,0.44573835577653831,0.89516329135506234,0.27366299007208278,0.96182564317281904,0.092268359463302016,0.99573417629503447,0,0.96182564317281904,0.27366299007208283,0.85021713572961422,0.52643216287735572,0.67369564364655721,0.73900891722065909,0.44573835577653831,0.89516329135506234,0.18374951781657031,0.98297309968390179,-0.092268359463301891,0.99573417629503458,-0.36124166618715275,0.93247222940435592,-0.60263463637925629,0.7980172272802396,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99503077536540141,0.099567846595816661,0.98017248784854383,0.19814614319939758,0.95557280578614068,0.29475517441090421,0.92147621187040762,0.38843479627469474,0.87822157337022855,0.47825397862131824,0.82623877431599491,0.56332005806362206,0.76604444311897801,0.64278760968653936,0.69823681808607285,0.71586684925971844,0.62348980185873359,0.7818314824680298,0.54254626386575944,0.84002592315077151,0,0.98017248784854383,0.19814614319939758,0.92147621187040762,0.38843479627469474,0.82623877431599491,0.56332005806362206,0.69823681808607285,0.71586684925971844,0.54254626386575944,0.84002592315077151,0.36534102436639498,0.93087374864420425,0.17364817766693022,0.98480775301220813,-0.024930691738072913,0.99968918200081625,-0.22252093395631434,0.97492791218182362,-0.41128710313061156,0.91150585231167314,0,0.95557280578614068,0.29475517441090421,0.82623877431599491,0.56332005806362206,0.62348980185873359,0.7818314824680298,0,0.82623877431599491,0.56332005806362206,0.36534102436639498,0.93087374864420425,-0.22252093395631434,0.97492791218182362,0,0,0,0,0,0,0,0,0.99726917338578802,0.073852527474873961,0.98909160837114596,0.1473016980546375,0.9755119679804366,0.21994635783966859,0.95660441950044084,0.29138974688932462,0.93247222940435581,0.36124166618715292,0.90324719934612885,0.42912060877260894,0.86908894630552835,0.49465584339977881,0.8301840308155507,0.55748943934288553,0,0.98909160837114596,0.1473016980546375,0.95660441950044084,0.29138974688932462,0.90324719934612885,0.42912060877260894,0.8301840308155507,0.55748943934288553,0.73900891722065909,0.67369564364655721,0.63171100625325105,0.77520397611112979,0.51063119318090699,0.85979985144837234,0.37841105004231035,0.92563765978155621,0,0.9755119679804366,0.21994635783966859,0.90324719934612885,0.42912060877260894,0.78674493803348333,0.61727822128979282,0.63171100625325105,0.77520397611112979,0.44573835577653831,0.89516329135506234,0.23793519504261904,0.97128103191611381,0.018478904959130137,0.99982925045805271,-0.20188240915701006,0.97940976760136589,0,0.95660441950044084,0.29138974688932462,0.8301840308155507,0.55748943934288553,0.63171100625325105,0.77520397611112979,0.37841105004231035,0.92563765978155621,0.092268359463302016,0.99573417629503447,-0.20188240915701006,0.97940976760136589,-0.47851156910128639,0.87808124808369803,-0.71361015441175224,0.70054303759329106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99836910392613565,0.057088810862767979,0.99348173534855022,0.11399140989054062,0.98535383584769298,0.17052219263262378,0.97401191694233347,0.22649676742576436,0.95949297361449737,0.28173255684142967,0.94184436363952473,0.33604939321543009,0.92112365311485012,0.38927010631739145,0.89739842869135844,0.44122110124322128,0.87074607711977714,0.49173292464560375,0.84125353283118121,0.54064081745559756,0.80901699437494745,0.58778525229247314,0.77414161063908249,0.63301245380887039,0.73674113787640494,0.67617490027401939,0.69693756865529344,0.71713180475896343,0.6548607339452851,0.75574957435425827,0.61064787963543821,0.79190224592227509,0.56444321886676929,0.8254718969627739,0.51639746163896194,0.85634903025158893,0.46666732322567384,0.88443293099781428,0.41541501300188644,0.90963199535451833,0.36280770535064116,0.93186402921145228,0.30901699437494745,0.95105651629515353,0.25421833419348711,0.96714685470195705,0.19859046664574553,0.98008256109239345,0.14231483827328534,0.98982144188093268,0.085575008478839837,0.99633173086269133,0.028556050793696476,0.99959219282818923,0,0.99348173534855022,0.11399140989054062,0.97401191694233347,0.22649676742576436,0.94184436363952473,0.33604939321543009,0.89739842869135844,0.44122110124322128,0.84125353283118121,0.54064081745559756,0,0.97401191694233347,0.22649676742576436,0.89739842869135844,0.44122110124322128,0.77414161063908249,0.63301245380887039,0.61064787963543821,0.79190224592227509,0.41541501300188644,0.90963199535451833,0,0.94184436363952473,0.33604939321543009,0.77414161063908249,0.63301245380887039,0.51639746163896194,0.85634903025158893,0.19859046664574553,0.98008256109239345,-0.142314838273285,0.9898214418809328,0,0.89739842869135844,0.44122110124322128,0.61064787963543821,0.79190224592227509,0.19859046664574553,0.98008256109239345,-0.25421833419348677,0.96714685470195716,-0.6548607339452851,0.75574957435425827,0,0,0,0,0,0,0,0,0,0,0,0,0.99781362721877453,0.066090584325699447,0.99126406932697519,0.1318921713420689,0.98037996587480936,0.19711702745148033,0.96520891027734868,0.26147994095381977,0.94581724170063464,0.32469946920468351,0.92228975497738475,0.38649916929245226,0.89472932982076347,0.44660880685280657,0.86325648095757379,0.50476553773484378,0.82800883114802004,0.56071505735167271,0,0.99126406932697519,0.1318921713420689,0.96520891027734868,0.26147994095381977,0.92228975497738475,0.38649916929245226,0.86325648095757379,0.50476553773484378,0.78914050939639357,0.61421271268966782,0.70123678427248859,0.71292844829139701,0.60108114728302509,0.79918799689492481,0.49042350383050809,0.87148424362727728,0.37119724891822076,0.92855403848970708,0,0.98037996587480936,0.19711702745148033,0.92228975497738475,0.38649916929245226,0.82800883114802004,0.56071505735167271,0.70123678427248859,0.71292844829139701,0.54694815812242692,0.83716647826252855,0.37119724891822076,0.92855403848970708,0.18088053433210999,0.98350507487238237,-0.016533944766358447,0.999863304992469,-0.21329963074374692,0.97698683078359927,0,0.96520891027734868,0.26147994095381977,0.86325648095757379,0.50476553773484378,0.70123678427248859,0.71292844829139701,0.49042350383050809,0.87148424362727728,0.24548548714079901,0.96940026593933049,-0.016533944766358447,0.999863304992469,-0.27740290876184465,0.96075367613684814,-0.51896957378121522,0.85479271258553891,-0.72442520479108896,0.68935340911856591,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinti/test/fixtures/c/fftpack/runner.c b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/test/fixtures/c/fftpack/runner.c new file mode 100644 index 000000000000..1844165535d8 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/test/fixtures/c/fftpack/runner.c @@ -0,0 +1,304 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +/** +* Generate FFTPACK test fixtures. +* +* ## Notes +* +* - Run this script from the directory in which fixtures should be written. +* +*/ + +#include +#include +#include + +/** +* Define prototypes for external functions. +*/ +extern void sinti( int n, double *wsave ); + +/** +* Generates a random number on the interval [0,1]. +* +* @return random number +*/ +double rand_double( void ) { + int r = rand(); + return (double)r / ( (double)RAND_MAX + 1.0 ); +} + +/** +* Generates an array of pseudorandom integers drawn from a uniform distribution. +* +* ## Notes +* +* - WARNING: the method used here is not particularly robust, as some integer values may be sampled more frequently than others. +* +* +* @param out output array +* @param len array length +* @param a lower bound (inclusive) +* @param b upper bound (exclusive) +*/ +void rand_array_i32( int *out, const unsigned int len, const int a, const int b ) { + unsigned int i; + unsigned int r; + double delta; + + delta = (double)b - (double)a; + + for ( i = 0; i < len; i++ ) { + r = (unsigned int)( delta * rand_double() ); // truncation + out[ i ] = (int)( a + r ); + } +} + +/** +* Writes an array of doubles to a file as a series of comma-separated values. +* +* @param f file to write to +* @param x array of doubles +* @param len array length +*/ +void write_array_f64( FILE *f, const double *x, const unsigned int len ) { + unsigned int i; + + for ( i = 0; i < len; i++ ) { + fprintf( f, "%.17g", x[ i ] ); + if ( i < len-1 ) { + fprintf( f, "," ); + } + } +} + +/** +* Writes an array of integers to a file as a series of comma-separated values. +* +* @param f file to write to +* @param x array of integers +* @param len array length +*/ +void write_array_i32( FILE *f, const int *x, const unsigned int len ) { + unsigned int i; + + for ( i = 0; i < len; i++ ) { + fprintf( f, "%d", x[ i ] ); + if ( i < len-1 ) { + fprintf( f, "," ); + } + } +} + +/** +* Writes a named array of doubles to a file as JSON. +* +* @param f file to write to +* @param name array name +* @param x data +* @param len array length +*/ +void write_named_array_f64( FILE *f, const char *name, const double *x, const unsigned int len ) { + fprintf( f, "\"%s\":[", name ); + write_array_f64( f, x, len ); + fprintf( f, "]" ); +} + +/** +* Writes a named array of integers to a file as JSON. +* +* @param f file to write to +* @param name array name +* @param x data +* @param len array length +*/ +void write_named_array_i32( FILE *f, const char *name, const int *x, const unsigned int len ) { + fprintf( f, "\"%s\":[", name ); + write_array_i32( f, x, len ); + fprintf( f, "]" ); +} + +/** +* Writes data to a file as JSON. +* +* ## Notes +* +* - This function SHOULD be tailored to the input data (e.g., input types, output types, number of arguments, etc) and may vary from use case to use case. +* +* +* @param f file to write to +* @param lengths sequence lengths +* @param offsets sine and twiddle offsets +* @param sines sine values +* @param twiddles twiddle factors +* @param num number of sequence lengths +* @param total total number of sine and twiddle values +*/ +void write_data_as_json( FILE *f, const int *lengths, const int *offsets, const double *sines, const double *twiddles, const unsigned int num, const unsigned int total ) { + fprintf( f, "{" ); + write_named_array_i32( f, "lengths", lengths, num ); + fprintf( f, "," ); + write_named_array_i32( f, "offsets", offsets, num ); + fprintf( f, "," ); + write_named_array_f64( f, "sines", sines, total ); + fprintf( f, "," ); + write_named_array_f64( f, "twiddles", twiddles, total ); + fprintf( f, "}\n" ); +} + +/** +* Generates test fixtures. +* +* @param lengths sequence lengths +* @param offsets sine and twiddle offsets into flat output array +* @param num number of sequence lengths +* @param total total number of sine and twiddle values +* @param name output filename +*/ +void generate( const int *lengths, const int *offsets, const unsigned int num, const unsigned int total, const char *name ) { + unsigned int i; + unsigned int j; + double *sines; + double *twiddles; + double *wsave; + FILE *f; + int off; + int n; + + // Allocate an output array for sine values: + sines = (double*) calloc( total, sizeof(double) ); + if ( sines == NULL ) { + printf( "Error allocating memory.\n" ); + exit( 1 ); + } + + // Allocate an output array for twiddle factors: + twiddles = (double*) calloc( total, sizeof(double) ); + if ( twiddles == NULL ) { + printf( "Error allocating memory.\n" ); + exit( 1 ); + } + + // Generate fixture data: + for ( i = 0; i < num; i++ ) { + n = lengths[ i ]; + wsave = (double*) calloc( (int)(2.5*n) + 15, sizeof(double) ); + if ( wsave == NULL ) { + printf( "Error allocating memory.\n" ); + exit( 1 ); + } + sinti( n, wsave ); + + // Copy sine region into flat array (N/2 values starting at wsave[0]): + off = offsets[ i ]; + for ( j = 0; j < (unsigned int)(n/2); j++ ) { + sines[ off + j ] = wsave[ j ]; + } + + // Copy twiddle region into flat array (N+1 values starting at wsave[(n/2)+n+1]): + off = offsets[ i ]; + for ( j = 0; j < (unsigned int)( n + 1 ); j++ ) { + twiddles[ off + j ] = wsave[ ( n/2 ) + n + 1 + j ]; + } + free( wsave ); + } + // Open a new file: + f = fopen( name, "w" ); + if ( f == NULL ) { + printf( "Error opening file.\n" ); + exit( 1 ); + } + + // Write data as JSON: + write_data_as_json( f, lengths, offsets, sines, twiddles, num, total ); + + // Close the file: + fclose( f ); + + // Free allocated memory: + free( sines ); + free( twiddles ); +} + +/** +* Computes offsets into flat sine and twiddle arrays for each sequence length. +* +* @param offsets output array of offsets +* @param lengths sequence lengths +* @param num number of sequence lengths +* @return total number of sine and twiddle values +*/ +unsigned int compute_offsets( int *offsets, const int *lengths, const unsigned int num ) { + unsigned int total; + unsigned int i; + + total = 0; + for ( i = 0; i < num; i++ ) { + offsets[ i ] = total; + total += lengths[ i ] + 1; + } + return total; +} + +/** +* Main execution sequence. +*/ +int main( void ) { + unsigned int total; + unsigned int num; + int *lengths; + int *offsets; + + // Use the current time to seed the random number generator: + srand( time( NULL ) ); + + // Define the number of sequence lengths per range: + num = 10; + + // Allocate arrays: + lengths = (int*) malloc( num * sizeof(int) ); + if ( lengths == NULL ) { + printf( "Error allocating memory.\n" ); + exit( 1 ); + } + offsets = (int*) malloc( num * sizeof(int) ); + if ( offsets == NULL ) { + printf( "Error allocating memory.\n" ); + exit( 1 ); + } + + // Generate fixture data: + rand_array_i32( lengths, num, 2, 16 ); + total = compute_offsets( offsets, lengths, num ); + generate( lengths, offsets, num, total, "small.json" ); + + rand_array_i32( lengths, num, 16, 128 ); + total = compute_offsets( offsets, lengths, num ); + generate( lengths, offsets, num, total, "medium.json" ); + + rand_array_i32( lengths, num, 128, 1024 ); + total = compute_offsets( offsets, lengths, num ); + generate( lengths, offsets, num, total, "large.json" ); + + // Free allocated memory: + free( lengths ); + free( offsets ); + + return 0; +} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinti/test/fixtures/c/fftpack/small.json b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/test/fixtures/c/fftpack/small.json new file mode 100644 index 000000000000..dc1e4ec8bbb5 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/test/fixtures/c/fftpack/small.json @@ -0,0 +1 @@ +{"lengths":[5,3,6,7,9,7,15,9,11,9],"offsets":[0,6,10,17,25,35,43,59,69,81],"sines":[0.99999999999999989,1.7320508075688772,0,0,0,0,1.4142135623730949,0,0,0,0.86776747823511624,1.5636629649360596,1.9498558243636472,0,0,0,0,0.76536686473017956,1.4142135623730949,1.8477590650225735,0,0,0,0,0,0.61803398874989479,1.1755705045849463,1.6180339887498949,1.9021130325903071,0,0,0,0,0,0,0.76536686473017956,1.4142135623730949,1.8477590650225735,0,0,0,0,0,0.3901806440322565,0.76536686473017956,1.1111404660392044,1.4142135623730949,1.6629392246050905,1.8477590650225735,1.9615705608064609,0,0,0,0,0,0,0,0,0,0.61803398874989479,1.1755705045849463,1.6180339887498949,1.9021130325903071,0,0,0,0,0,0,0.51763809020504148,0.99999999999999989,1.4142135623730949,1.7320508075688772,1.9318516525781364,0,0,0,0,0,0,0,0.61803398874989479,1.1755705045849463,1.6180339887498949,1.9021130325903071,0,0,0,0,0,0],"twiddles":[0.50000000000000011,0.8660254037844386,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.70710678118654757,0.70710678118654746,0,0,0,0,0,0,0.80901699437494745,0.58778525229247314,0.30901699437494745,0.95105651629515353,0,0,0,0,0,0,0.70710678118654757,0.70710678118654746,0,0,0,0,0,0,0.92387953251128674,0.38268343236508978,0,0,0.70710678118654757,0.70710678118654746,0,0,0.38268343236508984,0.92387953251128674,0,0,0,0,0,0,0.80901699437494745,0.58778525229247314,0.30901699437494745,0.95105651629515353,0,0,0,0,0,0,0.86602540378443871,0.49999999999999994,0,0.50000000000000011,0.8660254037844386,0,6.123233995736766e-17,1,0,0,0,0,0.80901699437494745,0.58778525229247314,0.30901699437494745,0.95105651629515353,0,0,0,0,0,0]} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinti/test/test.js b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/test/test.js new file mode 100644 index 000000000000..a6960135d70d --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/test/test.js @@ -0,0 +1,335 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var tape = require( 'tape' ); +var Float64Array = require( '@stdlib/array/float64' ); +var isAlmostSameValue = require( '@stdlib/number/float64/base/assert/is-almost-same-value' ); +var floor = require( '@stdlib/math/base/special/floor' ); +var sinti = require( './../lib' ); + + +// FIXTURES // + +var small = require( './fixtures/c/fftpack/small.json' ); +var medium = require( './fixtures/c/fftpack/medium.json' ); +var large = require( './fixtures/c/fftpack/large.json' ); + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof sinti, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'the function has an arity of 4', function test( t ) { + t.strictEqual( sinti.length, 4, 'returns expected value' ); + t.end(); +}); + +tape( 'the function returns a reference to the workspace array', function test( t ) { + var workspace; + var out; + var N; + + N = 8; + workspace = new Float64Array( floor( 2.5*N ) + 34 ); + out = sinti( N, workspace, 1, 0 ); + + t.strictEqual( out, workspace, 'same reference' ); + t.end(); +}); + +tape( 'the function correctly initializes sine values (small sequence lengths)', function test( t ) { + var workspace; + var expected; + var lengths; + var offsets; + var ulps; + var ns2; + var off; + var y; + var e; + var N; + var i; + var k; + + lengths = small.lengths; + offsets = small.offsets; + expected = small.sines; + + ulps = 1; + for ( k = 0; k < lengths.length; k++ ) { + N = lengths[ k ]; + off = offsets[ k ]; + ns2 = floor( N / 2 ); + workspace = new Float64Array( floor( 2.5*N ) + 34 ); + sinti( N, workspace, 1, 0 ); + + for ( i = 0; i < ns2; i++ ) { + y = workspace[ i ]; + e = expected[ off+i ]; + t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within '+ulps+' ULPs. N: '+N+'. y: '+y+'. E: '+e ); + } + } + t.end(); +}); + +tape( 'the function correctly initializes twiddle factors (small sequence lengths)', function test( t ) { + var workspace; + var expected; + var lengths; + var offsets; + var ulps; + var ns2; + var off; + var iw; + var y; + var e; + var N; + var i; + var k; + + lengths = small.lengths; + offsets = small.offsets; + expected = small.twiddles; + + ulps = 1; + for ( k = 0; k < lengths.length; k++ ) { + N = lengths[ k ]; + off = offsets[ k ]; + ns2 = floor( N / 2 ); + iw = ns2 + N + 1; + workspace = new Float64Array( floor( 2.5*N ) + 34 ); + sinti( N, workspace, 1, 0 ); + + for ( i = 0; i < N+1; i++ ) { + y = workspace[ iw + i ]; + e = expected[ off+i ]; + t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within '+ulps+' ULPs. N: '+N+'. y: '+y+'. E: '+e ); + } + } + t.end(); +}); + +tape( 'the function correctly initializes sine values (medium sequence lengths)', function test( t ) { + var workspace; + var expected; + var lengths; + var offsets; + var ulps; + var ns2; + var off; + var y; + var e; + var N; + var i; + var k; + + lengths = medium.lengths; + offsets = medium.offsets; + expected = medium.sines; + + ulps = 1; + for ( k = 0; k < lengths.length; k++ ) { + N = lengths[ k ]; + off = offsets[ k ]; + ns2 = floor( N / 2 ); + workspace = new Float64Array( floor( 2.5*N ) + 34 ); + sinti( N, workspace, 1, 0 ); + + for ( i = 0; i < ns2; i++ ) { + y = workspace[ i ]; + e = expected[ off+i ]; + t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within '+ulps+' ULPs. N: '+N+'. y: '+y+'. E: '+e ); + } + } + t.end(); +}); + +tape( 'the function correctly initializes twiddle factors (medium sequence lengths)', function test( t ) { + var workspace; + var expected; + var lengths; + var offsets; + var ulps; + var ns2; + var off; + var iw; + var y; + var e; + var N; + var i; + var k; + + lengths = medium.lengths; + offsets = medium.offsets; + expected = medium.twiddles; + + ulps = 1; + for ( k = 0; k < lengths.length; k++ ) { + N = lengths[ k ]; + off = offsets[ k ]; + ns2 = floor( N / 2 ); + iw = ns2 + N + 1; + workspace = new Float64Array( floor( 2.5*N ) + 34 ); + sinti( N, workspace, 1, 0 ); + + for ( i = 0; i < N+1; i++ ) { + y = workspace[ iw + i ]; + e = expected[ off+i ]; + t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within '+ulps+' ULPs. N: '+N+'. y: '+y+'. E: '+e ); + } + } + t.end(); +}); + +tape( 'the function correctly initializes sine values (large sequence lengths)', function test( t ) { + var workspace; + var expected; + var lengths; + var offsets; + var ulps; + var ns2; + var off; + var y; + var e; + var N; + var i; + var k; + + lengths = large.lengths; + offsets = large.offsets; + expected = large.sines; + + ulps = 1; + for ( k = 0; k < lengths.length; k++ ) { + N = lengths[ k ]; + off = offsets[ k ]; + ns2 = floor( N / 2 ); + workspace = new Float64Array( floor( 2.5*N ) + 34 ); + sinti( N, workspace, 1, 0 ); + + for ( i = 0; i < ns2; i++ ) { + y = workspace[ i ]; + e = expected[ off+i ]; + t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within '+ulps+' ULPs. N: '+N+'. y: '+y+'. E: '+e ); + } + } + t.end(); +}); + +tape( 'the function correctly initializes twiddle factors (large sequence lengths)', function test( t ) { + var workspace; + var expected; + var lengths; + var offsets; + var ulps; + var ns2; + var off; + var iw; + var y; + var e; + var N; + var i; + var k; + + lengths = large.lengths; + offsets = large.offsets; + expected = large.twiddles; + + ulps = 1; + for ( k = 0; k < lengths.length; k++ ) { + N = lengths[ k ]; + off = offsets[ k ]; + ns2 = floor( N / 2 ); + iw = ns2 + N + 1; + workspace = new Float64Array( floor( 2.5*N ) + 34 ); + sinti( N, workspace, 1, 0 ); + + for ( i = 0; i < N+1; i++ ) { + y = workspace[ iw + i ]; + e = expected[ off+i ]; + t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within '+ulps+' ULPs. N: '+N+'. y: '+y+'. E: '+e ); + } + } + t.end(); +}); + +tape( 'the function does not modify the scratch region of the workspace', function test( t ) { + var workspace; + var ns2; + var N; + var i; + + N = 8; + ns2 = floor( N / 2 ); + workspace = new Float64Array( floor( 2.5*N ) + 34 ); + + for ( i = 0; i < workspace.length; i++ ) { + workspace[ i ] = i + 1.0; + } + sinti( N, workspace, 1, 0 ); + for ( i = ns2; i < ns2 + N + 1; i++ ) { + t.strictEqual( workspace[ i ], i + 1.0, 'returns expected value' ); + } + t.end(); +}); + +tape( 'the function correctly handles stride and offset parameters', function test( t ) { + var workspace; + var expected; + var stride; + var offset; + var ns2; + var nf; + var iw; + var fw; + var N; + var i; + + N = 9; + ns2 = floor( N / 2 ); + stride = 2; + offset = 3; + workspace = new Float64Array( offset + ( ( floor( 2.5*N ) + 34 ) * stride ) ); + + sinti( N, workspace, stride, offset ); + + fw = ns2 + ( 2 * ( N+1 ) ); + t.strictEqual( workspace[ offset + ( fw * stride ) ], N+1, 'returns expected value' ); + + nf = workspace[ offset + ( ( fw+1 ) * stride ) ]; + t.strictEqual( nf, 2, 'returns expected value' ); + t.strictEqual( workspace[ offset + ( ( fw+2 ) * stride ) ], 2, 'returns expected value' ); + t.strictEqual( workspace[ offset + ( ( fw+3 ) * stride ) ], 5, 'returns expected value' ); + + expected = new Float64Array( floor( 2.5*N ) + 34 ); + sinti( N, expected, 1, 0 ); + + iw = ns2 + N + 1; + for ( i = 0; i < N+1; i++ ) { + t.strictEqual( workspace[ offset + ( ( iw+i ) * stride ) ], expected[ iw+i ], 'returns expected value' ); + } + t.end(); +});