diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/README.md b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/README.md new file mode 100644 index 000000000000..a1610172d43d --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/README.md @@ -0,0 +1,169 @@ + + +# rffti + +> Initialize a double-precision floating-point workspace array for performing a real-valued Fourier transform. + + + +
+ +
+ + + + + +
+ +## Usage + +```javascript +var rffti = require( '@stdlib/fft/base/fftpack/float64/rffti' ); +``` + +#### rffti( N, workspace, strideW, offsetW ) + +Initializes a double-precision floating-point workspace array for performing a real-valued Fourier transform. + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); + +var N = 8; +var workspace = new Float64Array( ( 2*N ) + 34 ); + +var out = rffti( N, workspace, 1, 0 ); +// returns + +var bool = ( out === workspace ); +// returns true + +var twiddleFactors = workspace.slice( N, 2*N ); +// returns [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] + +var factors = workspace.slice( 2*N, ( 2*N ) + 4 ); +// returns [ 8, 2, 2, 4 ] +``` + +The function accepts the following arguments: + +- **N**: length of the sequence to transform. +- **workspace**: workspace [`Float64Array`][@stdlib/array/float64]. +- **strideW**: stride length for `workspace`. +- **offsetW**: starting index for `workspace`. + +
+ + + + + +
+ +## Notes + +- The workspace array is divided into three sections: + + ```text + size = N N 2+ceil(log2(N)/2) + ↓ ↓ ↓ + | scratch / workspace | twiddle factors | radix factor table | + ↑ ↑ ↑ + i = 0 ... N ... 2N ... + ``` + + - **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`, the number of factors into which `N` was decomposed, and the individual integer radix factors. + +- In general, a workspace array should have `2N + 34` indexed elements (as `log2(N)/2 ≤ 32` for all `2^64`). During initialization, only the sections for storing twiddle factors and the factorization of `N` are updated. + +- The radix factor table is comprised as follows: + + ```text + | sequence_length | number_of_factors | integer_factors | + ``` + +- If `N` equals `1`, the function returns early without modifying the workspace, as a single data point is its own Fourier transform. + +
+ + + +
+ +## Examples + + + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); +var zeroTo = require( '@stdlib/array/zero-to' ); +var logEach = require( '@stdlib/console/log-each' ); +var rffti = require( '@stdlib/fft/base/fftpack/float64/rffti' ); + +var N = 8; +var workspace = new Float64Array( ( 2*N ) + 34 ); + +rffti( N, workspace, 1, 0 ); +console.log( 'Sequence length: %d', N ); + +console.log( 'Twiddle factors:' ); +var idx = zeroTo( N, 'float64' ); +logEach( ' workspace[ %d ] = %0.4f', idx, workspace.slice( N, 2*N ) ); + +console.log( 'Factorization:' ); +var nf = workspace[ (2*N)+1 ]; + +console.log( ' number of factors: %d', nf ); +idx = zeroTo( nf, 'float64' ); +logEach( ' factor[ %d ]: %d', idx, workspace.slice( (2*N)+2, (2*N)+2+nf ) ); +``` + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/benchmark/benchmark.js b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/benchmark/benchmark.js new file mode 100644 index 000000000000..b2f4afc682ca --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/benchmark/benchmark.js @@ -0,0 +1,101 @@ +/* +* @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 Float64Array = require( '@stdlib/array/float64' ); +var pkg = require( './../package.json' ).name; +var rffti = require( './../lib' ); + + +// FUNCTIONS // + +/** +* Creates a benchmark function. +* +* @private +* @param {PositiveInteger} N - sequence length +* @returns {Function} benchmark function +*/ +function createBenchmark( N ) { + var workspace = new Float64Array( ( 2*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++ ) { + rffti( N, workspace, 1, 0 ); + if ( isnan( workspace[ N ] ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnan( workspace[ N ] ) ) { + 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 = [ + 8, + 16, + 32, + 64, + 128, + 256, + 512, + 1024 + ]; + + 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/float64/rffti/docs/repl.txt b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/docs/repl.txt new file mode 100644 index 000000000000..c22035476e57 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/docs/repl.txt @@ -0,0 +1,55 @@ + +{{alias}}( N, workspace, strideW, offsetW ) + Initializes a double-precision floating-point workspace array for performing + a real-valued Fourier transform. + + The workspace array is divided into three sections: + + 1. scratch/workspace: the section ranges from indices 0 to N-1 and is used + while performing transforms. This section is not updated during + initialization. + + 2. twiddle factors: the section ranges from indices N to 2N-1 and stores a + table of reusable complex exponential constants as cosine/sine pairs. + + 3. radix factor table: the section starts at index 2N and stores the + sequence length N, the number of factors into which N was decomposed, and + the individual integer radix factors. + + Any remaining array space remains as unused storage. + + Parameters + ---------- + N: integer + Length of the sequence. + + workspace: Float64Array + Workspace array. + + strideW: integer + Stride length for `workspace`. + + offsetW: integer + Starting index for `workspace`. + + Returns + ------- + out: Float64Array + Workspace array. + + Examples + -------- + > var N = 8; + > var workspace = new {{alias:@stdlib/array/float64}}( ( 2*N ) + 34 ); + > var out = {{alias}}( N, workspace, 1, 0 ) + + > var bool = ( out === workspace ) + true + > var twiddleFactors = workspace.slice( N, 2*N ) + [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] + > var factors = workspace.slice( 2*N, ( 2*N ) + 4 ) + [ 8, 2, 2, 4 ] + + See Also + -------- + diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/docs/types/index.d.ts b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/docs/types/index.d.ts new file mode 100644 index 000000000000..2607e7ad91e8 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/docs/types/index.d.ts @@ -0,0 +1,58 @@ +/* +* @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 + +/** +* Initializes a double-precision floating-point workspace array for performing a real-valued Fourier transform. +* +* ## Notes +* +* - The workspace array should have a length of at least `( 2*N ) + 34` elements. +* - For single-point sequences (N=1), the function returns immediately as the FFT is the identity operation. +* +* @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 N = 8; +* var workspace = new Float64Array( ( 2*N ) + 34 ); +* +* var out = rffti( N, workspace, 1, 0 ); +* // returns +* +* var bool = ( out === workspace ); +* // returns true +* +* var twiddleFactors = workspace.slice( N, 2*N ); +* // returns [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] +* +* var factors = workspace.slice( 2*N, ( 2*N ) + 4 ); +* // returns [ 8, 2, 2, 4 ] +*/ +declare function rffti( N: number, workspace: Float64Array, strideW: number, offsetW: number ): Float64Array; + + +// EXPORTS // + +export = rffti; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/docs/types/test.ts b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/docs/types/test.ts new file mode 100644 index 000000000000..1816cfd82075 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/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 rffti = require( './index' ); + + +// TESTS // + +// The function returns a Float64Array... +{ + const workspace = new Float64Array( ( 2*8 ) + 34 ); + + rffti( 8, 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( ( 2*8 ) + 34 ); + + rffti( '8', workspace, 1, 0 ); // $ExpectError + rffti( true, workspace, 1, 0 ); // $ExpectError + rffti( false, workspace, 1, 0 ); // $ExpectError + rffti( null, workspace, 1, 0 ); // $ExpectError + rffti( void 0, workspace, 1, 0 ); // $ExpectError + rffti( [], workspace, 1, 0 ); // $ExpectError + rffti( {}, workspace, 1, 0 ); // $ExpectError + rffti( ( 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 Float64Array... +{ + rffti( 8, '50', 1, 0 ); // $ExpectError + rffti( 8, 50, 1, 0 ); // $ExpectError + rffti( 8, true, 1, 0 ); // $ExpectError + rffti( 8, false, 1, 0 ); // $ExpectError + rffti( 8, null, 1, 0 ); // $ExpectError + rffti( 8, void 0, 1, 0 ); // $ExpectError + rffti( 8, [], 1, 0 ); // $ExpectError + rffti( 8, {}, 1, 0 ); // $ExpectError + rffti( 8, ( 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( ( 2*8 ) + 34 ); + + rffti( 8, workspace, '1', 0 ); // $ExpectError + rffti( 8, workspace, true, 0 ); // $ExpectError + rffti( 8, workspace, false, 0 ); // $ExpectError + rffti( 8, workspace, null, 0 ); // $ExpectError + rffti( 8, workspace, void 0, 0 ); // $ExpectError + rffti( 8, workspace, [], 0 ); // $ExpectError + rffti( 8, workspace, {}, 0 ); // $ExpectError + rffti( 8, 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( ( 2*8 ) + 34 ); + + rffti( 8, workspace, 1, '0' ); // $ExpectError + rffti( 8, workspace, 1, true ); // $ExpectError + rffti( 8, workspace, 1, false ); // $ExpectError + rffti( 8, workspace, 1, null ); // $ExpectError + rffti( 8, workspace, 1, void 0 ); // $ExpectError + rffti( 8, workspace, 1, [] ); // $ExpectError + rffti( 8, workspace, 1, {} ); // $ExpectError + rffti( 8, 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( ( 2*8 ) + 34 ); + + rffti(); // $ExpectError + rffti( 8 ); // $ExpectError + rffti( 8, workspace ); // $ExpectError + rffti( 8, workspace, 1 ); // $ExpectError + rffti( 8, workspace, 1, 0, 123 ); // $ExpectError +} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/examples/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/examples/index.js new file mode 100644 index 000000000000..5fcb0b44d1a7 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/examples/index.js @@ -0,0 +1,41 @@ +/** +* @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 rffti = require( './../lib' ); + +var N = 8; +var workspace = new Float64Array( ( 2*N ) + 34 ); + +rffti( N, workspace, 1, 0 ); +console.log( 'Sequence length: %d', N ); + +console.log( 'Twiddle factors:' ); +var idx = zeroTo( N, 'float64' ); +logEach( ' workspace[ %d ] = %0.4f', idx, workspace.slice( N, 2*N ) ); + +console.log( 'Factorization:' ); +var nf = workspace[ (2*N)+1 ]; + +console.log( ' number of factors: %d', nf ); +idx = zeroTo( nf, 'float64' ); +logEach( ' factor[ %d ]: %d', idx, workspace.slice( (2*N)+2, (2*N)+2+nf ) ); diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/lib/index.js new file mode 100644 index 000000000000..24b1c33a04bb --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/lib/index.js @@ -0,0 +1,53 @@ +/** +* @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 double-precision floating-point workspace array for performing a real-valued Fourier transform. +* +* @module @stdlib/fft/base/fftpack/float64/rffti +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var rffti = require( '@stdlib/fft/base/fftpack/float64/rffti' ); +* +* var N = 8; +* var workspace = new Float64Array( ( 2*N ) + 34 ); +* +* var out = rffti( N, workspace, 1, 0 ); +* // returns +* +* var bool = ( out === workspace ); +* // returns true +* +* var twiddleFactors = workspace.slice( N, 2*N ); +* // returns [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] +* +* var factors = workspace.slice( 2*N, ( 2*N ) + 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/float64/rffti/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/lib/main.js new file mode 100644 index 000000000000..7825db87ca9c --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/lib/main.js @@ -0,0 +1,176 @@ +/** +* @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 rffti1 = require( './rffti1.js' ); + + +// MAIN // + +/** +* Initializes a double-precision floating-point workspace array for performing a real-valued Fourier transform. +* +* ## Notes +* +* The workspace array is divided into three sections: +* +* ```text +* size = N N 2+ceil(log2(N)/2) +* ↓ ↓ ↓ +* | scratch / workspace | twiddle factors | radix factor table | +* ↑ ↑ ↑ +* i = 0 ... N ... 2N ... +* ``` +* +* where +* +* - **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`. +* +* In general, a workspace array should have `2N + 34` indexed elements (as `log2(N)/2 ≤ 32` for all `2^64`). During initialization, only the sections for storing twiddle factors and the factorization of `N` are updated. +* +* > Note: FFTPACK only requires `2N+15`, but we increase that number here to accommodate larger workspace arrays, where `N` may exceed `2^30` indexed elements. +* +* The first two sections each contain `N` elements, while the last section contains the sequence length, the number of integer factors, and, at most, `ceil(log2(N)/2)` integer radix factors. +* +* 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 (e.g., `rfftf`) multiplying with `(cos,-sin)` and those performing a backward transform (e.g., `rfftb`) 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. +* +* @param {NonNegativeInteger} N - length of the sequence to transform +* @param {Float64Array} workspace - workspace array +* @param {integer} strideW - stride length for `workspace` +* @param {NonNegativeInteger} offsetW - starting index for `workspace` +* @returns {Float64Array} workspace array +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* +* var N = 8; +* var workspace = new Float64Array( ( 2*N ) + 34 ); +* +* var out = rffti( N, workspace, 1, 0 ); +* // returns +* +* var bool = ( out === workspace ); +* // returns true +* +* var twiddleFactors = workspace.slice( N, 2*N ); +* // returns [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] +* +* var factors = workspace.slice( 2*N, ( 2*N ) + 4 ); +* // returns [ 8, 2, 2, 4 ] +*/ +function rffti( N, workspace, strideW, offsetW ) { + var offsetT; + var offsetF; + + // When a sub-sequence is a single data point, the FFT is the identity, so no initialization necessary... + if ( N === 1 ) { + return workspace; + } + // Resolve the starting indices for storing twiddle factors and factorization results: + offsetT = offsetW + ( N*strideW ); // index offset for twiddle factors + offsetF = offsetT + ( N*strideW ); // index offset for factorization results + + // Initialize a provided workspace array: + rffti1( N, workspace, strideW, offsetT, workspace, strideW, offsetF ); + + return workspace; +} + + +// EXPORTS // + +module.exports = rffti; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/lib/rffti1.js b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/lib/rffti1.js new file mode 100644 index 000000000000..a479acdf17a6 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/lib/rffti1.js @@ -0,0 +1,184 @@ +/** +* @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 sincos = require( '@stdlib/math/base/special/sincos' ).assign; +var TWO_PI = require( '@stdlib/constants/float64/two-pi' ); +var floor = require( '@stdlib/math/base/special/floor' ); +var Float64Array = require( '@stdlib/array/float64' ); +var decompose = require( '@stdlib/fft/base/fftpack/float64/decompose' ); + + +// VARIABLES // + +// Define a list of initial trial factors for FFT factorization: +var TRIAL_FACTORS = new Float64Array( [ 4.0, 2.0, 3.0, 5.0 ] ); + + +// MAIN // + +/** +* Initializes a double-precision floating-point working array for applying a Fourier transform to a real-valued sequence. +* +* @private +* @param {NonNegativeInteger} N - length of the sequence +* @param {Float64Array} twiddles - array of twiddle factors +* @param {integer} strideT - stride length for `twiddles` +* @param {NonNegativeInteger} offsetT - starting index for `twiddles` +* @param {Float64Array} factors - array containing a radix factorization +* @param {integer} strideF - stride length for `factors` +* @param {NonNegativeInteger} offsetF - starting index for `factors` +* @returns {void} +*/ +function rffti1( N, twiddles, strideT, offsetT, factors, strideF, offsetF ) { + var factor; + var argld; + var argh; + var fidx; + var nf; + var fi; + var l2; + var l1; + var ld; + var st; + var it; + var im; + var M; + var m; + var k; + var j; + + // Decompose the sequence length into its radix factors: + nf = decompose( N, 4, TRIAL_FACTORS, 1, 0, factors, strideF, offsetF ); + + // If the number of radix factors is `1`, the only twiddle factor we need is `W_N^0 = 1`, which the main transform kernels already hard-code, so nothing to pre-compute... + if ( nf-1 === 0 ) { + return; + } + // Compute the master angular step (i.e., the basic angle that generates all twiddles): + argh = TWO_PI / N; + + // Define the location of the first sine term we want to compute: + im = 1; + + // Initialize a running product of factors already processed: + l1 = 1; + + // Compute the index of the first radix factor: + fidx = offsetF + ( 2*strideF ); + + // Compute the stride length for each cosine/sine pair: + st = 2 * strideT; + + // Generate twiddle factors... + for ( k = 0; k < nf-1; k++ ) { + // Resolve the next radix factor: + factor = factors[ fidx ]; + + // Compute the length of the transform after including the current radix: + l2 = factor * l1; + + // Compute the number of the "butterfly wings" (at this stage, the data is viewed as a `factor`-point transform of sub-vectors of length `l1`; `M` describes how many such vectors fit in the full array of length `N`): + M = floor( N / l2 ); + + // Initialize a running offset used to step the angle: + ld = 0; + + // Iterate over each butterfly column within the current radix... + for ( j = 1; j < factor; j++ ) { + // Advance to the next column: + ld += l1; + + // Compute the angle step for this column: + argld = ld * argh; // 2π ⋅ j ⋅ li / N, which is the j-th column's base angle + + // Initialize a counter which counts from `1` to `(M/2)-1` (i.e., all non-trivial harmonics): + fi = 1.0; + + // Compute the index of the sine term: + it = offsetT + ( im*strideT ); + + // Iterate over each non-trivial harmonic in the column (note: we skip the `m=0` and `m=1` (i.e., the first cosine/sine pair, the first harmonic `W_N^0 = cos(0) + j sin(0) = 1 + j⋅0` is trivial and hard-coded by transform kernels)... + for ( m = 2; m < M; m += 2 ) { + // Compute `(cos(fi*argld), sin(fi*argld))`: + sincos( fi*argld, twiddles, -strideT, it ); // note: `sincos` returns the sine and cosine, in that order, so we need to use a negative stride when assigning the values to `twiddles` to ensure that cosine comes before sine in the twiddles table + + // Update for the next harmonic: + fi += 1.0; + + // Resolve the index of the next sine term: + it += st; + } + // Advance `im` by the size of the current block, skipping the cosine/sine pairs we have just written: + im += M; + } + // Update the running product of factors already processed: + l1 = l2; + + // Resolve the index of the next radix factor: + fidx += strideF; + } +} + + +// EXPORTS // + +module.exports = rffti1; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/package.json new file mode 100644 index 000000000000..2dbeec69d57c --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/package.json @@ -0,0 +1,66 @@ +{ + "name": "@stdlib/fft/base/fftpack/float64/rffti", + "version": "0.0.0", + "description": "Initialize a double-precision floating-point workspace array for performing a real-valued Fourier 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", + "rffti", + "fourier", + "transform", + "twiddle", + "workspace", + "initialization", + "real", + "double", + "float64" + ], + "__stdlib__": {} +} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/test/fixtures/c/fftpack/Makefile b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/test/fixtures/c/fftpack/Makefile new file mode 100644 index 000000000000..7ce16281940d --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/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/float64/rffti/test/fixtures/c/fftpack/large.json b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/test/fixtures/c/fftpack/large.json new file mode 100644 index 000000000000..f8983602724c --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/test/fixtures/c/fftpack/large.json @@ -0,0 +1 @@ +{"lengths":[404,948,722,219,410,658,865,453,247,236],"offsets":[0,404,1352,2074,2293,2703,3361,4226,4679,4926],"twiddles":[0.99987906326014953,0.015551811920350872,0.99951628229198808,0.031099862269836916,0.9989117448426108,0.046640390387417532,0.99806559713359433,0.062169637431480525,0.99697804382562927,0.077683847289006208,0.99564934796901861,0.093179267484071571,0.99407983094005259,0.10865215008547453,0.99226987236327646,0.12409875261325934,0.99021991001966947,0.13951533894392301,0.98793043974075667,0.15489818021408466,0.98540201528868132,0.17024355572239858,0.98263524822226367,0.18554775382949326,0.97963080774908162,0.20080707285571847,0.976389420563607,0.2160178219764835,0.97291187067143747,0.23117632211496963,0.96919899919966612,0.24627890683200135,0.96525170419343564,0.26132192321286063,0.96107094039872454,0.27630173275083025,0.95665771903141972,0.29121471222725204,0.95201310753272994,0.3060572545878873,0.94713822931100022,0.32082576981536765,0.9420342634699892,0.33551668579752492,0.93670244452367502,0.35012644919139069,0.93114406209765954,0.36465152628265518,0.92536046061724153,0.37908840384037934,0.9193530389822363,0.39343358996675232,0.91312325022861884,0.40768361494168881,0.9066726011770726,0.42183503206206224,0.90000265206853003,0.43588441847537107,0.89311501618679157,0.44982837600763581,0.88601135946831489,0.46366353198532728,0.87869340009926877,0.47738654005112702,0.87116290809995045,0.49099408097332214,0.86342170489666348,0.5044828634486398,0.85547166288116383,0.51784962489832542,0.8473147049577775,0.531091132257275,0.8389528040783012,0.54420418275602722,0.83038798276479753,0.55718560469542855,0.82162231262040064,0.57003225821378267,0.81265791382825037,0.5827410360463009,0.80349695463867565,0.59530886427666596,0.79414165084475352,0.60773270308053162,0.784594265246366,0.62000954746077508,0.77485710710288991,0.63213642797432634,0.76493253157464769,0.64411041145039771,0.75482293915325704,0.65592860169993994,0.74453077508101528,0.66758814021615354,0.73405852875946009,0.67908620686588594,0.72340873314724974,0.69042002057174678,0.71258396414750702,0.70158683998477656,0,0.99951628229198808,0.031099862269836916,0.99806559713359433,0.062169637431480525,0.99564934796901861,0.093179267484071571,0.99226987236327646,0.12409875261325934,0.98793043974075667,0.15489818021408466,0.98263524822226367,0.18554775382949326,0.976389420563607,0.2160178219764835,0.96919899919966612,0.24627890683200135,0.96107094039872454,0.27630173275083025,0.95201310753272994,0.3060572545878873,0.9420342634699892,0.33551668579752492,0.93114406209765954,0.36465152628265518,0.9193530389822363,0.39343358996675232,0.9066726011770726,0.42183503206206224,0.89311501618679157,0.44982837600763581,0.87869340009926877,0.47738654005112702,0.86342170489666348,0.5044828634486398,0.8473147049577775,0.531091132257275,0.83038798276479753,0.55718560469542855,0.81265791382825037,0.5827410360463009,0.79414165084475352,0.60773270308053162,0.77485710710288991,0.63213642797432634,0.75482293915325704,0.65592860169993994,0.73405852875946009,0.67908620686588594,0.71258396414750702,0.70158683998477656,0.69042002057174678,0.72340873314724974,0.66758814021615365,0.74453077508101517,0.64411041145039782,0.76493253157464758,0.62000954746077519,0.78459426524636589,0.59530886427666607,0.80349695463867565,0.57003225821378278,0.82162231262040053,0.54420418275602733,0.83895280407830108,0.51784962489832553,0.85547166288116383,0.4909940809733222,0.87116290809995045,0.46366353198532739,0.88601135946831477,0.43588441847537118,0.90000265206853003,0.40768361494168903,0.91312325022861873,0.3790884038403794,0.92536046061724153,0.3501264491913908,0.93670244452367502,0.32082576981536781,0.94713822931100011,0.29121471222725209,0.95665771903141972,0.26132192321286074,0.96525170419343564,0.23117632211496977,0.97291187067143736,0.20080707285571867,0.97963080774908162,0.17024355572239863,0.98540201528868132,0.13951533894392312,0.99021991001966947,0.10865215008547471,0.99407983094005259,0.077683847289006236,0.99697804382562927,0.046640390387417609,0.9989117448426108,0.015551811920351015,0.99987906326014953,0,0.9989117448426108,0.046640390387417532,0.99564934796901861,0.093179267484071571,0.99021991001966947,0.13951533894392301,0.98263524822226367,0.18554775382949326,0.97291187067143747,0.23117632211496966,0.96107094039872454,0.27630173275083025,0.94713822931100022,0.32082576981536765,0.93114406209765954,0.36465152628265518,0.91312325022861884,0.40768361494168887,0.89311501618679157,0.44982837600763581,0.87116290809995045,0.49099408097332226,0.8473147049577775,0.531091132257275,0.82162231262040064,0.57003225821378267,0.79414165084475352,0.60773270308053162,0.76493253157464769,0.64411041145039771,0.73405852875946009,0.67908620686588594,0.70158683998477667,0.71258396414750691,0.66758814021615354,0.74453077508101517,0.63213642797432634,0.7748571071028898,0.59530886427666596,0.80349695463867565,0.55718560469542855,0.83038798276479753,0.51784962489832531,0.85547166288116394,0.47738654005112696,0.87869340009926888,0.43588441847537118,0.90000265206853003,0.39343358996675243,0.9193530389822363,0.3501264491913908,0.93670244452367502,0.30605725458788741,0.95201310753272983,0.26132192321286074,0.96525170419343564,0.21601782197648356,0.976389420563607,0.17024355572239863,0.98540201528868132,0.12409875261325937,0.99226987236327646,0.077683847289006236,0.99697804382562927,0.031099862269836912,0.99951628229198808,-0.015551811920350891,0.99987906326014953,-0.062169637431480559,0.99806559713359433,-0.10865215008547459,0.99407983094005259,-0.15489818021408475,0.98793043974075667,-0.20080707285571855,0.97963080774908162,-0.24627890683200143,0.96919899919966612,-0.29121471222725215,0.95665771903141972,-0.33551668579752486,0.9420342634699892,-0.37908840384037923,0.92536046061724153,-0.42183503206206219,0.9066726011770726,-0.46366353198532745,0.88601135946831477,-0.50448286344863968,0.86342170489666359,-0.54420418275602744,0.83895280407830108,-0.5827410360463009,0.81265791382825026,-0.62000954746077497,0.78459426524636611,-0.65592860169993994,0.75482293915325693,-0.69042002057174667,0.72340873314724985,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99997803599789992,0.0066277840778626584,0.99991214495643443,0.013255277010398508,0.99980232977006556,0.019882187665070172,0.99964859526275518,0.02650822493491857,0.99945094818775349,0.033133097751350697,0.99920939722730184,0.039756515096925633,0.99892395299225201,0.046378186018138409,0.99859462802159948,0.05299781963820098,0.99822143678193298,0.059615125169819885,0.9978043956667989,0.06622981192796995,0.99734352299598095,0.072841589342663451,0.99683883901469583,0.079450166971714378,0.99629036589270359,0.086055254513496854,0.99569812772333388,0.092656561819697614,0.99506215052242741,0.099253798908061602,0.9943824622271934,0.10584667597513026,0.99365909269498209,0.11243490340897211,0.99289207370197341,0.11901819180190477,0.9920814389417808,0.12559625196320806,0.99122722402397145,0.13216879493182762,0.99032946647250186,0.13873553198906824,0.9893882057240696,0.14529617467127695,0.9884034831263806,0.15185043478251442,0.98737534193633336,0.15839802440721498,0.9863038273181185,0.16493865592283408,0.98518898634123453,0.17147204201248303,0.98403086797842065,0.17799789567755023,0.98282952310350513,0.18451593025030852,0.98158500448917063,0.19102585940650776,0.98029736680463619,0.19752739717795267,0.97896666661325527,0.20402025796506468,0.97759296237003157,0.21050415654942789,0.97617631441905084,0.21697880810631806,0.97471678499083025,0.22344392821721437,0.97321443819958453,0.22989923288229347,0.97166934004041006,0.23634443853290488,0.97008155838638499,0.24277926204402778,0.96845116298558875,0.24920342074670784,0.96677822545803715,0.25561663244047467,0.96506281929253701,0.26201861540573806,0.96330501984345762,0.26840908841616334,0.96150490432742042,0.27478777075102528,0.95966255181990756,0.28115438220753958,0.95777804325178761,0.28750864311317142,0.95585146140576083,0.29385027433792088,0.95388289091272271,0.30017899730658509,0.95187241824804603,0.30649453401099475,0.94982013172778268,0.31279660702222717,0.9477261215047833,0.31908493950279243,0.94559047956473785,0.325359255218795,0.9434132997221345,0.3316192785520678,0.94119467761613851,0.3378647345122795,0.93893471070639101,0.34409534874901443,0.93663349826872788,0.35031084756382425,0.93429114139081881,0.35651095792225101,0.9319077429677266,0.36269540746582069,0.92948340769738702,0.36886392452400785,0.92701824207601025,0.37501623812616919,0.92451235439340185,0.38115207801344708,0.92196585472820669,0.38727117465064104,0.91937885494307248,0.39337325923804833,0.91675146867973689,0.39945806372327158,0.9140838113540346,0.40552532081299392,0.91137600015082787,0.4115747639847202,0.90862815401885866,0.41760612749848552,0.90584039366552316,0.4236191464085281,0.90301284155157013,0.42961355657492795,0.90014562188572067,0.43558909467521006,0.89723886061921221,0.44154549821591182,0.89429268544026597,0.4474825055441134,0.89130722576847754,0.45339985585893189,0.88828261274913189,0.45929728922297791,0.88521897924744242,0.46517454657377377,0.88211645984271458,0.47103136973513399,0.87897519082243369,0.47686750142850604,0.87579531017627854,0.48268268528427238,0.8725769575900596,0.48847666585301225,0.8693202744395826,0.49424918861672285,0.86602540378443871,0.49999999999999994,0.86269249036171991,0.50572884738117707,0.85932168057966107,0.51143547910342224,0.85591312251120844,0.51711964448579317,0.85246696588751514,0.5227810938342492,0.84898336209136394,0.52841957845261944,0.84546246415051685,0.53403485065352807,0.84190442673099353,0.53962666376927415,0.83830940613027649,0.54519477216266765,0.83467756027044604,0.5507389312378197,0.83100904869124237,0.55625889745088708,0.82730403254305729,0.56175442832077083,0.82356267457985577,0.56722528243976789,0.81978513915202633,0.57267121948417554,0.81597159219916104,0.5780920002248483,0.81212220124276635,0.58348738653770715,0.8082371353789044,0.58885714141419954,0.80431656527076478,0.59420102897171057,0.80036066314116772,0.59951881446392508,0.79636960276499857,0.60481026429113971,0.79234355946157431,0.61007514601052437,0.78828271008694206,0.61531322834633262,0.78418723302611015,0.62052428120006164,0.78005730818521213,0.62570807566055997,0.77589311698360386,0.6308643840140824,0.77169484234589381,0.63599297975429425,0.767462668693908,0.64109363759222016,0.76319678193858831,0.64616613346614116,0.75889736947182607,0.65121024455143728,0.75456462015823011,0.65622574927037558,0.75019872432683066,0.66121242730184371,0.74579987376271795,0.66617005959102815,0.74136826169861814,0.67109842835903677,0.73690408280640463,0.6759973171124658,0.73240753318854646,0.68086651065290926,0.72787881036949409,0.68570579508641316,0.72331811328700268,0.69051495783287042,0.71872564228339264,0.69529378763535965,0.71410159909674964,0.70004207456942535,0.70944618685206229,0.70475961005229915,0,0.99991214495643443,0.013255277010398508,0.99964859526275518,0.02650822493491857,0.99920939722730184,0.039756515096925633,0.99859462802159948,0.05299781963820098,0.9978043956667989,0.06622981192796995,0.99683883901469583,0.079450166971714378,0.99569812772333388,0.092656561819697614,0.9943824622271934,0.10584667597513026,0.99289207370197341,0.11901819180190477,0.99122722402397145,0.13216879493182762,0.9893882057240696,0.14529617467127695,0.98737534193633336,0.15839802440721498,0.98518898634123453,0.17147204201248303,0.98282952310350513,0.18451593025030852,0.98029736680463619,0.19752739717795267,0.97759296237003157,0.21050415654942789,0.97471678499083025,0.22344392821721437,0.97166934004041006,0.23634443853290488,0.96845116298558875,0.24920342074670784,0.96506281929253701,0.26201861540573806,0.96150490432742042,0.27478777075102528,0.95777804325178761,0.28750864311317142,0.95388289091272271,0.30017899730658509,0.94982013172778268,0.31279660702222717,0.94559047956473785,0.325359255218795,0.94119467761613851,0.3378647345122795,0.93663349826872788,0.35031084756382425,0.9319077429677266,0.36269540746582069,0.92701824207601025,0.37501623812616919,0.92196585472820669,0.38727117465064104,0.91675146867973689,0.39945806372327158,0.91137600015082787,0.4115747639847202,0.90584039366552316,0.4236191464085281,0.90014562188572067,0.43558909467521006,0.89429268544026597,0.4474825055441134,0.88828261274913189,0.45929728922297791,0.88211645984271458,0.47103136973513399,0.87579531017627854,0.48268268528427238,0.8693202744395826,0.49424918861672285,0.86269249036171991,0.50572884738117707,0.85591312251120844,0.51711964448579317,0.84898336209136394,0.52841957845261944,0.84190442673099353,0.53962666376927415,0.83467756027044604,0.5507389312378197,0.82730403254305729,0.56175442832077083,0.81978513915202633,0.57267121948417554,0.81212220124276635,0.58348738653770715,0.80431656527076478,0.59420102897171057,0.79636960276499857,0.60481026429113971,0.78828271008694206,0.61531322834633262,0.78005730818521213,0.62570807566055997,0.77169484234589381,0.63599297975429425,0.76319678193858831,0.64616613346614116,0.75456462015823011,0.65622574927037558,0.74579987376271795,0.66617005959102815,0.73690408280640463,0.6759973171124658,0.72787881036949409,0.68570579508641316,0.71872564228339264,0.69529378763535965,0.70944618685206229,0.70475961005229915,0.70004207456942535,0.71410159909674975,0.69051495783287042,0.72331811328700268,0.68086651065290937,0.73240753318854646,0.67109842835903677,0.74136826169861825,0.66121242730184371,0.75019872432683066,0.65121024455143739,0.75889736947182607,0.64109363759222004,0.767462668693908,0.6308643840140824,0.77589311698360386,0.62052428120006176,0.78418723302611015,0.61007514601052448,0.79234355946157431,0.59951881446392496,0.80036066314116783,0.58885714141419954,0.8082371353789044,0.57809200022484841,0.81597159219916104,0.567225282439768,0.82356267457985577,0.55625889745088697,0.83100904869124237,0.54519477216266765,0.8383094061302766,0.53403485065352807,0.84546246415051685,0.5227810938342492,0.85246696588751514,0.51143547910342224,0.85932168057966096,0.50000000000000011,0.8660254037844386,0.48847666585301219,0.8725769575900596,0.47686750142850598,0.87897519082243381,0.46517454657377377,0.88521897924744242,0.45339985585893194,0.89130722576847754,0.44154549821591188,0.89723886061921221,0.429613556574928,0.90301284155157013,0.41760612749848564,0.90862815401885855,0.40552532081299381,0.91408381135403471,0.39337325923804828,0.91937885494307259,0.38115207801344703,0.92451235439340196,0.36886392452400785,0.92948340769738702,0.35651095792225101,0.93429114139081881,0.34409534874901448,0.93893471070639101,0.33161927855206785,0.9434132997221345,0.31908493950279254,0.9477261215047833,0.30649453401099475,0.95187241824804614,0.29385027433792088,0.95585146140576083,0.28115438220753958,0.95966255181990756,0.26840908841616334,0.96330501984345762,0.25561663244047472,0.96677822545803715,0.24277926204402783,0.97008155838638499,0.22989923288229355,0.97321443819958453,0.21697880810631798,0.97617631441905084,0.20402025796506462,0.97896666661325527,0.19102585940650774,0.98158500448917063,0.17799789567755026,0.98403086797842065,0.1649386559228341,0.9863038273181185,0.15185043478251448,0.9884034831263806,0.13873553198906832,0.99032946647250186,0.12559625196320817,0.9920814389417808,0.11243490340897204,0.9936590926949822,0.099253798908061547,0.99506215052242741,0.08605525451349684,0.99629036589270359,0.072841589342663465,0.99734352299598095,0.059615125169819927,0.99822143678193298,0.046378186018138472,0.99892395299225201,0.033133097751350794,0.99945094818775349,0.019882187665070074,0.99980232977006556,0.0066277840778625943,0.99997803599789992,0,0.99980232977006556,0.019882187665070172,0.99920939722730184,0.039756515096925633,0.99822143678193298,0.059615125169819892,0.99683883901469583,0.079450166971714378,0.99506215052242741,0.099253798908061602,0.99289207370197341,0.11901819180190479,0.99032946647250186,0.13873553198906824,0.98737534193633336,0.15839802440721498,0.98403086797842065,0.17799789567755026,0.98029736680463619,0.19752739717795267,0.97617631441905084,0.21697880810631806,0.97166934004041006,0.2363444385329049,0.96677822545803715,0.25561663244047472,0.96150490432742042,0.27478777075102528,0.95585146140576083,0.29385027433792088,0.94982013172778268,0.31279660702222717,0.9434132997221345,0.3316192785520678,0.93663349826872788,0.3503108475638243,0.92948340769738702,0.36886392452400785,0.92196585472820669,0.38727117465064104,0.9140838113540346,0.40552532081299392,0.90584039366552316,0.4236191464085281,0.89723886061921221,0.44154549821591188,0.88828261274913189,0.45929728922297797,0.87897519082243369,0.47686750142850604,0.86932027443958249,0.49424918861672296,0.85932168057966107,0.51143547910342224,0.84898336209136394,0.52841957845261944,0.83830940613027649,0.54519477216266765,0.82730403254305729,0.56175442832077083,0.81597159219916093,0.57809200022484841,0.80431656527076478,0.59420102897171057,0.79234355946157431,0.61007514601052437,0.78005730818521213,0.62570807566055997,0.767462668693908,0.64109363759222016,0.75456462015823011,0.65622574927037569,0.74136826169861814,0.67109842835903677,0.72787881036949409,0.68570579508641316,0.71410159909674964,0.70004207456942535,0.70004207456942535,0.71410159909674975,0.68570579508641316,0.72787881036949409,0.67109842835903677,0.74136826169861825,0.65622574927037558,0.75456462015823011,0.64109363759222004,0.767462668693908,0.62570807566055986,0.78005730818521213,0.61007514601052437,0.79234355946157431,0.59420102897171045,0.80431656527076478,0.5780920002248483,0.81597159219916104,0.56175442832077083,0.82730403254305729,0.54519477216266765,0.8383094061302766,0.52841957845261944,0.84898336209136394,0.51143547910342202,0.85932168057966107,0.4942491886167229,0.86932027443958249,0.47686750142850598,0.87897519082243381,0.4592972892229778,0.88828261274913189,0.44154549821591188,0.89723886061921221,0.42361914640852805,0.90584039366552327,0.40552532081299381,0.91408381135403471,0.38727117465064109,0.92196585472820669,0.36886392452400785,0.92948340769738702,0.35031084756382425,0.93663349826872788,0.33161927855206769,0.94341329972213461,0.31279660702222717,0.94982013172778268,0.29385027433792088,0.95585146140576083,0.27478777075102523,0.96150490432742053,0.25561663244047472,0.96677822545803715,0.23634443853290488,0.97166934004041006,0.21697880810631798,0.97617631441905084,0.19752739717795251,0.98029736680463619,0.17799789567755026,0.98403086797842065,0.1583980244072149,0.98737534193633347,0.1387355319890681,0.99032946647250186,0.1190181918019048,0.99289207370197341,0.099253798908061547,0.99506215052242741,0.079450166971714253,0.99683883901469583,0.059615125169819927,0.99822143678193298,0.039756515096925606,0.99920939722730184,0.019882187665070074,0.99980232977006556,-1.6081226496766366e-16,1,-0.019882187665070175,0.99980232977006556,-0.039756515096925703,0.99920939722730184,-0.059615125169820031,0.99822143678193298,-0.07945016697171435,0.99683883901469583,-0.099253798908061644,0.99506215052242741,-0.1190181918019049,0.99289207370197341,-0.13873553198906818,0.99032946647250186,-0.15839802440721501,0.98737534193633336,-0.17799789567755034,0.98403086797842065,-0.19752739717795284,0.98029736680463608,-0.21697880810631806,0.97617631441905084,-0.23634443853290496,0.97166934004040995,-0.25561663244047483,0.96677822545803704,-0.27478777075102528,0.96150490432742042,-0.29385027433792094,0.95585146140576083,-0.31279660702222728,0.94982013172778257,-0.33161927855206796,0.9434132997221345,-0.3503108475638243,0.93663349826872788,-0.3688639245240079,0.92948340769738702,-0.3872711746506412,0.92196585472820658,-0.40552532081299392,0.9140838113540346,-0.42361914640852816,0.90584039366552316,-0.44154549821591194,0.89723886061921221,-0.45929728922297808,0.88828261274913178,-0.47686750142850626,0.87897519082243358,-0.49424918861672279,0.8693202744395826,-0.51143547910342213,0.85932168057966107,-0.52841957845261955,0.84898336209136382,-0.54519477216266776,0.83830940613027649,-0.56175442832077105,0.82730403254305718,-0.57809200022484863,0.81597159219916082,-0.59420102897171079,0.80431656527076467,-0.61007514601052437,0.79234355946157442,-0.62570807566055997,0.78005730818521213,-0.64109363759222016,0.76746266869390789,-0.65622574927037569,0.75456462015823,-0.67109842835903688,0.74136826169861803,-0.68570579508641338,0.72787881036949398,-0.70004207456942524,0.71410159909674986,0,0.99964859526275518,0.02650822493491857,0.99859462802159948,0.05299781963820098,0.99683883901469583,0.079450166971714378,0.9943824622271934,0.10584667597513026,0.99122722402397145,0.13216879493182762,0.98737534193633336,0.15839802440721498,0.98282952310350513,0.18451593025030852,0.97759296237003157,0.21050415654942789,0.97166934004041006,0.23634443853290488,0.96506281929253701,0.26201861540573806,0.95777804325178761,0.28750864311317142,0.94982013172778268,0.31279660702222717,0.94119467761613851,0.3378647345122795,0.9319077429677266,0.36269540746582069,0.92196585472820669,0.38727117465064104,0.91137600015082787,0.4115747639847202,0.90014562188572067,0.43558909467521006,0.88828261274913189,0.45929728922297791,0.87579531017627854,0.48268268528427238,0.86269249036171991,0.50572884738117707,0.84898336209136394,0.52841957845261944,0.83467756027044604,0.5507389312378197,0.81978513915202633,0.57267121948417554,0.80431656527076478,0.59420102897171057,0.78828271008694206,0.61531322834633262,0.77169484234589381,0.63599297975429425,0.75456462015823011,0.65622574927037558,0.73690408280640463,0.6759973171124658,0.71872564228339264,0.69529378763535965,0.70004207456942535,0.71410159909674975,0.68086651065290937,0.73240753318854646,0.66121242730184371,0.75019872432683066,0.64109363759222004,0.767462668693908,0.62052428120006176,0.78418723302611015,0.59951881446392496,0.80036066314116783,0.57809200022484841,0.81597159219916104,0.55625889745088697,0.83100904869124237,0.53403485065352807,0.84546246415051685,0.51143547910342224,0.85932168057966096,0,0.99859462802159948,0.05299781963820098,0.9943824622271934,0.10584667597513026,0.98737534193633336,0.15839802440721498,0.97759296237003157,0.21050415654942789,0.96506281929253701,0.26201861540573806,0.94982013172778268,0.31279660702222717,0.9319077429677266,0.36269540746582069,0.91137600015082787,0.4115747639847202,0.88828261274913189,0.45929728922297791,0.86269249036171991,0.50572884738117707,0.83467756027044604,0.5507389312378197,0.80431656527076478,0.59420102897171057,0.77169484234589381,0.63599297975429425,0.73690408280640463,0.6759973171124658,0.70004207456942535,0.71410159909674975,0.66121242730184371,0.75019872432683066,0.62052428120006176,0.78418723302611015,0.57809200022484841,0.81597159219916104,0.53403485065352807,0.84546246415051685,0.48847666585301219,0.8725769575900596,0.44154549821591188,0.89723886061921221,0.39337325923804828,0.91937885494307259,0.34409534874901448,0.93893471070639101,0.29385027433792088,0.95585146140576083,0.24277926204402783,0.97008155838638499,0.19102585940650774,0.98158500448917063,0.13873553198906832,0.99032946647250186,0.08605525451349684,0.99629036589270359,0.033133097751350794,0.99945094818775349,-0.019882187665070175,0.99980232977006556,-0.07284158934266334,0.99734352299598095,-0.12559625196320806,0.9920814389417808,-0.17799789567755034,0.98403086797842065,-0.22989923288229344,0.97321443819958453,-0.28115438220753969,0.95966255181990756,-0.33161927855206774,0.94341329972213461,-0.38115207801344714,0.92451235439340185,-0.42961355657492789,0.90301284155157024,-0.47686750142850587,0.87897519082243381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99996213372321685,0.008702362880934544,0.99984853776057703,0.017404066709706054,0.99965922071499314,0.026104452484063196,0.99939419692392817,0.03480286130157427,0.99905348645831082,0.043498634409527559,0.99863711512101461,0.052191113254820364,0.99814511444490406,0.060879639533832908,0.99757752169044678,0.069563555242283345,0.99693437984289146,0.078242202725060134,0.9962157376090125,0.086914924726027909,0.99542164941342148,0.095581064437803148,0.99455217539444507,0.10423996555149591,0.99360738139957094,0.11289097230641378,0.99258733898046114,0.12153342953972431,0.99149212538753262,0.1301666827360721,0.99032182356410758,0.13879007807714702,0.98907652214013153,0.1474029624911995,0.98775631542546116,0.15600468370249923,0.98636130340272232,0.16459459028073392,0.98489159171973784,0.1731720316903434,0.98334729168152624,0.18173635833978666,0.98172852024187307,0.19028692163073704,0.98003539999447298,0.19882307400720203,0.9782680591636459,0.20734416900456451,0.97642663159462595,0.21584956129854119,0.97451125674342509,0.22433860675405454,0.9725220796662718,0.23281066247401491,0.97045925100862573,0.24126508684800863,0.96832292699376865,0.24970123960088891,0.96611326941097353,0.25811848184126557,0.96383044560325148,0.26651617610988965,0.9614746284546789,0.27489368642793022,0.95904599637730414,0.28325037834513833,0.95654473329763612,0.2915856189878957,0.95397102864271488,0.29989877710714391,0.95132507732576632,0.30818922312619029,0.94860707973144009,0.31645632918838773,0.94581724170063464,0.32469946920468351,0.9429557745149082,0.33291801890103473,0.94002289488047741,0.34111135586568636,0.93701882491180655,0.34927885959630778,0.93394379211478529,0.35741991154698516,0.93079802936949974,0.36553389517506568,0.92758177491259552,0.37362019598784951,0.92429527231923547,0.38167820158912713,0.92093877048465334,0.3897073017255579,0.91751252360530411,0.39770688833288542,0.91401679115961321,0.40567635558198861,0.91045183788832518,0.41361509992476209,0.90681793377445463,0.42152252013982461,0.90311535402283949,0.42939801737805122,0.89934437903929931,0.43724099520792542,0.89550529440939886,0.44505085966070868,0.89159839087682058,0.4528270192754229,0.8876239643213456,0.46056888514364347,0.88358231573644574,0.468275870954099,0.87947375120648907,0.47594739303707362,0.87529858188355891,0.4835828704086102,0.87105712396388979,0.49118172481450978,0.86674969866392049,0.49874338077412411,0.86237663219596861,0.50626726562393798,0.85793825574352456,0.51375280956093916,0.85343490543617073,0.52119944568577037,0.84886692232412553,0.52860661004566245,0.84423465235241468,0.53597374167714362,0.83953844633467201,0.54330028264852315,0.83477865992657119,0.5505856781021442,0.82995565359889145,0.55782937629640561,0.82506979261021773,0.56503082864754584,0.82012144697927924,0.57218948977118866,0.81511099145692645,0.57930481752364738,0.81003880549775065,0.58637627304298168,0.80490527323134642,0.59340332078980773,0.79971078343322155,0.6003854285878556,0.7944557294953527,0.60732206766427244,0.78914050939639357,0.61421271268966782,0.78376552567153523,0.62105684181789833,0.77833118538202062,0.62785393672558809,0.77283790008431652,0.63460348265138289,0.76728608579894619,0.64130496843493445,0.76167616297898233,0.64795788655561148,0.75600855647820542,0.65456173317093636,0.75028369551892848,0.66111600815474125,0.74450201365949065,0.66762021513504488,0.73866394876142294,0.67407386153164395,0.73276994295628817,0.68047645859341688,0.72682044261219669,0.68682752143533854,0.72081589830000181,0.69312656907520243,0.7147567647591776,0.6993731244700454,0.70864350086337924,0.70556671455227671,0.70247656958569227,0.71170687026550339,0.69625643796356995,0.71779312660005423,0.68998357706346369,0.72382502262819515,0.68365846194514757,0.72980210153903724,0.67728157162574099,0.7357239106731317,0.67085338904343184,0.74159000155675092,0.66437440102090173,0.74739992993585302,0.65784509822845816,0.75315325580972581,0.65126597514687457,0.75884954346430922,0.64463753002994229,0.76448836150519339,0.63796026486673607,0.77006928289028898,0.63123468534359761,0.77559188496216835,0.62446130080583839,0.78105574948007406,0.61764062421916588,0.78646046265159397,0.61077317213083471,0.79180561516399828,0.60385946463052842,0.79709080221523798,0.59690002531097031,0.80231562354460173,0.58989538122827156,0.80747968346302812,0.58284606286201546,0.81258259088307294,0.57575260407508266,0.81762395934852661,0.56861554207322074,0.82260340706368185,0.56143541736436009,0.82752055692224757,0.55421277371767985,0.83237503653590894,0.54694815812242681,0.83716647826252866,0.53964212074649076,0.84189451923398928,0.53229521489473863,0.84655880138367468,0.52490799696711132,0.85115897147358732,0.51748102641648641,0.85569468112109925,0.5100148657063085,0.86016558682533684,0.50251008026799404,0.86457134999319407,0.49496723845810808,0.86891163696497609,0.48738691151532193,0.87318611903966714,0.47976967351715194,0.87739447249982461,0.4721161013364828,0.88153637863609458,0.4644267745978794,0.88561152377134889,0.45670227563369131,0.88961959928444012,0.44894318943994993,0.89356030163357481,0.44115010363206597,0.89743333237930134,0.43332360840032791,0.90123839820711105,0.42546429646520512,0.9049752109496525,0.41757276303245966,0.90864348760855451,0.4096496057480698,0.91224295037585845,0.40169542465296937,0.91577332665505751,0.393710822137604,0.91923434908174095,0.38569640289631146,0.92262575554384252,0.37765277388152624,0.92594728920149061,0.3695805442578135,0.92919869850645953,0.36148032535573549,0.93237973722122014,0.35335273062555445,0.93549016443758737,0.34519837559077354,0.93852974459496552,0.33701787780152215,0.94149824749818745,0.32881185678778729,0.94439544833494815,0.32058093401249499,0.94722112769282985,0.31232573282444526,0.94997507157591943,0.304046878411104,0.95265707142101419,0.29574499775125701,0.95526692411341707,0.28742071956752585,0.95780443200231935,0.27907467427875393,0.9602694029157689,0.27070749395226318,0.96266165017522398,0.26231981225598588,0.96498099260969095,0.25391226441047515,0.96722725456944447,0.24548548714079901,0.96940026593933049,0.23704011862831822,0.97149986215164885,0.22857679846235601,0.97352588419861719,0.22009616759176023,0.97547817864441222,0.21159886827636254,0.97735659763679017,0.20308554403833831,0.97916099891828423,0.19455683961347187,0.98089124583697751,0.18601340090232768,0.98254720735685264,0.1774558749213356,0.98412875806771505,0.16888490975379036,0.98563577819469095,0.16030115450077065,0.98706815360729783,0.15170525923198094,0.98842577582808788,0.14309787493651993,0.98970854204086367,0.13447965347358026,0.99091635509846432,0.12585124752308033,0.99204912353012253,0.11721331053623596,0.99310676154839261,0.10856649668607271,0.99408918905564658,0.099911460817883671,0.99499633165014056,0.091248858399636118,0.99582812063164949,0.082579345472332172,0.99658449300666985,0.07390357860032376,0.99726539149319016,0.065222214821590255,0.99787076452502921,0.056535911597979056,0.99840056625574158,0.047845326765414337,0.99885475656208933,0.039151118484077228,0.99923330104708064,0.030453945188562568,0.99953617104257519,0.021754465538012604,0.99976334361145458,0.013053338366235975,0.9999148015493603,0.0043512226318123065,0.99999053338599586,0,0.99984853776057703,0.017404066709706054,0.99939419692392817,0.03480286130157427,0.99863711512101461,0.052191113254820364,0.99757752169044678,0.069563555242283345,0.9962157376090125,0.086914924726027909,0.99455217539444507,0.10423996555149591,0.99258733898046114,0.12153342953972431,0.99032182356410758,0.13879007807714702,0.98775631542546116,0.15600468370249923,0,0.99939419692392817,0.03480286130157427,0.99757752169044678,0.069563555242283345,0.99455217539444507,0.10423996555149591,0.99032182356410758,0.13879007807714702,0.98489159171973784,0.1731720316903434,0.9782680591636459,0.20734416900456451,0.97045925100862573,0.24126508684800863,0.9614746284546789,0.27489368642793022,0.95132507732576632,0.30818922312619029,0,0.99863711512101461,0.052191113254820364,0.99455217539444507,0.10423996555149591,0.98775631542546116,0.15600468370249923,0.9782680591636459,0.20734416900456451,0.96611326941097353,0.25811848184126557,0.95132507732576632,0.30818922312619029,0.93394379211478529,0.35741991154698516,0.91401679115961321,0.40567635558198861,0.89159839087682058,0.4528270192754229,0,0.99757752169044678,0.069563555242283345,0.99032182356410758,0.13879007807714702,0.9782680591636459,0.20734416900456451,0.9614746284546789,0.27489368642793022,0.94002289488047741,0.34111135586568636,0.91401679115961321,0.40567635558198861,0.88358231573644574,0.468275870954099,0.84886692232412553,0.52860661004566245,0.81003880549775065,0.58637627304298168,0,0.9962157376090125,0.086914924726027909,0.98489159171973784,0.1731720316903434,0.96611326941097353,0.25811848184126557,0.94002289488047741,0.34111135586568636,0.90681793377445463,0.42152252013982461,0.86674969866392049,0.49874338077412411,0.82012144697927924,0.57218948977118866,0.76728608579894619,0.64130496843493445,0.70864350086337924,0.70556671455227671,0,0.99455217539444507,0.10423996555149591,0.9782680591636459,0.20734416900456451,0.95132507732576632,0.30818922312619029,0.91401679115961321,0.40567635558198861,0.86674969866392049,0.49874338077412411,0.81003880549775065,0.58637627304298168,0.74450201365949065,0.66762021513504488,0.67085338904343184,0.74159000155675092,0.58989538122827156,0.80747968346302812,0,0.99258733898046114,0.12153342953972431,0.97045925100862573,0.24126508684800863,0.93394379211478529,0.35741991154698516,0.88358231573644574,0.468275870954099,0.82012144697927924,0.57218948977118866,0.74450201365949065,0.66762021513504488,0.65784509822845816,0.75315325580972581,0.56143541736436009,0.82752055692224757,0.45670227563369131,0.88961959928444012,0,0.99032182356410758,0.13879007807714702,0.9614746284546789,0.27489368642793022,0.91401679115961321,0.40567635558198861,0.84886692232412553,0.52860661004566245,0.76728608579894619,0.64130496843493445,0.67085338904343184,0.74159000155675092,0.56143541736436009,0.82752055692224757,0.44115010363206597,0.89743333237930134,0.31232573282444526,0.94997507157591943,0,0.98775631542546116,0.15600468370249923,0.95132507732576632,0.30818922312619029,0.89159839087682069,0.45282701927542285,0.81003880549775065,0.58637627304298168,0.70864350086337924,0.70556671455227671,0.58989538122827168,0.80747968346302812,0.45670227563369153,0.88961959928444001,0.31232573282444526,0.94997507157591943,0.16030115450077065,0.98706815360729783,0,0.98489159171973784,0.1731720316903434,0.94002289488047741,0.34111135586568636,0.86674969866392049,0.49874338077412411,0.76728608579894619,0.64130496843493445,0.64463753002994229,0.76448836150519339,0.50251008026799404,0.86457134999319407,0.34519837559077354,0.93852974459496552,0.1774558749213356,0.98412875806771505,0.0043512226318123065,0.99999053338599586,0,0.98172852024187307,0.19028692163073704,0.92758177491259552,0.37362019598784951,0.83953844633467201,0.54330028264852315,0.72081589830000181,0.69312656907520243,0.57575260407508255,0.81762395934852672,0.4096496057480698,0.91224295037585845,0.22857679846235601,0.97352588419861719,0.039151118484077228,0.99923330104708064,-0.15170525923198125,0.98842577582808788,0,0.9782680591636459,0.20734416900456451,0.91401679115961321,0.40567635558198861,0.81003880549775065,0.58637627304298168,0.67085338904343184,0.74159000155675092,0.50251008026799404,0.86457134999319407,0.31232573282444526,0.94997507157591943,0.10856649668607271,0.99408918905564658,-0.099911460817883768,0.99499633165014056,-0.30404687841110434,0.95265707142101408,0,0.97451125674342509,0.22433860675405454,0.89934437903929931,0.43724099520792542,0.77833118538202062,0.62785393672558809,0.61764062421916588,0.78646046265159397,0.42546429646520512,0.9049752109496525,0.21159886827636254,0.97735659763679017,-0.013053338366236076,0.9999148015493603,-0.23704011862831831,0.97149986215164885,-0.44894318943994999,0.89356030163357481,0,0.97045925100862573,0.24126508684800863,0.88358231573644574,0.468275870954099,0.74450201365949065,0.66762021513504488,0.56143541736436009,0.82752055692224757,0.34519837559077354,0.93852974459496552,0.10856649668607271,0.99408918905564658,-0.1344796534735806,0.99091635509846421,-0.36958054425781361,0.92919869850645953,-0.58284606286201568,0.81258259088307283,0,0.96611326941097353,0.25811848184126557,0.86674969866392049,0.49874338077412411,0.70864350086337924,0.70556671455227671,0.50251008026799404,0.86457134999319407,0.26231981225598566,0.96498099260969095,0.0043512226318123065,0.99999053338599586,-0.25391226441047549,0.96722725456944436,-0.49496723845810836,0.86891163696497598,-0.70247656958569238,0.71170687026550328,0,0.9614746284546789,0.27489368642793022,0.84886692232412553,0.52860661004566245,0.67085338904343184,0.74159000155675092,0.44115010363206597,0.89743333237930134,0.1774558749213356,0.98412875806771505,-0.099911460817883768,0.99499633165014056,-0.36958054425781361,0.92919869850645953,-0.61077317213083493,0.79180561516399817,-0.80490527323134642,0.59340332078980773,0,0.95654473329763612,0.2915856189878957,0.82995565359889145,0.55782937629640561,0.63123468534359761,0.77559188496216835,0.37765277388152624,0.92594728920149061,0.09124885839963634,0.99582812063164949,-0.20308554403833864,0.97916099891828412,-0.47976967351715183,0.87739447249982461,-0.7147567647591776,0.6993731244700454,-0.8876239643213456,0.4605688851436433,0,0.95132507732576632,0.30818922312619029,0.81003880549775065,0.58637627304298168,0.58989538122827168,0.80747968346302812,0.31232573282444526,0.94997507157591943,0.0043512226318123065,0.99999053338599586,-0.30404687841110412,0.95265707142101419,-0.58284606286201535,0.81258259088307305,-0.80490527323134642,0.59340332078980773,-0.94860707973144009,0.31645632918838767,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99958846031494009,0.028686408022048568,0.99835417998958509,0.057349204853451345,0.99629817493460782,0.085964798737446474,0.99342213740535379,0.11450963676904431,0.98972843460898097,0.1429602242809376,0.98522010675606064,0.17129314418147759,0.9799008645582421,0.19948507622879882,0.97377508617404307,0.22751281622522937,0.9668478136052775,0.25535329511618704,0.95912474854708807,0.28298359797784245,0.95061224769499808,0.31038098287792004,0.94131731751284708,0.3375228995941133,0.9312476084659147,0.36438700817470759,0.92041140872398064,0.39095119732613359,0.90881763733950294,0.41719360261231686,0.89647583690652999,0.44309262445084391,0.88339616570638846,0.46862694589113318,0.86958938934661101,0.49377555015997726,0.8550668718999872,0.5185177379600151,0.83984056655102968,0.54283314450689679,0.82392300575755417,0.56670175629111763,0.80732729093547262,0.59010392755072461,0.79006708167528727,0.61302039644133788,0.77215658449916424,0.63543230089017744,0.75361054116783777,0.65732119412104673,0.73444421654697112,0.67866905983749237,0.71467338604296093,0.69945832705164701,0.6943143226185251,0.71967188454654718,0.67338378339876315,0.7392930949600216,0.65189899587871247,0.75830580847856255,0.62987764374375232,0.77669437612990266,0.60733785231452686,0.79444366266336219,0.58429817362836833,0.81153905900736112,0.56077757116949789,0.8279664942938445,0.5367954042605716,0.84371244743972429,0.51237141212842352,0.85876395827580299,0,0.99835417998958509,0.057349204853451345,0.99342213740535379,0.11450963676904431,0.98522010675606064,0.17129314418147759,0.97377508617404307,0.22751281622522937,0.95912474854708807,0.28298359797784245,0.94131731751284708,0.3375228995941133,0.92041140872398064,0.39095119732613359,0.89647583690652999,0.44309262445084391,0.86958938934661101,0.49377555015997726,0.83984056655102968,0.54283314450689679,0.80732729093547262,0.59010392755072461,0.77215658449916424,0.63543230089017744,0.73444421654697112,0.67866905983749237,0.6943143226185251,0.71967188454654718,0.65189899587871247,0.75830580847856255,0.60733785231452686,0.79444366266336219,0.56077757116949789,0.8279664942938445,0.51237141212842352,0.85876395827580299,0.46227871084165822,0.88673468044425474,0.41066435444950905,0.91178659125069828,0.35769823883312546,0.93383722882292519,0.30355470937841844,0.95281401039981772,0.24841198709381002,0.96865447124767079,0.19245158197082998,0.98130647027160933,0.13585769551856253,0.99072836164530265,0.078816614438588464,0.99688913189403305,0.021516097436222254,0.99976850197989087,-0.035855242813557314,0.99935699405306655,-0.09310856051113521,0.99565596264952094,-0.15005539834465281,0.98867759023234036,-0.20650830782363735,0.97844484709145352,-0.26228146629195598,0.96499141573370562,-0.31719128858910611,0.94836158001217152,-0.37105703134647755,0.92861007935965201,-0.42370138792945899,0.90580192860616615,-0.47495107206705034,0.88001220397353552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99988257690368154,0.015324242377796345,0.99953033519109313,0.030644885915615216,0.99894335758485986,0.045958332618653008,0.9981217819344379,0.061260986182255374,0.99706580118374044,0.076549252836495635,0.99577566332582645,0.091819542190158046,0.99425167134465986,0.10706826807392743,0.99249418314395499,0.12229184938258741,0.99050361146312449,0.13748671091602935,0.98828042378034853,0.15264928421887447,0.98582514220279016,0.16777600841851203,0.98313834334397954,0.18286333106135669,0.98022065818839921,0.19790770894712867,0.97707277194329922,0.21290560896096089,0.97369542387777908,0.22785350890313755,0.97008940714917313,0.24274789831626936,0.96625556861678075,0.25758527930971092,0.96219480864298434,0.27236216738102731,0.95790808088180313,0.28707509223431588,0.95339639205493054,0.30172059859519229,0.94866080171531009,0.31629524702224848,0.94370242199830279,0.3307956147147923,0.93852241736050679,0.34521829631667933,0.93312200430628933,0.35955990471604782,0.92750245110209473,0.37381707184076873,0.92166507747859727,0.38798644944942523,0.9156112543207674,0.40206470991763371,0.90934240334592487,0.41604854701952437,0.90285999676985307,0.42993467670419533,0.8961655569610556,0.44371983786695968,0.88926065608323346,0.45740079311520343,0.88214691572606829,0.47097432952867502,0.87482600652439835,0.48443725941402699,0.86729964776587642,0.49778642105343401,0.8595696069872012,0.51101867944711032,0.85163769955901858,0.524130927049552,0.84350578825958833,0.53712008449933291,0.83517578283731808,0.54998310134228023,0.82664963956226589,0.56271695674786271,0.81792936076671774,0.57531866021862055,0.80901699437494745,0.58778525229247314,0.79991463342226965,0.6001138052377365,0.79062441556349794,0.61230142374069108,0.78114852257092537,0.62434524558553384,0.77148917982194298,0.6362424423265598,0.76164865577641871,0.64799021995241135,0.75162926144395836,0.65958581954224105,0.74143334984117326,0.67102651791363388,0.73106331543908376,0.68230962826213626,0.72052159360078705,0.69343250079224172,0.70981066000952031,0.70439252333968538,0.69893303008725727,0.71518712198490064,0.68789125840396981,0.72581376165749489,0.67668793807769811,0.73626994673160018,0.66532570016556536,0.74655322161196269,0.65380721304588529,0.7566611713106286,0.64213518179150264,0.76659142201409602,0.63031234753451815,0.77634164164079511,0.61834148682254297,0.78590954038876948,0.60622541096663807,0.7952928712734264,0.59396696538108773,0.80448943065523348,0.58156902891516571,0.81349705875723433,0.56903451317704723,0.82231364017226471,0.55636636185003008,0.83093710435974721,0.54356755000122126,0.83936542613194987,0.53064108338285343,0.84759662612959441,0.51758999772639658,0.85562877128670045,0.50441735802962662,0.86345997528455909,0.49112625783682323,0.8710883989947279,0.47771981851226297,0.87851225091094232,0.4642011885071779,0.88572978756984544,0.45057354262035432,0.8927393139604326,0.4368400812525432,0.89953918392211885,0.42300402965485884,0.90612780053133302,0.40906863717134001,0.91250361647654998,0.39503717647585423,0.91866513442166986,0.38091294280352284,0.9246109073576626,0.36669925317684809,0.93033953894239163,0.35239944562672187,0.93584968382854039,0.33801687840850292,0.94114004797956152,0.32355492921334245,0.94620938897357654,0.30901699437494745,0.95105651629515353,0.2944064880719634,0.95568029161489609,0.27972684152616806,0.96007962905677469,0.26498150219666167,0.96425349545314099,0.25017393297024537,0.96820091058736313,0.23530761134817402,0.97192094742402624,0.22038602862947904,0.97541273232664261,0.20541268909104979,0.97867544526282246,0.19039110916466842,0.98170831999685493,0.17532481661118779,0.98451064426965607,0.16021734969205123,0.98708175996603997,0.14507225633834489,0.98942106326927448,0.12989309331758045,0.99152800480288517,0.11468342539840053,0.99340208975967503,0.099446824513407237,0.99504287801792723,0.08418686892030712,0.99644998424476627,0.06890714236157082,0.99762307798665228,0.053611233222805629,0.9985618837469864,0.038302733690035493,0.99926618105081,0.022985238906090666,0.99973580449658295,0.0076623461263016649,0.99997064379502698,0,0.99953033519109313,0.030644885915615216,0.9981217819344379,0.061260986182255374,0.99577566332582645,0.091819542190158046,0.99249418314395499,0.12229184938258741,0.98828042378034853,0.15264928421887447,0.98313834334397954,0.18286333106135669,0.97707277194329922,0.21290560896096089,0.97008940714917313,0.24274789831626936,0.96219480864298434,0.27236216738102731,0.95339639205493054,0.30172059859519229,0.94370242199830279,0.3307956147147923,0.93312200430628933,0.35955990471604782,0.92166507747859727,0.38798644944942523,0.90934240334592487,0.41604854701952437,0.8961655569610556,0.44371983786695968,0.88214691572606829,0.47097432952867502,0.86729964776587642,0.49778642105343401,0.85163769955901858,0.524130927049552,0.83517578283731808,0.54998310134228023,0.81792936076671774,0.57531866021862055,0,0.9981217819344379,0.061260986182255374,0.99249418314395499,0.12229184938258741,0.98313834334397954,0.18286333106135669,0.97008940714917313,0.24274789831626936,0.95339639205493054,0.30172059859519229,0.93312200430628933,0.35955990471604782,0.90934240334592487,0.41604854701952437,0.88214691572606829,0.47097432952867502,0.85163769955901858,0.524130927049552,0.81792936076671774,0.57531866021862055,0.78114852257092537,0.62434524558553384,0.74143334984117326,0.67102651791363388,0.69893303008725727,0.71518712198490064,0.65380721304588529,0.7566611713106286,0.60622541096663807,0.7952928712734264,0.55636636185003008,0.83093710435974721,0.50441735802962662,0.86345997528455909,0.45057354262035432,0.8927393139604326,0.39503717647585423,0.91866513442166986,0.33801687840850292,0.94114004797956152,0,0.99577566332582645,0.091819542190158046,0.98313834334397954,0.18286333106135669,0.96219480864298434,0.27236216738102731,0.93312200430628933,0.35955990471604782,0.8961655569610556,0.44371983786695968,0.85163769955901858,0.524130927049552,0.79991463342226965,0.6001138052377365,0.74143334984117326,0.67102651791363388,0.67668793807769811,0.73626994673160018,0.60622541096663807,0.7952928712734264,0.53064108338285343,0.84759662612959441,0.45057354262035432,0.8927393139604326,0.36669925317684809,0.93033953894239163,0.27972684152616806,0.96007962905677469,0.19039110916466842,0.98170831999685493,0.099446824513407237,0.99504287801792723,0.0076623461263018869,0.99997064379502698,-0.084186868920306773,0.99644998424476638,-0.17532481661118743,0.98451064426965618,-0.26498150219666156,0.96425349545314099,0,0.99249418314395499,0.12229184938258741,0.97008940714917313,0.24274789831626936,0.93312200430628933,0.35955990471604782,0.88214691572606829,0.47097432952867502,0.81792936076671774,0.57531866021862055,0.74143334984117326,0.67102651791363388,0.65380721304588529,0.7566611713106286,0.55636636185003008,0.83093710435974721,0.45057354262035432,0.8927393139604326,0.33801687840850292,0.94114004797956152,0.22038602862947904,0.97541273232664261,0.099446824513407237,0.99504287801792723,-0.022985238906090319,0.99973580449658295,-0.14507225633834475,0.98942106326927448,-0.26498150219666156,0.96425349545314099,-0.38091294280352272,0.9246109073576626,-0.49112625783682295,0.87108839899472801,-0.59396696538108751,0.80448943065523359,-0.68789125840396959,0.72581376165749512,-0.77148917982194276,0.63624244232656013,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99995440946865177,0.0095487687269054707,0.99981764203160017,0.019096666786930977,0.99958971015944542,0.028642823592584892,0.99927063463525789,0.038186368715145011,0.99886044455268286,0.047726431964025158,0.99835917731328816,0.057262143466120109,0.99776687862315316,0.066792633745121552,0.99708360248870198,0.076317033800797809,0.99630941121177863,0.085834475188230286,0.99544437538396657,0.095344090096999082,0.99448857388015166,0.10484501143031102,0.99344209385133098,0.1143363728840623,0.99230503071666543,0.12381730902582917,0.99107748815478014,0.13328695537377883,0.98975957809431026,0.14274444847549397,0.98835142070369575,0.15218892598670306,0.98685314438022398,0.16161952674991004,0.98526488573832216,0.17103539087291547,0.98358678959710122,0.1804356598072224,0.98181900896715069,0.18981947642631977,0.97996170503658686,0.19918598510383609,0.9780150471563559,0.20853433179155642,0.97597921282479216,0.21786366409729527,0.97385438767143329,0.2271731313626188,0.97164076544009503,0.23646188474040861,0.96933854797120467,0.24572907727226054,0.96694794518339766,0.25497386396571137,0.96446917505437657,0.26419540187128598,0.96190246360103615,0.27339285015935849,0.95924804485885407,0.28256537019681982,0.9565061608605524,0.29171212562354537,0.95367706161402765,0.30083228242865512,0.95076100507955574,0.30992500902655962,0.94775825714627027,0.31898947633278485,0.94466909160791879,0.32802485783956914,0.94149379013789802,0.33703032969122465,0.93823264226357039,0.34600507075925802,0.93488594533986458,0.35494826271724117,0.93145400452216276,0.36385909011542755,0.92793713273847567,0.37273674045510541,0.92433565066090995,0.38158040426268253,0.92064988667642877,0.39038927516349481,0.91688017685690903,0.3991625499553324,0.91302686492849816,0.40789942868167645,0.90909030224027265,0.41659911470464001,0.90507084773220181,0.42526081477760636,0.90096886790241915,0.43388373911755812,0.89678473677380466,0.4424671014770904,0.89251883585988123,0.45101011921610185,0.88817155413002746,0.45951201337315628,0.88374328797401136,0.46797200873650951,0.87923444116584681,0.47638933391479393,0.87464542482697749,0.48476322140735484,0.86997665738878982,0.49309290767423158,0.86522856455446029,0.50137763320577844,0.86040157926013938,0.50961664259191741,0.85549614163547583,0.51780918459101699,0.85051269896348514,0.52595451219839162,0.84545170563976613,0.53405188271441395,0.84031362313106828,0.54210055781223554,0.83509891993321517,0.55009980360510724,0.82980807152838576,0.55804889071329711,0.8244415603417603,0.5659470943305952,0.81899987569753174,0.57379369429040217,0.81348351377428885,0.58158797513139526,0.80789297755977385,0.5893292261627644,0.80222877680502003,0.59701674152901385,0.79649142797787142,0.60464982027432312,0.79068145421589109,0.61222776640646071,0.78479938527866089,0.61974988896024497,0.7788457574994776,0.62721550206054766,0.77282111373644879,0.63462392498483289,0.76672600332299523,0.64197448222522546,0.76056098201776168,0.64926650355010462,0.75432661195394224,0.65649932406521683,0.74802346158802469,0.66367228427430125,0.74165210564795758,0.67078473013922346,0.73521312508074632,0.67783601313961095,0.72870710699948194,0.68482549033198636,0.72213464462980681,0.69175252440839174,0.7154963372558244,0.69861648375449859,0.7087927901654556,0.70541674250719943,0.7020246145952479,0.71215268061167447,0.69519242767464229,0.71882368387792939,0.68829685236970273,0.7254291440367967,0.68133851742631357,0.73196845879539985,0.67431805731284933,0.73844103189206989,0.66723611216232392,0.74484627315071317,0.66009332771402207,0.75118359853462502,0.65289035525462047,0.75745243019974229,0.64562785155880242,0.76365219654733207,0.63830647882937275,0.76978233227611004,0.63092690463687751,0.77584227843378617,0.62348980185873359,0.7818314824680298,0.61599584861787571,0.78774939827685242,0.60844572822092435,0.79359548625840171,0.60084012909588058,0.79936921336016287,0.5931797447293552,0.80507005312756297,0.58546527360333533,0.81069748575197376,0.57769741913149653,0.81625099811810831,0.56987688959506422,0.82173008385080737,0.56200439807823255,0.82713424336121133,0.55408066240314402,0.83246298389231288,0.54610640506443786,0.83771581956388774,0.53808235316337272,0.84289227141679701,0.5300092383415278,0.84799186745666,0.52188779671409213,0.85301414269689013,0.51371876880274348,0.85795863920109416,0.50550289946812854,0.86282490612482621,0.49724093784194379,0.86761249975669674,0.48893363725863032,0.87232098355883092,0.48058175518668378,0.8769499282066715,0.47218605315958662,0.88149891162812677,0.4637472967063721,0.88596751904205384,0.45526625528182108,0.89035534299608021,0.44674370219630377,0.89466198340375469,0.43818041454526713,0.89888704758102833,0.42957717313837962,0.90303015028205935,0.420934762428335,0.9070909137343407,0.41225397043932627,0.91106896767314549,0.40353558869519224,0.91496394937528802,0.39478041214724491,0.91877550369219763,0.38598923910178651,0.92250328308230101,0.37716287114731717,0.92614694764271199,0.36830211308144717,0.92970616514022375,0.3594077728375128,0.93318061104160255,0.35048066141091,0.93656996854317887,0.34152159278514493,0.93987392859973384,0.33253138385761594,0.94309218995267841,0.32351085436512711,0.94622445915752229,0.31446082680914322,0.94927045061063076,0.30538212638079465,0.95222988657526619,0.29627558088563394,0.95510249720691243,0.28714202066815731,0.95788802057787925,0.27798227853609109,0.96058620270118555,0.26879718968445737,0.9631967975537179,0.25958759161941825,0.96571956709866358,0.25035432408191238,0.96815428130721437,0.24109822897108632,0.97050071817954142,0.2318201502675282,0.97275866376503717,0.22252093395631445,0.97492791218182362,0.21320142794987015,0.9770082656355249,0.20386248201065718,0.97899953443730225,0.19450494767369031,0.98090153702115024,0.18512967816889506,0.982714099960452,0.1757375283433075,0.98443705798379266,0.16632935458312995,0.98607025399002857,0.15690601473564408,0.98761353906261218,0.14746836803099095,0.98906677248317076,0.13801727500382685,0.99042982174433647,0.12855359741485722,0.9917025625618292,0.11907819817226206,0.9928848788857888,0.10959194125301334,0.99397666291135633,0.10009569162409844,0.99497781508850403,0.090590315163649696,0.99588824413111265,0.081076678581994313,0.99670786702529446,0.071555649342626149,0.99743660903696285,0.062028095583108754,0.99807440371864697,0.052494886035919286,0.99862119291554985,0.04295688994923471,0.99907692677085147,0.033414977007674644,0.99944156373025461,0.023870017253000822,0.9997150705457738,0.014322881004787508,0.99989742227876688,0.004774438781063082,0.99998860230220921,0,0.99981764203160017,0.019096666786930977,0.99927063463525789,0.038186368715145011,0.99835917731328816,0.057262143466120109,0.99708360248870198,0.076317033800797809,0.99544437538396657,0.095344090096999082,0.99344209385133098,0.1143363728840623,0.99107748815478014,0.13328695537377883,0.98835142070369575,0.15218892598670306,0.98526488573832216,0.17103539087291547,0.98181900896715069,0.18981947642631977,0.9780150471563559,0.20853433179155642,0.97385438767143329,0.2271731313626188,0.96933854797120467,0.24572907727226054,0.96446917505437657,0.26419540187128598,0.95924804485885407,0.28256537019681982,0.95367706161402765,0.30083228242865512,0.94775825714627027,0.31898947633278485,0.94149379013789802,0.33703032969122465,0.93488594533986458,0.35494826271724117,0.92793713273847567,0.37273674045510541,0.92064988667642877,0.39038927516349481,0.91302686492849816,0.40789942868167645,0.90507084773220181,0.42526081477760636,0,0.99927063463525789,0.038186368715145011,0.99708360248870198,0.076317033800797809,0.99344209385133098,0.1143363728840623,0.98835142070369575,0.15218892598670306,0.98181900896715069,0.18981947642631977,0.97385438767143329,0.2271731313626188,0.96446917505437657,0.26419540187128598,0.95367706161402765,0.30083228242865512,0.94149379013789802,0.33703032969122465,0.92793713273847567,0.37273674045510541,0.91302686492849816,0.40789942868167645,0.89678473677380466,0.4424671014770904,0.87923444116584681,0.47638933391479393,0.86040157926013938,0.50961664259191741,0.84031362313106828,0.54210055781223554,0.81899987569753174,0.57379369429040217,0.79649142797787142,0.60464982027432312,0.77282111373644879,0.63462392498483289,0.74802346158802469,0.66367228427430125,0.72213464462980681,0.69175252440839174,0.69519242767464229,0.71882368387792939,0.66723611216232392,0.74484627315071317,0.63830647882937275,0.76978233227611004,0,0.99835917731328816,0.057262143466120109,0.99344209385133098,0.1143363728840623,0.98526488573832216,0.17103539087291547,0.97385438767143329,0.2271731313626188,0.95924804485885407,0.28256537019681977,0.94149379013789802,0.33703032969122465,0.92064988667642877,0.39038927516349481,0.89678473677380466,0.4424671014770904,0.86997665738878982,0.49309290767423158,0.84031362313106839,0.54210055781223543,0.80789297755977385,0.5893292261627644,0.77282111373644879,0.63462392498483289,0.73521312508074643,0.67783601313961084,0.69519242767464229,0.71882368387792939,0.65289035525462047,0.75745243019974229,0.60844572822092435,0.79359548625840171,0.56200439807823255,0.82713424336121133,0.51371876880274348,0.85795863920109416,0.4637472967063721,0.88596751904205384,0.41225397043932643,0.91106896767314549,0.3594077728375128,0.93318061104160255,0.30538212638079465,0.95222988657526619,0.2503543240819126,0.96815428130721437,0,0.99708360248870198,0.076317033800797809,0.98835142070369575,0.15218892598670306,0.97385438767143329,0.2271731313626188,0.95367706161402765,0.30083228242865512,0.92793713273847567,0.37273674045510541,0.89678473677380466,0.4424671014770904,0.86040157926013938,0.50961664259191741,0.81899987569753174,0.57379369429040217,0.77282111373644879,0.63462392498483289,0.72213464462980681,0.69175252440839174,0.66723611216232392,0.74484627315071317,0.60844572822092435,0.79359548625840171,0.54610640506443786,0.83771581956388774,0.48058175518668378,0.8769499282066715,0.41225397043932627,0.91106896767314549,0.34152159278514493,0.93987392859973384,0.26879718968445737,0.9631967975537179,0.19450494767369031,0.98090153702115024,0.11907819817226206,0.9928848788857888,0.04295688994923471,0.99907692677085147,-0.033414977007674519,0.99944156373025461,-0.10959194125301346,0.99397666291135633,-0.18512967816889495,0.98271409996045211,0,0.99544437538396657,0.095344090096999082,0.98181900896715069,0.18981947642631977,0.95924804485885407,0.28256537019681982,0.92793713273847567,0.37273674045510541,0.88817155413002746,0.45951201337315628,0.84031362313106828,0.54210055781223554,0.78479938527866089,0.61974988896024497,0.72213464462980681,0.69175252440839174,0.65289035525462047,0.75745243019974229,0.57769741913149653,0.81625099811810831,0.49724093784194379,0.86761249975669674,0.41225397043932627,0.91106896767314549,0.32351085436512711,0.94622445915752229,0.2318201502675282,0.97275866376503717,0.13801727500382685,0.99042982174433647,0.04295688994923471,0.99907692677085147,-0.052494886035919383,0.99862119291554985,-0.14746836803099106,0.98906677248317076,-0.2410982289710864,0.97050071817954142,-0.33253138385761605,0.94309218995267841,-0.42093476242833489,0.90709091373434081,-0.50550289946812843,0.86282490612482621,-0.58546527360333545,0.81069748575197365,0,0.99344209385133098,0.1143363728840623,0.97385438767143329,0.2271731313626188,0.94149379013789802,0.33703032969122465,0.89678473677380466,0.4424671014770904,0.84031362313106839,0.54210055781223543,0.77282111373644879,0.63462392498483289,0.69519242767464229,0.71882368387792939,0.60844572822092435,0.79359548625840171,0.51371876880274348,0.85795863920109416,0.41225397043932643,0.91106896767314549,0.30538212638079465,0.95222988657526619,0.19450494767369031,0.98090153702115024,0.081076678581994535,0.99670786702529435,-0.033414977007674519,0.99944156373025461,-0.14746836803099084,0.98906677248317076,-0.25958759161941813,0.96571956709866358,-0.36830211308144706,0.92970616514022375,-0.47218605315958673,0.88149891162812677,-0.56987688959506422,0.82173008385080748,-0.66009332771402196,0.75118359853462513,-0.74165210564795758,0.67078473013922346,-0.81348351377428874,0.58158797513139537,-0.87464542482697738,0.484763221407355,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99997361873499135,0.0072637341668094577,0.99989447633190787,0.014527085080626901,0.99976257696650284,0.021789669508681716,0.99957792759812047,0.029051104258645013,0.99934053796932865,0.036311006198847834,0.99905042060540483,0.043568992278496123,0.99870759081367511,0.050824679547881509,0.99831206668270667,0.058077685178586629,0.99786386908135327,0.065327626483684176,0.99736302165765445,0.072574120937928449,0.99680955083758738,0.079816786197938236,0.99620348582367269,0.08705524012237037,0.995544858593434,0.094289100792082414,0.99483370389771031,0.10151798653028361,0.99407005925882252,0.10874151592267323,0.99325396496859397,0.11595930783756483,0.99238546408622397,0.12317098144599589,0.99146460243601653,0.13037615624182117,0.99049142860496198,0.1375744520617892,0.98946599394017387,0.14476548910560072,0.98838835254617952,0.15194888795594783,0.98725856128206524,0.1591242695985331,0.98607667975847657,0.16629125544206722,0.98484277033447287,0.17344946733824443,0.98355689811423719,0.18059852760169479,0.98221913094364099,0.18773805902991147,0.98082953940666506,0.19486768492315323,0.97938819682167433,0.20198702910431982,0.97789517923755032,0.20909571593880022,0.97635056542967802,0.21619337035429195,0.97475443689579,0.22327961786059078,0.97310687785166572,0.23035408456935005,0.97140797522668898,0.23741639721380764,0.96965781865926026,0.24446618316848065,0.96785650049206817,0.25150307046882603,0.96600411576721645,0.25852668783086635,0.96410076222120988,0.26553666467077985,0.96214654027979696,0.27253263112445286,0.96014155305267157,0.27951421806699556,0.95808590632803237,0.28648105713221728,0.95597970856700154,0.29343278073206264,0.95382307089790164,0.30036902207600658,0.95161610711039235,0.30728941519040703,0.94935893364946666,0.31419359493781451,0.94705166960930731,0.32108119703623789,0.94469443672700226,0.32795185807836469,0.9422873593761224,0.33480521555073539,0.93983056456015857,0.34164090785287066,0.93732418190582101,0.34845857431635024,0.93476834365619976,0.35525785522384273,0.93216318466378723,0.36203839182808512,0.92950884238336295,0.36879982637081127,0.92680545686474114,0.37554180210162819,0.92405317074538129,0.38226396329683904,0.92125212924286259,0.38896595527821187,0.91840248014722126,0.39564742443169365,0.9155043738131533,0.40230801822606771,0.91255796315208115,0.40894738523155388,0.90956340362408572,0.41556517513835134,0.90652085322970388,0.42216103877512146,0.90343047250159247,0.42873462812741109,0.90029242449605706,0.43528559635601466,0.89710687478444995,0.44181359781527452,0.89387399144443347,0.44831828807131763,0.89059394505111167,0.45479932392022909,0.88726690866803104,0.46125636340616039,0.8838930578380485,0.46768906583937186,0.88047257057406969,0.47409709181420823,0.8770056273496567,0.48048010322700668,0.87349241108950548,0.48683776329393597,0.86993310715979422,0.49316973656876589,0.86632790335840359,0.49947568896056654,0.86267698990500707,0.5057552877513356,0.85898055943103568,0.51200820161355332,0.85523880696951304,0.51823410062766428,0.85145192994476582,0.52443265629948488,0.8476201281620066,0.53060354157753553,0.84374360379679214,0.53674643087029639,0.8398225613843554,0.542861000063387,0.83585720780881456,0.54894692653666644,0.8318477522922566,0.55500388918125665,0.8277944063836985,0.56103156841648416,0.82369738394792558,0.56702964620674257,0.81955690115420698,0.57299780607827244,0.81537317646489027,0.57893573313585922,0.81114643062387526,0.58484311407944845,0,0.99989447633190787,0.014527085080626901,0.99957792759812047,0.029051104258645013,0.99905042060540483,0.043568992278496123,0.99831206668270667,0.058077685178586629,0.99736302165765445,0.072574120937928449,0.99620348582367269,0.08705524012237037,0.99483370389771031,0.10151798653028361,0.99325396496859397,0.11595930783756483,0.99146460243601653,0.13037615624182117,0.98946599394017387,0.14476548910560072,0.98725856128206524,0.1591242695985331,0.98484277033447287,0.17344946733824443,0.98221913094364099,0.18773805902991147,0.97938819682167433,0.20198702910431982,0.97635056542967802,0.21619337035429195,0.97310687785166572,0.23035408456935005,0.96965781865926026,0.24446618316848065,0.96600411576721645,0.25852668783086635,0.96214654027979696,0.27253263112445286,0.95808590632803237,0.28648105713221728,0.95382307089790164,0.30036902207600658,0.94935893364946666,0.31419359493781451,0.94469443672700226,0.32795185807836469,0.93983056456015857,0.34164090785287066,0.93476834365619976,0.35525785522384273,0.92950884238336295,0.36879982637081127,0.92405317074538129,0.38226396329683904,0.91840248014722126,0.39564742443169365,0.91255796315208115,0.40894738523155388,0.90652085322970388,0.42216103877512146,0.90029242449605706,0.43528559635601466,0.89387399144443347,0.44831828807131763,0.88726690866803104,0.46125636340616039,0.88047257057406969,0.47409709181420823,0.87349241108950548,0.48683776329393597,0.86632790335840359,0.49947568896056654,0.85898055943103568,0.51200820161355332,0.85145192994476582,0.52443265629948488,0.84374360379679214,0.53674643087029639,0.83585720780881456,0.54894692653666644,0.8277944063836985,0.56103156841648416,0.81955690115420698,0.57299780607827244,0.81114643062387526,0.58484311407944845,0.80256476980010505,0.59656499249931216,0.79381372981955323,0.60816096746664805,0.78489515756589634,0.61962859168182904,0.77581093528005129,0.63096544493331175,0.76656298016293267,0.64216913460841707,0.75715324397083317,0.65323729619828352,0.74758371260351042,0.66416759379689094,0.73785640568506783,0.67495772059404779,0.72797337613771895,0.68560539936223608,0.71793670974852308,0.69610838293721544,0.70774852472918581,0.70646445469228036,0.69741097126901619,0.7166714290060735,0.68692623108113449,0.7267271517238556,0.67629651694202786,0.73662950061213361,0.66552407222455012,0.74637638580655252,0.65461117042446282,0.7559657502529562,0.6435601146806208,0.76539557014152237,0.63237323728890105,0.77466385533388293,0.6210528992099773,0.78376864978313709,0.60960148957104565,0.79270803194666972,0.59802142516160617,0.80148011519168805,0.58631514992340517,0.8100830481933905,0.57448513443464821,0.81851501532568371,0.56253387538859145,0.82677423704436548,0.55046389506662041,0.83485897026269329,0.53827774080592994,0.84276750871925765,0.52597798446191513,0.85049818333808413,0.51356722186538806,0.85804936258088738,0.5010480722747348,0.86541945279140342,0.48842317782312739,0.87260689853172579,0.47569520296090995,0.87961018291057702,0.46286683389327199,0.88642782790344421,0.44994077801333277,0.89305839466451287,0.43691976333075311,0.89950048383033054,0.42380653789599626,0.90575273581513926,0.4106038692203588,0.91181383109781267,0.39731454369189556,0.91768249050033679,0.3839413659873589,0.92335747545777791,0.37048715848027963,0.92883758827967777,0.35695476064531262,0.93412167240282329,0.34334702845897308,0.93920861263533628,0.32966683379689027,0.94409733539203122,0.31591706382770657,0.94878680892099299,0,0.99976257696650284,0.021789669508681716,0.99905042060540483,0.043568992278496123,0.99786386908135327,0.065327626483684176,0.99620348582367269,0.08705524012237037,0.99407005925882252,0.10874151592267321,0.99146460243601653,0.13037615624182117,0.98838835254617952,0.15194888795594783,0.98484277033447287,0.17344946733824443,0.98082953940666506,0.19486768492315321,0.97635056542967802,0.21619337035429192,0.97140797522668898,0.23741639721380761,0.96600411576721645,0.25852668783086635,0.96014155305267157,0.27951421806699556,0.95382307089790164,0.30036902207600658,0.94705166960930731,0.32108119703623789,0.93983056456015857,0.34164090785287066,0.93216318466378723,0.36203839182808506,0.9240531707453814,0.38226396329683898,0.9155043738131533,0.40230801822606765,0.90652085322970388,0.4221610387751214,0.89710687478445006,0.44181359781527452,0.88726690866803104,0.46125636340616033,0.8770056273496567,0.48048010322700668,0.86632790335840359,0.49947568896056654,0.85523880696951304,0.51823410062766417,0.84374360379679214,0.53674643087029639,0.8318477522922566,0.55500388918125665,0.81955690115420698,0.57299780607827244,0.80687688664496615,0.59071963722067555,0.79381372981955323,0.60816096746664805,0.78037363366660928,0.62531351486911968,0.76656298016293267,0.64216913460841707,0.75238832724302229,0.65871982285980046,0.73785640568506783,0.67495772059404768,0.72297411591486727,0.6908751173092833,0.70774852472918592,0.70646445469228025,0.69218686194011569,0.72171833020749532,0.67629651694202797,0.7366295006121335,0.6600850352027483,0.7511908853955741,0.64356011468062091,0.76539557014152237,0.62672960216916285,0.77923680981129406,0.60960148957104576,0.79270803194666961,0.59218391010317184,0.80580283979080047,0.57448513443464821,0.8185150153256836,0.5565135667594916,0.83083852222476351,0.53827774080592994,0.84276750871925765,0.51978631578419621,0.85429631037684572,0.5010480722747348,0.86541945279140342,0.48207190805877859,0.87613165418250272,0.46286683389327216,0.8864278279034441,0.44344196923214918,0.89630308485663135,0.42380653789599626,0.90575273581513926,0.40396986369215693,0.91477229364937596,0.3839413659873589,0.92335747545777791,0.3637305552349655,0.93150420460052874,0.34334702845897308,0.93920861263533628,0.32280046469690271,0.94646704115434666,0.30210062040374702,0.953276043521325,0.28125732481915589,0.95963238650827731,0.26028047530006121,0.96553305183073579,0.23918003262095483,0.97097523758097914,0.21796601624405459,0.97595635955850835,0.19664849956160263,0.98047405249714303,0.17523760511255351,0.98452617118815933,0.15374349977592716,0.98811079149893388,0.13217638994310626,0.99122621128661037,0.11054651667137116,0.99387095120635571,0.08886415082097493,0.99604375541382062,0.067139588178064563,0.99774359216147301,0.045383144565767988,0.99896965428851869,0.023605150945766748,0.99972135960417874,0.0018159485126781009,0.99999835116414038,-0.019974116216419657,0.99980049744005073,-0.041754696314990354,0.99912789238197275,-0.063515449360237564,0.99798085537377279,-0.085246042344162457,0.99635993108146281,-0.10693615658015337,0.99426588919456793,-0.12857549260277293,0.99169972406064244,-0.15015377505841798,0.98866265421310717,-0.17166075758453217,0.98515612179263468,-0.19308622767505007,0.98118179186235344,-0.2144200115297657,0.97674155161719989,-0.23565197888532172,0.9718375094877908,-0.25677204782552437,0.9664719941392439,-0.27777018956870303,0.96064755336541963,-0.29863643322983685,0.954366952879112,0,0.99957792759812047,0.029051104258645013,0.99831206668270667,0.058077685178586629,0.99620348582367269,0.08705524012237037,0.99325396496859397,0.11595930783756483,0.98946599394017387,0.14476548910560072,0.98484277033447287,0.17344946733824443,0.97938819682167433,0.20198702910431982,0.97310687785166572,0.23035408456935005,0.96600411576721645,0.25852668783086635,0.95808590632803237,0.28648105713221728,0.94935893364946666,0.31419359493781451,0.93983056456015857,0.34164090785287066,0.92950884238336295,0.36879982637081127,0.91840248014722126,0.39564742443169365,0.90652085322970388,0.42216103877512146,0.89387399144443347,0.44831828807131763,0.88047257057406969,0.47409709181420823,0.86632790335840359,0.49947568896056654,0.85145192994476582,0.52443265629948488,0.83585720780881456,0.54894692653666644,0.81955690115420698,0.57299780607827244,0.80256476980010505,0.59656499249931216,0.78489515756589634,0.61962859168182904,0.76656298016293267,0.64216913460841707,0.74758371260351042,0.66416759379689094,0.72797337613771895,0.68560539936223608,0.70774852472918581,0.70646445469228036,0.68692623108113449,0.7267271517238556,0.66552407222455012,0.74637638580655252,0.6435601146806208,0.76539557014152237,0.6210528992099773,0.78376864978313709,0.59802142516160617,0.80148011519168805,0.57448513443464821,0.81851501532568371,0.55046389506662041,0.83485897026269329,0.52597798446191513,0.85049818333808413,0.5010480722747348,0.86541945279140342,0.47569520296090995,0.87961018291057702,0.44994077801333277,0.89305839466451287,0.42380653789599626,0.90575273581513926,0.39731454369189556,0.91768249050033679,0.37048715848027963,0.92883758827967777,0.34334702845897308,0.93920861263533628,0.31591706382770657,0.94878680892099299,0.28822041944859128,0.95756409175202373,0.26028047530006121,0.96553305183073579,0.23212081674078638,0.97268696220088724,0.20376521460021577,0.97901978392621258,0.17523760511255351,0.98452617118815933,0.1465620697111121,0.98920147579853268,0.11776281470009607,0.99304175112324,0.088864150820974708,0.99604375541382073,0.059890472730697572,0.99820495454395219,0.030866238409070136,0.99952352414861878,0.0018159485126778788,0.99999835116414038,-0.027235874307215028,0.99962903476775899,-0.056264706105335668,0.9984158867159918,-0.085246042344162679,0.99635993108146281,-0.1141554185793036,0.99346290338843757,-0.14296843111102989,0.98972724914778953,-0.17166075758453239,0.98515612179263468,-0.20020817752151038,0.97975338001637702,-0.22858659276576349,0.97352358451541332,-0.2567720478255246,0.96647199413924378,-0.28474075009536298,0.95860456145124306,-0.31246908994058992,0.9499279277038335,-0.33993366062720842,0.94044941723230702,-0.36711127808058541,0.93017703127202567,-0.39397900045616929,0.91911944120422007,-0.42051414750572813,0.90728598123608784,-0.44669431972276263,0.89468664052137181,-0.47249741725093447,0.88133205472806697,-0.49790165853954432,0.867233497060377,-0.52288559873031537,0.8524028687424976,-0.54742814775995741,0.83685268897226006,-0.57150858816323635,0.82059608435311482,-0.59510659256151366,0.80364677781337779,-0.61820224082199737,0.78601907702209184,-0.64077603687321893,0.76772786231128221,-0.66280892516254108,0.74878857411480115,-0.68428230674180168,0.72921719993436718,-0.70517805496752195,0.70903026084379694,-0.72547853080241631,0.68824479754282741,-0.74516659770529514,0.66687835597229783,-0.76422563609678629,0.64494897250283489,-0.78263955738866697,0.62247515870954351,-0.8003928175649615,0.59947588574555877,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99990381078632362,0.013869721518034561,0.99961526165002434,0.027736774800855665,0.99913440810173104,0.041598492126560742,0.99846134264729325,0.055452206799770275,0.99759619476998451,0.069295253664642426,0.99653913090559287,0.083124969617591582,0.99529035441040237,0.096938694119611951,0.99385010552207098,0.11073376970810798,0.99221866131341507,0.12450754250813273,0.99039633563910567,0.13825736274293621,0.98838347907529023,0.15198058524372529,0.98618047885214899,0.16567456995853705,0.98378775877940017,0.17933668246012785,0.98120577916476859,0.19296429445278032,0.97843503672543197,0.20655478427793078,0.97547606449246338,0.22010553741851965,0.97232943170828756,0.23361394700196833,0.96899574371717101,0.24707741430168517,0.96547564184876677,0.26049334923700423,0.96176980329473627,0.27385917087146128,0.9578789409784727,0.28717230790931003,0.95380380341794946,0.30043019919018382,0.94954517458172172,0.31363029418180827,0.94510387373810767,0.32677005347066784,0.94048075529757891,0.33984694925053477,0.93567670864839059,0.35285846580876429,0.93069265798548195,0.36580210001026348,0.92552956213268134,0.37867536177904032,0.92018841435824938,0.39147577457724098,0.914670242183795,0.40420087588158177,0.90897610718660293,0.41684821765708585,0.90310710479540934,0.42941536682803239,0.89706436407966406,0.44189990574602744,0.89084904753232308,0.4542994326551078,0.88446235084620917,0.4666115621537868,0.87790550268398682,0.47883392565395405,0.8711797644417939,0.4909641718365409,0.86428643000657623,0.50299996710386319,0.85722682550717166,0.51493899602855575,0.8500023090591915,0.52677896179900985,0.84261427050374837,0.53851758666123051,0.83506413114008093,0.5501526123570275,0.82735334345212597,0.56168180055845529,0.81948339082909294,0.57310293329841899,0.81145578728009038,0.58441381339736365,0.80327207714286486,0.59561226488596375,0.7949338347867021,0.60669613342373307,0.78644266430955378,0.61766328671347348,0.77780019922944243,0.62851161491148244,0.76900810217020887,0.63923903103344182,0.76006806454165832,0.64984347135590848,0.75098180621417021,0.66032289581333048,0.74175107518783223,0.67067528839051083,0.73237764725616239,0.68089865751044631,0.72286332566448519,0.69099103641746351,0.71320994076302591,0.70095048355557976,0.70341934965479014,0.71077508294201763,0.69349343583829848,0.72046294453579762,0.6834341088452407,0.73001220460134197,0.67324330387312425,0.73942102606701687,0.66292298141298289,0.74868759887854552,0.65247512687222153,0.75781014034722338,0.6419017501926656,0.76678689549286938,0.63120488546389275,0.77561613738144597,0.62038659053191703,0.7842961674572837,0.60944894660330406,0.79282531586984717,0.59839405784479194,0.80120194179497828,0.58722405097849439,0.80942443375055506,0.57594107487276591,0.81749120990650603,0.56454730012880561,0.82540071838912055,0.55304491866308025,0.83315143757959564,0.54143614328564726,0.84074187640676257,0.52972320727445699,0.84817057463393686,0.51790836394571915,0.85543610313983631,0.50599388622041253,0.86253706419351295,0,0.99961526165002434,0.027736774800855665,0.99846134264729325,0.055452206799770275,0.99653913090559287,0.083124969617591582,0.99385010552207098,0.11073376970810798,0.99039633563910567,0.13825736274293621,0.98618047885214899,0.16567456995853705,0.98120577916476859,0.19296429445278032,0.97547606449246338,0.22010553741851965,0.96899574371717101,0.24707741430168517,0.96176980329473627,0.27385917087146128,0.95380380341794946,0.30043019919018382,0.94510387373810767,0.32677005347066784,0.93567670864839059,0.35285846580876429,0.92552956213268134,0.37867536177904032,0.914670242183795,0.40420087588158177,0.90310710479540934,0.42941536682803239,0.89084904753232308,0.4542994326551078,0.87790550268398682,0.47883392565395405,0.86428643000657623,0.50299996710386319,0.8500023090591915,0.52677896179900985,0.83506413114008093,0.5501526123570275,0.81948339082909294,0.57310293329841899,0.80327207714286486,0.59561226488596375,0.78644266430955378,0.61766328671347348,0.76900810217020887,0.63923903103344182,0.75098180621417021,0.66032289581333048,0.73237764725616239,0.68089865751044631,0.71320994076302591,0.70095048355557976,0.69349343583829848,0.72046294453579762,0.67324330387312425,0.73942102606701687,0.65247512687222153,0.75781014034722338,0.63120488546389275,0.77561613738144597,0.60944894660330406,0.79282531586984717,0.58722405097849439,0.80942443375055506,0.56454730012880561,0.82540071838912055,0.54143614328564726,0.84074187640676257,0.51790836394571915,0.85543610313983631,0.493982066187025,0.86947209172324658,0.46967566073820605,0.88283904179081796,0.44500785081191474,0.89552666778592394,0.41999761771312821,0.9075252068759837,0.39466420623347642,0.91882542646473386,0.36902710984282316,0.92941863129649649,0.3431060556894957,0.93929667014697582,0.31692098942070279,0.94845194209543526,0.29049205983482507,0.95687740237342855,0.2638396033773836,0.96456656778558569,0.23698412849261888,0.97151352169827976,0.20994629984272078,0.97771291859233933,0.18274692240685292,0.98315998817630068,0.15540692547220497,0.98785053905703601,0.1279473465293951,0.99178096196493248,0.10038931508461024,0.99494823253114173,0.072754036400943717,0.99734991361476044,0.045062775181439245,0.99898415717815414,0.017336839206397739,0.9998497057089788,-0.010402437062464118,0.99994589318780713,-0.038133708898383696,0.99927264560061546,-0.065835637733823241,0.99783048099573546,-0.093486907580000181,0.99562050908522792,-0.12106624142904379,0.99264443039098571,-0.14855241762615687,0.98890453493622121,-0.1759242861991854,0.98440370048334702,-0.20316078513302807,0.97914539031960501,-0.23024095657636706,0.97313365059214729,-0.25714396296824604,0.96637310719462044,-0.28384910307208761,0.95886896220764772,-0.31033582790481334,0.95062698989594974,-0.33658375654880618,0.94165353226518189,-0.36257269183455265,0.93195549418190915,-0.38828263588189377,0.92154033806047186,-0.41369380548792811,0.9104160781208317,-0.43878664734972528,0.89859127422181651,-0.46354185311013713,0.8860750252745081,-0.48794037421512843,0.8728769622408421,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99967647159596196,0.025435253831007212,0.99870609572510449,0.050854049607857929,0.99708950027574106,0.076239939925691641,0.994827731276963,0.10157649867134914,0.99192225222179953,0.12684733165200082,0.98837494312025387,0.15203608720312078,0.98418809928283046,0.17712646676894278,0.97936442983533878,0.20210223544855144,0.97390705596593474,0.22694723250078574,0,0.99870609572510449,0.050854049607857929,0.994827731276963,0.10157649867134914,0.98837494312025387,0.15203608720312078,0.97936442983533878,0.20210223544855144,0.96781950890553459,0.25164538180115642,0.95377005637593015,0.30053731808322093,0.93725242953990118,0.34865152132401844,0.91830937285339653,0.39586348117703596,0.89698990732046857,0.44205102212891345,0,0.99708950027574106,0.076239939925691641,0.98837494312025387,0.15203608720312078,0.97390705596593474,0.22694723250078574,0.95377005637593015,0.30053731808322093,0.92808116181374822,0.37237797610283463,0.89698990732046857,0.44205102212891345,0.86067727507135028,0.50915088939896314,0.81935464087868981,0.57328698962260893,0.7732625437733337,0.63408598659581905,0,0.994827731276963,0.10157649867134914,0.97936442983533878,0.20210223544855144,0.95377005637593015,0.30053731808322093,0.91830937285339653,0.39586348117703596,0.87334920363630042,0.48709461966628198,0.81935464087868981,0.57328698962260893,0.75688423335689503,0.6535489708474379,0.68658420854079705,0.72705029027049251,0.60918178766956566,0.79303061074066505,0,0.99192225222179953,0.12684733165200082,0.96781950890553459,0.25164538180115642,0.92808116181374822,0.37237797610283463,0.87334920363630042,0.48709461966628198,0.80450785628032007,0.59394200826616383,0.72266928582711343,0.69119396939074185,0.62915563493797944,0.77727934941421672,0.5254776629843203,0.85080739636214797,0.41331033898133007,0.91059022819879742,0,0.98837494312025387,0.15203608720312078,0.95377005637593015,0.30053731808322093,0.89698990732046857,0.44205102212891345,0.81935464087868981,0.57328698962260893,0.72266928582711343,0.69119396939074185,0.60918178766956566,0.79303061074066505,0.48153074364848969,0.87642920017610804,0.34268405505889338,0.93945071100531574,0.19586992320561364,0.98062988593221401,0,0.98418809928283046,0.17712646676894278,0.93725242953990118,0.34865152132401844,0.86067727507135028,0.50915088939896314,0.75688423335689503,0.6535489708474379,0.62915563493797932,0.77727934941421672,0.48153074364848969,0.87642920017610804,0.3186780197373304,0.94786302794037369,0.14574748540850943,0.98932182352210163,-0.03179213845842449,0.99949450220210834,0,0.97936442983533878,0.20210223544855144,0.91830937285339653,0.39586348117703596,0.81935464087868981,0.57328698962260893,0.68658420854079705,0.72705029027049251,0.5254776629843203,0.85080739636214797,0.34268405505889338,0.93945071100531574,0.14574748540850943,0.98932182352210163,-0.057204249164814758,0.99836249622944562,-0.25779509914342436,0.9661996102553716,0,0.97390705596593474,0.22694723250078574,0.89698990732046857,0.44205102212891345,0.7732625437733337,0.63408598659581905,0.60918178766956566,0.79303061074066505,0.41331033898133007,0.91059022819879742,0.19586992320561364,0.98062988593221401,-0.031792138458424268,0.99949450220210834,-0.25779509914342436,0.9661996102553716,-0.47034479364001286,0.88248273359637674,0,0.96781950890553459,0.25164538180115642,0.87334920363630042,0.48709461966628198,0.72266928582711343,0.69119396939074185,0.5254776629843203,0.85080739636214797,0.29446578163351222,0.95566202365007924,0.044501793355740393,0.99900930445523028,-0.20832637405157595,0.97805936520976211,-0.44774645140907432,0.89416056458031157,-0.65834912738227613,0.75271271177986332,0,0.96110572764290847,0.27618070224401181,0.847448439416009,0.53087770958232083,0.66786937036663263,0.74427851247102228,0.43633771493725809,0.89978297301256605,0.17086398365900229,0.98529462552486102,-0.10790100825215546,0.99416164300287113,-0.37827253775818498,0.92569427306102658,-0.61921879704666416,0.78521849276751121,-0.81199692725321637,0.58366170863894684,0,0.95377005637593015,0.30053731808322093,0.81935464087868981,0.57328698962260893,0.60918178766956566,0.79303061074066505,0.34268405505889338,0.93945071100531574,0.044501793355740393,0.99900930445523028,-0.25779509914342436,0.9661996102553716,-0.53625628584266505,0.84405520903210463,-0.76513527681678672,0.64386955835052428,-0.923269946366854,0.38415180090134482,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99964561112345263,0.026620521437774766,0.99858269567676194,0.05322217484217865,0.99681200703075012,0.079786105553083075,0.99433480021013709,0.1062934856473654,0.9911528310040072,0.13272552728372197,0.98726835472134455,0.15906349601907205,0.98268412459252097,0.18528872408711433,0.97740338981786667,0.21138262362962432,0.97142989326470996,0.23732669987111479,0.96476786881451593,0.26310256422752126,0.95742203836200546,0.288691947339621,0.94939760846838128,0.31407671202194876,0.94070026667103335,0.33923886611803022,0.93133617745233843,0.36416057525282219,0.92131197787041297,0.38882417547332065,0.91063477285491323,0.41321218576837815,0.89931213017121925,0.43730732045885534,0.88735207505657154,0.46109250144932579,0.87476308453196128,0.48455087033265015,0.86155408139380607,0.5076658003388399,0.84773442788967102,0.53042090811974241,0.83331391908251495,0.5528000653611933,0.81830277590816913,0.57478741021440682,0.80271163793096367,0.59636735853850131,0.78655155580264258,0.61752461494619182,0.76983398342990628,0.63824418364482005,0.75257076985613847,0.65851137906503865,0.7347741508630673,0.67831183626961611,0.71645674029831519,0.69763152113498472,0,0.99858269567676194,0.05322217484217865,0.99433480021013709,0.1062934856473654,0.98726835472134455,0.15906349601907205,0.97740338981786667,0.21138262362962432,0.96476786881451593,0.26310256422752126,0.94939760846838128,0.31407671202194876,0.93133617745233843,0.36416057525282219,0.91063477285491323,0.41321218576837815,0.88735207505657154,0.46109250144932579,0.86155408139380607,0.5076658003388399,0.83331391908251495,0.5528000653611933,0.80271163793096367,0.59636735853850131,0.76983398342990628,0.63824418364482005,0.7347741508630673,0.67831183626961611,0.69763152113498472,0.71645674029831508,0.65851137906503865,0.75257076985613847,0.61752461494619193,0.78655155580264247,0.57478741021440694,0.81830277590816902,0.53042090811974252,0.84773442788967091,0.48455087033265021,0.87476308453196128,0.43730732045885545,0.89931213017121925,0.38882417547332071,0.92131197787041297,0.33923886611803039,0.94070026667103324,0.28869194733962117,0.95742203836200546,0.23732669987111499,0.97142989326470996,0.18528872408711453,0.98268412459252086,0.13272552728372197,0.9911528310040072,0.079786105553083103,0.99681200703075012,0.026620521437774818,0.99964561112345263,0,0.99681200703075012,0.079786105553083075,0.98726835472134455,0.15906349601907205,0.97142989326470996,0.23732669987111479,0.94939760846838128,0.31407671202194876,0.92131197787041297,0.3888241754733206,0.88735207505657154,0.46109250144932579,0.84773442788967102,0.53042090811974241,0.80271163793096367,0.59636735853850131,0.75257076985613858,0.65851137906503854,0.69763152113498483,0.71645674029831508,0.63824418364482016,0.76983398342990617,0.57478741021440694,0.81830277590816902,0.50766580033884001,0.86155408139380607,0.43730732045885545,0.89931213017121925,0.36416057525282231,0.93133617745233843,0.28869194733962117,0.95742203836200546,0.21138262362962451,0.97740338981786656,0.13272552728372219,0.99115283100400708,0.053222174842178914,0.99858269567676194,-0.026620521437774471,0.99964561112345263,-0.10629348564736529,0.99433480021013709,-0.18528872408711419,0.98268412459252097,-0.2631025642275211,0.96476786881451604,-0.33923886611803006,0.94070026667103335,-0.41321218576837793,0.91063477285491323,-0.4845508703326501,0.87476308453196128,-0.55280006536119308,0.83331391908251518,-0.61752461494619182,0.78655155580264258,-0.67831183626961578,0.73477415086306752,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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/float64/rffti/test/fixtures/c/fftpack/medium.json b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/test/fixtures/c/fftpack/medium.json new file mode 100644 index 000000000000..92bc8b5c15e7 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/test/fixtures/c/fftpack/medium.json @@ -0,0 +1 @@ +{"lengths":[95,94,71,43,92,43,90,30,62,57],"offsets":[0,95,189,260,303,395,438,528,558,620],"twiddles":[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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99766876919053915,0.068242413364670976,0.99068594603633076,0.13616664909624659,0.97908408768232291,0.20345601305263378,0.96291728734779936,0.26979677115702427,0.94226092211882051,0.33487961217098611,0.91721130150545305,0.39840108984624145,0.88788521840237522,0.46006503773115215,0.85441940454648857,0.51958395003543356,0.81696989301044209,0.57668032211486708,0.77571129070441991,0.63108794432605275,0.73083596427812414,0.68255314321865401,0,0.99068594603633076,0.13616664909624659,0.96291728734779936,0.26979677115702427,0.91721130150545305,0.39840108984624145,0.85441940454648857,0.51958395003543356,0.77571129070441991,0.63108794432605275,0.68255314321865412,0.73083596427812403,0.57668032211486708,0.81696989301044198,0.4600650377311522,0.88788521840237522,0.33487961217098627,0.9422609221188204,0.20345601305263397,0.9790840876823228,0.068242413364671003,0.99766876919053915,0,0.97908408768232291,0.20345601305263378,0.91721130150545305,0.39840108984624145,0.81696989301044209,0.57668032211486708,0.68255314321865412,0.73083596427812403,0.51958395003543356,0.85441940454648857,0.33487961217098627,0.9422609221188204,0.13616664909624659,0.99068594603633076,-0.068242413364670879,0.99766876919053915,-0.26979677115702411,0.96291728734779936,-0.46006503773115209,0.88788521840237522,-0.63108794432605286,0.7757112907044198,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.9975640502598242,0.069756473744125302,0.99026806874157036,0.13917310096006544,0.97814760073380569,0.20791169081775934,0.96126169593831889,0.27563735581699916,0.93969262078590843,0.34202014332566871,0.91354545764260087,0.40673664307580021,0.88294759285892699,0.46947156278589081,0.84804809615642596,0.5299192642332049,0.80901699437494745,0.58778525229247314,0.76604444311897801,0.64278760968653925,0.71933980033865119,0.69465837045899725,0.66913060635885824,0.74314482547739424,0.61566147532565829,0.78801075360672201,0.55919290347074679,0.82903757255504174,0.50000000000000011,0.8660254037844386,0.43837114678907746,0.89879404629916693,0.37460659341591196,0.92718385456678742,0.30901699437494745,0.95105651629515353,0.24192189559966767,0.97029572627599647,0.17364817766693041,0.98480775301220802,0.10452846326765346,0.99452189536827329,0.03489949670250108,0.99939082701909576,0,0.99026806874157036,0.13917310096006544,0.96126169593831889,0.27563735581699916,0.91354545764260087,0.40673664307580021,0.84804809615642596,0.5299192642332049,0.76604444311897801,0.64278760968653925,0.66913060635885824,0.74314482547739424,0.55919290347074679,0.82903757255504174,0,0.96126169593831889,0.27563735581699916,0.84804809615642596,0.5299192642332049,0.66913060635885824,0.74314482547739424,0.43837114678907746,0.89879404629916693,0.17364817766693041,0.98480775301220802,-0.10452846326765355,0.99452189536827329,-0.37460659341591207,0.92718385456678742,0,0.91354545764260087,0.40673664307580021,0.66913060635885824,0.74314482547739424,0,0.66913060635885824,0.74314482547739424,-0.10452846326765355,0.99452189536827329,0,0,0,0,0,0,0.97814760073380569,0.20791169081775931,0.91354545764260087,0.40673664307580015,0.80901699437494745,0.58778525229247314,0.66913060635885824,0.74314482547739424,0.50000000000000011,0.8660254037844386,0.30901699437494745,0.95105651629515353,0.10452846326765368,0.99452189536827329,0,0.91354545764260087,0.40673664307580015,0.66913060635885824,0.74314482547739424,0,0.66913060635885824,0.74314482547739424,-0.10452846326765333,0.9945218953682734,0,0,0,0,0,0,0.99486932339189516,0.10116832198743217,0.97952994125249448,0.20129852008866006,0.95413925640004882,0.29936312297335793,0.9189578116202306,0.39435585511331855,0.87434661614458209,0.48530196253108104,0.82076344120727629,0.57126821509479231,0.75875812269279097,0.65137248272222226,0.68896691907568663,0.72479278722911999,0.61210598254766291,0.79077573693769854,0.52896401032696239,0.84864425749475092,0.44039415155763428,0.89780453957074169,0.34730525284482028,0.93775213214708042,0.25065253225872053,0.96807711886620429,0.1514277775045767,0.98846832432811138,0.050649168838712767,0.99871650717105276,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99393067731794948,0.11000822099407929,0.97579638262743562,0.2186810912063758,0.94581724170063464,0.32469946920468346,0.90435716069757754,0.42677643549640365,0.85191940883832706,0.52367291398787785,0.78914050939639357,0.61421271268966782,0.71678251316845132,0.69729680109399539,0.63572374820996802,0.77191665091632089,0.54694815812242692,0.83716647826252855,0,0.97579638262743562,0.2186810912063758,0.90435716069757754,0.42677643549640365,0.78914050939639357,0.61421271268966782,0.63572374820996802,0.77191665091632089,0.45153335831088948,0.89225423861839392,0.24548548714079924,0.96940026593933037,0.027554342368162059,0.99962030702495142,-0.19171063192373838,0.98145149325241787,-0.40169542465296942,0.9157733266550574,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/float64/rffti/test/fixtures/c/fftpack/runner.c b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/test/fixtures/c/fftpack/runner.c new file mode 100644 index 000000000000..ee9a53000bd4 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/test/fixtures/c/fftpack/runner.c @@ -0,0 +1,286 @@ +/** +* @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 rffti( 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 twiddle offsets +* @param twiddles twiddle factors +* @param num number of sequence lengths +* @param total total number of twiddle values +*/ +void write_data_as_json( FILE *f, const int *lengths, const int *offsets, 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, "twiddles", twiddles, total ); + fprintf( f, "}\n" ); +} + +/** +* Generates test fixtures. +* +* @param lengths sequence lengths +* @param offsets twiddle offsets into flat output array +* @param num number of sequence lengths +* @param total total number of 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 *twiddles; + double *wsave; + FILE *f; + int off; + int n; + + // Allocate an output array: + twiddles = (double*) malloc( 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( 2*n + 15, sizeof(double) ); + if ( wsave == NULL ) { + printf( "Error allocating memory.\n" ); + exit( 1 ); + } + rffti( n, wsave ); + + // Copy twiddle region into flat array (N values starting at wsave[n]): + off = offsets[ i ]; + for ( j = 0; j < (unsigned int)n; j++ ) { + twiddles[ off + j ] = wsave[ n + 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, twiddles, num, total ); + + // Close the file: + fclose( f ); + + // Free allocated memory: + free( twiddles ); +} + +/** +* Computes offsets into a flat twiddle array for each sequence length. +* +* @param offsets output array of offsets +* @param lengths sequence lengths +* @param num number of sequence lengths +* @return total number of 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 ]; + } + 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/float64/rffti/test/fixtures/c/fftpack/small.json b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/test/fixtures/c/fftpack/small.json new file mode 100644 index 000000000000..843a8a90f932 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/test/fixtures/c/fftpack/small.json @@ -0,0 +1 @@ +{"lengths":[11,10,14,12,10,13,11,3,12,7],"offsets":[0,11,21,35,47,57,70,81,84,96],"twiddles":[0,0,0,0,0,0,0,0,0,0,0,0.80901699437494745,0.58778525229247314,0.30901699437494745,0.95105651629515353,0,0,0,0,0,0,0.90096886790241915,0.43388373911755812,0.62348980185873359,0.7818314824680298,0.22252093395631445,0.97492791218182362,0,0,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,0,0,0,0,0,0]} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/test/test.js b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/test/test.js new file mode 100644 index 000000000000..dbb843b8ba34 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/float64/rffti/test/test.js @@ -0,0 +1,231 @@ +/** +* @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 rffti = 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 rffti, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'the function has an arity of 4', function test( t ) { + t.strictEqual( rffti.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( ( 2*N ) + 34 ); + out = rffti( N, workspace, 1, 0 ); + + t.strictEqual( out, workspace, 'same reference' ); + 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 off; + 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 ]; + workspace = new Float64Array( ( 2*N ) + 34 ); + rffti( N, workspace, 1, 0 ); + + t.strictEqual( workspace[ N-1 ], 0.0, 'returns expected value' ); + for ( i = 0; i < N; i++ ) { + y = workspace[ N+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 off; + 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 ]; + workspace = new Float64Array( ( 2*N ) + 34 ); + rffti( N, workspace, 1, 0 ); + + t.strictEqual( workspace[ N-1 ], 0.0, 'returns expected value' ); + for ( i = 0; i < N; i++ ) { + y = workspace[ N+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 off; + 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 ]; + workspace = new Float64Array( ( 2*N ) + 34 ); + rffti( N, workspace, 1, 0 ); + + t.strictEqual( workspace[ N-1 ], 0.0, 'returns expected value' ); + for ( i = 0; i < N; i++ ) { + y = workspace[ N+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 N; + var i; + + N = 8; + workspace = new Float64Array( ( 2*N ) + 34 ); + + for ( i = 0; i < workspace.length; i++ ) { + workspace[ i ] = i + 1.0; + } + rffti( N, workspace, 1, 0 ); + for ( i = 0; i < N; i++ ) { + t.strictEqual( workspace[ i ], i + 1.0, 'returns expected value' ); + } + t.end(); +}); + +tape( 'the function does not modify the workspace when N is 1', function test( t ) { + var workspace; + var expected; + var N; + var i; + + N = 1; + workspace = new Float64Array( ( 2*N ) + 34 ); + for ( i = 0; i < workspace.length; i++ ) { + workspace[ i ] = i + 1.0; + } + expected = new Float64Array( workspace ); + + rffti( N, workspace, 1, 0 ); + + t.deepEqual( workspace, expected, '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 nf; + var N; + var i; + + N = 8; + stride = 2; + offset = 3; + workspace = new Float64Array( offset + ( ( ( 2*N ) + 34 ) * stride ) ); + + rffti( N, workspace, stride, offset ); + + t.strictEqual( workspace[ offset + ( 2*N * stride ) ], N, 'returns expected value' ); + + nf = workspace[ offset + ( ( ( 2*N ) + 1 ) * stride ) ]; + t.strictEqual( nf, 2, 'returns expected value' ); + t.strictEqual( workspace[ offset + ( ( ( 2*N ) + 2 ) * stride ) ], 2, 'returns expected value' ); + t.strictEqual( workspace[ offset + ( ( ( 2*N ) + 3 ) * stride ) ], 4, 'returns expected value' ); + + expected = new Float64Array( ( 2*N ) + 34 ); + rffti( N, expected, 1, 0 ); + + for ( i = 0; i < N; i++ ) { + t.strictEqual( workspace[ offset + ( ( N+i ) * stride ) ], expected[ N+i ], 'returns expected value' ); + } + t.end(); +});