From 047254ca3dbd2454825e2acba54801df30b62311 Mon Sep 17 00:00:00 2001 From: ivishal-g Date: Wed, 11 Feb 2026 16:55:20 +0530 Subject: [PATCH 1/4] feat: add math/base/special/sincospif --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: passed - task: lint_package_json status: passed - task: lint_repl_help status: passed - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: passed - task: lint_javascript_tests status: passed - task: lint_javascript_benchmarks status: passed - task: lint_python status: missing_dependencies - task: lint_r status: na - task: lint_c_src status: missing_dependencies - task: lint_c_examples status: missing_dependencies - task: lint_c_benchmarks status: missing_dependencies - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: passed - task: lint_license_headers status: passed --- --- .../math/base/special/sincospif/README.md | 223 ++++++++++++++++++ .../special/sincospif/benchmark/benchmark.js | 177 ++++++++++++++ .../sincospif/benchmark/benchmark.native.js | 64 +++++ .../special/sincospif/benchmark/c/Makefile | 127 ++++++++++ .../special/sincospif/benchmark/c/benchmark.c | 135 +++++++++++ .../sincospif/benchmark/c/native/Makefile | 146 ++++++++++++ .../sincospif/benchmark/c/native/benchmark.c | 135 +++++++++++ .../special/sincospif/benchmark/julia/REQUIRE | 2 + .../sincospif/benchmark/julia/benchmark.jl | 163 +++++++++++++ .../sincospif/benchmark/python/benchmark.py | 105 +++++++++ .../math/base/special/sincospif/binding.gyp | 170 +++++++++++++ .../math/base/special/sincospif/docs/repl.txt | 61 +++++ .../special/sincospif/docs/types/index.d.ts | 106 +++++++++ .../base/special/sincospif/docs/types/test.ts | 113 +++++++++ .../special/sincospif/examples/c/Makefile | 146 ++++++++++++ .../special/sincospif/examples/c/example.c | 32 +++ .../base/special/sincospif/examples/index.js | 31 +++ .../math/base/special/sincospif/include.gypi | 53 +++++ .../stdlib/math/base/special/sincospif.h | 38 +++ .../math/base/special/sincospif/lib/assign.js | 115 +++++++++ .../math/base/special/sincospif/lib/index.js | 67 ++++++ .../math/base/special/sincospif/lib/main.js | 58 +++++ .../math/base/special/sincospif/lib/native.js | 61 +++++ .../math/base/special/sincospif/manifest.json | 96 ++++++++ .../math/base/special/sincospif/package.json | 73 ++++++ .../math/base/special/sincospif/src/Makefile | 70 ++++++ .../math/base/special/sincospif/src/addon.c | 41 ++++ .../math/base/special/sincospif/src/main.c | 98 ++++++++ .../sincospif/test/fixtures/julia/REQUIRE | 2 + .../test/fixtures/julia/decimals.json | 1 + .../test/fixtures/julia/integers.json | 1 + .../sincospif/test/fixtures/julia/runner.jl | 72 ++++++ .../special/sincospif/test/test.assign.js | 218 +++++++++++++++++ .../math/base/special/sincospif/test/test.js | 40 ++++ .../base/special/sincospif/test/test.main.js | 142 +++++++++++ .../special/sincospif/test/test.native.js | 157 ++++++++++++ 36 files changed, 3339 insertions(+) create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/README.md create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/benchmark.js create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/benchmark.native.js create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/c/Makefile create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/c/benchmark.c create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/c/native/Makefile create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/c/native/benchmark.c create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/julia/REQUIRE create mode 100755 lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/julia/benchmark.jl create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/python/benchmark.py create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/binding.gyp create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/docs/repl.txt create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/docs/types/index.d.ts create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/docs/types/test.ts create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/examples/c/Makefile create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/examples/c/example.c create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/examples/index.js create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/include.gypi create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/include/stdlib/math/base/special/sincospif.h create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/lib/assign.js create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/lib/index.js create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/lib/main.js create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/lib/native.js create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/manifest.json create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/package.json create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/src/Makefile create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/src/addon.c create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/src/main.c create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/test/fixtures/julia/REQUIRE create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/test/fixtures/julia/decimals.json create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/test/fixtures/julia/integers.json create mode 100755 lib/node_modules/@stdlib/math/base/special/sincospif/test/fixtures/julia/runner.jl create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/test/test.assign.js create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/test/test.js create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/test/test.main.js create mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/test/test.native.js diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/README.md b/lib/node_modules/@stdlib/math/base/special/sincospif/README.md new file mode 100644 index 000000000000..6aa0918d0ed8 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/README.md @@ -0,0 +1,223 @@ + + +# sincospif + +> Simultaneously compute the [sinef][@stdlib/math/base/special/sinf] and [cosinef][@stdlib/math/base/special/cosf] of a single-precision floating-point number times [π][@stdlib/constants/float32/pi]. + +
+ +## Usage + +```javascript +var sincospif = require( '@stdlib/math/base/special/sincospif' ); +``` + +#### sincospif( x ) + +Simultaneously computes the [sinef][@stdlib/math/base/special/sinf] and [cosinef][@stdlib/math/base/special/cosf] of a single-precision floating-point number times [π][@stdlib/constants/float32/pi] more accurately than `sincos(pi*x)` when operating on single-precision floating-point values, especially for large `x`. + +```javascript +var v = sincospif( 0.0 ); +// returns [ 0.0, 1.0 ] + +v = sincospif( 0.5 ); +// returns [ 1.0, 0.0 ] + +v = sincospif( 0.1 ); +// returns [ ~0.309, ~0.951 ] + +v = sincospif( NaN ); +// returns [ NaN, NaN ] +``` + +#### sincospif( x, out, stride, offset ) + +Simultaneously computes the [sinef][@stdlib/math/base/special/sinf] and [cosinef][@stdlib/math/base/special/cosf] of a single-precision floating-point number times [π][@stdlib/constants/float32/pi] more accurately than `sincos(pi*x)`, especially for large `x`, and assigns results to a provided output array. + + + +```javascript +var Float32Array = require( '@stdlib/array/float32' ); + +var out = new Float32Array( 2 ); + +var v = sincospif.assign( 0.0, out, 1, 0 ); +// returns [ 0.0, 1.0 ] + +var bool = ( v === out ); +// returns true +``` + +
+ + + +
+ +## Examples + + + +```javascript +var linspace = require( '@stdlib/array/base/linspace' ); +var sincospif = require( '@stdlib/math/base/special/sincospif' ); + +var x = linspace( 0.0, 2.0, 101 ); + +var i; +for ( i = 0; i < x.length; i++ ) { + console.log( sincospif( x[ i ] ) ); +} +``` + +
+ + + + + +* * * + +
+ +## C APIs + + + +
+ +
+ + + + + +
+ +### Usage + +```c +#include "stdlib/math/base/special/sincospif.h" +``` + +#### stdlib_base_sincospif( x, &sine, &cosine ) + +Simultaneously computes the [sinef][@stdlib/math/base/special/sinf] and [cosinef][@stdlib/math/base/special/cosf] of a single-precision floating-point number times [π][@stdlib/constants/float32/pi] more accurately than `sincos(pi*x)`, especially for large `x`. + +```c +float cosine; +float sine; + +stdlib_base_sincospif( 4.0, &sine, &cosine ); +``` + +The function accepts the following arguments: + +- **x**: `[in] float` input value. +- **sine**: `[out] float*` destination for the sine. +- **cosine**: `[out] float*` destination for the cosine. + +```c +void stdlib_base_sincospif( const float x, float *sine, float *cosine ); +``` + +
+ + + + + +
+ +
+ + + + + +
+ +### Examples + +```c +#include "stdlib/math/base/special/sincospif.h" +#include + +int main( void ) { + const float x[] = { 0.0f, 0.5f, 1.0f, 2.0f }; + + float cosine; + float sine; + int i; + for ( i = 0; i < 4; i++ ) { + stdlib_base_sincospif( x[ i ], &sine, &cosine ); + printf( "x: %f => sine: %f, cosine: %f\n", x[ i ], sine, cosine ); + } +} +``` + +
+ + + +
+ + + + + + + + + + + + + + diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/benchmark.js b/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/benchmark.js new file mode 100644 index 000000000000..71c5e4734d2d --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/benchmark.js @@ -0,0 +1,177 @@ +/** +* @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 uniform = require( '@stdlib/random/array/uniform' ); +var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); +var sinpif = require( '@stdlib/math/base/special/sinpif' ); +var cospif = require( '@stdlib/math/base/special/cospif' ); +var PIF = require( '@stdlib/constants/float32/pi' ); +var format = require( '@stdlib/string/format' ); +var Float32Array = require( '@stdlib/array/float32' ); +var pkg = require( './../package.json' ).name; +var sincospif = require( './../lib' ); + + +// MAIN // + +bench( pkg, function benchmark( b ) { + var x; + var y; + var i; + + x = uniform( 100, -10.0, 10.0 ); + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + y = sincospif( x[ i % x.length ] ); + if ( isnanf( y[ 0 ] ) || isnanf( y[ 1 ] ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnanf( y[ 0 ] ) || isnanf( y[ 1 ] ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); +}); + +bench( format( '%s::separate-evaluation', pkg ), function benchmark( b ) { + var x; + var y; + var i; + + x = uniform( 100, -10.0, 10.0 ); + y = new Float32Array( 2 ); + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + y[ 0 ] = sinpif( x[ i % x.length ] ); + y[ 1 ] = cospif( x[ i % x.length ] ); + if ( isnanf( y[ 0 ] ) || isnanf( y[ 1 ] ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnanf( y[ 0 ] ) || isnanf( y[ 1 ] ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); +}); + +bench( format( '%s:assign', pkg ), function benchmark( b ) { + var x; + var y; + var i; + + x = uniform( 100, -10.0, 10.0 ); + y = new Float32Array( 2 ); + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + sincospif.assign( x[ i % x.length ], y, 1, 0 ); + if ( isnanf( y[ 0 ] ) || isnanf( y[ 1 ] ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnanf( y[ 0 ] ) || isnanf( y[ 1 ] ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); +}); + +bench( format( '%s::separate-evaluation,in-place', pkg ), function benchmark( b ) { + var x; + var y; + var i; + + x = uniform( 100, -10.0, 10.0, { + 'dtype': 'float32' + }); + y = new Float32Array( 2 ); + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + y[ 0 ] = sinpif( x[ i%x.length ] ); + y[ 1 ] = cospif( x[ i%x.length ] ); + if ( isnanf( y[ 0 ] ) || isnanf( y[ 1 ] ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnanf( y[ 0 ] ) || isnanf( y[ 1 ] ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); +}); + +bench( format( '%s::built-in', pkg ), function benchmark( b ) { + var x; + var y; + var i; + + x = uniform( 100, -10.0, 10.0 ); + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + y = [ + Math.sin( PIF * x[ i % x.length ] ) ]; // eslint-disable-line stdlib/no-builtin-math + if ( isnanf( y[ 0 ] ) || isnanf( y[ 1 ] ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnanf( y[ 0 ] ) || isnanf( y[ 1 ] ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); +}); + +bench( format( '%s::built-in,in-place', pkg ), function benchmark( b ) { + var x; + var y; + var i; + + x = uniform( 100, -10.0, 10.0 ); + y = new Float32Array( 2 ); + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + y[ 0 ] = Math.sin( PIF * x[ i % x.length ] ); // eslint-disable-line stdlib/no-builtin-math + y[ 1 ] = Math.cos( PIF * x[ i % x.length ] ); // eslint-disable-line stdlib/no-builtin-math + if ( isnanf( y[ 0 ] ) || isnanf( y[ 1 ] ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnanf( y[ 0 ] ) || isnanf( y[ 1 ] ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); +}); diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/benchmark.native.js b/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/benchmark.native.js new file mode 100644 index 000000000000..189e4ed7dd3f --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/benchmark.native.js @@ -0,0 +1,64 @@ +/** +* @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 resolve = require( 'path' ).resolve; +var bench = require( '@stdlib/bench' ); +var uniform = require( '@stdlib/random/array/uniform' ); +var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); +var tryRequire = require( '@stdlib/utils/try-require' ); +var format = require( '@stdlib/string/format' ); +var pkg = require( './../package.json' ).name; + + +// VARIABLES // + +var sincospif = tryRequire( resolve( __dirname, './../lib/native.js' ) ); +var opts = { + 'skip': ( sincospif instanceof Error ) +}; + + +// MAIN // + +bench( format( '%s::native', pkg ), opts, function benchmark( b ) { + var x; + var y; + var i; + + x = uniform( 100, -10.0, 10.0, { + 'dtype': 'float32' + }); + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + y = sincospif( x[ i%x.length ] ); + if ( isnanf( y[ 0 ] ) || isnanf( y[ 1 ] ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnanf( y[ 0 ] ) || isnanf( y[ 1 ] ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); +}); diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/c/Makefile b/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/c/Makefile new file mode 100644 index 000000000000..928de45a1a06 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/c/Makefile @@ -0,0 +1,127 @@ +#/ +# @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 := @ +else + QUIET := +endif + +# Determine the OS ([1][1], [2][2]). +# +# [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 +else +ifneq (, $(findstring Windows_NT,$(OS))) + OS := WINNT +endif +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], [2][2]). +# +# [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 := benchmark.out + + +# RULES # + +#/ +# Compiles C source files. +# +# @param {string} [C_COMPILER] - C compiler +# @param {string} [CFLAGS] - C compiler flags +# @param {(string|void)} [fPIC] - compiler 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 - compiler flag indicating whether to generate position independent code +#/ +$(c_targets): %.out: %.c + $(QUIET) $(CC) $(CFLAGS) $(fPIC) -o $@ $< -lm + +#/ +# Runs compiled benchmarks. +# +# @example +# make run +#/ +run: $(c_targets) + $(QUIET) ./$< + +.PHONY: run + +#/ +# Removes generated files. +# +# @example +# make clean +#/ +clean: + $(QUIET) -rm -f *.o *.out + +.PHONY: clean diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/c/benchmark.c b/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/c/benchmark.c new file mode 100644 index 000000000000..d85f798a1fe8 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/c/benchmark.c @@ -0,0 +1,135 @@ +/** +* @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. +*/ + +#include "stdlib/math/base/special/sincospif.h" +#include +#include +#include +#include + +#define NAME "sincospif" +#define ITERATIONS 1000000 +#define REPEATS 3 + +/** +* Prints the TAP version. +*/ +static void print_version( void ) { + printf( "TAP version 13\n" ); +} + +/** +* Prints the TAP summary. +* +* @param total total number of tests +* @param passing total number of passing tests +*/ +static void print_summary( int total, int passing ) { + printf( "#\n" ); + printf( "1..%d\n", total ); // TAP plan + printf( "# total %d\n", total ); + printf( "# pass %d\n", passing ); + printf( "#\n" ); + printf( "# ok\n" ); +} + +/** +* Prints benchmarks results. +* +* @param elapsed elapsed time in seconds +*/ +static void print_results( double elapsed ) { + double rate = (double)ITERATIONS / elapsed; + printf( " ---\n" ); + printf( " iterations: %d\n", ITERATIONS ); + printf( " elapsed: %0.9f\n", elapsed ); + printf( " rate: %0.9f\n", rate ); + printf( " ...\n" ); +} + +/** +* Returns a clock time. +* +* @return clock time +*/ +static double tic( void ) { + struct timeval now; + gettimeofday( &now, NULL ); + return (double)now.tv_sec + (double)now.tv_usec/1.0e6; +} + +/** +* Generates a random number on the interval [0,1). +* +* @return random number +*/ +static float rand_float( void ) { + return (float)( ( 20.0 * rand() ) / ( (double)RAND_MAX + 1.0 ) - 10.0 ); +} + +/** +* Runs a benchmark. +* +* @return elapsed time in seconds +*/ +static double benchmark( void ) { + float x[ 100 ]; + double elapsed; + float sine; + float cosine; + double t; + int i; + + for ( i = 0; i < 100; i++ ) { + x[ i ] = rand_float(); + } + + t = tic(); + for ( i = 0; i < ITERATIONS; i++ ) { + stdlib_base_sincospif( x[ i%100 ], &sine, &cosine ); + if ( sine != sine || cosine != cosine ) { + printf( "should not return NaN\n" ); + break; + } + } + elapsed = tic() - t; + if ( sine != sine || cosine != cosine ) { + printf( "should not return NaN\n" ); + } + return elapsed; +} + +/** +* Main execution sequence. +*/ +int main( void ) { + double elapsed; + int i; + + // Use the current time to seed the random number generator: + srand( time( NULL ) ); + + print_version(); + for ( i = 0; i < REPEATS; i++ ) { + printf( "# c::%s\n", NAME ); + elapsed = benchmark(); + print_results( elapsed ); + printf( "ok %d benchmark finished\n", i+1 ); + } + print_summary( REPEATS, REPEATS ); +} diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/c/native/Makefile b/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/c/native/Makefile new file mode 100644 index 000000000000..979768abbcec --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/c/native/Makefile @@ -0,0 +1,146 @@ +#/ +# @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 := @ +else + QUIET := +endif + +# Determine the OS ([1][1], [2][2]). +# +# [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 +else +ifneq (, $(findstring Windows_NT,$(OS))) + OS := WINNT +endif +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], [2][2]). +# +# [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 includes (e.g., `-I /foo/bar -I /beep/boop/include`): +INCLUDE ?= + +# List of source files: +SOURCE_FILES ?= + +# List of libraries (e.g., `-lopenblas -lpthread`): +LIBRARIES ?= + +# List of library paths (e.g., `-L /foo/bar -L /beep/boop`): +LIBPATH ?= + +# List of C targets: +c_targets := benchmark.out + + +# RULES # + +#/ +# Compiles source files. +# +# @param {string} [C_COMPILER] - C compiler (e.g., `gcc`) +# @param {string} [CFLAGS] - C compiler options +# @param {(string|void)} [fPIC] - compiler flag determining whether to generate position independent code (e.g., `-fPIC`) +# @param {string} [INCLUDE] - list of includes (e.g., `-I /foo/bar -I /beep/boop/include`) +# @param {string} [SOURCE_FILES] - list of source files +# @param {string} [LIBPATH] - list of library paths (e.g., `-L /foo/bar -L /beep/boop`) +# @param {string} [LIBRARIES] - list of libraries (e.g., `-lopenblas -lpthread`) +# +# @example +# make +# +# @example +# make all +#/ +all: $(c_targets) + +.PHONY: all + +#/ +# Compiles C source files. +# +# @private +# @param {string} CC - C compiler (e.g., `gcc`) +# @param {string} CFLAGS - C compiler options +# @param {(string|void)} fPIC - compiler flag determining whether to generate position independent code (e.g., `-fPIC`) +# @param {string} INCLUDE - list of includes (e.g., `-I /foo/bar`) +# @param {string} SOURCE_FILES - list of source files +# @param {string} LIBPATH - list of library paths (e.g., `-L /foo/bar`) +# @param {string} LIBRARIES - list of libraries (e.g., `-lopenblas`) +#/ +$(c_targets): %.out: %.c + $(QUIET) $(CC) $(CFLAGS) $(fPIC) $(INCLUDE) -o $@ $(SOURCE_FILES) $< $(LIBPATH) -lm $(LIBRARIES) + +#/ +# Runs compiled benchmarks. +# +# @example +# make run +#/ +run: $(c_targets) + $(QUIET) ./$< + +.PHONY: run + +#/ +# Removes generated files. +# +# @example +# make clean +#/ +clean: + $(QUIET) -rm -f *.o *.out + +.PHONY: clean diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/c/native/benchmark.c b/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/c/native/benchmark.c new file mode 100644 index 000000000000..e30a538b799c --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/c/native/benchmark.c @@ -0,0 +1,135 @@ +/** +* @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. +*/ + +#include "stdlib/math/base/special/sincospif.h" +#include +#include +#include +#include +#include + +#define NAME "sincospif" +#define ITERATIONS 1000000 +#define REPEATS 3 + +/** +* Prints the TAP version. +*/ +static void print_version( void ) { + printf( "TAP version 13\n" ); +} + +/** +* Prints the TAP summary. +* +* @param total total number of tests +* @param passing total number of passing tests +*/ +static void print_summary( int total, int passing ) { + printf( "#\n" ); + printf( "1..%d\n", total ); + printf( "# total %d\n", total ); + printf( "# pass %d\n", passing ); + printf( "#\n" ); + printf( "# ok\n" ); +} + +/** +* Prints benchmark results. +* +* @param elapsed elapsed time in seconds +*/ +static void print_results( double elapsed ) { + double rate = (double)ITERATIONS / elapsed; + printf( " ---\n" ); + printf( " iterations: %d\n", ITERATIONS ); + printf( " elapsed: %0.9f\n", elapsed ); + printf( " rate: %0.9f\n", rate ); + printf( " ...\n" ); +} + +/** +* Returns a clock time. +* +* @return clock time +*/ +static double tic( void ) { + struct timeval now; + gettimeofday( &now, NULL ); + return (double)now.tv_sec + (double)now.tv_usec / 1.0e6; +} + +/** +* Generates a random number on the interval [0,1). +* +* @return random number +*/ +static float rand_float( void ) { + return (float)( ( 20.0 * rand() ) / ( (double)RAND_MAX + 1.0 ) - 10.0 ); +} + +/** +* Runs a benchmark. +* +* @return elapsed time in seconds +*/ +static double benchmark( void ) { + float x[ 100 ]; + float sine; + float cosine; + double elapsed; + double t; + int i; + + for ( i = 0; i < 100; i++ ) { + x[ i ] = rand_float(); + } + + t = tic(); + for ( i = 0; i < ITERATIONS; i++ ) { + stdlib_base_sincospif( x[ i%100 ], &sine, &cosine ); + if ( isnanf( sine ) || isnanf( cosine ) ) { + printf( "unexpected results\n" ); + break; + } + } + elapsed = tic() - t; + if ( isnanf( sine ) || isnanf( cosine ) ) { + printf( "unexpected results\n" ); + } + return elapsed; +} + +/** +* Main execution sequence. +*/ +int main( void ) { + double elapsed; + int i; + + srand( time( NULL ) ); + + print_version(); + for ( i = 0; i < REPEATS; i++ ) { + printf( "# c::native::%s\n", NAME ); + elapsed = benchmark(); + print_results( elapsed ); + printf( "ok %d benchmark finished\n", i+1 ); + } + print_summary( REPEATS, REPEATS ); +} diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/julia/REQUIRE b/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/julia/REQUIRE new file mode 100644 index 000000000000..98645e192e41 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/julia/REQUIRE @@ -0,0 +1,2 @@ +julia 1.5 +BenchmarkTools 0.5.0 diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/julia/benchmark.jl b/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/julia/benchmark.jl new file mode 100755 index 000000000000..58c36cf58ba3 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/julia/benchmark.jl @@ -0,0 +1,163 @@ +#!/usr/bin/env julia +# +# @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 BenchmarkTools +using Printf + +# Benchmark variables: +name = "sincospif"; +repeats = 3; + +""" + print_version() + +Prints the TAP version. + +# Examples + +``` julia +julia> print_version() +``` +""" +function print_version() + @printf( "TAP version 13\n" ); +end + +""" + print_summary( total, passing ) + +Print the benchmark summary. + +# Arguments + +* `total`: total number of tests +* `passing`: number of passing tests + +# Examples + +``` julia +julia> print_summary( 3, 3 ) +``` +""" +function print_summary( total, passing ) + @printf( "#\n" ); + @printf( "1..%d\n", total ); # TAP plan + @printf( "# total %d\n", total ); + @printf( "# pass %d\n", passing ); + @printf( "#\n" ); + @printf( "# ok\n" ); +end + +""" + print_results( iterations, elapsed ) + +Print benchmark results. + +# Arguments + +* `iterations`: number of iterations +* `elapsed`: elapsed time (in seconds) + +# Examples + +``` julia +julia> print_results( 1000000, 0.131009101868 ) +``` +""" +function print_results( iterations, elapsed ) + rate = iterations / elapsed + + @printf( " ---\n" ); + @printf( " iterations: %d\n", iterations ); + @printf( " elapsed: %0.9f\n", elapsed ); + @printf( " rate: %0.9f\n", rate ); + @printf( " ...\n" ); +end + +""" + sincospif( x ) + +Compute the sine and cosine of a number (since sincospif is not directly exposed in julia). + +# Arguments + +* `x`: input value + +# Examples + +``` julia +julia> sincospif( 0.0 ) +``` +""" +function sincospif( x ) + Float32[ sinpi( Float64(x) ), cospi( Float64(x) ) ]; +end + +""" + benchmark() + +Run a benchmark. + +# Notes + +* Benchmark results are returned as a two-element array: [ iterations, elapsed ]. +* The number of iterations is not the true number of iterations. Instead, an 'iteration' is defined as a 'sample', which is a computed estimate for a single evaluation. +* The elapsed time is in seconds. + +# Examples + +``` julia +julia> out = benchmark(); +``` +""" +function benchmark() + t = BenchmarkTools.@benchmark $sincospif( Float32( (20.0*rand()) - 10.0 ) ) samples=1e6 + + # Compute the total "elapsed" time and convert from nanoseconds to seconds: + s = sum( t.times ) / 1.0e9; + + # Determine the number of "iterations": + iter = length( t.times ); + + # Return the results: + [ iter, s ]; +end + +""" + main() + +Run benchmarks. + +# Examples + +``` julia +julia> main(); +``` +""" +function main() + print_version(); + for i in 1:repeats + @printf( "# julia::%s\n", name ); + results = benchmark(); + print_results( results[ 1 ], results[ 2 ] ); + @printf( "ok %d benchmark finished\n", i ); + end + print_summary( repeats, repeats ); +end + +main(); diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/python/benchmark.py b/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/python/benchmark.py new file mode 100644 index 000000000000..af06f07e142a --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/python/benchmark.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python +# +# @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. + +"""Benchmark sincospif.""" + +from __future__ import print_function +import timeit + +NAME = "sincospif" +REPEATS = 3 +ITERATIONS = 1000000 + + +def print_version(): + """Print the TAP version.""" + print("TAP version 13") + + +def print_summary(total, passing): + """Print the benchmark summary. + + # Arguments + + * `total`: total number of tests + * `passing`: number of passing tests + + """ + print("#") + print("1.." + str(total)) # TAP plan + print("# total " + str(total)) + print("# pass " + str(passing)) + print("#") + print("# ok") + + +def print_results(elapsed): + """Print benchmark results. + + # Arguments + + * `elapsed`: elapsed time (in seconds) + + # Examples + + ``` python + python> print_results(0.131009101868) + ``` + """ + rate = ITERATIONS / elapsed + + print(" ---") + print(" iterations: " + str(ITERATIONS)) + print(" elapsed: " + str(elapsed)) + print(" rate: " + str(rate)) + print(" ...") + + +def benchmark(): + """Run the benchmark and print benchmark results.""" + setup = ( + "import numpy as np;" + "from math import pi;" + "from random import random;" + ) + stmt = ( + "x = np.float32(20.0*random() - 10.0);" + "y = np.float32(np.sin(np.float64(pi) * np.float64(x)));" + "z = np.float32(np.cos(np.float64(pi) * np.float64(x)))" + ) + + t = timeit.Timer(stmt, setup=setup) + + print_version() + + for i in range(REPEATS): + print("# python::" + NAME) + elapsed = t.timeit(number=ITERATIONS) + print_results(elapsed) + print("ok " + str(i+1) + " benchmark finished") + + print_summary(REPEATS, REPEATS) + + +def main(): + """Run the benchmark.""" + benchmark() + + +if __name__ == "__main__": + main() diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/binding.gyp b/lib/node_modules/@stdlib/math/base/special/sincospif/binding.gyp new file mode 100644 index 000000000000..0d6508a12e99 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/binding.gyp @@ -0,0 +1,170 @@ +# @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. + +# A `.gyp` file for building a Node.js native add-on. +# +# [1]: https://gyp.gsrc.io/docs/InputFormatReference.md +# [2]: https://gyp.gsrc.io/docs/UserDocumentation.md +{ + # List of files to include in this file: + 'includes': [ + './include.gypi', + ], + + # Define variables to be used throughout the configuration for all targets: + 'variables': { + # Target name should match the add-on export name: + 'addon_target_name%': 'addon', + + # Set variables based on the host OS: + 'conditions': [ + [ + 'OS=="win"', + { + # Define the object file suffix: + 'obj': 'obj', + }, + { + # Define the object file suffix: + 'obj': 'o', + } + ], # end condition (OS=="win") + ], # end conditions + }, # end variables + + # Define compile targets: + 'targets': [ + + # Target to generate an add-on: + { + # The target name should match the add-on export name: + 'target_name': '<(addon_target_name)', + + # Define dependencies: + 'dependencies': [], + + # Define directories which contain relevant include headers: + 'include_dirs': [ + # Local include directory: + '<@(include_dirs)', + ], + + # List of source files: + 'sources': [ + '<@(src_files)', + ], + + # Settings which should be applied when a target's object files are used as linker input: + 'link_settings': { + # Define libraries: + 'libraries': [ + '<@(libraries)', + ], + + # Define library directories: + 'library_dirs': [ + '<@(library_dirs)', + ], + }, + + # C/C++ compiler flags: + 'cflags': [ + # Enable commonly used warning options: + '-Wall', + + # Aggressive optimization: + '-O3', + ], + + # C specific compiler flags: + 'cflags_c': [ + # Specify the C standard to which a program is expected to conform: + '-std=c99', + ], + + # C++ specific compiler flags: + 'cflags_cpp': [ + # Specify the C++ standard to which a program is expected to conform: + '-std=c++11', + ], + + # Linker flags: + 'ldflags': [], + + # Apply conditions based on the host OS: + 'conditions': [ + [ + 'OS=="mac"', + { + # Linker flags: + 'ldflags': [ + '-undefined dynamic_lookup', + '-Wl,-no-pie', + '-Wl,-search_paths_first', + ], + }, + ], # end condition (OS=="mac") + [ + 'OS!="win"', + { + # C/C++ flags: + 'cflags': [ + # Generate platform-independent code: + '-fPIC', + ], + }, + ], # end condition (OS!="win") + ], # end conditions + }, # end target <(addon_target_name) + + # Target to copy a generated add-on to a standard location: + { + 'target_name': 'copy_addon', + + # Declare that the output of this target is not linked: + 'type': 'none', + + # Define dependencies: + 'dependencies': [ + # Require that the add-on be generated before building this target: + '<(addon_target_name)', + ], + + # Define a list of actions: + 'actions': [ + { + 'action_name': 'copy_addon', + 'message': 'Copying addon...', + + # Explicitly list the inputs in the command-line invocation below: + 'inputs': [], + + # Declare the expected outputs: + 'outputs': [ + '<(addon_output_dir)/<(addon_target_name).node', + ], + + # Define the command-line invocation: + 'action': [ + 'cp', + '<(PRODUCT_DIR)/<(addon_target_name).node', + '<(addon_output_dir)/<(addon_target_name).node', + ], + }, + ], # end actions + }, # end target copy_addon + ], # end targets +} diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/docs/repl.txt b/lib/node_modules/@stdlib/math/base/special/sincospif/docs/repl.txt new file mode 100644 index 000000000000..de953061fcac --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/docs/repl.txt @@ -0,0 +1,61 @@ + +{{alias}}( x ) + Simultaneously computes the sine and cosine of a number times π + using single-precision floating-point arithmetic. + + Parameters + ---------- + x: number + Input value. + + Returns + ------- + y: Array + Two-element array containing sin(πx) and cos(πx). + + Examples + -------- + > var y = {{alias}}( 0.0 ) + [ 0.0, 1.0 ] + > y = {{alias}}( 0.5 ) + [ 1.0, 0.0 ] + > y = {{alias}}( 0.1 ) + [ ~0.309, ~0.951 ] + > y = {{alias}}( NaN ) + [ NaN, NaN ] + + +{{alias}}.assign( x, out, stride, offset ) + Simultaneously computes the sine and cosine of a number times π + using single-precision floating-point arithmetic and assigns results + to a provided output array. + + Parameters + ---------- + x: number + Input value. + + out: Array|TypedArray|Object + Output array. + + stride: integer + Output array stride. + + offset: integer + Output array index offset. + + Returns + ------- + y: TypedArray + Two-element array containing sin(πx) and cos(πx). + + Examples + -------- + > var out = new {{alias:@stdlib/array/float32}}( 2 ); + > var v = {{alias}}.assign( 0.0, out, 1, 0 ) + [ 0.0, 1.0 ] + > var bool = ( v === out ) + true + + See Also + -------- diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/docs/types/index.d.ts b/lib/node_modules/@stdlib/math/base/special/sincospif/docs/types/index.d.ts new file mode 100644 index 000000000000..529ee7888dd9 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/docs/types/index.d.ts @@ -0,0 +1,106 @@ +/* +* @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 + +/// + + +/** +* Interface describing `sincospif`. +*/ +interface SinCosPif { + /** + * Simultaneously computes the sine and cosine of a number times π using + * single-precision floating-point arithmetic. + * + * @param x - input value + * @returns two-element array containing sin(πx) and cos(πx) + * + * @example + * var v = sincospif( 0.0 ); + * // returns [ 0.0, 1.0 ] + * + * @example + * var v = sincospif( 0.5 ); + * // returns [ 1.0, 0.0 ] + * + * @example + * var v = sincospif( 0.1 ); + * // returns [ ~0.309, ~0.951 ] + * + * @example + * var v = sincospif( NaN ); + * // returns [ NaN, NaN ] + */ + ( x: number ): Array; + + /** + * Simultaneously computes the sine and cosine of a number times π using + * single-precision floating-point arithmetic and assigns results to a + * provided output array. + * + * @param x - input value + * @param out - output array + * @param stride - output array stride + * @param offset - output array index offset + * @returns two-element array containing sin(πx) and cos(πx) + * + * @example + * var Float32Array = require( '@stdlib/array/float32' ); + * + * var out = new Float32Array( 2 ); + * + * var v = sincospif.assign( 0.0, out, 1, 0 ); + * // returns [ 0.0, 1.0 ] + * + * var bool = ( v === out ); + * // returns true + */ + assign>( x: number, out: T, stride: number, offset: number ): T; +} + +/** +* Simultaneously computes the sine and cosine of a number times π using +* single-precision floating-point arithmetic. +* +* @param x - input value +* @returns two-element array containing sin(πx) and cos(πx) +* +* @example +* var v = sincospif( 0.0 ); +* // returns [ 0.0, 1.0 ] +* +* @example +* var v = sincospif( 0.5 ); +* // returns [ 1.0, 0.0 ] +* +* @example +* var v = sincospif( 0.1 ); +* // returns [ ~0.309, ~0.951 ] +* +* @example +* var v = sincospif( NaN ); +* // returns [ NaN, NaN ] +*/ +declare var sincospif: SinCosPif; + + +// EXPORTS // + +export = sincospif; diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/docs/types/test.ts b/lib/node_modules/@stdlib/math/base/special/sincospif/docs/types/test.ts new file mode 100644 index 000000000000..9bd91e25be2b --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/docs/types/test.ts @@ -0,0 +1,113 @@ +/* +* @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 sincospif = require( './index' ); + + +// TESTS // + +// The function returns a numeric array... +{ + sincospif( 1.0 ); // $ExpectType number[] +} + +// The compiler throws an error if the function is provided an argument other than a number... +{ + sincospif( true ); // $ExpectError + sincospif( false ); // $ExpectError + sincospif( null ); // $ExpectError + sincospif( undefined ); // $ExpectError + sincospif( '5' ); // $ExpectError + sincospif( [] ); // $ExpectError + sincospif( {} ); // $ExpectError + sincospif( ( x: number ): number => x ); // $ExpectError +} + +// The compiler throws an error if the function is provided an unsupported number of arguments... +{ + sincospif(); // $ExpectError + sincospif( 1.0, 1.0 ); // $ExpectError +} + +// Attached to the main export is an `assign` method which returns an array-like object containing numbers... +{ + const out = [ 0.0, 0.0 ]; + + sincospif.assign( 3.14e-319, out, 1, 0 ); // $ExpectType number[] +} + +// The compiler throws an error if the `assign` method is provided a first argument which is not a number... +{ + const out = [ 0.0, 0.0 ]; + + sincospif.assign( true, out, 1, 0 ); // $ExpectError + sincospif.assign( false, out, 1, 0 ); // $ExpectError + sincospif.assign( '5', out, 1, 0 ); // $ExpectError + sincospif.assign( null, out, 1, 0 ); // $ExpectError + sincospif.assign( [], out, 1, 0 ); // $ExpectError + sincospif.assign( {}, out, 1, 0 ); // $ExpectError + sincospif.assign( ( x: number ): number => x, out, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the `assign` method is provided a second argument which is not an array-like object... +{ + sincospif.assign( 1.0, 1, 1, 0 ); // $ExpectError + sincospif.assign( 1.0, true, 1, 0 ); // $ExpectError + sincospif.assign( 1.0, false, 1, 0 ); // $ExpectError + sincospif.assign( 1.0, null, 1, 0 ); // $ExpectError + sincospif.assign( 1.0, {}, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the `assign` method is provided a third argument which is not a number... +{ + const out = [ 0.0, 0.0 ]; + + sincospif.assign( 1.0, out, '5', 0 ); // $ExpectError + sincospif.assign( 1.0, out, true, 0 ); // $ExpectError + sincospif.assign( 1.0, out, false, 0 ); // $ExpectError + sincospif.assign( 1.0, out, null, 0 ); // $ExpectError + sincospif.assign( 1.0, out, [], 0 ); // $ExpectError + sincospif.assign( 1.0, out, {}, 0 ); // $ExpectError + sincospif.assign( 1.0, out, ( x: number ): number => x, 0 ); // $ExpectError +} + +// The compiler throws an error if the `assign` method is provided a fourth argument which is not a number... +{ + const out = [ 0.0, 0.0 ]; + + sincospif.assign( 1.0, out, 1, '5' ); // $ExpectError + sincospif.assign( 1.0, out, 1, true ); // $ExpectError + sincospif.assign( 1.0, out, 1, false ); // $ExpectError + sincospif.assign( 1.0, out, 1, null ); // $ExpectError + sincospif.assign( 1.0, out, 1, [] ); // $ExpectError + sincospif.assign( 1.0, out, 1, {} ); // $ExpectError + sincospif.assign( 1.0, out, 1, ( x: number ): number => x ); // $ExpectError +} + +// The compiler throws an error if the `assign` method is provided an unsupported number of arguments... +{ + const out = [ 0.0, 0.0 ]; + + sincospif.assign(); // $ExpectError + sincospif.assign( 1.0 ); // $ExpectError + sincospif.assign( 1.0, out ); // $ExpectError + sincospif.assign( 1.0, out, 1 ); // $ExpectError + sincospif.assign( 1.0, out, 1, 0, 1 ); // $ExpectError +} diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/examples/c/Makefile b/lib/node_modules/@stdlib/math/base/special/sincospif/examples/c/Makefile new file mode 100644 index 000000000000..c8f8e9a1517b --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/examples/c/Makefile @@ -0,0 +1,146 @@ +#/ +# @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 := @ +else + QUIET := +endif + +# Determine the OS ([1][1], [2][2]). +# +# [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 +else +ifneq (, $(findstring Windows_NT,$(OS))) + OS := WINNT +endif +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], [2][2]). +# +# [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 includes (e.g., `-I /foo/bar -I /beep/boop/include`): +INCLUDE ?= + +# List of source files: +SOURCE_FILES ?= + +# List of libraries (e.g., `-lopenblas -lpthread`): +LIBRARIES ?= + +# List of library paths (e.g., `-L /foo/bar -L /beep/boop`): +LIBPATH ?= + +# List of C targets: +c_targets := example.out + + +# RULES # + +#/ +# Compiles source files. +# +# @param {string} [C_COMPILER] - C compiler (e.g., `gcc`) +# @param {string} [CFLAGS] - C compiler options +# @param {(string|void)} [fPIC] - compiler flag determining whether to generate position independent code (e.g., `-fPIC`) +# @param {string} [INCLUDE] - list of includes (e.g., `-I /foo/bar -I /beep/boop/include`) +# @param {string} [SOURCE_FILES] - list of source files +# @param {string} [LIBPATH] - list of library paths (e.g., `-L /foo/bar -L /beep/boop`) +# @param {string} [LIBRARIES] - list of libraries (e.g., `-lopenblas -lpthread`) +# +# @example +# make +# +# @example +# make all +#/ +all: $(c_targets) + +.PHONY: all + +#/ +# Compiles C source files. +# +# @private +# @param {string} CC - C compiler (e.g., `gcc`) +# @param {string} CFLAGS - C compiler options +# @param {(string|void)} fPIC - compiler flag determining whether to generate position independent code (e.g., `-fPIC`) +# @param {string} INCLUDE - list of includes (e.g., `-I /foo/bar`) +# @param {string} SOURCE_FILES - list of source files +# @param {string} LIBPATH - list of library paths (e.g., `-L /foo/bar`) +# @param {string} LIBRARIES - list of libraries (e.g., `-lopenblas`) +#/ +$(c_targets): %.out: %.c + $(QUIET) $(CC) $(CFLAGS) $(fPIC) $(INCLUDE) -o $@ $(SOURCE_FILES) $< $(LIBPATH) -lm $(LIBRARIES) + +#/ +# Runs compiled examples. +# +# @example +# make run +#/ +run: $(c_targets) + $(QUIET) ./$< + +.PHONY: run + +#/ +# Removes generated files. +# +# @example +# make clean +#/ +clean: + $(QUIET) -rm -f *.o *.out + +.PHONY: clean diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/examples/c/example.c b/lib/node_modules/@stdlib/math/base/special/sincospif/examples/c/example.c new file mode 100644 index 000000000000..b058bd008596 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/examples/c/example.c @@ -0,0 +1,32 @@ +/** +* @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. +*/ + +#include "stdlib/math/base/special/sincospif.h" +#include + +int main( void ) { + const float x[] = { 0.0f, 0.5f, 1.0f, 2.0f }; + + float cosine; + float sine; + int i; + for ( i = 0; i < 4; i++ ) { + stdlib_base_sincospif( x[ i ], &sine, &cosine ); + printf( "x: %f => sine: %f, cosine: %f\n", x[ i ], sine, cosine ); + } +} diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/examples/index.js b/lib/node_modules/@stdlib/math/base/special/sincospif/examples/index.js new file mode 100644 index 000000000000..68fef5dc3686 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/examples/index.js @@ -0,0 +1,31 @@ +/** +* @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 linspace = require( '@stdlib/array/base/linspace' ); +var sincospif = require( './../lib' ); + +var x = linspace( 0.0, 2.0, 101 ); + +var y; +var i; +for ( i = 0; i < x.length; i++ ) { + y = sincospif( x[ i ] ); + console.log( 'sincospif(%d) = [ %d, %d ]', x[ i ], y[ 0 ], y[ 1 ] ); +} diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/include.gypi b/lib/node_modules/@stdlib/math/base/special/sincospif/include.gypi new file mode 100644 index 000000000000..bee8d41a2caf --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/include.gypi @@ -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. + +# A GYP include file for building a Node.js native add-on. +# +# Main documentation: +# +# [1]: https://gyp.gsrc.io/docs/InputFormatReference.md +# [2]: https://gyp.gsrc.io/docs/UserDocumentation.md +{ + # Define variables to be used throughout the configuration for all targets: + 'variables': { + # Source directory: + 'src_dir': './src', + + # Include directories: + 'include_dirs': [ + '[ 0.0, 1.0 ] +* +* v = sincospif( 0.5 ); +* // returns [ 1.0, 0.0 ] +* +* v = sincospif( 0.1 ); +* // returns [ ~0.309, ~0.951 ] +* +* v = sincospif( NaN ); +* // returns [ NaN, NaN ] +* +* @example +* var sincospif = require( '@stdlib/math/base/special/sincospif' ); +* +* var out = new Float32Array( 2 ); +* +* var v = sincospif.assign( 0.0, out, 1, 0 ); +* // returns [ 0.0, 1.0 ] +* +* var bool = ( v === out ); +* // returns true +*/ + +// MODULES // + +var setReadOnly = require( '@stdlib/utils/define-nonenumerable-read-only-property' ); +var main = require( './main.js' ); +var assign = require( './assign.js' ); + + +// MAIN // + +setReadOnly( main, 'assign', assign ); + + +// EXPORTS // + +module.exports = main; diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/lib/main.js b/lib/node_modules/@stdlib/math/base/special/sincospif/lib/main.js new file mode 100644 index 000000000000..9ad0d88baff6 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/lib/main.js @@ -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. +*/ + +'use strict'; + +// MODULES // + +var Float32Array = require( '@stdlib/array/float32' ); +var assign = require( './assign.js' ); + + +// MAIN // + +/** +* Simultaneously computes the sine and cosine of a number times π (single-precision). +* +* @param {number} x - input value +* @returns {Float32Array} two-element array containing sin(πx) and cos(πx) +* +* @example +* var v = sincospif( 0.0 ); +* // returns [ 0.0, 1.0 ] +* +* @example +* var v = sincospif( 0.5 ); +* // returns [ 1.0, 0.0 ] +* +* @example +* var v = sincospif( 0.1 ); +* // returns [ ~0.309, ~0.951 ] +* +* @example +* var v = sincospif( NaN ); +* // returns [ NaN, NaN ] +*/ +function sincospif( x ) { + return assign( x, new Float32Array( 2 ), 1, 0 ); +} + + +// EXPORTS // + +module.exports = sincospif; diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/lib/native.js b/lib/node_modules/@stdlib/math/base/special/sincospif/lib/native.js new file mode 100644 index 000000000000..94299e1cf03a --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/lib/native.js @@ -0,0 +1,61 @@ +/** +* @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 Float32Array = require( '@stdlib/array/float32' ); +var addon = require( './../src/addon.node' ); + + +// MAIN // + +/** +* Simultaneously computes the sine and cosine of a number times π (single-precision). +* +* @private +* @param {number} x - input value +* @returns {Float32Array} two-element array containing sin(πx) and cos(πx) +* +* @example +* var v = sincospif( 0.0 ); +* // returns [ 0.0, 1.0 ] +* +* @example +* var v = sincospif( 0.5 ); +* // returns [ 1.0, 0.0 ] +* +* @example +* var v = sincospif( 0.1 ); +* // returns [ ~0.309, ~0.951 ] +* +* @example +* var v = sincospif( NaN ); +* // returns [ NaN, NaN ] +*/ +function sincospif( x ) { + var out = new Float32Array( 2 ); + addon( x, out ); + return out; +} + + +// EXPORTS // + +module.exports = sincospif; diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/manifest.json b/lib/node_modules/@stdlib/math/base/special/sincospif/manifest.json new file mode 100644 index 000000000000..e4138d8de7f9 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/manifest.json @@ -0,0 +1,96 @@ +{ + "options": { + "task": "build" + }, + "fields": [ + { + "field": "src", + "resolve": true, + "relative": true + }, + { + "field": "include", + "resolve": true, + "relative": true + }, + { + "field": "libraries", + "resolve": false, + "relative": false + }, + { + "field": "libpath", + "resolve": true, + "relative": false + } + ], + "confs": [ + { + "task": "build", + "src": [ + "./src/main.c" + ], + "include": [ + "./include" + ], + "libraries": [], + "libpath": [], + "dependencies": [ + "@stdlib/napi/argv", + "@stdlib/napi/argv-float", + "@stdlib/napi/argv-float32array", + "@stdlib/napi/export", + "@stdlib/math/base/special/absf", + "@stdlib/math/base/special/sincosf", + "@stdlib/math/base/special/floorf", + "@stdlib/math/base/special/copysignf", + "@stdlib/math/base/special/fmodf", + "@stdlib/math/base/assert/is-infinitef", + "@stdlib/math/base/assert/is-nanf", + "@stdlib/constants/float32/pi" + ] + }, + { + "task": "benchmark", + "src": [ + "./src/main.c" + ], + "include": [ + "./include" + ], + "libraries": [], + "libpath": [], + "dependencies": [ + "@stdlib/math/base/special/absf", + "@stdlib/math/base/special/sincosf", + "@stdlib/math/base/special/floorf", + "@stdlib/math/base/special/copysignf", + "@stdlib/math/base/special/fmodf", + "@stdlib/math/base/assert/is-infinitef", + "@stdlib/math/base/assert/is-nanf", + "@stdlib/constants/float32/pi" + ] + }, + { + "task": "examples", + "src": [ + "./src/main.c" + ], + "include": [ + "./include" + ], + "libraries": [], + "libpath": [], + "dependencies": [ + "@stdlib/math/base/special/absf", + "@stdlib/math/base/special/sincosf", + "@stdlib/math/base/special/floorf", + "@stdlib/math/base/special/copysignf", + "@stdlib/math/base/special/fmodf", + "@stdlib/math/base/assert/is-infinitef", + "@stdlib/math/base/assert/is-nanf", + "@stdlib/constants/float32/pi" + ] + } + ] +} diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/package.json b/lib/node_modules/@stdlib/math/base/special/sincospif/package.json new file mode 100644 index 000000000000..e6164ff51c82 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/package.json @@ -0,0 +1,73 @@ +{ + "name": "@stdlib/math/base/special/sincospif", + "version": "0.0.0", + "description": "Simultaneously compute the sine and cosine of a number times π (single-precision).", + "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", + "gypfile": true, + "directories": { + "benchmark": "./benchmark", + "doc": "./docs", + "example": "./examples", + "include": "./include", + "lib": "./lib", + "src": "./src", + "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", + "stdmath", + "mathematics", + "math", + "math.sin", + "math.cos", + "sinpi", + "cospi", + "sin", + "cos", + "sincospif", + "sine", + "cosine", + "trig", + "trigonometry", + "radians", + "angle" + ] +} diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/src/Makefile b/lib/node_modules/@stdlib/math/base/special/sincospif/src/Makefile new file mode 100644 index 000000000000..2caf905cedbe --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/src/Makefile @@ -0,0 +1,70 @@ +#/ +# @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 := @ +else + QUIET := +endif + +# Determine the OS ([1][1], [2][2]). +# +# [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 +else +ifneq (, $(findstring Windows_NT,$(OS))) + OS := WINNT +endif +endif +endif +endif + + +# RULES # + +#/ +# Removes generated files for building an add-on. +# +# @example +# make clean-addon +#/ +clean-addon: + $(QUIET) -rm -f *.o *.node + +.PHONY: clean-addon + +#/ +# Removes generated files. +# +# @example +# make clean +#/ +clean: clean-addon + +.PHONY: clean diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/src/addon.c b/lib/node_modules/@stdlib/math/base/special/sincospif/src/addon.c new file mode 100644 index 000000000000..6e2ea6b7c080 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/src/addon.c @@ -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. +*/ + +#include "stdlib/math/base/special/sincospif.h" +#include "stdlib/napi/argv.h" +#include "stdlib/napi/argv_float.h" +#include "stdlib/napi/argv_float32array.h" +#include "stdlib/napi/export.h" +#include + +/** +* Receives JavaScript callback invocation data. +* +* @param env environment under which the function is invoked +* @param info callback data +* @return Node-API value +*/ +static napi_value addon( napi_env env, napi_callback_info info ) { + STDLIB_NAPI_ARGV( env, info, argv, argc, 2 ); + STDLIB_NAPI_ARGV_FLOAT( env, x, argv, 0 ); + STDLIB_NAPI_ARGV_FLOAT32ARRAY( env, y, ylen, argv, 1 ); + stdlib_base_sincospif( x, &y[ 0 ], &y[ 1 ] ); + return NULL; +} + +STDLIB_NAPI_MODULE_EXPORT_FCN( addon ) diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/src/main.c b/lib/node_modules/@stdlib/math/base/special/sincospif/src/main.c new file mode 100644 index 000000000000..fdfbf8978b0f --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/src/main.c @@ -0,0 +1,98 @@ +/** +* @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. +*/ + +#include "stdlib/math/base/special/sincospif.h" +#include "stdlib/math/base/special/absf.h" +#include "stdlib/math/base/special/sincosf.h" +#include "stdlib/math/base/special/floorf.h" +#include "stdlib/math/base/special/copysignf.h" +#include "stdlib/math/base/special/fmodf.h" +#include "stdlib/math/base/assert/is_infinitef.h" +#include "stdlib/math/base/assert/is_nanf.h" +#include "stdlib/constants/float32/pi.h" + +/** +* Simultaneously computes the sine and cosine of a number times π (single-precision). +* +* @param x input value +* @param sine destination to store the sine +* @param cosine destination to store the cosine +* +* @example +* float x = 0.0f; +* +* float cosine; +* float sine; +* stdlib_base_sincospif( x, &sine, &cosine ); +*/ +void stdlib_base_sincospif( const float x, float* sine, float* cosine ) { + float tmp; + float ix; + float ar; + float r; + + if ( stdlib_base_is_nanf( x ) || stdlib_base_is_infinitef( x ) ) { + *sine = 0.0f / 0.0f; // NaN + *cosine = 0.0f / 0.0f; // NaN + return; + } + + r = stdlib_base_fmodf( x, 2.0f ); + ar = stdlib_base_absf( r ); + + if ( ar == 0.0f || ar == 1.0f ) { + ix = stdlib_base_floorf( ar ); + *sine = stdlib_base_copysignf( 0.0f, r ); + *cosine = ( stdlib_base_fmodf( ix, 2.0f ) == 1.0f ) ? -1.0f : 1.0f; + return; + } + + if ( ar < 0.25f ) { + stdlib_base_sincosf( STDLIB_CONSTANT_FLOAT32_PI * r, sine, cosine ); + return; + } + + if ( ar < 0.75f ) { + ar = 0.5f - ar; + stdlib_base_sincosf( STDLIB_CONSTANT_FLOAT32_PI * ar, sine, cosine ); + tmp = *sine; + *sine = stdlib_base_copysignf( *cosine, r ); + *cosine = tmp; + return; + } + + if ( ar < 1.25f ) { + r = stdlib_base_copysignf( 1.0f, r ) - r; + stdlib_base_sincosf( STDLIB_CONSTANT_FLOAT32_PI * r, sine, cosine ); + *cosine *= -1.0f; + return; + } + + if ( ar < 1.75f ) { + ar -= 1.5f; + stdlib_base_sincosf( STDLIB_CONSTANT_FLOAT32_PI * ar, sine, cosine ); + tmp = *sine; + *sine = -stdlib_base_copysignf( *cosine, r ); + *cosine = tmp; + return; + } + + r -= stdlib_base_copysignf( 2.0f, r ); + stdlib_base_sincosf( STDLIB_CONSTANT_FLOAT32_PI * r, sine, cosine ); + return; +} diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/test/fixtures/julia/REQUIRE b/lib/node_modules/@stdlib/math/base/special/sincospif/test/fixtures/julia/REQUIRE new file mode 100644 index 000000000000..308c3be89c85 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/test/fixtures/julia/REQUIRE @@ -0,0 +1,2 @@ +julia 1.5 +JSON 0.21 diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/test/fixtures/julia/decimals.json b/lib/node_modules/@stdlib/math/base/special/sincospif/test/fixtures/julia/decimals.json new file mode 100644 index 000000000000..0a7177643f7b --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/test/fixtures/julia/decimals.json @@ -0,0 +1 @@ +{"x":[-100.0,-99.9000999000999,-99.8001998001998,-99.7002997002997,-99.6003996003996,-99.5004995004995,-99.4005994005994,-99.3006993006993,-99.2007992007992,-99.1008991008991,-99.000999000999,-98.9010989010989,-98.80119880119881,-98.7012987012987,-98.6013986013986,-98.5014985014985,-98.4015984015984,-98.3016983016983,-98.2017982017982,-98.1018981018981,-98.001998001998,-97.9020979020979,-97.8021978021978,-97.7022977022977,-97.6023976023976,-97.5024975024975,-97.40259740259741,-97.3026973026973,-97.2027972027972,-97.1028971028971,-97.002997002997,-96.90309690309691,-96.8031968031968,-96.7032967032967,-96.6033966033966,-96.5034965034965,-96.40359640359641,-96.3036963036963,-96.2037962037962,-96.1038961038961,-96.00399600399601,-95.90409590409591,-95.8041958041958,-95.7042957042957,-95.6043956043956,-95.50449550449551,-95.4045954045954,-95.3046953046953,-95.2047952047952,-95.1048951048951,-95.00499500499501,-94.9050949050949,-94.8051948051948,-94.7052947052947,-94.60539460539461,-94.50549450549451,-94.4055944055944,-94.3056943056943,-94.2057942057942,-94.10589410589411,-94.00599400599401,-93.9060939060939,-93.8061938061938,-93.7062937062937,-93.60639360639361,-93.50649350649351,-93.4065934065934,-93.3066933066933,-93.20679320679321,-93.10689310689311,-93.00699300699301,-92.9070929070929,-92.8071928071928,-92.70729270729271,-92.60739260739261,-92.5074925074925,-92.4075924075924,-92.3076923076923,-92.20779220779221,-92.10789210789211,-92.007992007992,-91.9080919080919,-91.80819180819181,-91.70829170829171,-91.60839160839161,-91.5084915084915,-91.4085914085914,-91.30869130869131,-91.20879120879121,-91.10889110889111,-91.008991008991,-90.9090909090909,-90.80919080919081,-90.70929070929071,-90.60939060939062,-90.5094905094905,-90.40959040959041,-90.30969030969031,-90.20979020979021,-90.10989010989012,-90.00999000999,-89.91008991008991,-89.81018981018981,-89.71028971028971,-89.6103896103896,-89.5104895104895,-89.41058941058941,-89.31068931068931,-89.21078921078922,-89.1108891108891,-89.01098901098901,-88.91108891108891,-88.81118881118881,-88.71128871128872,-88.6113886113886,-88.51148851148851,-88.41158841158841,-88.31168831168831,-88.21178821178822,-88.1118881118881,-88.01198801198801,-87.91208791208791,-87.81218781218782,-87.71228771228772,-87.61238761238761,-87.51248751248751,-87.41258741258741,-87.31268731268732,-87.21278721278722,-87.11288711288711,-87.01298701298701,-86.91308691308691,-86.81318681318682,-86.7132867132867,-86.61338661338661,-86.51348651348651,-86.41358641358642,-86.31368631368632,-86.21378621378621,-86.11388611388611,-86.01398601398601,-85.91408591408592,-85.81418581418582,-85.71428571428571,-85.61438561438561,-85.51448551448551,-85.41458541458542,-85.31468531468532,-85.21478521478521,-85.11488511488511,-85.01498501498502,-84.91508491508492,-84.81518481518482,-84.71528471528471,-84.61538461538461,-84.51548451548452,-84.41558441558442,-84.31568431568432,-84.21578421578421,-84.11588411588411,-84.01598401598402,-83.91608391608392,-83.81618381618381,-83.71628371628371,-83.61638361638362,-83.51648351648352,-83.41658341658342,-83.31668331668331,-83.21678321678321,-83.11688311688312,-83.01698301698302,-82.91708291708292,-82.81718281718281,-82.71728271728271,-82.61738261738262,-82.51748251748252,-82.41758241758242,-82.31768231768231,-82.21778221778222,-82.11788211788212,-82.01798201798202,-81.91808191808192,-81.81818181818181,-81.71828171828172,-81.61838161838162,-81.51848151848152,-81.41858141858143,-81.31868131868131,-81.21878121878122,-81.11888111888112,-81.01898101898102,-80.91908091908093,-80.81918081918081,-80.71928071928072,-80.61938061938062,-80.51948051948052,-80.41958041958041,-80.31968031968032,-80.21978021978022,-80.11988011988012,-80.01998001998003,-79.92007992007991,-79.82017982017982,-79.72027972027972,-79.62037962037962,-79.52047952047953,-79.42057942057941,-79.32067932067932,-79.22077922077922,-79.12087912087912,-79.02097902097903,-78.92107892107892,-78.82117882117882,-78.72127872127872,-78.62137862137862,-78.52147852147853,-78.42157842157842,-78.32167832167832,-78.22177822177822,-78.12187812187813,-78.02197802197803,-77.92207792207792,-77.82217782217782,-77.72227772227772,-77.62237762237763,-77.52247752247752,-77.42257742257742,-77.32267732267732,-77.22277722277722,-77.12287712287713,-77.02297702297702,-76.92307692307692,-76.82317682317682,-76.72327672327673,-76.62337662337663,-76.52347652347652,-76.42357642357642,-76.32367632367632,-76.22377622377623,-76.12387612387613,-76.02397602397602,-75.92407592407592,-75.82417582417582,-75.72427572427573,-75.62437562437563,-75.52447552447552,-75.42457542457542,-75.32467532467533,-75.22477522477523,-75.12487512487513,-75.02497502497502,-74.92507492507492,-74.82517482517483,-74.72527472527473,-74.62537462537462,-74.52547452547452,-74.42557442557442,-74.32567432567433,-74.22577422577423,-74.12587412587412,-74.02597402597402,-73.92607392607393,-73.82617382617383,-73.72627372627373,-73.62637362637362,-73.52647352647352,-73.42657342657343,-73.32667332667333,-73.22677322677323,-73.12687312687312,-73.02697302697302,-72.92707292707293,-72.82717282717283,-72.72727272727273,-72.62737262737262,-72.52747252747253,-72.42757242757243,-72.32767232767233,-72.22777222777223,-72.12787212787212,-72.02797202797203,-71.92807192807193,-71.82817182817183,-71.72827172827172,-71.62837162837162,-71.52847152847153,-71.42857142857143,-71.32867132867133,-71.22877122877122,-71.12887112887113,-71.02897102897103,-70.92907092907093,-70.82917082917083,-70.72927072927072,-70.62937062937063,-70.52947052947053,-70.42957042957043,-70.32967032967034,-70.22977022977022,-70.12987012987013,-70.02997002997003,-69.93006993006993,-69.83016983016984,-69.73026973026973,-69.63036963036963,-69.53046953046953,-69.43056943056943,-69.33066933066934,-69.23076923076923,-69.13086913086913,-69.03096903096903,-68.93106893106894,-68.83116883116882,-68.73126873126873,-68.63136863136863,-68.53146853146853,-68.43156843156844,-68.33166833166833,-68.23176823176823,-68.13186813186813,-68.03196803196803,-67.93206793206794,-67.83216783216783,-67.73226773226773,-67.63236763236763,-67.53246753246754,-67.43256743256744,-67.33266733266733,-67.23276723276723,-67.13286713286713,-67.03296703296704,-66.93306693306694,-66.83316683316683,-66.73326673326673,-66.63336663336663,-66.53346653346654,-66.43356643356644,-66.33366633366633,-66.23376623376623,-66.13386613386614,-66.03396603396604,-65.93406593406593,-65.83416583416583,-65.73426573426573,-65.63436563436564,-65.53446553446554,-65.43456543456543,-65.33466533466533,-65.23476523476523,-65.13486513486514,-65.03496503496504,-64.93506493506493,-64.83516483516483,-64.73526473526474,-64.63536463536464,-64.53546453546454,-64.43556443556443,-64.33566433566433,-64.23576423576424,-64.13586413586414,-64.03596403596404,-63.93606393606394,-63.836163836163834,-63.73626373626374,-63.63636363636363,-63.536463536463536,-63.43656343656344,-63.336663336663335,-63.23676323676324,-63.136863136863134,-63.03696303696304,-62.93706293706294,-62.837162837162836,-62.73726273726274,-62.637362637362635,-62.53746253746254,-62.437562437562434,-62.33766233766234,-62.23776223776224,-62.137862137862136,-62.03796203796204,-61.938061938061935,-61.83816183816184,-61.73826173826174,-61.63836163836164,-61.53846153846154,-61.438561438561436,-61.33866133866134,-61.23876123876124,-61.13886113886114,-61.03896103896104,-60.93906093906094,-60.83916083916084,-60.739260739260736,-60.63936063936064,-60.53946053946054,-60.43956043956044,-60.33966033966034,-60.23976023976024,-60.13986013986014,-60.03996003996004,-59.94005994005994,-59.84015984015984,-59.74025974025974,-59.64035964035964,-59.54045954045954,-59.44055944055944,-59.34065934065934,-59.24075924075924,-59.14085914085914,-59.04095904095904,-58.94105894105894,-58.841158841158844,-58.74125874125874,-58.64135864135864,-58.54145854145854,-58.44155844155844,-58.341658341658345,-58.24175824175824,-58.141858141858144,-58.04195804195804,-57.94205794205794,-57.84215784215784,-57.74225774225774,-57.642357642357645,-57.54245754245754,-57.442557442557444,-57.34265734265734,-57.24275724275724,-57.142857142857146,-57.04295704295704,-56.943056943056945,-56.84315684315684,-56.743256743256744,-56.64335664335665,-56.54345654345654,-56.443556443556446,-56.34365634365634,-56.243756243756245,-56.14385614385614,-56.043956043956044,-55.94405594405595,-55.84415584415584,-55.744255744255746,-55.64435564435564,-55.544455544455545,-55.44455544455545,-55.344655344655344,-55.24475524475525,-55.14485514485514,-55.044955044955046,-54.94505494505494,-54.845154845154845,-54.74525474525475,-54.645354645354644,-54.54545454545455,-54.44555444555444,-54.345654345654346,-54.24575424575425,-54.145854145854145,-54.04595404595405,-53.946053946053944,-53.84615384615385,-53.74625374625375,-53.646353646353646,-53.54645354645355,-53.446553446553445,-53.34665334665335,-53.246753246753244,-53.14685314685315,-53.04695304695305,-52.947052947052946,-52.84715284715285,-52.747252747252745,-52.64735264735265,-52.54745254745255,-52.44755244755245,-52.34765234765235,-52.247752247752246,-52.14785214785215,-52.047952047952045,-51.94805194805195,-51.84815184815185,-51.74825174825175,-51.64835164835165,-51.548451548451546,-51.44855144855145,-51.34865134865135,-51.24875124875125,-51.14885114885115,-51.04895104895105,-50.94905094905095,-50.84915084915085,-50.74925074925075,-50.64935064935065,-50.54945054945055,-50.44955044955045,-50.34965034965035,-50.24975024975025,-50.14985014985015,-50.04995004995005,-49.95004995004995,-49.85014985014985,-49.75024975024975,-49.65034965034965,-49.55044955044955,-49.45054945054945,-49.35064935064935,-49.25074925074925,-49.15084915084915,-49.05094905094905,-48.95104895104895,-48.85114885114885,-48.75124875124875,-48.65134865134865,-48.55144855144855,-48.451548451548454,-48.35164835164835,-48.25174825174825,-48.15184815184815,-48.05194805194805,-47.952047952047955,-47.85214785214785,-47.752247752247754,-47.65234765234765,-47.55244755244755,-47.45254745254745,-47.35264735264735,-47.252747252747255,-47.15284715284715,-47.052947052947054,-46.95304695304695,-46.85314685314685,-46.753246753246756,-46.65334665334665,-46.553446553446555,-46.45354645354645,-46.353646353646354,-46.25374625374625,-46.15384615384615,-46.053946053946056,-45.95404595404595,-45.854145854145855,-45.75424575424575,-45.654345654345654,-45.55444555444556,-45.45454545454545,-45.354645354645356,-45.25474525474525,-45.154845154845155,-45.05494505494506,-44.955044955044954,-44.85514485514486,-44.75524475524475,-44.655344655344656,-44.55544455544455,-44.455544455544455,-44.35564435564436,-44.255744255744254,-44.15584415584416,-44.05594405594405,-43.956043956043956,-43.85614385614386,-43.756243756243755,-43.65634365634366,-43.556443556443554,-43.45654345654346,-43.35664335664335,-43.256743256743256,-43.15684315684316,-43.056943056943055,-42.95704295704296,-42.857142857142854,-42.75724275724276,-42.65734265734266,-42.557442557442556,-42.45754245754246,-42.357642357642355,-42.25774225774226,-42.15784215784216,-42.05794205794206,-41.95804195804196,-41.858141858141856,-41.75824175824176,-41.658341658341655,-41.55844155844156,-41.45854145854146,-41.35864135864136,-41.25874125874126,-41.158841158841156,-41.05894105894106,-40.95904095904096,-40.85914085914086,-40.75924075924076,-40.65934065934066,-40.55944055944056,-40.45954045954046,-40.35964035964036,-40.25974025974026,-40.15984015984016,-40.05994005994006,-39.96003996003996,-39.86013986013986,-39.76023976023976,-39.66033966033966,-39.56043956043956,-39.46053946053946,-39.36063936063936,-39.260739260739264,-39.16083916083916,-39.06093906093906,-38.96103896103896,-38.86113886113886,-38.76123876123876,-38.66133866133866,-38.561438561438564,-38.46153846153846,-38.36163836163836,-38.26173826173826,-38.16183816183816,-38.061938061938065,-37.96203796203796,-37.862137862137864,-37.76223776223776,-37.66233766233766,-37.562437562437566,-37.46253746253746,-37.362637362637365,-37.26273726273726,-37.162837162837164,-37.06293706293706,-36.96303696303696,-36.863136863136866,-36.76323676323676,-36.663336663336665,-36.56343656343656,-36.463536463536464,-36.36363636363637,-36.26373626373626,-36.163836163836166,-36.06393606393606,-35.964035964035965,-35.86413586413586,-35.764235764235764,-35.66433566433567,-35.56443556443556,-35.464535464535466,-35.36463536463536,-35.264735264735265,-35.16483516483517,-35.064935064935064,-34.96503496503497,-34.86513486513486,-34.765234765234766,-34.66533466533467,-34.565434565434565,-34.46553446553447,-34.365634365634364,-34.26573426573427,-34.16583416583416,-34.065934065934066,-33.96603396603397,-33.866133866133865,-33.76623376623377,-33.666333666333664,-33.56643356643357,-33.46653346653347,-33.366633366633366,-33.26673326673327,-33.166833166833165,-33.06693306693307,-32.967032967032964,-32.86713286713287,-32.76723276723277,-32.667332667332666,-32.56743256743257,-32.467532467532465,-32.36763236763237,-32.26773226773227,-32.16783216783217,-32.06793206793207,-31.96803196803197,-31.86813186813187,-31.768231768231768,-31.668331668331668,-31.568431568431567,-31.46853146853147,-31.36863136863137,-31.26873126873127,-31.16883116883117,-31.068931068931068,-30.969030969030968,-30.86913086913087,-30.76923076923077,-30.66933066933067,-30.56943056943057,-30.46953046953047,-30.369630369630368,-30.26973026973027,-30.16983016983017,-30.06993006993007,-29.97002997002997,-29.87012987012987,-29.77022977022977,-29.67032967032967,-29.57042957042957,-29.47052947052947,-29.37062937062937,-29.27072927072927,-29.170829170829172,-29.070929070929072,-28.97102897102897,-28.87112887112887,-28.77122877122877,-28.67132867132867,-28.571428571428573,-28.471528471528472,-28.371628371628372,-28.27172827172827,-28.17182817182817,-28.07192807192807,-27.972027972027973,-27.872127872127873,-27.772227772227772,-27.672327672327672,-27.57242757242757,-27.47252747252747,-27.372627372627374,-27.272727272727273,-27.172827172827173,-27.072927072927072,-26.973026973026972,-26.873126873126875,-26.773226773226774,-26.673326673326674,-26.573426573426573,-26.473526473526473,-26.373626373626372,-26.273726273726275,-26.173826173826175,-26.073926073926074,-25.974025974025974,-25.874125874125873,-25.774225774225773,-25.674325674325676,-25.574425574425575,-25.474525474525475,-25.374625374625374,-25.274725274725274,-25.174825174825173,-25.074925074925076,-24.975024975024976,-24.875124875124875,-24.775224775224775,-24.675324675324674,-24.575424575424574,-24.475524475524477,-24.375624375624376,-24.275724275724276,-24.175824175824175,-24.075924075924075,-23.976023976023978,-23.876123876123877,-23.776223776223777,-23.676323676323676,-23.576423576423576,-23.476523476523475,-23.376623376623378,-23.276723276723278,-23.176823176823177,-23.076923076923077,-22.977022977022976,-22.877122877122876,-22.77722277722278,-22.677322677322678,-22.577422577422578,-22.477522477522477,-22.377622377622377,-22.277722277722276,-22.17782217782218,-22.07792207792208,-21.978021978021978,-21.878121878121878,-21.778221778221777,-21.678321678321677,-21.57842157842158,-21.47852147852148,-21.37862137862138,-21.278721278721278,-21.178821178821178,-21.07892107892108,-20.97902097902098,-20.87912087912088,-20.77922077922078,-20.67932067932068,-20.579420579420578,-20.47952047952048,-20.37962037962038,-20.27972027972028,-20.17982017982018,-20.07992007992008,-19.98001998001998,-19.88011988011988,-19.78021978021978,-19.68031968031968,-19.58041958041958,-19.48051948051948,-19.38061938061938,-19.280719280719282,-19.18081918081918,-19.08091908091908,-18.98101898101898,-18.88111888111888,-18.781218781218783,-18.681318681318682,-18.581418581418582,-18.48151848151848,-18.38161838161838,-18.28171828171828,-18.181818181818183,-18.081918081918083,-17.982017982017982,-17.882117882117882,-17.78221778221778,-17.68231768231768,-17.582417582417584,-17.482517482517483,-17.382617382617383,-17.282717282717282,-17.182817182817182,-17.08291708291708,-16.983016983016984,-16.883116883116884,-16.783216783216783,-16.683316683316683,-16.583416583416582,-16.483516483516482,-16.383616383616385,-16.283716283716284,-16.183816183816184,-16.083916083916083,-15.984015984015985,-15.884115884115884,-15.784215784215784,-15.684315684315685,-15.584415584415584,-15.484515484515484,-15.384615384615385,-15.284715284715285,-15.184815184815184,-15.084915084915085,-14.985014985014985,-14.885114885114884,-14.785214785214785,-14.685314685314685,-14.585414585414586,-14.485514485514486,-14.385614385614385,-14.285714285714286,-14.185814185814186,-14.085914085914085,-13.986013986013987,-13.886113886113886,-13.786213786213786,-13.686313686313687,-13.586413586413586,-13.486513486513486,-13.386613386613387,-13.286713286713287,-13.186813186813186,-13.086913086913087,-12.987012987012987,-12.887112887112886,-12.787212787212788,-12.687312687312687,-12.587412587412587,-12.487512487512488,-12.387612387612387,-12.287712287712287,-12.187812187812188,-12.087912087912088,-11.988011988011989,-11.888111888111888,-11.788211788211788,-11.688311688311689,-11.588411588411589,-11.488511488511488,-11.38861138861139,-11.288711288711289,-11.188811188811188,-11.08891108891109,-10.989010989010989,-10.889110889110889,-10.78921078921079,-10.68931068931069,-10.589410589410589,-10.48951048951049,-10.38961038961039,-10.289710289710289,-10.18981018981019,-10.08991008991009,-9.99000999000999,-9.89010989010989,-9.79020979020979,-9.69030969030969,-9.59040959040959,-9.49050949050949,-9.390609390609391,-9.290709290709291,-9.19080919080919,-9.090909090909092,-8.991008991008991,-8.89110889110889,-8.791208791208792,-8.691308691308691,-8.591408591408591,-8.491508491508492,-8.391608391608392,-8.291708291708291,-8.191808191808192,-8.091908091908092,-7.992007992007992,-7.892107892107892,-7.792207792207792,-7.6923076923076925,-7.592407592407592,-7.492507492507492,-7.392607392607393,-7.292707292707293,-7.192807192807193,-7.092907092907093,-6.993006993006993,-6.893106893106893,-6.793206793206793,-6.693306693306694,-6.593406593406593,-6.4935064935064934,-6.393606393606394,-6.293706293706293,-6.193806193806194,-6.093906093906094,-5.994005994005994,-5.894105894105894,-5.794205794205794,-5.694305694305695,-5.594405594405594,-5.4945054945054945,-5.394605394605395,-5.294705294705294,-5.194805194805195,-5.094905094905095,-4.995004995004995,-4.895104895104895,-4.795204795204795,-4.695304695304696,-4.595404595404595,-4.495504495504496,-4.395604395604396,-4.2957042957042955,-4.195804195804196,-4.095904095904096,-3.996003996003996,-3.896103896103896,-3.796203796203796,-3.6963036963036964,-3.5964035964035963,-3.4965034965034967,-3.3966033966033966,-3.2967032967032965,-3.196803196803197,-3.096903096903097,-2.997002997002997,-2.897102897102897,-2.797202797202797,-2.6973026973026974,-2.5974025974025974,-2.4975024975024973,-2.3976023976023977,-2.2977022977022976,-2.197802197802198,-2.097902097902098,-1.998001998001998,-1.898101898101898,-1.7982017982017982,-1.6983016983016983,-1.5984015984015985,-1.4985014985014986,-1.3986013986013985,-1.2987012987012987,-1.1988011988011988,-1.098901098901099,-0.999000999000999,-0.8991008991008991,-0.7992007992007992,-0.6993006993006993,-0.5994005994005994,-0.4995004995004995,-0.3996003996003996,-0.2997002997002997,-0.1998001998001998,-0.0999000999000999,0.0,0.0999000999000999,0.1998001998001998,0.2997002997002997,0.3996003996003996,0.4995004995004995,0.5994005994005994,0.6993006993006993,0.7992007992007992,0.8991008991008991,0.999000999000999,1.098901098901099,1.1988011988011988,1.2987012987012987,1.3986013986013985,1.4985014985014986,1.5984015984015985,1.6983016983016983,1.7982017982017982,1.898101898101898,1.998001998001998,2.097902097902098,2.197802197802198,2.2977022977022976,2.3976023976023977,2.4975024975024973,2.5974025974025974,2.6973026973026974,2.797202797202797,2.897102897102897,2.997002997002997,3.096903096903097,3.196803196803197,3.2967032967032965,3.3966033966033966,3.4965034965034967,3.5964035964035963,3.6963036963036964,3.796203796203796,3.896103896103896,3.996003996003996,4.095904095904096,4.195804195804196,4.2957042957042955,4.395604395604396,4.495504495504496,4.595404595404595,4.695304695304696,4.795204795204795,4.895104895104895,4.995004995004995,5.094905094905095,5.194805194805195,5.294705294705294,5.394605394605395,5.4945054945054945,5.594405594405594,5.694305694305695,5.794205794205794,5.894105894105894,5.994005994005994,6.093906093906094,6.193806193806194,6.293706293706293,6.393606393606394,6.4935064935064934,6.593406593406593,6.693306693306694,6.793206793206793,6.893106893106893,6.993006993006993,7.092907092907093,7.192807192807193,7.292707292707293,7.392607392607393,7.492507492507492,7.592407592407592,7.6923076923076925,7.792207792207792,7.892107892107892,7.992007992007992,8.091908091908092,8.191808191808192,8.291708291708291,8.391608391608392,8.491508491508492,8.591408591408591,8.691308691308691,8.791208791208792,8.89110889110889,8.991008991008991,9.090909090909092,9.19080919080919,9.290709290709291,9.390609390609391,9.49050949050949,9.59040959040959,9.69030969030969,9.79020979020979,9.89010989010989,9.99000999000999,10.08991008991009,10.18981018981019,10.289710289710289,10.38961038961039,10.48951048951049,10.589410589410589,10.68931068931069,10.78921078921079,10.889110889110889,10.989010989010989,11.08891108891109,11.188811188811188,11.288711288711289,11.38861138861139,11.488511488511488,11.588411588411589,11.688311688311689,11.788211788211788,11.888111888111888,11.988011988011989,12.087912087912088,12.187812187812188,12.287712287712287,12.387612387612387,12.487512487512488,12.587412587412587,12.687312687312687,12.787212787212788,12.887112887112886,12.987012987012987,13.086913086913087,13.186813186813186,13.286713286713287,13.386613386613387,13.486513486513486,13.586413586413586,13.686313686313687,13.786213786213786,13.886113886113886,13.986013986013987,14.085914085914085,14.185814185814186,14.285714285714286,14.385614385614385,14.485514485514486,14.585414585414586,14.685314685314685,14.785214785214785,14.885114885114884,14.985014985014985,15.084915084915085,15.184815184815184,15.284715284715285,15.384615384615385,15.484515484515484,15.584415584415584,15.684315684315685,15.784215784215784,15.884115884115884,15.984015984015985,16.083916083916083,16.183816183816184,16.283716283716284,16.383616383616385,16.483516483516482,16.583416583416582,16.683316683316683,16.783216783216783,16.883116883116884,16.983016983016984,17.08291708291708,17.182817182817182,17.282717282717282,17.382617382617383,17.482517482517483,17.582417582417584,17.68231768231768,17.78221778221778,17.882117882117882,17.982017982017982,18.081918081918083,18.181818181818183,18.28171828171828,18.38161838161838,18.48151848151848,18.581418581418582,18.681318681318682,18.781218781218783,18.88111888111888,18.98101898101898,19.08091908091908,19.18081918081918,19.280719280719282,19.38061938061938,19.48051948051948,19.58041958041958,19.68031968031968,19.78021978021978,19.88011988011988,19.98001998001998,20.07992007992008,20.17982017982018,20.27972027972028,20.37962037962038,20.47952047952048,20.579420579420578,20.67932067932068,20.77922077922078,20.87912087912088,20.97902097902098,21.07892107892108,21.178821178821178,21.278721278721278,21.37862137862138,21.47852147852148,21.57842157842158,21.678321678321677,21.778221778221777,21.878121878121878,21.978021978021978,22.07792207792208,22.17782217782218,22.277722277722276,22.377622377622377,22.477522477522477,22.577422577422578,22.677322677322678,22.77722277722278,22.877122877122876,22.977022977022976,23.076923076923077,23.176823176823177,23.276723276723278,23.376623376623378,23.476523476523475,23.576423576423576,23.676323676323676,23.776223776223777,23.876123876123877,23.976023976023978,24.075924075924075,24.175824175824175,24.275724275724276,24.375624375624376,24.475524475524477,24.575424575424574,24.675324675324674,24.775224775224775,24.875124875124875,24.975024975024976,25.074925074925076,25.174825174825173,25.274725274725274,25.374625374625374,25.474525474525475,25.574425574425575,25.674325674325676,25.774225774225773,25.874125874125873,25.974025974025974,26.073926073926074,26.173826173826175,26.273726273726275,26.373626373626372,26.473526473526473,26.573426573426573,26.673326673326674,26.773226773226774,26.873126873126875,26.973026973026972,27.072927072927072,27.172827172827173,27.272727272727273,27.372627372627374,27.47252747252747,27.57242757242757,27.672327672327672,27.772227772227772,27.872127872127873,27.972027972027973,28.07192807192807,28.17182817182817,28.27172827172827,28.371628371628372,28.471528471528472,28.571428571428573,28.67132867132867,28.77122877122877,28.87112887112887,28.97102897102897,29.070929070929072,29.170829170829172,29.27072927072927,29.37062937062937,29.47052947052947,29.57042957042957,29.67032967032967,29.77022977022977,29.87012987012987,29.97002997002997,30.06993006993007,30.16983016983017,30.26973026973027,30.369630369630368,30.46953046953047,30.56943056943057,30.66933066933067,30.76923076923077,30.86913086913087,30.969030969030968,31.068931068931068,31.16883116883117,31.26873126873127,31.36863136863137,31.46853146853147,31.568431568431567,31.668331668331668,31.768231768231768,31.86813186813187,31.96803196803197,32.06793206793207,32.16783216783217,32.26773226773227,32.36763236763237,32.467532467532465,32.56743256743257,32.667332667332666,32.76723276723277,32.86713286713287,32.967032967032964,33.06693306693307,33.166833166833165,33.26673326673327,33.366633366633366,33.46653346653347,33.56643356643357,33.666333666333664,33.76623376623377,33.866133866133865,33.96603396603397,34.065934065934066,34.16583416583416,34.26573426573427,34.365634365634364,34.46553446553447,34.565434565434565,34.66533466533467,34.765234765234766,34.86513486513486,34.96503496503497,35.064935064935064,35.16483516483517,35.264735264735265,35.36463536463536,35.464535464535466,35.56443556443556,35.66433566433567,35.764235764235764,35.86413586413586,35.964035964035965,36.06393606393606,36.163836163836166,36.26373626373626,36.36363636363637,36.463536463536464,36.56343656343656,36.663336663336665,36.76323676323676,36.863136863136866,36.96303696303696,37.06293706293706,37.162837162837164,37.26273726273726,37.362637362637365,37.46253746253746,37.562437562437566,37.66233766233766,37.76223776223776,37.862137862137864,37.96203796203796,38.061938061938065,38.16183816183816,38.26173826173826,38.36163836163836,38.46153846153846,38.561438561438564,38.66133866133866,38.76123876123876,38.86113886113886,38.96103896103896,39.06093906093906,39.16083916083916,39.260739260739264,39.36063936063936,39.46053946053946,39.56043956043956,39.66033966033966,39.76023976023976,39.86013986013986,39.96003996003996,40.05994005994006,40.15984015984016,40.25974025974026,40.35964035964036,40.45954045954046,40.55944055944056,40.65934065934066,40.75924075924076,40.85914085914086,40.95904095904096,41.05894105894106,41.158841158841156,41.25874125874126,41.35864135864136,41.45854145854146,41.55844155844156,41.658341658341655,41.75824175824176,41.858141858141856,41.95804195804196,42.05794205794206,42.15784215784216,42.25774225774226,42.357642357642355,42.45754245754246,42.557442557442556,42.65734265734266,42.75724275724276,42.857142857142854,42.95704295704296,43.056943056943055,43.15684315684316,43.256743256743256,43.35664335664335,43.45654345654346,43.556443556443554,43.65634365634366,43.756243756243755,43.85614385614386,43.956043956043956,44.05594405594405,44.15584415584416,44.255744255744254,44.35564435564436,44.455544455544455,44.55544455544455,44.655344655344656,44.75524475524475,44.85514485514486,44.955044955044954,45.05494505494506,45.154845154845155,45.25474525474525,45.354645354645356,45.45454545454545,45.55444555444556,45.654345654345654,45.75424575424575,45.854145854145855,45.95404595404595,46.053946053946056,46.15384615384615,46.25374625374625,46.353646353646354,46.45354645354645,46.553446553446555,46.65334665334665,46.753246753246756,46.85314685314685,46.95304695304695,47.052947052947054,47.15284715284715,47.252747252747255,47.35264735264735,47.45254745254745,47.55244755244755,47.65234765234765,47.752247752247754,47.85214785214785,47.952047952047955,48.05194805194805,48.15184815184815,48.25174825174825,48.35164835164835,48.451548451548454,48.55144855144855,48.65134865134865,48.75124875124875,48.85114885114885,48.95104895104895,49.05094905094905,49.15084915084915,49.25074925074925,49.35064935064935,49.45054945054945,49.55044955044955,49.65034965034965,49.75024975024975,49.85014985014985,49.95004995004995,50.04995004995005,50.14985014985015,50.24975024975025,50.34965034965035,50.44955044955045,50.54945054945055,50.64935064935065,50.74925074925075,50.84915084915085,50.94905094905095,51.04895104895105,51.14885114885115,51.24875124875125,51.34865134865135,51.44855144855145,51.548451548451546,51.64835164835165,51.74825174825175,51.84815184815185,51.94805194805195,52.047952047952045,52.14785214785215,52.247752247752246,52.34765234765235,52.44755244755245,52.54745254745255,52.64735264735265,52.747252747252745,52.84715284715285,52.947052947052946,53.04695304695305,53.14685314685315,53.246753246753244,53.34665334665335,53.446553446553445,53.54645354645355,53.646353646353646,53.74625374625375,53.84615384615385,53.946053946053944,54.04595404595405,54.145854145854145,54.24575424575425,54.345654345654346,54.44555444555444,54.54545454545455,54.645354645354644,54.74525474525475,54.845154845154845,54.94505494505494,55.044955044955046,55.14485514485514,55.24475524475525,55.344655344655344,55.44455544455545,55.544455544455545,55.64435564435564,55.744255744255746,55.84415584415584,55.94405594405595,56.043956043956044,56.14385614385614,56.243756243756245,56.34365634365634,56.443556443556446,56.54345654345654,56.64335664335665,56.743256743256744,56.84315684315684,56.943056943056945,57.04295704295704,57.142857142857146,57.24275724275724,57.34265734265734,57.442557442557444,57.54245754245754,57.642357642357645,57.74225774225774,57.84215784215784,57.94205794205794,58.04195804195804,58.141858141858144,58.24175824175824,58.341658341658345,58.44155844155844,58.54145854145854,58.64135864135864,58.74125874125874,58.841158841158844,58.94105894105894,59.04095904095904,59.14085914085914,59.24075924075924,59.34065934065934,59.44055944055944,59.54045954045954,59.64035964035964,59.74025974025974,59.84015984015984,59.94005994005994,60.03996003996004,60.13986013986014,60.23976023976024,60.33966033966034,60.43956043956044,60.53946053946054,60.63936063936064,60.739260739260736,60.83916083916084,60.93906093906094,61.03896103896104,61.13886113886114,61.23876123876124,61.33866133866134,61.438561438561436,61.53846153846154,61.63836163836164,61.73826173826174,61.83816183816184,61.938061938061935,62.03796203796204,62.137862137862136,62.23776223776224,62.33766233766234,62.437562437562434,62.53746253746254,62.637362637362635,62.73726273726274,62.837162837162836,62.93706293706294,63.03696303696304,63.136863136863134,63.23676323676324,63.336663336663335,63.43656343656344,63.536463536463536,63.63636363636363,63.73626373626374,63.836163836163834,63.93606393606394,64.03596403596404,64.13586413586414,64.23576423576424,64.33566433566433,64.43556443556443,64.53546453546454,64.63536463536464,64.73526473526474,64.83516483516483,64.93506493506493,65.03496503496504,65.13486513486514,65.23476523476523,65.33466533466533,65.43456543456543,65.53446553446554,65.63436563436564,65.73426573426573,65.83416583416583,65.93406593406593,66.03396603396604,66.13386613386614,66.23376623376623,66.33366633366633,66.43356643356644,66.53346653346654,66.63336663336663,66.73326673326673,66.83316683316683,66.93306693306694,67.03296703296704,67.13286713286713,67.23276723276723,67.33266733266733,67.43256743256744,67.53246753246754,67.63236763236763,67.73226773226773,67.83216783216783,67.93206793206794,68.03196803196803,68.13186813186813,68.23176823176823,68.33166833166833,68.43156843156844,68.53146853146853,68.63136863136863,68.73126873126873,68.83116883116882,68.93106893106894,69.03096903096903,69.13086913086913,69.23076923076923,69.33066933066934,69.43056943056943,69.53046953046953,69.63036963036963,69.73026973026973,69.83016983016984,69.93006993006993,70.02997002997003,70.12987012987013,70.22977022977022,70.32967032967034,70.42957042957043,70.52947052947053,70.62937062937063,70.72927072927072,70.82917082917083,70.92907092907093,71.02897102897103,71.12887112887113,71.22877122877122,71.32867132867133,71.42857142857143,71.52847152847153,71.62837162837162,71.72827172827172,71.82817182817183,71.92807192807193,72.02797202797203,72.12787212787212,72.22777222777223,72.32767232767233,72.42757242757243,72.52747252747253,72.62737262737262,72.72727272727273,72.82717282717283,72.92707292707293,73.02697302697302,73.12687312687312,73.22677322677323,73.32667332667333,73.42657342657343,73.52647352647352,73.62637362637362,73.72627372627373,73.82617382617383,73.92607392607393,74.02597402597402,74.12587412587412,74.22577422577423,74.32567432567433,74.42557442557442,74.52547452547452,74.62537462537462,74.72527472527473,74.82517482517483,74.92507492507492,75.02497502497502,75.12487512487513,75.22477522477523,75.32467532467533,75.42457542457542,75.52447552447552,75.62437562437563,75.72427572427573,75.82417582417582,75.92407592407592,76.02397602397602,76.12387612387613,76.22377622377623,76.32367632367632,76.42357642357642,76.52347652347652,76.62337662337663,76.72327672327673,76.82317682317682,76.92307692307692,77.02297702297702,77.12287712287713,77.22277722277722,77.32267732267732,77.42257742257742,77.52247752247752,77.62237762237763,77.72227772227772,77.82217782217782,77.92207792207792,78.02197802197803,78.12187812187813,78.22177822177822,78.32167832167832,78.42157842157842,78.52147852147853,78.62137862137862,78.72127872127872,78.82117882117882,78.92107892107892,79.02097902097903,79.12087912087912,79.22077922077922,79.32067932067932,79.42057942057941,79.52047952047953,79.62037962037962,79.72027972027972,79.82017982017982,79.92007992007991,80.01998001998003,80.11988011988012,80.21978021978022,80.31968031968032,80.41958041958041,80.51948051948052,80.61938061938062,80.71928071928072,80.81918081918081,80.91908091908093,81.01898101898102,81.11888111888112,81.21878121878122,81.31868131868131,81.41858141858143,81.51848151848152,81.61838161838162,81.71828171828172,81.81818181818181,81.91808191808192,82.01798201798202,82.11788211788212,82.21778221778222,82.31768231768231,82.41758241758242,82.51748251748252,82.61738261738262,82.71728271728271,82.81718281718281,82.91708291708292,83.01698301698302,83.11688311688312,83.21678321678321,83.31668331668331,83.41658341658342,83.51648351648352,83.61638361638362,83.71628371628371,83.81618381618381,83.91608391608392,84.01598401598402,84.11588411588411,84.21578421578421,84.31568431568432,84.41558441558442,84.51548451548452,84.61538461538461,84.71528471528471,84.81518481518482,84.91508491508492,85.01498501498502,85.11488511488511,85.21478521478521,85.31468531468532,85.41458541458542,85.51448551448551,85.61438561438561,85.71428571428571,85.81418581418582,85.91408591408592,86.01398601398601,86.11388611388611,86.21378621378621,86.31368631368632,86.41358641358642,86.51348651348651,86.61338661338661,86.7132867132867,86.81318681318682,86.91308691308691,87.01298701298701,87.11288711288711,87.21278721278722,87.31268731268732,87.41258741258741,87.51248751248751,87.61238761238761,87.71228771228772,87.81218781218782,87.91208791208791,88.01198801198801,88.1118881118881,88.21178821178822,88.31168831168831,88.41158841158841,88.51148851148851,88.6113886113886,88.71128871128872,88.81118881118881,88.91108891108891,89.01098901098901,89.1108891108891,89.21078921078922,89.31068931068931,89.41058941058941,89.5104895104895,89.6103896103896,89.71028971028971,89.81018981018981,89.91008991008991,90.00999000999,90.10989010989012,90.20979020979021,90.30969030969031,90.40959040959041,90.5094905094905,90.60939060939062,90.70929070929071,90.80919080919081,90.9090909090909,91.008991008991,91.10889110889111,91.20879120879121,91.30869130869131,91.4085914085914,91.5084915084915,91.60839160839161,91.70829170829171,91.80819180819181,91.9080919080919,92.007992007992,92.10789210789211,92.20779220779221,92.3076923076923,92.4075924075924,92.5074925074925,92.60739260739261,92.70729270729271,92.8071928071928,92.9070929070929,93.00699300699301,93.10689310689311,93.20679320679321,93.3066933066933,93.4065934065934,93.50649350649351,93.60639360639361,93.7062937062937,93.8061938061938,93.9060939060939,94.00599400599401,94.10589410589411,94.2057942057942,94.3056943056943,94.4055944055944,94.50549450549451,94.60539460539461,94.7052947052947,94.8051948051948,94.9050949050949,95.00499500499501,95.1048951048951,95.2047952047952,95.3046953046953,95.4045954045954,95.50449550449551,95.6043956043956,95.7042957042957,95.8041958041958,95.90409590409591,96.00399600399601,96.1038961038961,96.2037962037962,96.3036963036963,96.40359640359641,96.5034965034965,96.6033966033966,96.7032967032967,96.8031968031968,96.90309690309691,97.002997002997,97.1028971028971,97.2027972027972,97.3026973026973,97.40259740259741,97.5024975024975,97.6023976023976,97.7022977022977,97.8021978021978,97.9020979020979,98.001998001998,98.1018981018981,98.2017982017982,98.3016983016983,98.4015984015984,98.5014985014985,98.6013986013986,98.7012987012987,98.80119880119881,98.9010989010989,99.000999000999,99.1008991008991,99.2007992007992,99.3006993006993,99.4005994005994,99.5004995004995,99.6003996003996,99.7002997002997,99.8001998001998,99.9000999000999,100.0],"cos":[1.0,0.9511534530228996,0.8093857823947705,0.5885467104819188,0.3102106894855472,0.0015692264556667226,-0.30722553916178263,-0.58600649131677,-0.8075386562578029,-0.950179871381357,-0.9999950750566616,-0.9521176659107179,-0.811224936173504,-0.5910811325286653,-0.31319278426917446,-0.0047076639102974095,0.3042373627012731,0.5834605000541262,0.8056835759565839,0.9491969305757587,0.9999803002751568,0.9530725005474241,0.8130560994785208,0.5936097324932398,0.31617179413936874,0.007846054994972068,-0.3012461895372182,-0.5809087617716404,-0.8038205597634447,-0.9482046402879605,-0.9999556758010154,-0.9540179475280053,-0.8148792542731221,-0.596132485469219,-0.31914768975322033,-0.010984368796894167,0.2982520491323346,0.5783513016036816,0.8019496260288834,0.9472030102919091,0.9999212018767856,0.9549539975399158,0.8166943825994136,0.5986493666077721,0.3221204417984948,0.014122574404028403,-0.2952549709786086,-0.5757881447409429,-0.8000707931813853,-0.9461920504535466,-0.9998768788420318,-0.9558806413631561,-0.8185014665785871,-0.6011603511179051,-0.3250900209939213,-0.017260640905405175,0.29225498459683513,0.5732193164302286,0.798184079727241,0.9451717707307128,0.9998227071333307,0.9567978698704157,0.8203004884110702,0.6036654142667051,0.3280563980894813,0.020398537391425064,-0.28925211953658264,-0.5706448419742066,-0.7962895042503644,-0.9441421811730474,-0.9997586872842676,-0.9577056740270846,-0.8220914303767015,-0.6061645313795839,-0.3310195438666966,-0.023536232954118646,0.2862464053757318,0.5680647467311586,0.7943870854121091,0.9431032919218906,0.9996848199254319,0.9586040448913948,0.8238742748349058,0.6086576778405213,0.333979429138917,0.026673696687629467,-0.2832378717202264,-0.5654790561147303,-0.792476841951085,-0.9420551132101841,-0.9996011057844066,-0.9594929736144951,-0.8256490042248672,-0.6111448290923069,-0.336936024751608,-0.029810897688250668,0.280226548203782,0.5628877955936812,0.7905587926829739,0.9409976553623693,0.9995075456857675,0.9603724514405382,0.8274156010657022,0.6136259606367831,0.339889301582596,0.032947805054907915,-0.277212464487594,-0.5602909906916338,-0.7886329565003436,-0.9399309287943014,-0.9994041405510709,-0.9612424697067672,-0.8291740479566323,-0.6161010480350851,-0.34283923054252285,-0.03608438788941912,0.27419565026004544,0.5576886669868222,0.7866993523724624,0.9388549440130859,0.9992908913988456,0.9621030198436008,0.8309243275771547,0.6185700669078826,0.3457857825748805,0.03922061529679882,-0.2711761352364146,-0.5550808501118398,-0.7847579993451116,-0.9377697116170661,-0.9991677993445831,-0.9629540933747177,-0.8326664226872137,-0.6210329929355844,-0.34872892865646543,-0.04235645638556246,0.26815394915858226,0.5524675657533876,0.7828089165404264,0.936675242295658,0.9990348656007261,0.96379568191714,0.8344003161273698,0.6234898018587186,0.3516686397976222,0.04549188026803067,-0.2651291217947388,-0.5498488396520201,-0.7808521231565962,-0.9355715468292605,-0.9988920914766568,-0.964627777181316,-0.8361259908189689,-0.6259404694779603,-0.3546048870425292,-0.04862685606063354,0.262101682939091,0.5472246976018927,0.7788876384678417,0.9344586360891488,0.9987394783786844,0.9654503709712016,0.8378434297642868,0.6283849716545113,0.35753764146948386,0.05176135288421477,-0.2590716624115685,-0.5445951654505448,-0.7769154818241144,-0.9333365210373676,-0.9985770278100303,-0.9662634551843411,-0.8395526160467932,-0.6308232843103022,-0.36046687419118745,-0.05489533986433586,0.25603909005753006,0.5419602690984952,0.7749356726509338,0.932205212726623,0.9984047413708145,0.9670670218119474,0.8412535328311724,0.6332553834282297,0.36339255635502954,0.058028786131580204,-0.2530039957474698,-0.5393200344992116,-0.7729482304491959,-0.9310647223001737,-0.9982226207580387,-0.96786106293898,-0.8429461633635869,-0.635681245052393,-0.36631465914337236,-0.06116166082185717,0.2499664093767659,0.5366744876587057,0.7709531747949812,0.929915060991721,0.9980306677655703,0.9686455707442129,0.8446304909718177,0.6381008452883301,0.36923315377383464,0.0642939330767061,-0.24692636086521347,-0.5340236546353143,-0.7689505253393617,-0.9287562401252987,-0.9978288842841246,-0.9694205375003553,-0.8463064990654289,-0.6405141603032528,-0.372148011499575,-0.06742557204360021,0.24388388015698906,0.531367561539442,0.7669403018082076,0.9275882711151608,0.9976172723012461,0.9701859555740613,0.8479741711359305,0.6429211663262817,0.3750592036095751,0.07055654687620605,-0.24083899722018282,-0.5287062345333049,-0.764922524001993,-0.92641116546567,-0.9973958339012919,-0.9709418174260496,-0.8496334907569417,-0.6453218396486803,-0.3779667014289227,-0.0736868267348654,0.23779174204654666,0.5260396998306723,0.7628972117956005,0.9252249347711833,0.9971645712653989,0.9716881156111666,0.8512844415843522,0.6477161566240883,0.3808704763190936,0.07681638078663186,-0.23474214465119866,-0.5233679836966091,-0.7608643851381259,-0.9240295907159387,-0.996923486671481,-0.9724248427784598,-0.8529270073564835,-0.650104093668755,-0.38377049967819304,-0.07994517820575266,0.23169023507232764,0.5206911124472162,0.7588240640526814,0.9228251450739569,0.9966725824941941,0.9731519916712501,0.854561171894249,0.6524856272617711,0.38666674294140213,0.0830731881739278,-0.22863604337089707,-0.5180091124493722,-0.7567762686361985,-0.9216116097088566,-0.9964118612049159,-0.9738695551272032,-0.856186919101313,-0.6548607339453004,-0.3895591775810116,-0.08620037988061353,0.2255795996303491,0.515322010120473,0.75472101905923,0.9203889965738408,0.9961413253717215,0.9745775260784005,0.8578042329642498,0.6572293903247778,0.392447775106868,0.08932672252332598,-0.22252093395630818,-0.5126298319281722,-0.7526583355657805,-0.9191573177115103,-0.9958609776593583,-0.9752758975514083,-0.8594130975527011,-0.6595915730692735,-0.39533250706661316,-0.09245218530794436,0.21946007647628463,0.5099326043901199,0.7505882384729903,0.9179165852537624,0.9955708208292194,0.9759646626673468,0.8610134970195331,0.6619472589115217,0.39821334504596406,0.09557673744901445,-0.21639705733937772,-0.5072303540737015,-0.7485107481711102,-0.9166668114216711,-0.9952708577393169,-0.9766438146419576,-0.8626054156009698,-0.6642964246482838,-0.40109026066899317,-0.09870034817005174,0.21333190671597888,0.5045231075958151,0.7464258851231844,0.915408008525367,0.9949610913442529,0.9773133467856706,0.864188837616839,0.6666390471405432,0.4039632255984075,0.10182298670384461,-0.21026465479747436,-0.5018108916224547,-0.7443336698648776,-0.9141401889639159,-0.9946415246951916,-0.9779732525036703,-0.8657637474705903,-0.6689751033137342,-0.40683221153582827,-0.10494462229275738,0.20719533179594798,0.49909373286867864,0.742234123004273,0.9128633652251971,0.9943121609398281,0.9786235252959509,0.8673301296495403,0.671304570157968,0.4096971902220689,0.10806522418903322,-0.20412396794392718,-0.49637165809819284,-0.7401272652216693,-0.9115775498857795,-0.9939730033223582,-0.9792641587574173,-0.868887968725002,-0.6736274247282602,-0.41255813343741415,-0.11118476165509714,0.20105059349391047,0.4936446941231253,0.7380131172693769,0.9102827556107986,0.9936240551834458,0.9798951465778981,0.8704372493524369,0.6759436441447565,0.4154150130018772,0.11430320396383638,-0.1979752387183097,-0.49091286780376203,-0.7358916999715134,-0.9089789951538405,-0.9932653199601932,-0.9805164825422256,-0.8719779562716067,-0.6782532055929582,-0.4182678007755587,-0.11742052039899199,0.1948979339090865,0.4881762060482828,0.733763034223799,0.9076662813567794,0.9928968011860967,0.9811281605303109,0.8735100743067227,0.6805560863239468,0.4211164686588021,0.12053668025532817,-0.1918187093772789,-0.4854347358124958,-0.7316271409933499,-0.9063446271497066,-0.9925185024910269,-0.9817301745172043,-0.8750335883665958,-0.6828522636545916,-0.42396098859255155,-0.12365165283902345,0.1887375954529215,0.4826884840995721,0.7294840413184877,0.9050140455507666,0.9921304276011831,0.9823225185731316,0.8765484834447852,0.6851417149678389,0.42680133255860797,0.12676540746792872,-0.18565462248463727,-0.47993747795977987,-0.7273337563084709,-0.903674549666037,-0.9917325803390618,-0.9829051868635711,-0.8780547446197461,-0.6874244177128364,-0.4296374725799053,-0.1298779134719581,0.18256982083936055,0.4771817444902179,0.7251763071433783,0.9023261526894006,0.9913249646234078,0.983478173649306,0.8795523570549659,0.6897003494052205,0.43246938072078567,0.13298914019325794,-0.17948322090203797,-0.4744213108345682,-0.7230117150738399,-0.9009688679024149,-0.9909075844691926,-0.9840414732864815,-0.8810413059991534,-0.6919694876273221,-0.4352970290872748,-0.1360990569865977,0.17639485307532915,0.4716562041827501,0.7208400014208419,0.899602708674191,0.9904804439875632,0.98459508022666,0.8825215767863192,0.694231810028387,0.43812038982733664,0.1392076332196493,-0.1733047477793072,-0.4688864517707705,-0.7186611875755181,-0.8982276884612228,-0.9900435473858052,-0.985138989016872,-0.883993154835964,-0.6964872943247957,-0.4409394351312281,-0.14231483827328917,0.1702129354511811,0.4661120808803767,0.7164752949989377,0.8968438208073135,0.9895968989673004,0.9856731942996854,0.8854560256532107,0.6987359183002837,0.44375413723165225,0.14542064154189963,-0.16711944654490793,-0.4633331188388077,-0.7142823452219105,-0.8954511193434026,-0.9891405031314853,-0.9861976908132347,-0.8869101748289475,-0.7009776598061435,-0.4465644684041123,-0.14852501243367047,0.1640243115310248,0.4605495930185245,0.7120823598447122,0.8940495977874416,0.9886743643738104,0.9867124733912886,0.88835558803997,0.7032124967615073,0.4493704009671648,0.15162792037087813,-0.1609275608962609,-0.4577615308369411,-0.709875360536965,-0.8926392699442591,-0.9881984872856829,-0.9872175369632974,-0.8897922510491216,-0.7054404071534685,-0.4521719072826919,-0.15472933479027517,0.157829225143259,0.45496895975617396,0.707661369037362,0.8912201497054245,0.9877128765544417,0.9877128765544417,0.8912201497054245,0.707661369037362,0.45496895975617396,0.157829225143259,-0.15472933479027517,-0.4521719072826919,-0.7054404071534685,-0.8897922510491216,-0.9872175369632974,-0.9881984872856829,-0.8926392699442591,-0.709875360536965,-0.4577615308369411,-0.1609275608962609,0.15162792037087813,0.4493704009671648,0.7032124967615073,0.88835558803997,0.9867124733912886,0.9886743643738104,0.8940495977874416,0.7120823598447122,0.4605495930185245,0.1640243115310248,-0.14852501243367047,-0.4465644684041123,-0.7009776598061435,-0.8869101748289475,-0.9861976908132347,-0.9891405031314853,-0.8954511193434026,-0.7142823452219105,-0.4633331188388077,-0.16711944654490793,0.14542064154189963,0.44375413723165225,0.6987359183002837,0.8854560256532107,0.9856731942996854,0.9895968989673004,0.8968438208073135,0.7164752949989377,0.4661120808803767,0.1702129354511811,-0.14231483827328917,-0.4409394351312281,-0.6964872943247957,-0.883993154835964,-0.985138989016872,-0.9900435473858052,-0.8982276884612228,-0.7186611875755181,-0.4688864517707705,-0.1733047477793072,0.1392076332196493,0.43812038982733664,0.694231810028387,0.8825215767863192,0.98459508022666,0.9904804439875632,0.899602708674191,0.7208400014208419,0.4716562041827501,0.17639485307532915,-0.1360990569865977,-0.4352970290872748,-0.6919694876273221,-0.8810413059991534,-0.9840414732864815,-0.9909075844691926,-0.9009688679024149,-0.7230117150738399,-0.4744213108345682,-0.17948322090203797,0.13298914019325794,0.43246938072078567,0.6897003494052205,0.8795523570549659,0.983478173649306,0.9913249646234078,0.9023261526894006,0.7251763071433783,0.4771817444902179,0.18256982083936055,-0.1298779134719581,-0.4296374725799053,-0.6874244177128364,-0.8780547446197461,-0.9829051868635711,-0.9917325803390618,-0.903674549666037,-0.7273337563084709,-0.47993747795977987,-0.18565462248463727,0.12676540746792872,0.42680133255860797,0.6851417149678389,0.8765484834447852,0.9823225185731316,0.9921304276011831,0.9050140455507666,0.7294840413184877,0.4826884840995721,0.1887375954529215,-0.12365165283902345,-0.42396098859255155,-0.6828522636545916,-0.8750335883665958,-0.9817301745172043,-0.9925185024910269,-0.9063446271497066,-0.7316271409933499,-0.4854347358124958,-0.1918187093772789,0.12053668025532817,0.4211164686588021,0.6805560863239468,0.8735100743067227,0.9811281605303109,0.9928968011860967,0.9076662813567794,0.733763034223799,0.4881762060482828,0.1948979339090865,-0.11742052039899199,-0.4182678007755587,-0.6782532055929582,-0.8719779562716067,-0.9805164825422256,-0.9932653199601932,-0.9089789951538405,-0.7358916999715134,-0.49091286780376203,-0.1979752387183097,0.11430320396383638,0.4154150130018772,0.6759436441447565,0.8704372493524369,0.9798951465778981,0.9936240551834483,0.9102827556107986,0.7380131172693769,0.4936446941231253,0.2010505934938886,-0.11118476165507495,-0.41255813343741415,-0.6736274247282602,-0.868887968725002,-0.9792641587574219,-0.9939730033223606,-0.9115775498857795,-0.7401272652216693,-0.49637165809819284,-0.20412396794390533,0.10806522418901103,0.4096971902220689,0.671304570157968,0.8673301296495514,0.9786235252959554,0.9943121609398304,0.9128633652251971,0.742234123004273,0.4990937328686593,0.2071953317959698,-0.10494462229273517,-0.40683221153582827,-0.6689751033137342,-0.8657637474706015,-0.9779732525036656,-0.9946415246951916,-0.9141401889639159,-0.7443336698648776,-0.5018108916224354,-0.21026465479749618,0.10182298670384461,0.4039632255984075,0.6666390471405432,0.8641888376168502,0.977313346785666,0.994961091344254,0.915408008525367,0.746425885123177,0.5045231075957959,0.21333190671598978,-0.09870034817004063,-0.40109026066899317,-0.6642964246482921,-0.8626054156009811,-0.9766438146419552,-0.9952708577393169,-0.9166668114216711,-0.7485107481711027,-0.5072303540737207,-0.21639705733938863,0.09557673744901445,0.39821334504597433,0.6619472589115301,0.8610134970195218,0.9759646626673444,0.9955708208292194,0.917916585253758,0.7505882384729755,0.5099326043901391,0.2194600764762955,-0.09245218530794436,-0.3953325070666234,-0.6595915730692903,-0.8594130975526897,-0.9752758975514059,-0.9958609776593583,-0.9191573177115059,-0.7526583355657658,-0.5126298319281818,-0.22252093395631906,0.08932672252332598,0.3924477751068783,0.6572293903247945,0.857804232964244,0.9745775260784005,0.9961413253717215,0.9203889965738364,0.7547210190592446,0.5153220101204826,0.2255795996303491,-0.08620037988062465,-0.3895591775810219,-0.6548607339452835,-0.8561869191013072,-0.9738695551272032,-0.996411861204915,-0.9216116097088523,-0.7567762686362132,-0.5180091124493816,-0.22863604337089707,0.08307318817393891,0.3866667429414227,0.6524856272617542,0.8545611718942432,0.9731519916712501,0.9966725824941932,0.9228251450739483,0.7588240640526888,0.5206911124472257,0.23169023507232764,-0.07994517820576379,-0.38377049967821364,-0.6501040936687466,-0.8529270073564835,-0.9724248427784598,-0.9969234866714801,-0.9240295907159473,-0.7608643851381333,-0.5233679836966091,-0.2347421446511878,0.07681638078664299,0.38087047631907295,0.6477161566240799,0.8512844415843522,0.9716881156111692,0.997164571265398,0.9252249347711918,0.7628972117956078,0.5260396998306723,0.2377917420465358,-0.07368682673488768,-0.377966701428902,-0.6453218396486717,-0.8496334907569417,-0.9709418174260522,-0.9973958339012903,-0.9264111654656743,-0.7649225240020002,-0.5287062345333049,-0.240838997220172,0.07055654687622831,0.3750592036095648,0.6429211663262817,0.8479741711359305,0.970185955574064,0.9976172723012476,0.9275882711151651,0.7669403018082076,0.5313675615394325,0.24388388015697823,-0.06742557204357794,-0.3721480114995646,-0.6405141603032528,-0.8463064990654348,-0.969420537500358,-0.9978288842841261,-0.9287562401253028,-0.7689505253393617,-0.5340236546353049,-0.24692636086519185,0.06429393307668381,0.36923315377382426,0.6381008452883301,0.8446304909718237,0.9686455707442184,0.998030667765571,0.9299150609917252,0.7709531747949812,0.5366744876586964,0.24996640937674428,-0.061161660821846035,-0.36631465914337236,-0.635681245052393,-0.8429461633635928,-0.9678610629389743,-0.9982226207580394,-0.9310647223001737,-0.7729482304491959,-0.5393200344992022,-0.2530039957474914,0.05802878613156907,0.36339255635502954,0.6332553834282384,0.8412535328311784,0.9670670218119417,0.998404741370815,0.932205212726623,0.7749356726509268,0.5419602690984764,0.25603909005755165,-0.05489533986432472,-0.36046687419118745,-0.6308232843103109,-0.8395526160468053,-0.9662634551843382,-0.9985770278100309,-0.9333365210373676,-0.7769154818241074,-0.5445951654505261,-0.25907166241157925,0.05176135288421477,0.35753764146948386,0.62838497165452,0.8378434297642989,0.9654503709711987,0.9987394783786846,0.9344586360891468,0.7788876384678312,0.5472246976019114,0.26210168293910174,-0.04862685606063354,-0.3546048870425344,-0.6259404694779733,-0.8361259908189598,-0.964627777181313,-0.9988920914766568,-0.9355715468292566,-0.7808521231565857,-0.5498488396520341,-0.26512912179474957,0.04549188026803067,0.35166863979763263,0.6234898018587317,0.8344003161273605,0.9637956819171385,0.9990348656007261,0.9366752422956541,0.7828089165404125,0.5524675657534015,0.26815394915858765,-0.042356456385568036,-0.34872892865647587,-0.621032992935602,-0.8326664226872075,-0.9629540933747162,-0.9991677993445829,-0.9377697116170602,-0.7847579993451254,-0.5550808501118492,-0.2711761352364146,0.039220615296804394,0.3457857825748962,0.6185700669078694,0.8309243275771485,0.9621030198436008,0.9992908913988454,0.9388549440130801,0.7866993523724727,0.5576886669868315,0.27419565026004544,-0.036084387889430275,-0.34283923054253856,-0.6161010480350719,-0.8291740479566292,-0.9612424697067672,-0.9994041405510704,-0.9399309287942939,-0.7886329565003539,-0.5602909906916385,-0.27721246448758863,0.032947805054919066,0.339889301582617,0.6136259606367743,0.8274156010656991,0.9603724514405397,0.9995075456857669,0.9409976553623769,0.7905587926829808,0.5628877955936812,0.2802265482037766,-0.029810897688267404,-0.336936024751587,-0.6111448290922982,-0.8256490042248672,-0.9594929736144967,-0.9996011057844062,-0.9420551132101898,-0.7924768419510918,-0.5654790561147303,-0.2832378717202157,0.026673696687646204,0.33397942913890116,0.6086576778405168,0.8238742748349058,0.958604044891398,0.9996848199254315,0.9431032919218952,0.7943870854121124,0.5680647467311564,0.28624640537571844,-0.02353623295414096,-0.33101954386668336,-0.6061645313795795,-0.8220914303767047,-0.9577056740270887,-0.9997586872842681,-0.944142181173051,-0.7962895042503662,-0.5706448419742021,-0.28925211953656665,0.020398537391405534,0.32805639808947074,0.6036654142667051,0.820300488411075,0.9567978698704206,0.9998227071333311,0.9451717707307156,0.798184079727241,0.5732193164302217,0.2922549845968164,-0.017260640905388435,-0.3250900209939134,-0.6011603511179073,-0.8185014665785936,-0.9558806413631618,-0.9998768788420319,-0.9461920504535485,-0.8000707931813836,-0.5757881447409338,-0.2952549709785873,0.014122574404014453,0.32212044179848953,0.5986493666077767,0.8166943825994217,0.9549539975399092,0.9999212018767858,0.94720301029191,0.8019496260288792,0.5783513016036692,0.29825204913235326,-0.010984368796883007,-0.31914768975321905,-0.5961324854692258,-0.8148792542731318,-0.9540179475279998,-0.9999556758010154,-0.9482046402879605,-0.8038205597634389,-0.5809087617716256,-0.3012461895372342,0.007846054994965093,0.31617179413937,0.5936097324932488,0.8130560994785322,0.9530725005474194,0.9999803002751568,0.9491969305757576,0.8056835759565766,0.5834605000541087,0.30423736270128643,-0.004707663910292526,-0.3131927842691791,-0.5910811325286766,-0.8112249361734913,-0.952117665910714,-0.9999950750566616,-0.950179871381355,-0.8075386562577938,-0.5860064913167861,-0.3072255391617929,0.0015692264556651531,0.3102106894855545,0.5885467104819324,0.8093857823947597,0.9511534530228968,1.0,0.9511534530228968,0.8093857823947597,0.5885467104819324,0.3102106894855545,0.0015692264556651531,-0.3072255391617929,-0.5860064913167861,-0.8075386562577938,-0.950179871381355,-0.9999950750566616,-0.952117665910714,-0.8112249361734913,-0.5910811325286766,-0.3131927842691791,-0.004707663910292526,0.30423736270128643,0.5834605000541087,0.8056835759565766,0.9491969305757576,0.9999803002751568,0.9530725005474194,0.8130560994785322,0.5936097324932488,0.31617179413937,0.007846054994965093,-0.3012461895372342,-0.5809087617716256,-0.8038205597634389,-0.9482046402879605,-0.9999556758010154,-0.9540179475279998,-0.8148792542731318,-0.5961324854692258,-0.31914768975321905,-0.010984368796883007,0.29825204913235326,0.5783513016036692,0.8019496260288792,0.94720301029191,0.9999212018767858,0.9549539975399092,0.8166943825994217,0.5986493666077767,0.32212044179848953,0.014122574404014453,-0.2952549709785873,-0.5757881447409338,-0.8000707931813836,-0.9461920504535485,-0.9998768788420319,-0.9558806413631618,-0.8185014665785936,-0.6011603511179073,-0.3250900209939134,-0.017260640905388435,0.2922549845968164,0.5732193164302217,0.798184079727241,0.9451717707307156,0.9998227071333311,0.9567978698704206,0.820300488411075,0.6036654142667051,0.32805639808947074,0.020398537391405534,-0.28925211953656665,-0.5706448419742021,-0.7962895042503662,-0.944142181173051,-0.9997586872842681,-0.9577056740270887,-0.8220914303767047,-0.6061645313795795,-0.33101954386668336,-0.02353623295414096,0.28624640537571844,0.5680647467311564,0.7943870854121124,0.9431032919218952,0.9996848199254315,0.958604044891398,0.8238742748349058,0.6086576778405168,0.33397942913890116,0.026673696687646204,-0.2832378717202157,-0.5654790561147303,-0.7924768419510918,-0.9420551132101898,-0.9996011057844062,-0.9594929736144967,-0.8256490042248672,-0.6111448290922982,-0.336936024751587,-0.029810897688267404,0.2802265482037766,0.5628877955936812,0.7905587926829808,0.9409976553623769,0.9995075456857669,0.9603724514405397,0.8274156010656991,0.6136259606367743,0.339889301582617,0.032947805054919066,-0.27721246448758863,-0.5602909906916385,-0.7886329565003539,-0.9399309287942939,-0.9994041405510704,-0.9612424697067672,-0.8291740479566292,-0.6161010480350719,-0.34283923054253856,-0.036084387889430275,0.27419565026004544,0.5576886669868315,0.7866993523724727,0.9388549440130801,0.9992908913988454,0.9621030198436008,0.8309243275771485,0.6185700669078694,0.3457857825748962,0.039220615296804394,-0.2711761352364146,-0.5550808501118492,-0.7847579993451254,-0.9377697116170602,-0.9991677993445829,-0.9629540933747162,-0.8326664226872075,-0.621032992935602,-0.34872892865647587,-0.042356456385568036,0.26815394915858765,0.5524675657534015,0.7828089165404125,0.9366752422956541,0.9990348656007261,0.9637956819171385,0.8344003161273605,0.6234898018587317,0.35166863979763263,0.04549188026803067,-0.26512912179474957,-0.5498488396520341,-0.7808521231565857,-0.9355715468292566,-0.9988920914766568,-0.964627777181313,-0.8361259908189598,-0.6259404694779733,-0.3546048870425344,-0.04862685606063354,0.26210168293910174,0.5472246976019114,0.7788876384678312,0.9344586360891468,0.9987394783786846,0.9654503709711987,0.8378434297642989,0.62838497165452,0.35753764146948386,0.05176135288421477,-0.25907166241157925,-0.5445951654505261,-0.7769154818241074,-0.9333365210373676,-0.9985770278100309,-0.9662634551843382,-0.8395526160468053,-0.6308232843103109,-0.36046687419118745,-0.05489533986432472,0.25603909005755165,0.5419602690984764,0.7749356726509268,0.932205212726623,0.998404741370815,0.9670670218119417,0.8412535328311784,0.6332553834282384,0.36339255635502954,0.05802878613156907,-0.2530039957474914,-0.5393200344992022,-0.7729482304491959,-0.9310647223001737,-0.9982226207580394,-0.9678610629389743,-0.8429461633635928,-0.635681245052393,-0.36631465914337236,-0.061161660821846035,0.24996640937674428,0.5366744876586964,0.7709531747949812,0.9299150609917252,0.998030667765571,0.9686455707442184,0.8446304909718237,0.6381008452883301,0.36923315377382426,0.06429393307668381,-0.24692636086519185,-0.5340236546353049,-0.7689505253393617,-0.9287562401253028,-0.9978288842841261,-0.969420537500358,-0.8463064990654348,-0.6405141603032528,-0.3721480114995646,-0.06742557204357794,0.24388388015697823,0.5313675615394325,0.7669403018082076,0.9275882711151651,0.9976172723012476,0.970185955574064,0.8479741711359305,0.6429211663262817,0.3750592036095648,0.07055654687622831,-0.240838997220172,-0.5287062345333049,-0.7649225240020002,-0.9264111654656743,-0.9973958339012903,-0.9709418174260522,-0.8496334907569417,-0.6453218396486717,-0.377966701428902,-0.07368682673488768,0.2377917420465358,0.5260396998306723,0.7628972117956078,0.9252249347711918,0.997164571265398,0.9716881156111692,0.8512844415843522,0.6477161566240799,0.38087047631907295,0.07681638078664299,-0.2347421446511878,-0.5233679836966091,-0.7608643851381333,-0.9240295907159473,-0.9969234866714801,-0.9724248427784598,-0.8529270073564835,-0.6501040936687466,-0.38377049967821364,-0.07994517820576379,0.23169023507232764,0.5206911124472257,0.7588240640526888,0.9228251450739483,0.9966725824941932,0.9731519916712501,0.8545611718942432,0.6524856272617542,0.3866667429414227,0.08307318817393891,-0.22863604337089707,-0.5180091124493816,-0.7567762686362132,-0.9216116097088523,-0.996411861204915,-0.9738695551272032,-0.8561869191013072,-0.6548607339452835,-0.3895591775810219,-0.08620037988062465,0.2255795996303491,0.5153220101204826,0.7547210190592446,0.9203889965738364,0.9961413253717215,0.9745775260784005,0.857804232964244,0.6572293903247945,0.3924477751068783,0.08932672252332598,-0.22252093395631906,-0.5126298319281818,-0.7526583355657658,-0.9191573177115059,-0.9958609776593583,-0.9752758975514059,-0.8594130975526897,-0.6595915730692903,-0.3953325070666234,-0.09245218530794436,0.2194600764762955,0.5099326043901391,0.7505882384729755,0.917916585253758,0.9955708208292194,0.9759646626673444,0.8610134970195218,0.6619472589115301,0.39821334504597433,0.09557673744901445,-0.21639705733938863,-0.5072303540737207,-0.7485107481711027,-0.9166668114216711,-0.9952708577393169,-0.9766438146419552,-0.8626054156009811,-0.6642964246482921,-0.40109026066899317,-0.09870034817004063,0.21333190671598978,0.5045231075957959,0.746425885123177,0.915408008525367,0.994961091344254,0.977313346785666,0.8641888376168502,0.6666390471405432,0.4039632255984075,0.10182298670384461,-0.21026465479749618,-0.5018108916224354,-0.7443336698648776,-0.9141401889639159,-0.9946415246951916,-0.9779732525036656,-0.8657637474706015,-0.6689751033137342,-0.40683221153582827,-0.10494462229273517,0.2071953317959698,0.4990937328686593,0.742234123004273,0.9128633652251971,0.9943121609398304,0.9786235252959554,0.8673301296495514,0.671304570157968,0.4096971902220689,0.10806522418901103,-0.20412396794390533,-0.49637165809819284,-0.7401272652216693,-0.9115775498857795,-0.9939730033223606,-0.9792641587574219,-0.868887968725002,-0.6736274247282602,-0.41255813343741415,-0.11118476165507495,0.2010505934938886,0.4936446941231253,0.7380131172693769,0.9102827556107986,0.9936240551834483,0.9798951465778981,0.8704372493524369,0.6759436441447565,0.4154150130018772,0.11430320396383638,-0.1979752387183097,-0.49091286780376203,-0.7358916999715134,-0.9089789951538405,-0.9932653199601932,-0.9805164825422256,-0.8719779562716067,-0.6782532055929582,-0.4182678007755587,-0.11742052039899199,0.1948979339090865,0.4881762060482828,0.733763034223799,0.9076662813567794,0.9928968011860967,0.9811281605303109,0.8735100743067227,0.6805560863239468,0.4211164686588021,0.12053668025532817,-0.1918187093772789,-0.4854347358124958,-0.7316271409933499,-0.9063446271497066,-0.9925185024910269,-0.9817301745172043,-0.8750335883665958,-0.6828522636545916,-0.42396098859255155,-0.12365165283902345,0.1887375954529215,0.4826884840995721,0.7294840413184877,0.9050140455507666,0.9921304276011831,0.9823225185731316,0.8765484834447852,0.6851417149678389,0.42680133255860797,0.12676540746792872,-0.18565462248463727,-0.47993747795977987,-0.7273337563084709,-0.903674549666037,-0.9917325803390618,-0.9829051868635711,-0.8780547446197461,-0.6874244177128364,-0.4296374725799053,-0.1298779134719581,0.18256982083936055,0.4771817444902179,0.7251763071433783,0.9023261526894006,0.9913249646234078,0.983478173649306,0.8795523570549659,0.6897003494052205,0.43246938072078567,0.13298914019325794,-0.17948322090203797,-0.4744213108345682,-0.7230117150738399,-0.9009688679024149,-0.9909075844691926,-0.9840414732864815,-0.8810413059991534,-0.6919694876273221,-0.4352970290872748,-0.1360990569865977,0.17639485307532915,0.4716562041827501,0.7208400014208419,0.899602708674191,0.9904804439875632,0.98459508022666,0.8825215767863192,0.694231810028387,0.43812038982733664,0.1392076332196493,-0.1733047477793072,-0.4688864517707705,-0.7186611875755181,-0.8982276884612228,-0.9900435473858052,-0.985138989016872,-0.883993154835964,-0.6964872943247957,-0.4409394351312281,-0.14231483827328917,0.1702129354511811,0.4661120808803767,0.7164752949989377,0.8968438208073135,0.9895968989673004,0.9856731942996854,0.8854560256532107,0.6987359183002837,0.44375413723165225,0.14542064154189963,-0.16711944654490793,-0.4633331188388077,-0.7142823452219105,-0.8954511193434026,-0.9891405031314853,-0.9861976908132347,-0.8869101748289475,-0.7009776598061435,-0.4465644684041123,-0.14852501243367047,0.1640243115310248,0.4605495930185245,0.7120823598447122,0.8940495977874416,0.9886743643738104,0.9867124733912886,0.88835558803997,0.7032124967615073,0.4493704009671648,0.15162792037087813,-0.1609275608962609,-0.4577615308369411,-0.709875360536965,-0.8926392699442591,-0.9881984872856829,-0.9872175369632974,-0.8897922510491216,-0.7054404071534685,-0.4521719072826919,-0.15472933479027517,0.157829225143259,0.45496895975617396,0.707661369037362,0.8912201497054245,0.9877128765544417,0.9877128765544417,0.8912201497054245,0.707661369037362,0.45496895975617396,0.157829225143259,-0.15472933479027517,-0.4521719072826919,-0.7054404071534685,-0.8897922510491216,-0.9872175369632974,-0.9881984872856829,-0.8926392699442591,-0.709875360536965,-0.4577615308369411,-0.1609275608962609,0.15162792037087813,0.4493704009671648,0.7032124967615073,0.88835558803997,0.9867124733912886,0.9886743643738104,0.8940495977874416,0.7120823598447122,0.4605495930185245,0.1640243115310248,-0.14852501243367047,-0.4465644684041123,-0.7009776598061435,-0.8869101748289475,-0.9861976908132347,-0.9891405031314853,-0.8954511193434026,-0.7142823452219105,-0.4633331188388077,-0.16711944654490793,0.14542064154189963,0.44375413723165225,0.6987359183002837,0.8854560256532107,0.9856731942996854,0.9895968989673004,0.8968438208073135,0.7164752949989377,0.4661120808803767,0.1702129354511811,-0.14231483827328917,-0.4409394351312281,-0.6964872943247957,-0.883993154835964,-0.985138989016872,-0.9900435473858052,-0.8982276884612228,-0.7186611875755181,-0.4688864517707705,-0.1733047477793072,0.1392076332196493,0.43812038982733664,0.694231810028387,0.8825215767863192,0.98459508022666,0.9904804439875632,0.899602708674191,0.7208400014208419,0.4716562041827501,0.17639485307532915,-0.1360990569865977,-0.4352970290872748,-0.6919694876273221,-0.8810413059991534,-0.9840414732864815,-0.9909075844691926,-0.9009688679024149,-0.7230117150738399,-0.4744213108345682,-0.17948322090203797,0.13298914019325794,0.43246938072078567,0.6897003494052205,0.8795523570549659,0.983478173649306,0.9913249646234078,0.9023261526894006,0.7251763071433783,0.4771817444902179,0.18256982083936055,-0.1298779134719581,-0.4296374725799053,-0.6874244177128364,-0.8780547446197461,-0.9829051868635711,-0.9917325803390618,-0.903674549666037,-0.7273337563084709,-0.47993747795977987,-0.18565462248463727,0.12676540746792872,0.42680133255860797,0.6851417149678389,0.8765484834447852,0.9823225185731316,0.9921304276011831,0.9050140455507666,0.7294840413184877,0.4826884840995721,0.1887375954529215,-0.12365165283902345,-0.42396098859255155,-0.6828522636545916,-0.8750335883665958,-0.9817301745172043,-0.9925185024910269,-0.9063446271497066,-0.7316271409933499,-0.4854347358124958,-0.1918187093772789,0.12053668025532817,0.4211164686588021,0.6805560863239468,0.8735100743067227,0.9811281605303109,0.9928968011860967,0.9076662813567794,0.733763034223799,0.4881762060482828,0.1948979339090865,-0.11742052039899199,-0.4182678007755587,-0.6782532055929582,-0.8719779562716067,-0.9805164825422256,-0.9932653199601932,-0.9089789951538405,-0.7358916999715134,-0.49091286780376203,-0.1979752387183097,0.11430320396383638,0.4154150130018772,0.6759436441447565,0.8704372493524369,0.9798951465778981,0.9936240551834458,0.9102827556107986,0.7380131172693769,0.4936446941231253,0.20105059349391047,-0.11118476165509714,-0.41255813343741415,-0.6736274247282602,-0.868887968725002,-0.9792641587574173,-0.9939730033223582,-0.9115775498857795,-0.7401272652216693,-0.49637165809819284,-0.20412396794392718,0.10806522418903322,0.4096971902220689,0.671304570157968,0.8673301296495403,0.9786235252959509,0.9943121609398281,0.9128633652251971,0.742234123004273,0.49909373286867864,0.20719533179594798,-0.10494462229275738,-0.40683221153582827,-0.6689751033137342,-0.8657637474705903,-0.9779732525036703,-0.9946415246951916,-0.9141401889639159,-0.7443336698648776,-0.5018108916224547,-0.21026465479747436,0.10182298670384461,0.4039632255984075,0.6666390471405432,0.864188837616839,0.9773133467856706,0.9949610913442529,0.915408008525367,0.7464258851231844,0.5045231075958151,0.21333190671597888,-0.09870034817005174,-0.40109026066899317,-0.6642964246482838,-0.8626054156009698,-0.9766438146419576,-0.9952708577393169,-0.9166668114216711,-0.7485107481711102,-0.5072303540737015,-0.21639705733937772,0.09557673744901445,0.39821334504596406,0.6619472589115217,0.8610134970195331,0.9759646626673468,0.9955708208292194,0.9179165852537624,0.7505882384729903,0.5099326043901199,0.21946007647628463,-0.09245218530794436,-0.39533250706661316,-0.6595915730692735,-0.8594130975527011,-0.9752758975514083,-0.9958609776593583,-0.9191573177115103,-0.7526583355657805,-0.5126298319281722,-0.22252093395630818,0.08932672252332598,0.392447775106868,0.6572293903247778,0.8578042329642498,0.9745775260784005,0.9961413253717215,0.9203889965738408,0.75472101905923,0.515322010120473,0.2255795996303491,-0.08620037988061353,-0.3895591775810116,-0.6548607339453004,-0.856186919101313,-0.9738695551272032,-0.9964118612049159,-0.9216116097088566,-0.7567762686361985,-0.5180091124493722,-0.22863604337089707,0.0830731881739278,0.38666674294140213,0.6524856272617711,0.854561171894249,0.9731519916712501,0.9966725824941941,0.9228251450739569,0.7588240640526814,0.5206911124472162,0.23169023507232764,-0.07994517820575266,-0.38377049967819304,-0.650104093668755,-0.8529270073564835,-0.9724248427784598,-0.996923486671481,-0.9240295907159387,-0.7608643851381259,-0.5233679836966091,-0.23474214465119866,0.07681638078663186,0.3808704763190936,0.6477161566240883,0.8512844415843522,0.9716881156111666,0.9971645712653989,0.9252249347711833,0.7628972117956005,0.5260396998306723,0.23779174204654666,-0.0736868267348654,-0.3779667014289227,-0.6453218396486803,-0.8496334907569417,-0.9709418174260496,-0.9973958339012919,-0.92641116546567,-0.764922524001993,-0.5287062345333049,-0.24083899722018282,0.07055654687620605,0.3750592036095751,0.6429211663262817,0.8479741711359305,0.9701859555740613,0.9976172723012461,0.9275882711151608,0.7669403018082076,0.531367561539442,0.24388388015698906,-0.06742557204360021,-0.372148011499575,-0.6405141603032528,-0.8463064990654289,-0.9694205375003553,-0.9978288842841246,-0.9287562401252987,-0.7689505253393617,-0.5340236546353143,-0.24692636086521347,0.0642939330767061,0.36923315377383464,0.6381008452883301,0.8446304909718177,0.9686455707442129,0.9980306677655703,0.929915060991721,0.7709531747949812,0.5366744876587057,0.2499664093767659,-0.06116166082185717,-0.36631465914337236,-0.635681245052393,-0.8429461633635869,-0.96786106293898,-0.9982226207580387,-0.9310647223001737,-0.7729482304491959,-0.5393200344992116,-0.2530039957474698,0.058028786131580204,0.36339255635502954,0.6332553834282297,0.8412535328311724,0.9670670218119474,0.9984047413708145,0.932205212726623,0.7749356726509338,0.5419602690984952,0.25603909005753006,-0.05489533986433586,-0.36046687419118745,-0.6308232843103022,-0.8395526160467932,-0.9662634551843411,-0.9985770278100303,-0.9333365210373676,-0.7769154818241144,-0.5445951654505448,-0.2590716624115685,0.05176135288421477,0.35753764146948386,0.6283849716545113,0.8378434297642868,0.9654503709712016,0.9987394783786844,0.9344586360891488,0.7788876384678417,0.5472246976018927,0.262101682939091,-0.04862685606063354,-0.3546048870425292,-0.6259404694779603,-0.8361259908189689,-0.964627777181316,-0.9988920914766568,-0.9355715468292605,-0.7808521231565962,-0.5498488396520201,-0.2651291217947388,0.04549188026803067,0.3516686397976222,0.6234898018587186,0.8344003161273698,0.96379568191714,0.9990348656007261,0.936675242295658,0.7828089165404264,0.5524675657533876,0.26815394915858226,-0.04235645638556246,-0.34872892865646543,-0.6210329929355844,-0.8326664226872137,-0.9629540933747177,-0.9991677993445831,-0.9377697116170661,-0.7847579993451116,-0.5550808501118398,-0.2711761352364146,0.03922061529679882,0.3457857825748805,0.6185700669078826,0.8309243275771547,0.9621030198436008,0.9992908913988456,0.9388549440130859,0.7866993523724624,0.5576886669868222,0.27419565026004544,-0.03608438788941912,-0.34283923054252285,-0.6161010480350851,-0.8291740479566323,-0.9612424697067672,-0.9994041405510709,-0.9399309287943014,-0.7886329565003436,-0.5602909906916338,-0.277212464487594,0.032947805054907915,0.339889301582596,0.6136259606367831,0.8274156010657022,0.9603724514405382,0.9995075456857675,0.9409976553623693,0.7905587926829739,0.5628877955936812,0.280226548203782,-0.029810897688250668,-0.336936024751608,-0.6111448290923069,-0.8256490042248672,-0.9594929736144951,-0.9996011057844066,-0.9420551132101841,-0.792476841951085,-0.5654790561147303,-0.2832378717202264,0.026673696687629467,0.333979429138917,0.6086576778405213,0.8238742748349058,0.9586040448913948,0.9996848199254319,0.9431032919218906,0.7943870854121091,0.5680647467311586,0.2862464053757318,-0.023536232954118646,-0.3310195438666966,-0.6061645313795839,-0.8220914303767015,-0.9577056740270846,-0.9997586872842676,-0.9441421811730474,-0.7962895042503644,-0.5706448419742066,-0.28925211953658264,0.020398537391425064,0.3280563980894813,0.6036654142667051,0.8203004884110702,0.9567978698704157,0.9998227071333307,0.9451717707307128,0.798184079727241,0.5732193164302286,0.29225498459683513,-0.017260640905405175,-0.3250900209939213,-0.6011603511179051,-0.8185014665785871,-0.9558806413631561,-0.9998768788420318,-0.9461920504535466,-0.8000707931813853,-0.5757881447409429,-0.2952549709786086,0.014122574404028403,0.3221204417984948,0.5986493666077721,0.8166943825994136,0.9549539975399158,0.9999212018767856,0.9472030102919091,0.8019496260288834,0.5783513016036816,0.2982520491323346,-0.010984368796894167,-0.31914768975322033,-0.596132485469219,-0.8148792542731221,-0.9540179475280053,-0.9999556758010154,-0.9482046402879605,-0.8038205597634447,-0.5809087617716404,-0.3012461895372182,0.007846054994972068,0.31617179413936874,0.5936097324932398,0.8130560994785208,0.9530725005474241,0.9999803002751568,0.9491969305757587,0.8056835759565839,0.5834605000541262,0.3042373627012731,-0.0047076639102974095,-0.31319278426917446,-0.5910811325286653,-0.811224936173504,-0.9521176659107179,-0.9999950750566616,-0.950179871381357,-0.8075386562578029,-0.58600649131677,-0.30722553916178263,0.0015692264556667226,0.3102106894855472,0.5885467104819188,0.8093857823947705,0.9511534530228996,1.0],"sin":[-0.0,0.30871849442917204,0.5872773239766755,0.8084632147357804,0.9506678326991512,0.9999987687634074,0.9516367311567749,0.8103063569629751,0.5898146477066691,0.3117021206564178,0.0031384490471553766,-0.30573182735974125,-0.5847342156315931,-0.8066121092375382,-0.9496895702711083,-0.9999889188888583,-0.9525962561004394,-0.8121415177643543,-0.5923461618292225,-0.3146826766530981,-0.006276867180943299,0.30274214886645745,0.582185347720787,0.8047530587014282,0.9487019535084202,0.9999692192367803,0.9535463980789327,0.8139686790638443,0.5948718414092085,0.3176601330610744,0.009415223488300803,-0.29974948839731513,-0.579630745350245,-0.8028860814388872,-0.9477049921390001,-0.9999396700012125,-0.954487147733464,-0.8157878228640871,-0.5973916615689694,-0.32063446055273825,-0.012553487056773914,0.2967538754296807,0.5770704336825467,0.8010111958394297,0.9466986959828045,0.9999002714732118,0.9554184957977425,0.8175989312467226,0.5999055974885623,0.32360562983130103,0.015691626974822116,-0.29375533947004506,-0.5745044379364723,-0.7991284203704665,-0.9456830749517365,-0.9998510240408491,-0.9563404330981221,-0.8194019863725382,-0.6024136244060033,-0.3265736116310821,-0.018829612332122846,0.2907539100535624,0.571932783386789,0.7972377735771226,0.9446581390495483,0.9997919281892061,0.9572529505536113,0.8211969704816456,0.6049157176175115,0.329538376717797,0.02196741221987594,-0.28774961674401484,-0.5693554953640028,-0.7953392740820545,-0.9436238983717422,-0.9997229845003712,-0.9581560391760165,-0.8229838658936545,-0.6074118524777521,-0.3324998958888456,-0.025104995731063454,0.28474248913335115,0.5667725992541083,0.7934329405852673,0.9425803631054719,0.99964419365343,0.9590496900700175,0.8247626550078475,0.6099020044000798,0.3354581399735997,0.028242331960932638,-0.2817325568414375,-0.5641841204983399,-0.7915187918639297,-0.9415275435294412,-0.9995555564244644,-0.9599338944332539,-0.8265333203033537,-0.6123861488567803,-0.3384130798336903,-0.03137939000703252,0.2787198495157658,0.5615900845929197,0.7895968467721899,0.940465450013819,0.999457073686541,0.960808643556413,0.8282958443393202,0.6148642613793122,0.3413646863632527,0.03451613896969685,-0.2757043968311618,-0.5589905170888075,-0.7876671242409891,-0.9393940930200758,-0.9993487464097035,-0.9616739288233153,-0.8300502097550855,-0.617336317558548,-0.344312930489381,-0.037652547952303814,0.2726862284894928,0.5563854435914488,0.7857296432778755,0.9383134831009717,0.9992305756609635,0.9625297417109987,0.8317963992703485,0.6198022930450144,0.34725778317216266,0.04078858606158036,-0.2696653742193749,-0.553774889760522,-0.783784422966845,-0.9372236309003918,-0.9991025626042893,-0.9633760737898033,-0.8335343956853408,-0.6222621635490975,-0.3501992154051325,-0.04392422240790649,0.26664186377588034,0.5511588813096868,0.7818314824680417,0.9361245471532569,0.9989647085005952,0.9642129167234541,0.8352641818809945,0.6247159048414215,0.3531371982155163,0.047059426105619556,-0.26361572694024427,-0.5485374440063299,-0.7798708410177358,-0.9350162426854173,-0.9988170147077283,-0.965040262269143,-0.8369857408191116,-0.6271634927528776,-0.35607170266451643,-0.05019416627331841,0.2605869935195717,0.5459106036713489,0.7779025179280236,0.9338987284135464,0.9986594826804559,0.96585810227761,0.8386990555425073,0.6296049031750024,0.35900269984759653,0.05332841203416763,-0.25755569334654355,-0.543278386178749,-0.7759265325866641,-0.9327720153450331,-0.9984921139704505,-0.9666664286932241,-0.8404041091752745,-0.6320401120601798,-0.36193016089476654,-0.056462132516201684,0.254521856279123,0.5406408174556112,0.7739429044568894,0.9316361145778735,0.9983149102262749,0.9674652335540612,0.8421008849228038,0.6344690954218785,0.3648540569708668,0.05959529685262892,-0.25148551220026133,-0.5379979234816888,-0.7719516530772115,-0.9304910373005615,-0.998127873193366,-0.9682545089919732,-0.8437893660720462,-0.6368918293348873,-0.36777435927585245,-0.0627278741821357,0.24844669101764696,0.5353497302891878,0.7699527980612308,0.9293367947919784,0.9979310047140173,0.9690342472327087,0.845469535991654,0.639308289935552,0.3706910390450766,0.06585983364919032,-0.24540542266323764,-0.532696263962511,-0.767946359097443,-0.9281733984212822,-0.9977243067273611,-0.9698044405959231,-0.8471413781321435,-0.6417184534220092,-0.37360406754957415,-0.06899114440434695,0.24236173709322528,0.5300375506380012,0.7659323559490444,0.9270008596477952,0.9975077812693521,0.9705650814952992,0.8488048760260594,0.644122296054422,0.37651341609634437,0.07212177560450497,-0.23931566428756776,-0.5273736165036832,-0.7639108084537376,-0.9258191900208915,-0.9972814304727357,-0.9713161624386102,-0.8504600132881358,-0.6465197941552128,-0.3794190560286338,-0.07525169641339091,0.23626723424973708,0.5247044877990064,0.7618817365235365,0.9246284011798831,0.9970452565670442,0.972057676027794,0.8521067736154583,0.6489109241092967,0.3823209587262184,0.07838087600159495,-0.23321647700642364,-0.5220301908145859,-0.7598451601445696,-0.9234285048539221,-0.9967992618785643,-0.9727896149590257,-0.8537451407876243,-0.6512956623643151,-0.38521909560564427,-0.08150928354705277,0.23016342260724054,0.5193507518919442,0.7578010993768834,0.9222195128618174,0.9965434488303153,0.9735119720227899,0.8553750986669028,0.6536739854308662,0.38811343812067395,0.08463688823530453,-0.22710810112442764,-0.5166661974232509,-0.7557495743542451,-0.9210014371120199,-0.996277819942027,-0.9742247401039513,-0.8569966311983934,-0.6560458698827373,-0.39100395776232044,-0.08776365925979852,0.22405054265255533,0.5139765538510634,0.7536906052839726,0.9197742896024378,0.9960023778301138,0.9749279121818251,0.8586097224101844,0.6584112923571017,0.39389062605929287,0.09088956582219448,-0.22099077730822805,-0.511281847668066,-0.7516242124466196,-0.9185380824203351,-0.9957171252076493,-0.9756214813302458,-0.8602143564135102,-0.6607702295548835,-0.39677341457823556,-0.094014577132667,0.21792883522978768,0.5085821054168091,0.7495504161959506,0.9172928277422123,0.9954220648843395,0.9763054407176364,0.8618105174029077,0.6631226582407849,0.39965229492400844,0.09713866241020881,-0.21486474657701674,-0.5058773536894867,-0.7474692369586237,-0.9160385378336869,-0.9951171997664952,-0.9769797836070738,-0.8633981896563494,-0.6654685552436499,-0.4025272387399662,-0.10026179088293395,0.2117985415308412,0.5031676191275197,0.7453806952340184,0.9147752250493725,0.994802532857003,0.9776445033563576,0.8649773575354889,0.6678078974566588,0.4053982177082381,0.1033839317883809,-0.2087302502930333,-0.500452928421525,-0.743284811594034,-0.9135029018327567,-0.9944780672552967,-0.978299593418073,-0.8665480054856788,-0.670140661837556,-0.4082652035500067,-0.10650505437381554,0.20565990308595772,0.4977333083108983,0.741181606682887,0.9122215807160791,0.9941438061573254,0.9789450473396485,0.8681101180362147,0.6724668254088768,0.4111281680257862,0.10962512789653411,-0.20258753015209913,-0.4950087855835895,-0.7390711012169074,-0.9109312743202073,-0.9937997528555234,-0.9795808587634541,-0.8696636798004652,-0.6747863652581734,-0.4139870829357012,-0.11274412162416599,0.19951316175400458,0.4922793870758388,0.7369533159843348,0.9096319953545225,0.9934459107387787,0.9802070214268148,0.8712086754760229,0.6770992585382413,0.4168419201197433,0.11586200483495424,-0.19643682817389813,-0.4895451396719121,-0.7348282718451137,-0.9083237566167569,-0.9930822832923916,-0.980823529162086,-0.8727450898448553,-0.6794054824673437,-0.4196926514581305,-0.11897874681814691,0.19335855971331692,0.48680607030383655,0.7326959897306882,0.9070065709929229,0.9927088740980534,0.9814303758967495,0.8742729077734551,0.6817050143294363,0.4225392488714618,0.12209431687416648,-0.19027838669281266,-0.48406220595113497,-0.7305564906438106,-0.9056804514571496,-0.9923256868338024,-0.9820275556534294,-0.875792114212989,-0.6839978314743747,-0.4253816843210753,-0.12520868431500098,0.1871963394517625,0.4813135736405604,0.7284097956582741,0.9043454110715642,0.9919327252739926,0.9826150625499728,0.8773026941994455,0.6862839113182021,0.4282199298093039,0.12832181846446192,-0.18411244834798246,-0.4785602004458294,-0.7262559259187962,-0.9030014629861632,-0.9915299932892452,-0.9831928907995032,-0.8788046328537831,-0.6885632313432751,-0.43105395737975116,-0.131433688658575,0.1810267437574504,0.4758021134873758,0.7240949026407497,0.901648620438683,0.9911174948464274,0.9837610347104779,0.8802979153820655,0.6908357690985497,0.4338837391175667,0.13454426424574928,-0.1779392560740069,-0.4730393399320042,-0.7219267471099691,-0.9002868967544692,-0.990695234008602,-0.9843194886867439,-0.8817825270756503,-0.6931015021997865,-0.43670924714970105,-0.13765351458716774,0.17485001570905573,0.47027190699274063,0.7197514806825406,0.8989163053463557,0.9902632149349907,0.9848682472275927,0.88325845331127,0.6953604083297711,0.43953045364526044,0.14076140905706688,-0.17175905309128642,-0.467499841928486,-0.717569124784592,-0.897536859714493,-0.9898214418809321,-0.985407304927811,-0.8847256795512184,-0.6976124652385343,-0.44234733081566047,-0.14386791704303836,0.1686663986662865,0.464723172043767,0.7153797009120816,0.896148573446274,0.989369919197841,0.9859366564777494,0.8861841913434833,0.6998576507435548,0.4451598509149802,0.14697300794633056,-0.16557208289637354,-0.4619419246884674,-0.7131832306306021,-0.8947514602161611,-0.9889086513331644,-0.9864562966633511,-0.8876339743218887,-0.7020959427300415,-0.4479679862402155,-0.15007665118212787,0.16247613626020724,0.4591561272575584,0.7109797355751056,0.8933455337855614,0.988437642830342,0.9869662203662192,0.8890750142062368,0.7043273191510564,0.4507717091315515,0.15317881617994034,-0.1593785892525111,-0.456365807190829,-0.7087692374497843,-0.8919308080026906,-0.9879568983287474,-0.9874664225636629,-0.8905072968024378,-0.7065517580277942,-0.45357099197263556,-0.15627947238377216,0.15627947238377216,0.45357099197263556,0.7065517580277942,0.8905072968024378,0.9874664225636629,0.9879568983287474,0.8919308080026906,0.7087692374497843,0.456365807190829,0.1593785892525111,-0.15317881617994034,-0.4507717091315515,-0.7043273191510564,-0.8890750142062368,-0.9869662203662192,-0.988437642830342,-0.8933455337855614,-0.7109797355751056,-0.4591561272575584,-0.16247613626020724,0.15007665118212787,0.4479679862402155,0.7020959427300415,0.8876339743218887,0.9864562966633511,0.9889086513331644,0.8947514602161611,0.7131832306306021,0.4619419246884674,0.16557208289637354,-0.14697300794633056,-0.4451598509149802,-0.6998576507435548,-0.8861841913434833,-0.9859366564777494,-0.989369919197841,-0.896148573446274,-0.7153797009120816,-0.464723172043767,-0.1686663986662865,0.14386791704303836,0.44234733081566047,0.6976124652385343,0.8847256795512184,0.985407304927811,0.9898214418809321,0.897536859714493,0.717569124784592,0.467499841928486,0.17175905309128642,-0.14076140905706688,-0.43953045364526044,-0.6953604083297711,-0.88325845331127,-0.9848682472275927,-0.9902632149349907,-0.8989163053463557,-0.7197514806825406,-0.47027190699274063,-0.17485001570905573,0.13765351458716774,0.43670924714970105,0.6931015021997865,0.8817825270756503,0.9843194886867439,0.990695234008602,0.9002868967544692,0.7219267471099691,0.4730393399320042,0.1779392560740069,-0.13454426424574928,-0.4338837391175667,-0.6908357690985497,-0.8802979153820655,-0.9837610347104779,-0.9911174948464274,-0.901648620438683,-0.7240949026407497,-0.4758021134873758,-0.1810267437574504,0.131433688658575,0.43105395737975116,0.6885632313432751,0.8788046328537831,0.9831928907995032,0.9915299932892452,0.9030014629861632,0.7262559259187962,0.4785602004458294,0.18411244834798246,-0.12832181846446192,-0.4282199298093039,-0.6862839113182021,-0.8773026941994455,-0.9826150625499728,-0.9919327252739926,-0.9043454110715642,-0.7284097956582741,-0.4813135736405604,-0.1871963394517625,0.12520868431500098,0.4253816843210753,0.6839978314743747,0.875792114212989,0.9820275556534294,0.9923256868338024,0.9056804514571496,0.7305564906438106,0.48406220595113497,0.19027838669281266,-0.12209431687416648,-0.4225392488714618,-0.6817050143294363,-0.8742729077734551,-0.9814303758967495,-0.9927088740980534,-0.9070065709929229,-0.7326959897306882,-0.48680607030383655,-0.19335855971331692,0.11897874681814691,0.4196926514581305,0.6794054824673437,0.8727450898448553,0.980823529162086,0.9930822832923916,0.9083237566167569,0.7348282718451137,0.4895451396719121,0.19643682817389813,-0.11586200483495424,-0.4168419201197433,-0.6770992585382413,-0.8712086754760229,-0.9802070214268148,-0.9934459107387787,-0.9096319953545225,-0.7369533159843348,-0.4922793870758388,-0.19951316175400458,0.11274412162414381,0.4139870829357012,0.6747863652581734,0.8696636798004652,0.9795808587634587,0.9937997528555258,0.9109312743202073,0.7390711012169074,0.4950087855835895,0.20258753015207728,-0.10962512789651192,-0.4111281680257862,-0.6724668254088768,-0.8681101180362147,-0.978945047339653,-0.9941438061573279,-0.9122215807160791,-0.741181606682887,-0.4977333083108789,-0.20565990308593587,0.10650505437379335,0.4082652035500067,0.670140661837556,0.8665480054856899,0.9782995934180684,0.9944780672552991,0.9135029018327567,0.743284811594034,0.5004529284215057,0.20873025029305514,-0.1033839317883809,-0.4053982177082381,-0.6678078974566588,-0.8649773575355001,-0.9776445033563528,-0.994802532857003,-0.9147752250493725,-0.7453806952340184,-0.5031676191275005,-0.21179854153086303,0.10026179088292284,0.4025272387399662,0.6654685552436582,0.8633981896563607,0.9769797836070715,0.9951171997664963,0.9160385378336869,0.7474692369586162,0.5058773536894675,0.21486474657702764,-0.09713866241020881,-0.39965229492400844,-0.6631226582407933,-0.8618105174028964,-0.9763054407176339,-0.9954220648843395,-0.9172928277422079,-0.7495504161959432,-0.5085821054168284,-0.21792883522979858,0.094014577132667,0.39677341457824583,0.6607702295549003,0.8602143564134987,0.9756214813302434,0.9957171252076493,0.9185380824203306,0.7516242124466049,0.5112818476680852,0.22099077730823893,-0.09088956582219448,-0.39389062605930314,-0.6584112923571186,-0.8586097224101786,-0.9749279121818225,-0.9960023778301138,-0.9197742896024335,-0.7536906052839579,-0.513976553851073,-0.22405054265255533,0.08776365925979852,0.3910039577623307,0.6560458698827204,0.8569966311983876,0.9742247401039513,0.996277819942026,0.9210014371120155,0.7557495743542596,0.5166661974232606,0.22710810112442764,-0.08463688823531566,-0.3881134381206842,-0.6536739854308493,-0.855375098666897,-0.9735119720227899,-0.9965434488303143,-0.9222195128618087,-0.757801099376898,-0.5193507518919538,-0.23016342260724054,0.08150928354706388,0.38521909560566486,0.6512956623643067,0.8537451407876185,0.9727896149590257,0.9967992618785634,0.9234285048539135,0.7598451601445768,0.5220301908145859,0.23321647700642364,-0.07838087600160608,-0.3823209587261978,-0.6489109241092883,-0.8521067736154583,-0.9720576760277966,-0.9970452565670435,-0.9246284011798915,-0.7618817365235436,-0.5247044877990064,-0.23626723424972623,0.07525169641340204,0.37941905602861314,0.6465197941552042,0.8504600132881358,0.9713161624386129,0.997281430472734,0.9258191900209,0.7639108084537448,0.5273736165036832,0.23931566428755693,-0.07212177560452723,-0.37651341609633404,-0.6441222960544134,-0.8488048760260594,-0.9705650814953019,-0.9975077812693506,-0.9270008596477993,-0.7659323559490444,-0.5300375506380012,-0.24236173709321446,0.06899114440432468,0.3736040675495638,0.6417184534220092,0.8471413781321494,0.9698044405959259,0.9977243067273626,0.9281733984212863,0.767946359097443,0.5326962639625016,0.24540542266322685,-0.06585983364916805,-0.37069103904506623,-0.639308289935552,-0.8454695359916599,-0.9690342472327141,-0.9979310047140187,-0.9293367947919825,-0.7699527980612308,-0.5353497302891783,-0.24844669101762534,0.06272787418212455,0.36777435927584207,0.6368918293348873,0.8437893660720522,0.9682545089919787,0.9981278731933667,0.9304910373005615,0.7719516530772115,0.5379979234816794,0.2514855122002829,-0.05959529685261778,-0.3648540569708668,-0.6344690954218785,-0.8421008849228098,-0.9674652335540556,-0.9983149102262755,-0.9316361145778735,-0.7739429044568823,-0.5406408174556019,-0.2545218562791446,0.05646213251619054,0.36193016089476654,0.6320401120601885,0.8404041091752866,0.9666664286932183,0.9984921139704511,0.9327720153450331,0.7759265325866571,0.5432783861787303,0.2575556933465543,-0.05332841203415649,-0.35900269984759653,-0.629604903175011,-0.8386990555425194,-0.9658581022776072,-0.9986594826804559,-0.9338987284135464,-0.7779025179280166,-0.5459106036713303,-0.2605869935195825,0.05019416627331283,0.35607170266452165,0.6271634927528906,0.8369857408190994,0.9650402622691401,0.9988170147077283,0.9350162426854153,0.7798708410177254,0.5485374440063439,0.26361572694025504,-0.047059426105619556,-0.35313719821552675,-0.6247159048414345,-0.8352641818809853,-0.9642129167234511,-0.9989647085005952,-0.936124547153253,-0.7818314824680312,-0.5511588813097008,-0.26664186377588567,0.04392422240790649,0.3501992154051429,0.6222621635491149,0.8335343956853316,0.9633760737898018,0.9991025626042891,0.937223630900388,0.7837844229668312,0.5537748897605314,0.2696653742193803,-0.04078858606158593,-0.34725778317217837,-0.6198022930449969,-0.8317963992703424,-0.9625297417109987,-0.9992305756609633,-0.9383134831009659,-0.785729643277886,-0.556385443591458,-0.2726862284894928,0.03765254795230939,0.3443129304893967,0.6173363175585348,0.8300502097550793,0.9616739288233153,0.9993487464097032,0.93939409302007,0.7876671242409994,0.5589905170888122,0.2757043968311618,-0.034516138969708,-0.34136468636327366,-0.614864261379299,-0.8282958443393171,-0.9608086435564146,-0.9994570736865406,-0.9404654500138114,-0.7895968467721968,-0.5615900845929243,-0.27871984951576045,0.03137939000704925,0.3384130798336693,0.6123861488567715,0.8265333203033537,0.9599338944332555,0.9995555564244639,0.9415275435294487,0.7915187918639366,0.5641841204983399,0.2817325568414321,-0.02824233196094937,-0.3354581399735839,-0.6099020044000709,-0.8247626550078475,-0.9590496900700206,-0.9996441936534296,-0.9425803631054774,-0.7934329405852707,-0.5667725992541083,-0.2847424891333405,0.02510499573108298,0.33249989588883244,0.6074118524777476,0.822983865893656,0.9581560391760205,0.9997229845003707,0.9436238983717469,0.7953392740820578,0.5693554953639981,0.2877496167440015,-0.021967412219853624,-0.32953837671778646,-0.6049157176175093,-0.8211969704816487,-0.957252950553616,-0.9997919281892065,-0.944658139049552,-0.7972377735771226,-0.5719327833867822,-0.29075391005354634,0.01882961233210332,0.3265736116310742,0.6024136244060033,0.8194019863725431,0.9563404330981278,0.9998510240408495,0.9456830749517393,0.7991284203704648,0.5745044379364632,0.2937553394700264,-0.01569162697480817,-0.32360562983129576,-0.5999055974885645,-0.817598931246729,-0.9554184957977492,-0.999900271473212,-0.9466986959828063,-0.8010111958394264,-0.5770704336825353,-0.296753875429702,0.012553487056761358,0.3206344605527356,0.597391661568975,0.815787822864096,0.9544871477334581,0.9999396700012126,0.9477049921390005,0.8028860814388822,0.5796307453502313,0.2997494883973324,-0.009415223488291038,-0.3176601330610744,-0.5948718414092162,-0.8139686790638548,-0.9535463980789276,-0.9999692192367803,-0.9487019535084197,-0.8047530587014216,-0.5821853477207711,-0.3027421488664721,0.006276867180937021,0.31468267665310146,0.5923461618292326,0.8121415177643669,0.9525962561004352,0.9999889188888583,0.9496895702711068,0.80661210923753,0.5847342156316107,0.3057318273597532,-0.0031384490471522376,-0.3117021206564237,-0.5898146477066815,-0.8103063569629635,-0.9516367311567716,-0.9999987687634074,-0.9506678326991489,-0.8084632147357704,-0.5872773239766905,-0.30871849442918087,0.0,0.30871849442918087,0.5872773239766905,0.8084632147357704,0.9506678326991489,0.9999987687634074,0.9516367311567716,0.8103063569629635,0.5898146477066815,0.3117021206564237,0.0031384490471522376,-0.3057318273597532,-0.5847342156316107,-0.80661210923753,-0.9496895702711068,-0.9999889188888583,-0.9525962561004352,-0.8121415177643669,-0.5923461618292326,-0.31468267665310146,-0.006276867180937021,0.3027421488664721,0.5821853477207711,0.8047530587014216,0.9487019535084197,0.9999692192367803,0.9535463980789276,0.8139686790638548,0.5948718414092162,0.3176601330610744,0.009415223488291038,-0.2997494883973324,-0.5796307453502313,-0.8028860814388822,-0.9477049921390005,-0.9999396700012126,-0.9544871477334581,-0.815787822864096,-0.597391661568975,-0.3206344605527356,-0.012553487056761358,0.296753875429702,0.5770704336825353,0.8010111958394264,0.9466986959828063,0.999900271473212,0.9554184957977492,0.817598931246729,0.5999055974885645,0.32360562983129576,0.01569162697480817,-0.2937553394700264,-0.5745044379364632,-0.7991284203704648,-0.9456830749517393,-0.9998510240408495,-0.9563404330981278,-0.8194019863725431,-0.6024136244060033,-0.3265736116310742,-0.01882961233210332,0.29075391005354634,0.5719327833867822,0.7972377735771226,0.944658139049552,0.9997919281892065,0.957252950553616,0.8211969704816487,0.6049157176175093,0.32953837671778646,0.021967412219853624,-0.2877496167440015,-0.5693554953639981,-0.7953392740820578,-0.9436238983717469,-0.9997229845003707,-0.9581560391760205,-0.822983865893656,-0.6074118524777476,-0.33249989588883244,-0.02510499573108298,0.2847424891333405,0.5667725992541083,0.7934329405852707,0.9425803631054774,0.9996441936534296,0.9590496900700206,0.8247626550078475,0.6099020044000709,0.3354581399735839,0.02824233196094937,-0.2817325568414321,-0.5641841204983399,-0.7915187918639366,-0.9415275435294487,-0.9995555564244639,-0.9599338944332555,-0.8265333203033537,-0.6123861488567715,-0.3384130798336693,-0.03137939000704925,0.27871984951576045,0.5615900845929243,0.7895968467721968,0.9404654500138114,0.9994570736865406,0.9608086435564146,0.8282958443393171,0.614864261379299,0.34136468636327366,0.034516138969708,-0.2757043968311618,-0.5589905170888122,-0.7876671242409994,-0.93939409302007,-0.9993487464097032,-0.9616739288233153,-0.8300502097550793,-0.6173363175585348,-0.3443129304893967,-0.03765254795230939,0.2726862284894928,0.556385443591458,0.785729643277886,0.9383134831009659,0.9992305756609633,0.9625297417109987,0.8317963992703424,0.6198022930449969,0.34725778317217837,0.04078858606158593,-0.2696653742193803,-0.5537748897605314,-0.7837844229668312,-0.937223630900388,-0.9991025626042891,-0.9633760737898018,-0.8335343956853316,-0.6222621635491149,-0.3501992154051429,-0.04392422240790649,0.26664186377588567,0.5511588813097008,0.7818314824680312,0.936124547153253,0.9989647085005952,0.9642129167234511,0.8352641818809853,0.6247159048414345,0.35313719821552675,0.047059426105619556,-0.26361572694025504,-0.5485374440063439,-0.7798708410177254,-0.9350162426854153,-0.9988170147077283,-0.9650402622691401,-0.8369857408190994,-0.6271634927528906,-0.35607170266452165,-0.05019416627331283,0.2605869935195825,0.5459106036713303,0.7779025179280166,0.9338987284135464,0.9986594826804559,0.9658581022776072,0.8386990555425194,0.629604903175011,0.35900269984759653,0.05332841203415649,-0.2575556933465543,-0.5432783861787303,-0.7759265325866571,-0.9327720153450331,-0.9984921139704511,-0.9666664286932183,-0.8404041091752866,-0.6320401120601885,-0.36193016089476654,-0.05646213251619054,0.2545218562791446,0.5406408174556019,0.7739429044568823,0.9316361145778735,0.9983149102262755,0.9674652335540556,0.8421008849228098,0.6344690954218785,0.3648540569708668,0.05959529685261778,-0.2514855122002829,-0.5379979234816794,-0.7719516530772115,-0.9304910373005615,-0.9981278731933667,-0.9682545089919787,-0.8437893660720522,-0.6368918293348873,-0.36777435927584207,-0.06272787418212455,0.24844669101762534,0.5353497302891783,0.7699527980612308,0.9293367947919825,0.9979310047140187,0.9690342472327141,0.8454695359916599,0.639308289935552,0.37069103904506623,0.06585983364916805,-0.24540542266322685,-0.5326962639625016,-0.767946359097443,-0.9281733984212863,-0.9977243067273626,-0.9698044405959259,-0.8471413781321494,-0.6417184534220092,-0.3736040675495638,-0.06899114440432468,0.24236173709321446,0.5300375506380012,0.7659323559490444,0.9270008596477993,0.9975077812693506,0.9705650814953019,0.8488048760260594,0.6441222960544134,0.37651341609633404,0.07212177560452723,-0.23931566428755693,-0.5273736165036832,-0.7639108084537448,-0.9258191900209,-0.997281430472734,-0.9713161624386129,-0.8504600132881358,-0.6465197941552042,-0.37941905602861314,-0.07525169641340204,0.23626723424972623,0.5247044877990064,0.7618817365235436,0.9246284011798915,0.9970452565670435,0.9720576760277966,0.8521067736154583,0.6489109241092883,0.3823209587261978,0.07838087600160608,-0.23321647700642364,-0.5220301908145859,-0.7598451601445768,-0.9234285048539135,-0.9967992618785634,-0.9727896149590257,-0.8537451407876185,-0.6512956623643067,-0.38521909560566486,-0.08150928354706388,0.23016342260724054,0.5193507518919538,0.757801099376898,0.9222195128618087,0.9965434488303143,0.9735119720227899,0.855375098666897,0.6536739854308493,0.3881134381206842,0.08463688823531566,-0.22710810112442764,-0.5166661974232606,-0.7557495743542596,-0.9210014371120155,-0.996277819942026,-0.9742247401039513,-0.8569966311983876,-0.6560458698827204,-0.3910039577623307,-0.08776365925979852,0.22405054265255533,0.513976553851073,0.7536906052839579,0.9197742896024335,0.9960023778301138,0.9749279121818225,0.8586097224101786,0.6584112923571186,0.39389062605930314,0.09088956582219448,-0.22099077730823893,-0.5112818476680852,-0.7516242124466049,-0.9185380824203306,-0.9957171252076493,-0.9756214813302434,-0.8602143564134987,-0.6607702295549003,-0.39677341457824583,-0.094014577132667,0.21792883522979858,0.5085821054168284,0.7495504161959432,0.9172928277422079,0.9954220648843395,0.9763054407176339,0.8618105174028964,0.6631226582407933,0.39965229492400844,0.09713866241020881,-0.21486474657702764,-0.5058773536894675,-0.7474692369586162,-0.9160385378336869,-0.9951171997664963,-0.9769797836070715,-0.8633981896563607,-0.6654685552436582,-0.4025272387399662,-0.10026179088292284,0.21179854153086303,0.5031676191275005,0.7453806952340184,0.9147752250493725,0.994802532857003,0.9776445033563528,0.8649773575355001,0.6678078974566588,0.4053982177082381,0.1033839317883809,-0.20873025029305514,-0.5004529284215057,-0.743284811594034,-0.9135029018327567,-0.9944780672552991,-0.9782995934180684,-0.8665480054856899,-0.670140661837556,-0.4082652035500067,-0.10650505437379335,0.20565990308593587,0.4977333083108789,0.741181606682887,0.9122215807160791,0.9941438061573279,0.978945047339653,0.8681101180362147,0.6724668254088768,0.4111281680257862,0.10962512789651192,-0.20258753015207728,-0.4950087855835895,-0.7390711012169074,-0.9109312743202073,-0.9937997528555258,-0.9795808587634587,-0.8696636798004652,-0.6747863652581734,-0.4139870829357012,-0.11274412162414381,0.19951316175400458,0.4922793870758388,0.7369533159843348,0.9096319953545225,0.9934459107387787,0.9802070214268148,0.8712086754760229,0.6770992585382413,0.4168419201197433,0.11586200483495424,-0.19643682817389813,-0.4895451396719121,-0.7348282718451137,-0.9083237566167569,-0.9930822832923916,-0.980823529162086,-0.8727450898448553,-0.6794054824673437,-0.4196926514581305,-0.11897874681814691,0.19335855971331692,0.48680607030383655,0.7326959897306882,0.9070065709929229,0.9927088740980534,0.9814303758967495,0.8742729077734551,0.6817050143294363,0.4225392488714618,0.12209431687416648,-0.19027838669281266,-0.48406220595113497,-0.7305564906438106,-0.9056804514571496,-0.9923256868338024,-0.9820275556534294,-0.875792114212989,-0.6839978314743747,-0.4253816843210753,-0.12520868431500098,0.1871963394517625,0.4813135736405604,0.7284097956582741,0.9043454110715642,0.9919327252739926,0.9826150625499728,0.8773026941994455,0.6862839113182021,0.4282199298093039,0.12832181846446192,-0.18411244834798246,-0.4785602004458294,-0.7262559259187962,-0.9030014629861632,-0.9915299932892452,-0.9831928907995032,-0.8788046328537831,-0.6885632313432751,-0.43105395737975116,-0.131433688658575,0.1810267437574504,0.4758021134873758,0.7240949026407497,0.901648620438683,0.9911174948464274,0.9837610347104779,0.8802979153820655,0.6908357690985497,0.4338837391175667,0.13454426424574928,-0.1779392560740069,-0.4730393399320042,-0.7219267471099691,-0.9002868967544692,-0.990695234008602,-0.9843194886867439,-0.8817825270756503,-0.6931015021997865,-0.43670924714970105,-0.13765351458716774,0.17485001570905573,0.47027190699274063,0.7197514806825406,0.8989163053463557,0.9902632149349907,0.9848682472275927,0.88325845331127,0.6953604083297711,0.43953045364526044,0.14076140905706688,-0.17175905309128642,-0.467499841928486,-0.717569124784592,-0.897536859714493,-0.9898214418809321,-0.985407304927811,-0.8847256795512184,-0.6976124652385343,-0.44234733081566047,-0.14386791704303836,0.1686663986662865,0.464723172043767,0.7153797009120816,0.896148573446274,0.989369919197841,0.9859366564777494,0.8861841913434833,0.6998576507435548,0.4451598509149802,0.14697300794633056,-0.16557208289637354,-0.4619419246884674,-0.7131832306306021,-0.8947514602161611,-0.9889086513331644,-0.9864562966633511,-0.8876339743218887,-0.7020959427300415,-0.4479679862402155,-0.15007665118212787,0.16247613626020724,0.4591561272575584,0.7109797355751056,0.8933455337855614,0.988437642830342,0.9869662203662192,0.8890750142062368,0.7043273191510564,0.4507717091315515,0.15317881617994034,-0.1593785892525111,-0.456365807190829,-0.7087692374497843,-0.8919308080026906,-0.9879568983287474,-0.9874664225636629,-0.8905072968024378,-0.7065517580277942,-0.45357099197263556,-0.15627947238377216,0.15627947238377216,0.45357099197263556,0.7065517580277942,0.8905072968024378,0.9874664225636629,0.9879568983287474,0.8919308080026906,0.7087692374497843,0.456365807190829,0.1593785892525111,-0.15317881617994034,-0.4507717091315515,-0.7043273191510564,-0.8890750142062368,-0.9869662203662192,-0.988437642830342,-0.8933455337855614,-0.7109797355751056,-0.4591561272575584,-0.16247613626020724,0.15007665118212787,0.4479679862402155,0.7020959427300415,0.8876339743218887,0.9864562966633511,0.9889086513331644,0.8947514602161611,0.7131832306306021,0.4619419246884674,0.16557208289637354,-0.14697300794633056,-0.4451598509149802,-0.6998576507435548,-0.8861841913434833,-0.9859366564777494,-0.989369919197841,-0.896148573446274,-0.7153797009120816,-0.464723172043767,-0.1686663986662865,0.14386791704303836,0.44234733081566047,0.6976124652385343,0.8847256795512184,0.985407304927811,0.9898214418809321,0.897536859714493,0.717569124784592,0.467499841928486,0.17175905309128642,-0.14076140905706688,-0.43953045364526044,-0.6953604083297711,-0.88325845331127,-0.9848682472275927,-0.9902632149349907,-0.8989163053463557,-0.7197514806825406,-0.47027190699274063,-0.17485001570905573,0.13765351458716774,0.43670924714970105,0.6931015021997865,0.8817825270756503,0.9843194886867439,0.990695234008602,0.9002868967544692,0.7219267471099691,0.4730393399320042,0.1779392560740069,-0.13454426424574928,-0.4338837391175667,-0.6908357690985497,-0.8802979153820655,-0.9837610347104779,-0.9911174948464274,-0.901648620438683,-0.7240949026407497,-0.4758021134873758,-0.1810267437574504,0.131433688658575,0.43105395737975116,0.6885632313432751,0.8788046328537831,0.9831928907995032,0.9915299932892452,0.9030014629861632,0.7262559259187962,0.4785602004458294,0.18411244834798246,-0.12832181846446192,-0.4282199298093039,-0.6862839113182021,-0.8773026941994455,-0.9826150625499728,-0.9919327252739926,-0.9043454110715642,-0.7284097956582741,-0.4813135736405604,-0.1871963394517625,0.12520868431500098,0.4253816843210753,0.6839978314743747,0.875792114212989,0.9820275556534294,0.9923256868338024,0.9056804514571496,0.7305564906438106,0.48406220595113497,0.19027838669281266,-0.12209431687416648,-0.4225392488714618,-0.6817050143294363,-0.8742729077734551,-0.9814303758967495,-0.9927088740980534,-0.9070065709929229,-0.7326959897306882,-0.48680607030383655,-0.19335855971331692,0.11897874681814691,0.4196926514581305,0.6794054824673437,0.8727450898448553,0.980823529162086,0.9930822832923916,0.9083237566167569,0.7348282718451137,0.4895451396719121,0.19643682817389813,-0.11586200483495424,-0.4168419201197433,-0.6770992585382413,-0.8712086754760229,-0.9802070214268148,-0.9934459107387787,-0.9096319953545225,-0.7369533159843348,-0.4922793870758388,-0.19951316175400458,0.11274412162416599,0.4139870829357012,0.6747863652581734,0.8696636798004652,0.9795808587634541,0.9937997528555234,0.9109312743202073,0.7390711012169074,0.4950087855835895,0.20258753015209913,-0.10962512789653411,-0.4111281680257862,-0.6724668254088768,-0.8681101180362147,-0.9789450473396485,-0.9941438061573254,-0.9122215807160791,-0.741181606682887,-0.4977333083108983,-0.20565990308595772,0.10650505437381554,0.4082652035500067,0.670140661837556,0.8665480054856788,0.978299593418073,0.9944780672552967,0.9135029018327567,0.743284811594034,0.500452928421525,0.2087302502930333,-0.1033839317883809,-0.4053982177082381,-0.6678078974566588,-0.8649773575354889,-0.9776445033563576,-0.994802532857003,-0.9147752250493725,-0.7453806952340184,-0.5031676191275197,-0.2117985415308412,0.10026179088293395,0.4025272387399662,0.6654685552436499,0.8633981896563494,0.9769797836070738,0.9951171997664952,0.9160385378336869,0.7474692369586237,0.5058773536894867,0.21486474657701674,-0.09713866241020881,-0.39965229492400844,-0.6631226582407849,-0.8618105174029077,-0.9763054407176364,-0.9954220648843395,-0.9172928277422123,-0.7495504161959506,-0.5085821054168091,-0.21792883522978768,0.094014577132667,0.39677341457823556,0.6607702295548835,0.8602143564135102,0.9756214813302458,0.9957171252076493,0.9185380824203351,0.7516242124466196,0.511281847668066,0.22099077730822805,-0.09088956582219448,-0.39389062605929287,-0.6584112923571017,-0.8586097224101844,-0.9749279121818251,-0.9960023778301138,-0.9197742896024378,-0.7536906052839726,-0.5139765538510634,-0.22405054265255533,0.08776365925979852,0.39100395776232044,0.6560458698827373,0.8569966311983934,0.9742247401039513,0.996277819942027,0.9210014371120199,0.7557495743542451,0.5166661974232509,0.22710810112442764,-0.08463688823530453,-0.38811343812067395,-0.6536739854308662,-0.8553750986669028,-0.9735119720227899,-0.9965434488303153,-0.9222195128618174,-0.7578010993768834,-0.5193507518919442,-0.23016342260724054,0.08150928354705277,0.38521909560564427,0.6512956623643151,0.8537451407876243,0.9727896149590257,0.9967992618785643,0.9234285048539221,0.7598451601445696,0.5220301908145859,0.23321647700642364,-0.07838087600159495,-0.3823209587262184,-0.6489109241092967,-0.8521067736154583,-0.972057676027794,-0.9970452565670442,-0.9246284011798831,-0.7618817365235365,-0.5247044877990064,-0.23626723424973708,0.07525169641339091,0.3794190560286338,0.6465197941552128,0.8504600132881358,0.9713161624386102,0.9972814304727357,0.9258191900208915,0.7639108084537376,0.5273736165036832,0.23931566428756776,-0.07212177560450497,-0.37651341609634437,-0.644122296054422,-0.8488048760260594,-0.9705650814952992,-0.9975077812693521,-0.9270008596477952,-0.7659323559490444,-0.5300375506380012,-0.24236173709322528,0.06899114440434695,0.37360406754957415,0.6417184534220092,0.8471413781321435,0.9698044405959231,0.9977243067273611,0.9281733984212822,0.767946359097443,0.532696263962511,0.24540542266323764,-0.06585983364919032,-0.3706910390450766,-0.639308289935552,-0.845469535991654,-0.9690342472327087,-0.9979310047140173,-0.9293367947919784,-0.7699527980612308,-0.5353497302891878,-0.24844669101764696,0.0627278741821357,0.36777435927585245,0.6368918293348873,0.8437893660720462,0.9682545089919732,0.998127873193366,0.9304910373005615,0.7719516530772115,0.5379979234816888,0.25148551220026133,-0.05959529685262892,-0.3648540569708668,-0.6344690954218785,-0.8421008849228038,-0.9674652335540612,-0.9983149102262749,-0.9316361145778735,-0.7739429044568894,-0.5406408174556112,-0.254521856279123,0.056462132516201684,0.36193016089476654,0.6320401120601798,0.8404041091752745,0.9666664286932241,0.9984921139704505,0.9327720153450331,0.7759265325866641,0.543278386178749,0.25755569334654355,-0.05332841203416763,-0.35900269984759653,-0.6296049031750024,-0.8386990555425073,-0.96585810227761,-0.9986594826804559,-0.9338987284135464,-0.7779025179280236,-0.5459106036713489,-0.2605869935195717,0.05019416627331841,0.35607170266451643,0.6271634927528776,0.8369857408191116,0.965040262269143,0.9988170147077283,0.9350162426854173,0.7798708410177358,0.5485374440063299,0.26361572694024427,-0.047059426105619556,-0.3531371982155163,-0.6247159048414215,-0.8352641818809945,-0.9642129167234541,-0.9989647085005952,-0.9361245471532569,-0.7818314824680417,-0.5511588813096868,-0.26664186377588034,0.04392422240790649,0.3501992154051325,0.6222621635490975,0.8335343956853408,0.9633760737898033,0.9991025626042893,0.9372236309003918,0.783784422966845,0.553774889760522,0.2696653742193749,-0.04078858606158036,-0.34725778317216266,-0.6198022930450144,-0.8317963992703485,-0.9625297417109987,-0.9992305756609635,-0.9383134831009717,-0.7857296432778755,-0.5563854435914488,-0.2726862284894928,0.037652547952303814,0.344312930489381,0.617336317558548,0.8300502097550855,0.9616739288233153,0.9993487464097035,0.9393940930200758,0.7876671242409891,0.5589905170888075,0.2757043968311618,-0.03451613896969685,-0.3413646863632527,-0.6148642613793122,-0.8282958443393202,-0.960808643556413,-0.999457073686541,-0.940465450013819,-0.7895968467721899,-0.5615900845929197,-0.2787198495157658,0.03137939000703252,0.3384130798336903,0.6123861488567803,0.8265333203033537,0.9599338944332539,0.9995555564244644,0.9415275435294412,0.7915187918639297,0.5641841204983399,0.2817325568414375,-0.028242331960932638,-0.3354581399735997,-0.6099020044000798,-0.8247626550078475,-0.9590496900700175,-0.99964419365343,-0.9425803631054719,-0.7934329405852673,-0.5667725992541083,-0.28474248913335115,0.025104995731063454,0.3324998958888456,0.6074118524777521,0.8229838658936545,0.9581560391760165,0.9997229845003712,0.9436238983717422,0.7953392740820545,0.5693554953640028,0.28774961674401484,-0.02196741221987594,-0.329538376717797,-0.6049157176175115,-0.8211969704816456,-0.9572529505536113,-0.9997919281892061,-0.9446581390495483,-0.7972377735771226,-0.571932783386789,-0.2907539100535624,0.018829612332122846,0.3265736116310821,0.6024136244060033,0.8194019863725382,0.9563404330981221,0.9998510240408491,0.9456830749517365,0.7991284203704665,0.5745044379364723,0.29375533947004506,-0.015691626974822116,-0.32360562983130103,-0.5999055974885623,-0.8175989312467226,-0.9554184957977425,-0.9999002714732118,-0.9466986959828045,-0.8010111958394297,-0.5770704336825467,-0.2967538754296807,0.012553487056773914,0.32063446055273825,0.5973916615689694,0.8157878228640871,0.954487147733464,0.9999396700012125,0.9477049921390001,0.8028860814388872,0.579630745350245,0.29974948839731513,-0.009415223488300803,-0.3176601330610744,-0.5948718414092085,-0.8139686790638443,-0.9535463980789327,-0.9999692192367803,-0.9487019535084202,-0.8047530587014282,-0.582185347720787,-0.30274214886645745,0.006276867180943299,0.3146826766530981,0.5923461618292225,0.8121415177643543,0.9525962561004394,0.9999889188888583,0.9496895702711083,0.8066121092375382,0.5847342156315931,0.30573182735974125,-0.0031384490471553766,-0.3117021206564178,-0.5898146477066691,-0.8103063569629751,-0.9516367311567749,-0.9999987687634074,-0.9506678326991512,-0.8084632147357804,-0.5872773239766755,-0.30871849442917204,0.0]} diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/test/fixtures/julia/integers.json b/lib/node_modules/@stdlib/math/base/special/sincospif/test/fixtures/julia/integers.json new file mode 100644 index 000000000000..cba3917d562d --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/test/fixtures/julia/integers.json @@ -0,0 +1 @@ +{"x":[-1000.0,-999.0,-998.0,-997.0,-996.0,-995.0,-994.0,-993.0,-992.0,-991.0,-990.0,-989.0,-988.0,-987.0,-986.0,-985.0,-984.0,-983.0,-982.0,-981.0,-980.0,-979.0,-978.0,-977.0,-976.0,-975.0,-974.0,-973.0,-972.0,-971.0,-970.0,-969.0,-968.0,-967.0,-966.0,-965.0,-964.0,-963.0,-962.0,-961.0,-960.0,-959.0,-958.0,-957.0,-956.0,-955.0,-954.0,-953.0,-952.0,-951.0,-950.0,-949.0,-948.0,-947.0,-946.0,-945.0,-944.0,-943.0,-942.0,-941.0,-940.0,-939.0,-938.0,-937.0,-936.0,-935.0,-934.0,-933.0,-932.0,-931.0,-930.0,-929.0,-928.0,-927.0,-926.0,-925.0,-924.0,-923.0,-922.0,-921.0,-920.0,-919.0,-918.0,-917.0,-916.0,-915.0,-914.0,-913.0,-912.0,-911.0,-910.0,-909.0,-908.0,-907.0,-906.0,-905.0,-904.0,-903.0,-902.0,-901.0,-900.0,-899.0,-898.0,-897.0,-896.0,-895.0,-894.0,-893.0,-892.0,-891.0,-890.0,-889.0,-888.0,-887.0,-886.0,-885.0,-884.0,-883.0,-882.0,-881.0,-880.0,-879.0,-878.0,-877.0,-876.0,-875.0,-874.0,-873.0,-872.0,-871.0,-870.0,-869.0,-868.0,-867.0,-866.0,-865.0,-864.0,-863.0,-862.0,-861.0,-860.0,-859.0,-858.0,-857.0,-856.0,-855.0,-854.0,-853.0,-852.0,-851.0,-850.0,-849.0,-848.0,-847.0,-846.0,-845.0,-844.0,-843.0,-842.0,-841.0,-840.0,-839.0,-838.0,-837.0,-836.0,-835.0,-834.0,-833.0,-832.0,-831.0,-830.0,-829.0,-828.0,-827.0,-826.0,-825.0,-824.0,-823.0,-822.0,-821.0,-820.0,-819.0,-818.0,-817.0,-816.0,-815.0,-814.0,-813.0,-812.0,-811.0,-810.0,-809.0,-808.0,-807.0,-806.0,-805.0,-804.0,-803.0,-802.0,-801.0,-800.0,-799.0,-798.0,-797.0,-796.0,-795.0,-794.0,-793.0,-792.0,-791.0,-790.0,-789.0,-788.0,-787.0,-786.0,-785.0,-784.0,-783.0,-782.0,-781.0,-780.0,-779.0,-778.0,-777.0,-776.0,-775.0,-774.0,-773.0,-772.0,-771.0,-770.0,-769.0,-768.0,-767.0,-766.0,-765.0,-764.0,-763.0,-762.0,-761.0,-760.0,-759.0,-758.0,-757.0,-756.0,-755.0,-754.0,-753.0,-752.0,-751.0,-750.0,-749.0,-748.0,-747.0,-746.0,-745.0,-744.0,-743.0,-742.0,-741.0,-740.0,-739.0,-738.0,-737.0,-736.0,-735.0,-734.0,-733.0,-732.0,-731.0,-730.0,-729.0,-728.0,-727.0,-726.0,-725.0,-724.0,-723.0,-722.0,-721.0,-720.0,-719.0,-718.0,-717.0,-716.0,-715.0,-714.0,-713.0,-712.0,-711.0,-710.0,-709.0,-708.0,-707.0,-706.0,-705.0,-704.0,-703.0,-702.0,-701.0,-700.0,-699.0,-698.0,-697.0,-696.0,-695.0,-694.0,-693.0,-692.0,-691.0,-690.0,-689.0,-688.0,-687.0,-686.0,-685.0,-684.0,-683.0,-682.0,-681.0,-680.0,-679.0,-678.0,-677.0,-676.0,-675.0,-674.0,-673.0,-672.0,-671.0,-670.0,-669.0,-668.0,-667.0,-666.0,-665.0,-664.0,-663.0,-662.0,-661.0,-660.0,-659.0,-658.0,-657.0,-656.0,-655.0,-654.0,-653.0,-652.0,-651.0,-650.0,-649.0,-648.0,-647.0,-646.0,-645.0,-644.0,-643.0,-642.0,-641.0,-640.0,-639.0,-638.0,-637.0,-636.0,-635.0,-634.0,-633.0,-632.0,-631.0,-630.0,-629.0,-628.0,-627.0,-626.0,-625.0,-624.0,-623.0,-622.0,-621.0,-620.0,-619.0,-618.0,-617.0,-616.0,-615.0,-614.0,-613.0,-612.0,-611.0,-610.0,-609.0,-608.0,-607.0,-606.0,-605.0,-604.0,-603.0,-602.0,-601.0,-600.0,-599.0,-598.0,-597.0,-596.0,-595.0,-594.0,-593.0,-592.0,-591.0,-590.0,-589.0,-588.0,-587.0,-586.0,-585.0,-584.0,-583.0,-582.0,-581.0,-580.0,-579.0,-578.0,-577.0,-576.0,-575.0,-574.0,-573.0,-572.0,-571.0,-570.0,-569.0,-568.0,-567.0,-566.0,-565.0,-564.0,-563.0,-562.0,-561.0,-560.0,-559.0,-558.0,-557.0,-556.0,-555.0,-554.0,-553.0,-552.0,-551.0,-550.0,-549.0,-548.0,-547.0,-546.0,-545.0,-544.0,-543.0,-542.0,-541.0,-540.0,-539.0,-538.0,-537.0,-536.0,-535.0,-534.0,-533.0,-532.0,-531.0,-530.0,-529.0,-528.0,-527.0,-526.0,-525.0,-524.0,-523.0,-522.0,-521.0,-520.0,-519.0,-518.0,-517.0,-516.0,-515.0,-514.0,-513.0,-512.0,-511.0,-510.0,-509.0,-508.0,-507.0,-506.0,-505.0,-504.0,-503.0,-502.0,-501.0,-500.0,-499.0,-498.0,-497.0,-496.0,-495.0,-494.0,-493.0,-492.0,-491.0,-490.0,-489.0,-488.0,-487.0,-486.0,-485.0,-484.0,-483.0,-482.0,-481.0,-480.0,-479.0,-478.0,-477.0,-476.0,-475.0,-474.0,-473.0,-472.0,-471.0,-470.0,-469.0,-468.0,-467.0,-466.0,-465.0,-464.0,-463.0,-462.0,-461.0,-460.0,-459.0,-458.0,-457.0,-456.0,-455.0,-454.0,-453.0,-452.0,-451.0,-450.0,-449.0,-448.0,-447.0,-446.0,-445.0,-444.0,-443.0,-442.0,-441.0,-440.0,-439.0,-438.0,-437.0,-436.0,-435.0,-434.0,-433.0,-432.0,-431.0,-430.0,-429.0,-428.0,-427.0,-426.0,-425.0,-424.0,-423.0,-422.0,-421.0,-420.0,-419.0,-418.0,-417.0,-416.0,-415.0,-414.0,-413.0,-412.0,-411.0,-410.0,-409.0,-408.0,-407.0,-406.0,-405.0,-404.0,-403.0,-402.0,-401.0,-400.0,-399.0,-398.0,-397.0,-396.0,-395.0,-394.0,-393.0,-392.0,-391.0,-390.0,-389.0,-388.0,-387.0,-386.0,-385.0,-384.0,-383.0,-382.0,-381.0,-380.0,-379.0,-378.0,-377.0,-376.0,-375.0,-374.0,-373.0,-372.0,-371.0,-370.0,-369.0,-368.0,-367.0,-366.0,-365.0,-364.0,-363.0,-362.0,-361.0,-360.0,-359.0,-358.0,-357.0,-356.0,-355.0,-354.0,-353.0,-352.0,-351.0,-350.0,-349.0,-348.0,-347.0,-346.0,-345.0,-344.0,-343.0,-342.0,-341.0,-340.0,-339.0,-338.0,-337.0,-336.0,-335.0,-334.0,-333.0,-332.0,-331.0,-330.0,-329.0,-328.0,-327.0,-326.0,-325.0,-324.0,-323.0,-322.0,-321.0,-320.0,-319.0,-318.0,-317.0,-316.0,-315.0,-314.0,-313.0,-312.0,-311.0,-310.0,-309.0,-308.0,-307.0,-306.0,-305.0,-304.0,-303.0,-302.0,-301.0,-300.0,-299.0,-298.0,-297.0,-296.0,-295.0,-294.0,-293.0,-292.0,-291.0,-290.0,-289.0,-288.0,-287.0,-286.0,-285.0,-284.0,-283.0,-282.0,-281.0,-280.0,-279.0,-278.0,-277.0,-276.0,-275.0,-274.0,-273.0,-272.0,-271.0,-270.0,-269.0,-268.0,-267.0,-266.0,-265.0,-264.0,-263.0,-262.0,-261.0,-260.0,-259.0,-258.0,-257.0,-256.0,-255.0,-254.0,-253.0,-252.0,-251.0,-250.0,-249.0,-248.0,-247.0,-246.0,-245.0,-244.0,-243.0,-242.0,-241.0,-240.0,-239.0,-238.0,-237.0,-236.0,-235.0,-234.0,-233.0,-232.0,-231.0,-230.0,-229.0,-228.0,-227.0,-226.0,-225.0,-224.0,-223.0,-222.0,-221.0,-220.0,-219.0,-218.0,-217.0,-216.0,-215.0,-214.0,-213.0,-212.0,-211.0,-210.0,-209.0,-208.0,-207.0,-206.0,-205.0,-204.0,-203.0,-202.0,-201.0,-200.0,-199.0,-198.0,-197.0,-196.0,-195.0,-194.0,-193.0,-192.0,-191.0,-190.0,-189.0,-188.0,-187.0,-186.0,-185.0,-184.0,-183.0,-182.0,-181.0,-180.0,-179.0,-178.0,-177.0,-176.0,-175.0,-174.0,-173.0,-172.0,-171.0,-170.0,-169.0,-168.0,-167.0,-166.0,-165.0,-164.0,-163.0,-162.0,-161.0,-160.0,-159.0,-158.0,-157.0,-156.0,-155.0,-154.0,-153.0,-152.0,-151.0,-150.0,-149.0,-148.0,-147.0,-146.0,-145.0,-144.0,-143.0,-142.0,-141.0,-140.0,-139.0,-138.0,-137.0,-136.0,-135.0,-134.0,-133.0,-132.0,-131.0,-130.0,-129.0,-128.0,-127.0,-126.0,-125.0,-124.0,-123.0,-122.0,-121.0,-120.0,-119.0,-118.0,-117.0,-116.0,-115.0,-114.0,-113.0,-112.0,-111.0,-110.0,-109.0,-108.0,-107.0,-106.0,-105.0,-104.0,-103.0,-102.0,-101.0,-100.0,-99.0,-98.0,-97.0,-96.0,-95.0,-94.0,-93.0,-92.0,-91.0,-90.0,-89.0,-88.0,-87.0,-86.0,-85.0,-84.0,-83.0,-82.0,-81.0,-80.0,-79.0,-78.0,-77.0,-76.0,-75.0,-74.0,-73.0,-72.0,-71.0,-70.0,-69.0,-68.0,-67.0,-66.0,-65.0,-64.0,-63.0,-62.0,-61.0,-60.0,-59.0,-58.0,-57.0,-56.0,-55.0,-54.0,-53.0,-52.0,-51.0,-50.0,-49.0,-48.0,-47.0,-46.0,-45.0,-44.0,-43.0,-42.0,-41.0,-40.0,-39.0,-38.0,-37.0,-36.0,-35.0,-34.0,-33.0,-32.0,-31.0,-30.0,-29.0,-28.0,-27.0,-26.0,-25.0,-24.0,-23.0,-22.0,-21.0,-20.0,-19.0,-18.0,-17.0,-16.0,-15.0,-14.0,-13.0,-12.0,-11.0,-10.0,-9.0,-8.0,-7.0,-6.0,-5.0,-4.0,-3.0,-2.0,-1.0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0,101.0,102.0,103.0,104.0,105.0,106.0,107.0,108.0,109.0,110.0,111.0,112.0,113.0,114.0,115.0,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.0,126.0,127.0,128.0,129.0,130.0,131.0,132.0,133.0,134.0,135.0,136.0,137.0,138.0,139.0,140.0,141.0,142.0,143.0,144.0,145.0,146.0,147.0,148.0,149.0,150.0,151.0,152.0,153.0,154.0,155.0,156.0,157.0,158.0,159.0,160.0,161.0,162.0,163.0,164.0,165.0,166.0,167.0,168.0,169.0,170.0,171.0,172.0,173.0,174.0,175.0,176.0,177.0,178.0,179.0,180.0,181.0,182.0,183.0,184.0,185.0,186.0,187.0,188.0,189.0,190.0,191.0,192.0,193.0,194.0,195.0,196.0,197.0,198.0,199.0,200.0,201.0,202.0,203.0,204.0,205.0,206.0,207.0,208.0,209.0,210.0,211.0,212.0,213.0,214.0,215.0,216.0,217.0,218.0,219.0,220.0,221.0,222.0,223.0,224.0,225.0,226.0,227.0,228.0,229.0,230.0,231.0,232.0,233.0,234.0,235.0,236.0,237.0,238.0,239.0,240.0,241.0,242.0,243.0,244.0,245.0,246.0,247.0,248.0,249.0,250.0,251.0,252.0,253.0,254.0,255.0,256.0,257.0,258.0,259.0,260.0,261.0,262.0,263.0,264.0,265.0,266.0,267.0,268.0,269.0,270.0,271.0,272.0,273.0,274.0,275.0,276.0,277.0,278.0,279.0,280.0,281.0,282.0,283.0,284.0,285.0,286.0,287.0,288.0,289.0,290.0,291.0,292.0,293.0,294.0,295.0,296.0,297.0,298.0,299.0,300.0,301.0,302.0,303.0,304.0,305.0,306.0,307.0,308.0,309.0,310.0,311.0,312.0,313.0,314.0,315.0,316.0,317.0,318.0,319.0,320.0,321.0,322.0,323.0,324.0,325.0,326.0,327.0,328.0,329.0,330.0,331.0,332.0,333.0,334.0,335.0,336.0,337.0,338.0,339.0,340.0,341.0,342.0,343.0,344.0,345.0,346.0,347.0,348.0,349.0,350.0,351.0,352.0,353.0,354.0,355.0,356.0,357.0,358.0,359.0,360.0,361.0,362.0,363.0,364.0,365.0,366.0,367.0,368.0,369.0,370.0,371.0,372.0,373.0,374.0,375.0,376.0,377.0,378.0,379.0,380.0,381.0,382.0,383.0,384.0,385.0,386.0,387.0,388.0,389.0,390.0,391.0,392.0,393.0,394.0,395.0,396.0,397.0,398.0,399.0,400.0,401.0,402.0,403.0,404.0,405.0,406.0,407.0,408.0,409.0,410.0,411.0,412.0,413.0,414.0,415.0,416.0,417.0,418.0,419.0,420.0,421.0,422.0,423.0,424.0,425.0,426.0,427.0,428.0,429.0,430.0,431.0,432.0,433.0,434.0,435.0,436.0,437.0,438.0,439.0,440.0,441.0,442.0,443.0,444.0,445.0,446.0,447.0,448.0,449.0,450.0,451.0,452.0,453.0,454.0,455.0,456.0,457.0,458.0,459.0,460.0,461.0,462.0,463.0,464.0,465.0,466.0,467.0,468.0,469.0,470.0,471.0,472.0,473.0,474.0,475.0,476.0,477.0,478.0,479.0,480.0,481.0,482.0,483.0,484.0,485.0,486.0,487.0,488.0,489.0,490.0,491.0,492.0,493.0,494.0,495.0,496.0,497.0,498.0,499.0,500.0,501.0,502.0,503.0,504.0,505.0,506.0,507.0,508.0,509.0,510.0,511.0,512.0,513.0,514.0,515.0,516.0,517.0,518.0,519.0,520.0,521.0,522.0,523.0,524.0,525.0,526.0,527.0,528.0,529.0,530.0,531.0,532.0,533.0,534.0,535.0,536.0,537.0,538.0,539.0,540.0,541.0,542.0,543.0,544.0,545.0,546.0,547.0,548.0,549.0,550.0,551.0,552.0,553.0,554.0,555.0,556.0,557.0,558.0,559.0,560.0,561.0,562.0,563.0,564.0,565.0,566.0,567.0,568.0,569.0,570.0,571.0,572.0,573.0,574.0,575.0,576.0,577.0,578.0,579.0,580.0,581.0,582.0,583.0,584.0,585.0,586.0,587.0,588.0,589.0,590.0,591.0,592.0,593.0,594.0,595.0,596.0,597.0,598.0,599.0,600.0,601.0,602.0,603.0,604.0,605.0,606.0,607.0,608.0,609.0,610.0,611.0,612.0,613.0,614.0,615.0,616.0,617.0,618.0,619.0,620.0,621.0,622.0,623.0,624.0,625.0,626.0,627.0,628.0,629.0,630.0,631.0,632.0,633.0,634.0,635.0,636.0,637.0,638.0,639.0,640.0,641.0,642.0,643.0,644.0,645.0,646.0,647.0,648.0,649.0,650.0,651.0,652.0,653.0,654.0,655.0,656.0,657.0,658.0,659.0,660.0,661.0,662.0,663.0,664.0,665.0,666.0,667.0,668.0,669.0,670.0,671.0,672.0,673.0,674.0,675.0,676.0,677.0,678.0,679.0,680.0,681.0,682.0,683.0,684.0,685.0,686.0,687.0,688.0,689.0,690.0,691.0,692.0,693.0,694.0,695.0,696.0,697.0,698.0,699.0,700.0,701.0,702.0,703.0,704.0,705.0,706.0,707.0,708.0,709.0,710.0,711.0,712.0,713.0,714.0,715.0,716.0,717.0,718.0,719.0,720.0,721.0,722.0,723.0,724.0,725.0,726.0,727.0,728.0,729.0,730.0,731.0,732.0,733.0,734.0,735.0,736.0,737.0,738.0,739.0,740.0,741.0,742.0,743.0,744.0,745.0,746.0,747.0,748.0,749.0,750.0,751.0,752.0,753.0,754.0,755.0,756.0,757.0,758.0,759.0,760.0,761.0,762.0,763.0,764.0,765.0,766.0,767.0,768.0,769.0,770.0,771.0,772.0,773.0,774.0,775.0,776.0,777.0,778.0,779.0,780.0,781.0,782.0,783.0,784.0,785.0,786.0,787.0,788.0,789.0,790.0,791.0,792.0,793.0,794.0,795.0,796.0,797.0,798.0,799.0,800.0,801.0,802.0,803.0,804.0,805.0,806.0,807.0,808.0,809.0,810.0,811.0,812.0,813.0,814.0,815.0,816.0,817.0,818.0,819.0,820.0,821.0,822.0,823.0,824.0,825.0,826.0,827.0,828.0,829.0,830.0,831.0,832.0,833.0,834.0,835.0,836.0,837.0,838.0,839.0,840.0,841.0,842.0,843.0,844.0,845.0,846.0,847.0,848.0,849.0,850.0,851.0,852.0,853.0,854.0,855.0,856.0,857.0,858.0,859.0,860.0,861.0,862.0,863.0,864.0,865.0,866.0,867.0,868.0,869.0,870.0,871.0,872.0,873.0,874.0,875.0,876.0,877.0,878.0,879.0,880.0,881.0,882.0,883.0,884.0,885.0,886.0,887.0,888.0,889.0,890.0,891.0,892.0,893.0,894.0,895.0,896.0,897.0,898.0,899.0,900.0,901.0,902.0,903.0,904.0,905.0,906.0,907.0,908.0,909.0,910.0,911.0,912.0,913.0,914.0,915.0,916.0,917.0,918.0,919.0,920.0,921.0,922.0,923.0,924.0,925.0,926.0,927.0,928.0,929.0,930.0,931.0,932.0,933.0,934.0,935.0,936.0,937.0,938.0,939.0,940.0,941.0,942.0,943.0,944.0,945.0,946.0,947.0,948.0,949.0,950.0,951.0,952.0,953.0,954.0,955.0,956.0,957.0,958.0,959.0,960.0,961.0,962.0,963.0,964.0,965.0,966.0,967.0,968.0,969.0,970.0,971.0,972.0,973.0,974.0,975.0,976.0,977.0,978.0,979.0,980.0,981.0,982.0,983.0,984.0,985.0,986.0,987.0,988.0,989.0,990.0,991.0,992.0,993.0,994.0,995.0,996.0,997.0,998.0,999.0,1000.0],"cos":[1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0],"sin":[-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,-0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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/math/base/special/sincospif/test/fixtures/julia/runner.jl b/lib/node_modules/@stdlib/math/base/special/sincospif/test/fixtures/julia/runner.jl new file mode 100755 index 000000000000..a24fc2b8f051 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/test/fixtures/julia/runner.jl @@ -0,0 +1,72 @@ +#!/usr/bin/env julia +# +# @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 JSON + +""" + gen( domain, name ) + +Generate fixture data and write to file. + +# Arguments + +* `domain`: domain +* `name::AbstractString`: output filename + +# Examples + +``` julia +julia> x = linspace( -1000, 1000, 2001 ); +julia> gen( x, \"data.json\" ); +``` +""" +function gen( domain, name ) + x = collect( domain ); + s = sinpi.( x ); + c = cospi.( x ); + + # Store data to be written to file as a collection: + data = Dict([ + ("x", x), + ("sin", s), + ("cos", c) + ]); + + # Based on the script directory, create an output filepath: + filepath = joinpath( dir, name ); + + # Write the data to the output filepath as JSON: + outfile = open( filepath, "w" ); + write( outfile, JSON.json(data) ); + write( outfile, "\n" ); + close( outfile ); +end + +# Get the filename: +file = @__FILE__; + +# Extract the directory in which this file resides: +dir = dirname( file ); + +# Generate fixture data for integer values: +x = range( -1000.0, stop = 1000.0, length = 2001 ); +gen( x, "integers.json" ); + +# Generate fixture data for decimal values: +x = range( -100.0, stop = 100.0, length = 2003 ) +gen( x, "decimals.json" ); diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/test/test.assign.js b/lib/node_modules/@stdlib/math/base/special/sincospif/test/test.assign.js new file mode 100644 index 000000000000..7a13d22ba2fe --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/test/test.assign.js @@ -0,0 +1,218 @@ +/** +* @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 isnanf = require( '@stdlib/math/base/assert/is-nanf' ); +var PINF = require( '@stdlib/constants/float32/pinf' ); +var NINF = require( '@stdlib/constants/float32/ninf' ); +var absf = require( '@stdlib/math/base/special/absf' ); +var powf = require( '@stdlib/math/base/special/powf' ); +var Float32Array = require( '@stdlib/array/float32' ); +var EPS = require( '@stdlib/constants/float32/eps' ); +var sincospif = require( './../lib/assign.js' ); + + +// FIXTURES // + +var integers = require( './fixtures/julia/integers.json' ); +var decimals = require( './fixtures/julia/decimals.json' ); + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof sincospif, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'if provided negative infinity, the function returns [NaN,NaN]', function test( t ) { + var out; + var y; + + out = new Float32Array( 2 ); + y = sincospif( NINF, out, 1, 0 ); + + t.strictEqual( y, out, 'returns output array' ); + t.strictEqual( isnanf( y[ 0 ] ), true, 'returns expected value' ); + t.strictEqual( isnanf( y[ 1 ] ), true, 'returns expected value' ); + t.end(); +}); + +tape( 'if provided positive infinity, the function returns [NaN,NaN]', function test( t ) { + var out; + var y; + + out = new Float32Array( 2 ); + y = sincospif( PINF, out, 1, 0 ); + t.strictEqual( y, out, 'returns output array' ); + t.strictEqual( isnanf( y[ 0 ] ), true, 'returns expected value' ); + t.strictEqual( isnanf( y[ 1 ] ), true, 'returns expected value' ); + t.end(); +}); + +tape( 'if provided NaN, the function returns [NaN,NaN]', function test( t ) { + var out; + var y; + + out = new Float32Array( 2 ); + y = sincospif( NaN, out, 1, 0 ); + + t.strictEqual( y, out, 1, 0 ); + t.strictEqual( isnanf( y[ 0 ] ), true, 'returns expected value' ); + t.strictEqual( isnanf( y[ 1 ] ), true, 'returns expected value' ); + t.end(); +}); + +tape( 'the function computes sin(πx) and cos(πx) for integer input', function test( t ) { + var out; + var x; + var s; + var c; + var y; + var i; + + x = integers.x; + s = integers.sin; + c = integers.cos; + for ( i = 0; i < x.length; i++ ) { + out = new Float32Array( 2 ); + y = sincospif( x[ i ], out, 1, 0 ); + t.strictEqual( y, out, 'returns output array' ); + t.strictEqual( y[ 0 ], s[ i ], 'returns '+c[ i ] ); + t.strictEqual( y[ 1 ], c[ i ], 'returns '+c[ i ] ); + } + t.end(); +}); + +tape( 'if provided a value exceeding 2**53, the function returns [0,1]', function test( t ) { + var out; + var x; + var y; + var i; + + x = powf( 2.0, 53 ) + 1.0; + for ( i = 0; i < 100; i++ ) { + out = new Float32Array( 2 ); + y = sincospif( x + i, out, 1, 0 ); + t.strictEqual( y, out, 'returns output array' ); + t.strictEqual( y[ 0 ], 0.0, 'returns expected value' ); + t.strictEqual( y[ 1 ], 1.0, 'returns expected value' ); + } + t.end(); +}); + +tape( 'the function computes sin(πx) and cos(πx) for fractional part equal to 1/2', function test( t ) { + var out; + var x; + var y; + var i; + + for ( i = -100; i <= 100; i++ ) { + x = 0.5 + i; + out = new Float32Array( 2 ); + y = sincospif( x, out, 1, 0 ); + t.strictEqual( y, out, 'returns output array' ); + t.strictEqual( y[ 0 ], ( (i%2 === 0) ? 1.0 : -1.0 ), 'x: '+x+'. Expected: 0' ); + t.strictEqual( y[ 1 ], 0.0, 'x: '+x+'. Expected: 0' ); + } + t.end(); +}); + +tape( 'the function computes sin(πx) and cos(πx) for decimal input', function test( t ) { + var delta; + var out; + var x; + var y; + var i; + var s; + var c; + + x = decimals.x; + s = decimals.sin; + c = decimals.cos; + for ( i = 0; i < x.length; i++ ) { + out = new Float32Array( 2 ); + y = sincospif( x[ i ], out, 1, 0 ); + t.strictEqual( y, out, 'returns output array' ); + + if ( y[ 0 ] === s[ i ] ) { + t.strictEqual( y[ 0 ], s[ i ], 'x: '+x[ i ]+'. Expected: '+s[ i ] ); + } else { + delta = absf( y[ 0 ] - s[ i ] ); + t.ok(delta <= EPS, 'within tolerance. x: '+x[ i ]+'. Value: '+y[ 0 ]+'. Expected: '+s[ i ]+'. Tolerance: '+EPS+'.' ); + } + if ( y[ 1 ] === c[ i ] ) { + t.strictEqual( y[ 1 ], c[ i ], 'x: '+x[ i ]+'. Expected: '+c[ i ] ); + } else { + delta = absf( y[ 1 ] - c[ i ] ); + t.ok( delta <= EPS, 'within tolerance. x: '+x[ i ]+'. Value: '+y[ 1 ]+'. Expected: '+c[ i ]+'. Tolerance: '+EPS+'.' ); + } + } + t.end(); +}); + +tape( 'the function supports providing an output typed array', function test( t ) { + var parts; + var out; + + out = new Float32Array( 2 ); + parts = sincospif( NaN, out, 1, 0 ); + + t.strictEqual( parts, out, 'returns output array' ); + t.strictEqual( isnanf( parts[ 0 ] ), true, 'returns expected value' ); + t.strictEqual( isnanf( parts[ 1 ] ), true, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function supports specifying a stride', function test( t ) { + var out; + var val; + + out = new Float32Array( 4 ); + val = sincospif( NaN, out, 2, 0 ); + + t.strictEqual( val, out ); + t.strictEqual( isnanf( out[ 0 ] ), true, 'returns expected value' ); + t.strictEqual( val[ 1 ], 0, 'returns expected value' ); + t.strictEqual( isnanf( out[ 2 ] ), true, 'returns expected value' ); + t.strictEqual( val[ 3 ], 0, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function supports specifying an offset', function test( t ) { + var out; + var val; + + out = new Float32Array( 4 ); + val = sincospif( NaN, out, 2, 1 ); + + t.strictEqual( val, out, 'returns output array' ); + t.strictEqual( val[ 0 ], 0, 'returns expected value' ); + t.strictEqual( isnanf( val[ 1 ] ), true, 'returns expected value' ); + t.strictEqual( val[ 2 ], 0, 'returns expected value' ); + t.strictEqual( isnanf( val[ 3 ] ), true, 'returns expected value' ); + + t.end(); +}); diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/test/test.js b/lib/node_modules/@stdlib/math/base/special/sincospif/test/test.js new file mode 100644 index 000000000000..5a0ae3cbab45 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/test/test.js @@ -0,0 +1,40 @@ +/** +* @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 hasOwnProp = require( '@stdlib/assert/has-own-property' ); +var sincospif = require( './../lib' ); + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof sincospif, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'attached to the main export is an `assign` method', function test( t ) { + t.strictEqual( hasOwnProp( sincospif, 'assign' ), true, 'has property' ); + t.strictEqual( typeof sincospif.assign, 'function', 'has method' ); + t.end(); +}); diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/test/test.main.js b/lib/node_modules/@stdlib/math/base/special/sincospif/test/test.main.js new file mode 100644 index 000000000000..bd8e6dd58789 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/test/test.main.js @@ -0,0 +1,142 @@ +/** +* @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 isnanf = require( '@stdlib/math/base/assert/is-nanf' ); +var PINF = require( '@stdlib/constants/float32/pinf' ); +var NINF = require( '@stdlib/constants/float32/ninf' ); +var absf = require( '@stdlib/math/base/special/absf' ); +var powf = require( '@stdlib/math/base/special/powf' ); +var EPS = require( '@stdlib/constants/float32/eps' ); +var sincospif = require( './../lib/main.js' ); + + +// FIXTURES // + +var integers = require( './fixtures/julia/integers.json' ); +var decimals = require( './fixtures/julia/decimals.json' ); + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof sincospif, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'if provided negative infinity, the function returns `[NaN,NaN]`', function test( t ) { + var y = sincospif( NINF ); + t.strictEqual( isnanf( y[ 0 ] ), true, 'returns expected value' ); + t.strictEqual( isnanf( y[ 1 ] ), true, 'returns expected value' ); + t.end(); +}); + +tape( 'if provided positive infinity, the function returns `[NaN,NaN]`', function test( t ) { + var y = sincospif( PINF ); + t.strictEqual( isnanf( y[ 0 ] ), true, 'returns expected value' ); + t.strictEqual( isnanf( y[ 1 ] ), true, 'returns expected value' ); + t.end(); +}); + +tape( 'if provided `NaN`, the function returns `[NaN,NaN]`', function test( t ) { + var y = sincospif( NaN ); + t.strictEqual( isnanf( y[ 0 ] ), true, 'returns expected value' ); + t.strictEqual( isnanf( y[ 1 ] ), true, 'returns expected value' ); + t.end(); +}); + +tape( 'the function computes sin(πx) and cos(πx) for integer input', function test( t ) { + var x; + var s; + var c; + var y; + var i; + + x = integers.x; + s = integers.sin; + c = integers.cos; + for ( i = 0; i < x.length; i++ ) { + y = sincospif( x[ i ] ); + t.strictEqual( y[ 0 ], s[ i ], 'returns '+s[ i ] ); + t.strictEqual( y[ 1 ], c[ i ], 'returns '+c[ i ] ); + } + t.end(); +}); + +tape( 'if provided a value exceeding 2**53, the function returns [0,1]', function test( t ) { + var x; + var y; + var i; + + x = powf( 2.0, 53 ) + 1.0; + for ( i = 0; i < 100; i++ ) { + y = sincospif( x+i ); + t.strictEqual( y[ 0 ], 0.0, 'returns expected value' ); + t.strictEqual( y[ 1 ], 1.0, 'returns expected value' ); + } + t.end(); +}); + +tape( 'the function computes the sin(πx) and cos(πx) for fractional part equal to 1/2', function test( t ) { + var x; + var y; + var i; + + for ( i = -100; i <= 100; i++ ) { + x = 0.5 + i; + y = sincospif( x ); + t.strictEqual( y[ 0 ], ( (i%2 === 0) ? 1.0 : -1.0 ), 'x: '+x+'. Expected: 0' ); + t.strictEqual( y[ 1 ], 0.0, 'x: '+x+'. Expected: 0' ); + } + t.end(); +}); + +tape( 'the function computes the sin(πx) and cos(πx) for decimal input', function test( t ) { + var delta; + var x; + var y; + var i; + var s; + var c; + + x = decimals.x; + s = decimals.sin; + c = decimals.cos; + for ( i = 0; i < x.length; i++ ) { + y = sincospif( x[ i ] ); + + if ( y[ 0 ] === s[ i ] ) { + t.strictEqual( y[ 0 ], s[ i ], 'x: '+x[ i ]+'. Expected: '+s[ i ] ); + } else { + delta = absf( y[ 0 ] - s[ i ] ); + t.ok( delta <= EPS, 'within tolerance. x: '+x[ i ]+'. Value: '+y[ 0 ]+'. Expected: '+s[ i ]+'. Tolerance: '+EPS+'.' ); + } + if ( y[ 1 ] === c[ i ] ) { + t.strictEqual( y[ 1 ], c[ i ], 'x: '+x[ i ]+'. Expected: '+c[ i ] ); + } else { + delta = absf( y[ 1 ] - c[ i ] ); + t.ok( delta <= EPS, 'within tolerance. x: '+x[ i ]+'. Value: '+y[ 1 ]+'. Expected: '+c[ i ]+'. Tolerance: '+EPS+'.' ); + } + } + t.end(); +}); diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/test/test.native.js b/lib/node_modules/@stdlib/math/base/special/sincospif/test/test.native.js new file mode 100644 index 000000000000..bbeb911e08be --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/test/test.native.js @@ -0,0 +1,157 @@ +/** +* @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 resolve = require( 'path' ).resolve; +var tape = require( 'tape' ); +var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); +var PINF = require( '@stdlib/constants/float32/pinf' ); +var NINF = require( '@stdlib/constants/float32/ninf' ); +var absf = require( '@stdlib/math/base/special/absf' ); +var powf = require( '@stdlib/math/base/special/powf' ); +var tryRequire = require( '@stdlib/utils/try-require' ); +var float64ToFloat32 = require( '@stdlib/number/float64/base/to-float32' ); +var max = require( '@stdlib/math/base/special/max' ); +var EPS = require( '@stdlib/constants/float32/eps' ); + + +// VARIABLES // + +var sincospif = tryRequire( resolve( __dirname, './../lib/native.js' ) ); +var opts = { + 'skip': ( sincospif instanceof Error ) +}; + + +// FIXTURES // + +var integers = require( './fixtures/julia/integers.json' ); +var decimals = require( './fixtures/julia/decimals.json' ); + + +// TESTS // + +tape( 'main export is a function', opts, function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof sincospif, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'if provided negative infinity, the function returns `[NaN,NaN]`', opts, function test( t ) { + var y = sincospif( NINF ); + t.strictEqual( isnanf( y[ 0 ] ), true, 'returns expected value' ); + t.strictEqual( isnanf( y[ 1 ] ), true, 'returns expected value' ); + t.end(); +}); + +tape( 'if provided positive infinity, the function returns `[NaN,NaN]`', opts, function test( t ) { + var y = sincospif( PINF ); + t.strictEqual( isnanf( y[ 0 ] ), true, 'returns expected value' ); + t.strictEqual( isnanf( y[ 1 ] ), true, 'returns expected value' ); + t.end(); +}); + +tape( 'if provided `NaN`, the function returns [NaN,NaN]', opts, function test( t ) { + var y = sincospif( NaN ); + t.strictEqual( isnanf( y[ 0 ] ), true, 'returns expected value' ); + t.strictEqual( isnanf( y[ 1 ] ), true, 'returns expected value' ); + t.end(); +}); + +tape( 'the function computes sin(πx) and cos(πx) for integer input', opts, function test( t ) { + var x; + var s; + var c; + var y; + var i; + + x = integers.x; + s = integers.sin; + c = integers.cos; + for ( i = 0; i < x.length; i++ ) { + y = sincospif( x[ i ] ); + t.strictEqual( y[ 0 ], s[ i ], 'returns '+s[ i ] ); + t.strictEqual( y[ 1 ], c[ i ], 'returns '+s[ i ] ); + } + t.end(); +}); + +tape( 'if provided a value exceeding 2**53, the function returns [0,1]', opts, function test( t ) { + var x; + var y; + var i; + + x = powf( 2.0, 53 ) + 1.0; + for ( i = 0; i < 100; i++ ) { + y = sincospif( x+i ); + t.strictEqual( y[ 0 ], 0.0, 'returns expected value' ); + t.strictEqual( y[ 1 ], 1.0, 'returns expected value' ); + } + t.end(); +}); + +tape( 'the function computes the sin(πx) and cos(πx) for fractional part equal to 1/2', opts, function test( t ) { + var x; + var y; + var i; + + for ( i = -100; i <= 100; i++ ) { + x = 0.5 + i; + y = sincospif( x ); + t.strictEqual( y[ 0 ], ( (i%2 === 0) ? 1.0 : -1.0 ), 'x: '+x+'. Expected: 0' ); + t.strictEqual( y[ 1 ], 0.0, 'x: '+x+'. Expected: 0' ); + } + t.end(); +}); + +tape( 'the function computes sin(πx) and cos(πx) for decimal input', opts, function test( t ) { + var delta; + var tol; + var x; + var y; + var i; + var s; + var c; + + x = decimals.x; + s = decimals.sin; + c = decimals.cos; + for ( i = 0; i < x.length; i++ ) { + y = sincospif( x[ i ] ); + + if ( y[ 0 ] === float64ToFloat32( s[ i ] ) ) { + t.strictEqual( y[ 0 ], float64ToFloat32( s[ i ] ), 'x: '+x[ i ]+'. Expected: '+s[ i ] ); + } else { + delta = absf( y[ 0 ] - float64ToFloat32( s[ i ] ) ); + tol = max( 50.0 * EPS * max( absf( y[ 0 ] ), 1.0 ), 2.0e-5 ); + t.ok( delta <= tol, 'within tolerance. x: '+x[ i ]+'. Value: '+y[ 0 ]+'. Expected: '+s[ i ]+'. Tolerance: '+tol+'.'); + } + + if ( y[ 1 ] === float64ToFloat32( c[ i ] ) ) { + t.strictEqual( y[ 1 ], float64ToFloat32( c[ i ] ), 'x: '+x[ i ]+'. Expected: '+c[ i ] ); + } else { + delta = absf( y[ 1 ] - float64ToFloat32( c[ i ] ) ); + tol = max( 50.0 * EPS * max( absf( y[ 1 ] ), 1.0 ), 2.0e-5 ); + t.ok( delta <= tol, 'within tolerance. x: '+x[ i ]+'. Value: '+y[ 1 ]+'. Expected: '+c[ i ]+'. Tolerance: '+tol+'.'); + } + } + t.end(); +}); From 3c4a538ed5fb5d1b121855eb396f6cce37130dd7 Mon Sep 17 00:00:00 2001 From: ivishal-g Date: Wed, 11 Feb 2026 18:10:02 +0530 Subject: [PATCH 2/4] fix: remove duplicate benchmark.c file in wrong location --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: na - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- .../special/sincospif/benchmark/c/benchmark.c | 135 ------------------ 1 file changed, 135 deletions(-) delete mode 100644 lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/c/benchmark.c diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/c/benchmark.c b/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/c/benchmark.c deleted file mode 100644 index d85f798a1fe8..000000000000 --- a/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/c/benchmark.c +++ /dev/null @@ -1,135 +0,0 @@ -/** -* @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. -*/ - -#include "stdlib/math/base/special/sincospif.h" -#include -#include -#include -#include - -#define NAME "sincospif" -#define ITERATIONS 1000000 -#define REPEATS 3 - -/** -* Prints the TAP version. -*/ -static void print_version( void ) { - printf( "TAP version 13\n" ); -} - -/** -* Prints the TAP summary. -* -* @param total total number of tests -* @param passing total number of passing tests -*/ -static void print_summary( int total, int passing ) { - printf( "#\n" ); - printf( "1..%d\n", total ); // TAP plan - printf( "# total %d\n", total ); - printf( "# pass %d\n", passing ); - printf( "#\n" ); - printf( "# ok\n" ); -} - -/** -* Prints benchmarks results. -* -* @param elapsed elapsed time in seconds -*/ -static void print_results( double elapsed ) { - double rate = (double)ITERATIONS / elapsed; - printf( " ---\n" ); - printf( " iterations: %d\n", ITERATIONS ); - printf( " elapsed: %0.9f\n", elapsed ); - printf( " rate: %0.9f\n", rate ); - printf( " ...\n" ); -} - -/** -* Returns a clock time. -* -* @return clock time -*/ -static double tic( void ) { - struct timeval now; - gettimeofday( &now, NULL ); - return (double)now.tv_sec + (double)now.tv_usec/1.0e6; -} - -/** -* Generates a random number on the interval [0,1). -* -* @return random number -*/ -static float rand_float( void ) { - return (float)( ( 20.0 * rand() ) / ( (double)RAND_MAX + 1.0 ) - 10.0 ); -} - -/** -* Runs a benchmark. -* -* @return elapsed time in seconds -*/ -static double benchmark( void ) { - float x[ 100 ]; - double elapsed; - float sine; - float cosine; - double t; - int i; - - for ( i = 0; i < 100; i++ ) { - x[ i ] = rand_float(); - } - - t = tic(); - for ( i = 0; i < ITERATIONS; i++ ) { - stdlib_base_sincospif( x[ i%100 ], &sine, &cosine ); - if ( sine != sine || cosine != cosine ) { - printf( "should not return NaN\n" ); - break; - } - } - elapsed = tic() - t; - if ( sine != sine || cosine != cosine ) { - printf( "should not return NaN\n" ); - } - return elapsed; -} - -/** -* Main execution sequence. -*/ -int main( void ) { - double elapsed; - int i; - - // Use the current time to seed the random number generator: - srand( time( NULL ) ); - - print_version(); - for ( i = 0; i < REPEATS; i++ ) { - printf( "# c::%s\n", NAME ); - elapsed = benchmark(); - print_results( elapsed ); - printf( "ok %d benchmark finished\n", i+1 ); - } - print_summary( REPEATS, REPEATS ); -} From b0596be7ebe4a30ed8ce111f37d7cfd13a0601dc Mon Sep 17 00:00:00 2001 From: Vishal Gaikwad <154438441+ivishal-g@users.noreply.github.com> Date: Wed, 11 Feb 2026 18:44:50 +0530 Subject: [PATCH 3/4] bench: refactor to use string interpolation in bechmark Signed-off-by: Vishal Gaikwad <154438441+ivishal-g@users.noreply.github.com> --- .../sincospif/benchmark/benchmark.native.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/benchmark.native.js b/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/benchmark.native.js index 189e4ed7dd3f..3c19b51b8e2a 100644 --- a/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/benchmark.native.js +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/benchmark.native.js @@ -22,18 +22,18 @@ var resolve = require( 'path' ).resolve; var bench = require( '@stdlib/bench' ); +var tryRequire = require( '@stdlib/utils/try-require' ); var uniform = require( '@stdlib/random/array/uniform' ); var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); -var tryRequire = require( '@stdlib/utils/try-require' ); var format = require( '@stdlib/string/format' ); var pkg = require( './../package.json' ).name; // VARIABLES // -var sincospif = tryRequire( resolve( __dirname, './../lib/native.js' ) ); +var acschf = tryRequire( resolve( __dirname, './../lib/native.js' ) ); var opts = { - 'skip': ( sincospif instanceof Error ) + 'skip': ( acschf instanceof Error ) }; @@ -44,19 +44,21 @@ bench( format( '%s::native', pkg ), opts, function benchmark( b ) { var y; var i; - x = uniform( 100, -10.0, 10.0, { + // Generate input data once (valid domain: |x| >= 1) + x = uniform( 100, 1.0, 50.0, { 'dtype': 'float32' }); b.tic(); for ( i = 0; i < b.iterations; i++ ) { - y = sincospif( x[ i%x.length ] ); - if ( isnanf( y[ 0 ] ) || isnanf( y[ 1 ] ) ) { + y = acschf( x[ i % x.length ] ); + if ( isnanf( y ) ) { b.fail( 'should not return NaN' ); } } b.toc(); - if ( isnanf( y[ 0 ] ) || isnanf( y[ 1 ] ) ) { + + if ( isnanf( y ) ) { b.fail( 'should not return NaN' ); } b.pass( 'benchmark finished' ); From 5d9288f95351b5f750c68f7a8592a918731cfd6c Mon Sep 17 00:00:00 2001 From: ivishal-g Date: Wed, 11 Feb 2026 18:55:18 +0530 Subject: [PATCH 4/4] bench: refactor to use string interpolation in bechmark --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: na - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: passed - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- .../sincospif/benchmark/benchmark.native.js | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/benchmark.native.js b/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/benchmark.native.js index 3c19b51b8e2a..189e4ed7dd3f 100644 --- a/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/benchmark.native.js +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/benchmark.native.js @@ -22,18 +22,18 @@ var resolve = require( 'path' ).resolve; var bench = require( '@stdlib/bench' ); -var tryRequire = require( '@stdlib/utils/try-require' ); var uniform = require( '@stdlib/random/array/uniform' ); var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); +var tryRequire = require( '@stdlib/utils/try-require' ); var format = require( '@stdlib/string/format' ); var pkg = require( './../package.json' ).name; // VARIABLES // -var acschf = tryRequire( resolve( __dirname, './../lib/native.js' ) ); +var sincospif = tryRequire( resolve( __dirname, './../lib/native.js' ) ); var opts = { - 'skip': ( acschf instanceof Error ) + 'skip': ( sincospif instanceof Error ) }; @@ -44,21 +44,19 @@ bench( format( '%s::native', pkg ), opts, function benchmark( b ) { var y; var i; - // Generate input data once (valid domain: |x| >= 1) - x = uniform( 100, 1.0, 50.0, { + x = uniform( 100, -10.0, 10.0, { 'dtype': 'float32' }); b.tic(); for ( i = 0; i < b.iterations; i++ ) { - y = acschf( x[ i % x.length ] ); - if ( isnanf( y ) ) { + y = sincospif( x[ i%x.length ] ); + if ( isnanf( y[ 0 ] ) || isnanf( y[ 1 ] ) ) { b.fail( 'should not return NaN' ); } } b.toc(); - - if ( isnanf( y ) ) { + if ( isnanf( y[ 0 ] ) || isnanf( y[ 1 ] ) ) { b.fail( 'should not return NaN' ); } b.pass( 'benchmark finished' );