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..8d5da2815869 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/README.md @@ -0,0 +1,223 @@ + + +# sincospif + +> Simultaneously compute the [sinf][@stdlib/math/base/special/sinf] and [cosf][@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 sin(πx) and cos(πx) using single-precision floating-point arithmetic. This function is more accurate than computing `sinf(πx)` and `cosf(πx)` separately, especially for large values of `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.assign( x, out, stride, offset ) + +Simultaneously computes the [sinf][@stdlib/math/base/special/sinf] and [cosf][@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 sin(πx) and cos(πx) using single-precision floating-point arithmetic and assigns the results to a provided output pointers. + +```c +float cosine; +float sine; + +stdlib_base_sincospif( 4.0f, &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..ba18001b1615 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/benchmark/benchmark.js @@ -0,0 +1,179 @@ +/** +* @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 + 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(); +}); + +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/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/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..e72f587ec588 --- /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: Array|TypedArray|Object + 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..999a8c49e995 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/docs/types/index.d.ts @@ -0,0 +1,107 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +// TypeScript Version: 4.1 + +/// + +import { Collection } from '@stdlib/types/array'; + +/** +* 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 ): Float32Array; + + /** + * 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( 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..3fc191395913 --- /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 Float32Array... +{ + sincospif( 1.0 ); // $ExpectType Float32Array +} + +// 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 = new Float32Array( 2 ); + + sincospif.assign( 3.14e-319, out, 1, 0 ); // $ExpectType Collection +} + +// 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..8c72fe591424 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/test/fixtures/julia/decimals.json @@ -0,0 +1 @@ +{"x":[-100.0,-99.9001,-99.8002,-99.7003,-99.6004,-99.500496,-99.4006,-99.3007,-99.2008,-99.1009,-99.001,-98.9011,-98.8012,-98.7013,-98.6014,-98.501495,-98.401596,-98.3017,-98.2018,-98.1019,-98.002,-97.9021,-97.8022,-97.7023,-97.602394,-97.502495,-97.402596,-97.3027,-97.2028,-97.1029,-97.003,-96.9031,-96.8032,-96.7033,-96.60339,-96.503494,-96.403595,-96.303696,-96.2038,-96.1039,-96.004,-95.9041,-95.8042,-95.70429,-95.60439,-95.50449,-95.404594,-95.304695,-95.204796,-95.1049,-95.005,-94.9051,-94.80519,-94.70529,-94.60539,-94.50549,-94.405594,-94.305695,-94.205795,-94.105896,-94.006,-93.9061,-93.80619,-93.70629,-93.60639,-93.50649,-93.40659,-93.306694,-93.206795,-93.106895,-93.006996,-92.90709,-92.80719,-92.70729,-92.60739,-92.50749,-92.40759,-92.30769,-92.207794,-92.107895,-92.007996,-91.90809,-91.80819,-91.70829,-91.60839,-91.50849,-91.40859,-91.30869,-91.20879,-91.108894,-91.00899,-90.90909,-90.80919,-90.70929,-90.60939,-90.50949,-90.40959,-90.30969,-90.20979,-90.10989,-90.00999,-89.91009,-89.81019,-89.71029,-89.61039,-89.51049,-89.41059,-89.31069,-89.21079,-89.110886,-89.01099,-88.91109,-88.81119,-88.71129,-88.61139,-88.51149,-88.41159,-88.31169,-88.21179,-88.111885,-88.011986,-87.91209,-87.81219,-87.71229,-87.61239,-87.51249,-87.41259,-87.31269,-87.21278,-87.112885,-87.012985,-86.913086,-86.81319,-86.71329,-86.61339,-86.51349,-86.41359,-86.31368,-86.21378,-86.113884,-86.013985,-85.914085,-85.814186,-85.71429,-85.61439,-85.51449,-85.41459,-85.31468,-85.21478,-85.11488,-85.014984,-84.915085,-84.815186,-84.71529,-84.61539,-84.51549,-84.41558,-84.31568,-84.21578,-84.11588,-84.01598,-83.916084,-83.816185,-83.716286,-83.61639,-83.51649,-83.41658,-83.31668,-83.21678,-83.11688,-83.01698,-82.91708,-82.817184,-82.717285,-82.617386,-82.51748,-82.41758,-82.31768,-82.21778,-82.11788,-82.01798,-81.91808,-81.818184,-81.718285,-81.618385,-81.51848,-81.41858,-81.31868,-81.21878,-81.11888,-81.01898,-80.91908,-80.81918,-80.719284,-80.61938,-80.51948,-80.41958,-80.31968,-80.21978,-80.11988,-80.01998,-79.92008,-79.82018,-79.72028,-79.62038,-79.52048,-79.42058,-79.32068,-79.22078,-79.12088,-79.02098,-78.92108,-78.82118,-78.721275,-78.621376,-78.52148,-78.42158,-78.32168,-78.22178,-78.12188,-78.02198,-77.92208,-77.822174,-77.722275,-77.622375,-77.52248,-77.42258,-77.32268,-77.22278,-77.12288,-77.02298,-76.92308,-76.82317,-76.723274,-76.623375,-76.523476,-76.42358,-76.32368,-76.22378,-76.12388,-76.02398,-75.92407,-75.82417,-75.72427,-75.624374,-75.524475,-75.424576,-75.32468,-75.22478,-75.12488,-75.02498,-74.92507,-74.82517,-74.72527,-74.625374,-74.525475,-74.425575,-74.325676,-74.22578,-74.12588,-74.02597,-73.92607,-73.82617,-73.72627,-73.62637,-73.526474,-73.426575,-73.326675,-73.226776,-73.12688,-73.02697,-72.92707,-72.82717,-72.72727,-72.62737,-72.52747,-72.427574,-72.327675,-72.227776,-72.12787,-72.02797,-71.92807,-71.82817,-71.72827,-71.62837,-71.52847,-71.42857,-71.328674,-71.228775,-71.12887,-71.02897,-70.92907,-70.82917,-70.72927,-70.62937,-70.52947,-70.42957,-70.32967,-70.22977,-70.12987,-70.02997,-69.93007,-69.83017,-69.73027,-69.63037,-69.53047,-69.43057,-69.330666,-69.23077,-69.13087,-69.03097,-68.93107,-68.83117,-68.73127,-68.63137,-68.53147,-68.43157,-68.331665,-68.231766,-68.13187,-68.03197,-67.93207,-67.83217,-67.73227,-67.63237,-67.53247,-67.43256,-67.332664,-67.232765,-67.132866,-67.03297,-66.93307,-66.83317,-66.73327,-66.63337,-66.53347,-66.43356,-66.333664,-66.233765,-66.133865,-66.033966,-65.93407,-65.83417,-65.73427,-65.63437,-65.53446,-65.43456,-65.33466,-65.234764,-65.134865,-65.034966,-64.93507,-64.83517,-64.73527,-64.63537,-64.53546,-64.43556,-64.33566,-64.23576,-64.135864,-64.035965,-63.936066,-63.836163,-63.736263,-63.636364,-63.536465,-63.43656,-63.336662,-63.236763,-63.136864,-63.036964,-62.93706,-62.837162,-62.737263,-62.637363,-62.537464,-62.43756,-62.33766,-62.237762,-62.137863,-62.037964,-61.93806,-61.83816,-61.738262,-61.638363,-61.53846,-61.43856,-61.33866,-61.23876,-61.138863,-61.03896,-60.93906,-60.83916,-60.73926,-60.639362,-60.53946,-60.43956,-60.33966,-60.23976,-60.13986,-60.03996,-59.94006,-59.84016,-59.74026,-59.640358,-59.54046,-59.44056,-59.34066,-59.24076,-59.140858,-59.04096,-58.94106,-58.84116,-58.74126,-58.641357,-58.54146,-58.44156,-58.34166,-58.241756,-58.141857,-58.041958,-57.94206,-57.84216,-57.742256,-57.642357,-57.542458,-57.44256,-57.34266,-57.242756,-57.142857,-57.042957,-56.943058,-56.84316,-56.743256,-56.643356,-56.543457,-56.443558,-56.343655,-56.243755,-56.143856,-56.043957,-55.944057,-55.844154,-55.744255,-55.644356,-55.544456,-55.444557,-55.344654,-55.244755,-55.144855,-55.044956,-54.945053,-54.845154,-54.745255,-54.645355,-54.545456,-54.445553,-54.345654,-54.245754,-54.145855,-54.045956,-53.946053,-53.846153,-53.746254,-53.646355,-53.546455,-53.446552,-53.346653,-53.246754,-53.146854,-53.04695,-52.947052,-52.847153,-52.747253,-52.647354,-52.54745,-52.44755,-52.347652,-52.247753,-52.147854,-52.04795,-51.94805,-51.848152,-51.748253,-51.64835,-51.54845,-51.44855,-51.34865,-51.248753,-51.14885,-51.04895,-50.94905,-50.84915,-50.749252,-50.64935,-50.54945,-50.44955,-50.34965,-50.249752,-50.14985,-50.04995,-49.95005,-49.85015,-49.750248,-49.65035,-49.55045,-49.45055,-49.35065,-49.250748,-49.15085,-49.05095,-48.95105,-48.85115,-48.751247,-48.65135,-48.55145,-48.45155,-48.35165,-48.251747,-48.151848,-48.05195,-47.95205,-47.852146,-47.752247,-47.652348,-47.55245,-47.45255,-47.352646,-47.252747,-47.152847,-47.052948,-46.95305,-46.853146,-46.753246,-46.653347,-46.553448,-46.453545,-46.353645,-46.253746,-46.153847,-46.053947,-45.954044,-45.854145,-45.754246,-45.654346,-45.554447,-45.454544,-45.354645,-45.254745,-45.154846,-45.054947,-44.955044,-44.855145,-44.755245,-44.655346,-44.555443,-44.455544,-44.355644,-44.255745,-44.155846,-44.055943,-43.956043,-43.856144,-43.756245,-43.656345,-43.556442,-43.456543,-43.356644,-43.256744,-43.15684,-43.056942,-42.957043,-42.857143,-42.757244,-42.65734,-42.55744,-42.457542,-42.357643,-42.257744,-42.15784,-42.05794,-41.958042,-41.858143,-41.758244,-41.65834,-41.55844,-41.45854,-41.358643,-41.25874,-41.15884,-41.05894,-40.95904,-40.859142,-40.75924,-40.65934,-40.55944,-40.45954,-40.359642,-40.25974,-40.15984,-40.05994,-39.96004,-39.86014,-39.76024,-39.66034,-39.56044,-39.46054,-39.360638,-39.26074,-39.16084,-39.06094,-38.96104,-38.861137,-38.76124,-38.66134,-38.56144,-38.46154,-38.361637,-38.261738,-38.16184,-38.06194,-37.962036,-37.862137,-37.762238,-37.66234,-37.56244,-37.462536,-37.362637,-37.262737,-37.162838,-37.06294,-36.963036,-36.863136,-36.763237,-36.663338,-36.56344,-36.463535,-36.363636,-36.263737,-36.163837,-36.063934,-35.964035,-35.864136,-35.764236,-35.664337,-35.564434,-35.464535,-35.364635,-35.264736,-35.164837,-35.064934,-34.965034,-34.865135,-34.765236,-34.665333,-34.565434,-34.465534,-34.365635,-34.265736,-34.165833,-34.065933,-33.966034,-33.866135,-33.766235,-33.666332,-33.566433,-33.466534,-33.366634,-33.266735,-33.166832,-33.066933,-32.967033,-32.867134,-32.76723,-32.66733,-32.567432,-32.467533,-32.367634,-32.26773,-32.16783,-32.067932,-31.968033,-31.868132,-31.768232,-31.668331,-31.568432,-31.46853,-31.368631,-31.268732,-31.16883,-31.068932,-30.96903,-30.869131,-30.76923,-30.66933,-30.569431,-30.46953,-30.36963,-30.26973,-30.16983,-30.06993,-29.97003,-29.87013,-29.77023,-29.67033,-29.570429,-29.47053,-29.37063,-29.27073,-29.17083,-29.070929,-28.97103,-28.871128,-28.771229,-28.67133,-28.571428,-28.471529,-28.371628,-28.271729,-28.171827,-28.071928,-27.972029,-27.872128,-27.772228,-27.672327,-27.572428,-27.472527,-27.372627,-27.272728,-27.172827,-27.072927,-26.973026,-26.873127,-26.773228,-26.673326,-26.573427,-26.473526,-26.373627,-26.273726,-26.173826,-26.073927,-25.974026,-25.874126,-25.774225,-25.674326,-25.574425,-25.474525,-25.374626,-25.274725,-25.174826,-25.074924,-24.975025,-24.875124,-24.775225,-24.675325,-24.575424,-24.475525,-24.375624,-24.275724,-24.175825,-24.075924,-23.976025,-23.876123,-23.776224,-23.676323,-23.576424,-23.476524,-23.376623,-23.276724,-23.176823,-23.076923,-22.977022,-22.877123,-22.777224,-22.677322,-22.577423,-22.477522,-22.377623,-22.277721,-22.177822,-22.077923,-21.978022,-21.878122,-21.778221,-21.678322,-21.57842,-21.478521,-21.378622,-21.27872,-21.178822,-21.07892,-20.979021,-20.879122,-20.77922,-20.679321,-20.57942,-20.47952,-20.37962,-20.27972,-20.179821,-20.07992,-19.98002,-19.88012,-19.78022,-19.680319,-19.58042,-19.48052,-19.38062,-19.28072,-19.180819,-19.08092,-18.981018,-18.881119,-18.78122,-18.681318,-18.581419,-18.481518,-18.381618,-18.28172,-18.181818,-18.081919,-17.982018,-17.882118,-17.782217,-17.682318,-17.582418,-17.482517,-17.382618,-17.282717,-17.182817,-17.082916,-16.983017,-16.883118,-16.783216,-16.683317,-16.583416,-16.483517,-16.383615,-16.283716,-16.183817,-16.083916,-15.984016,-15.884116,-15.784216,-15.684316,-15.584415,-15.484515,-15.384615,-15.284716,-15.184815,-15.084915,-14.985015,-14.885115,-14.785214,-14.685315,-14.585415,-14.485515,-14.385614,-14.285714,-14.185814,-14.085914,-13.986014,-13.886114,-13.786214,-13.686314,-13.586413,-13.486513,-13.386614,-13.286714,-13.186813,-13.086913,-12.987013,-12.887113,-12.787212,-12.687313,-12.587413,-12.487513,-12.387612,-12.287712,-12.187812,-12.087913,-11.988012,-11.888112,-11.788212,-11.688312,-11.588411,-11.488511,-11.388612,-11.288712,-11.188811,-11.088911,-10.989011,-10.889111,-10.78921,-10.689311,-10.589411,-10.489511,-10.38961,-10.28971,-10.18981,-10.0899105,-9.99001,-9.89011,-9.79021,-9.69031,-9.590409,-9.490509,-9.39061,-9.2907095,-9.190809,-9.090909,-8.991009,-8.8911085,-8.791209,-8.691309,-8.591409,-8.4915085,-8.391608,-8.291708,-8.191808,-8.091908,-7.992008,-7.892108,-7.7922077,-7.6923075,-7.5924077,-7.4925075,-7.392607,-7.2927074,-7.192807,-7.092907,-6.993007,-6.893107,-6.7932067,-6.693307,-6.5934067,-6.4935064,-6.393606,-6.2937064,-6.193806,-6.093906,-5.994006,-5.894106,-5.7942057,-5.694306,-5.5944057,-5.4945054,-5.394605,-5.2947054,-5.194805,-5.094905,-4.995005,-4.895105,-4.7952046,-4.695305,-4.5954046,-4.4955044,-4.3956046,-4.2957044,-4.195804,-4.095904,-3.996004,-3.8961039,-3.7962039,-3.6963036,-3.5964036,-3.4965036,-3.3966033,-3.2967033,-3.196803,-3.096903,-2.997003,-2.8971028,-2.7972028,-2.6973026,-2.5974026,-2.4975026,-2.3976023,-2.2977023,-2.1978023,-2.097902,-1.998002,-1.8981019,-1.7982018,-1.6983017,-1.5984015,-1.4985015,-1.3986014,-1.2987013,-1.1988012,-1.0989012,-0.999001,-0.8991009,-0.7992008,-0.6993007,-0.5994006,-0.4995005,-0.3996004,-0.2997003,-0.1998002,-0.0999001,0.0,0.0999001,0.1998002,0.2997003,0.3996004,0.4995005,0.5994006,0.6993007,0.7992008,0.8991009,0.999001,1.0989012,1.1988012,1.2987013,1.3986014,1.4985015,1.5984015,1.6983017,1.7982018,1.8981019,1.998002,2.097902,2.1978023,2.2977023,2.3976023,2.4975026,2.5974026,2.6973026,2.7972028,2.8971028,2.997003,3.096903,3.196803,3.2967033,3.3966033,3.4965036,3.5964036,3.6963036,3.7962039,3.8961039,3.996004,4.095904,4.195804,4.2957044,4.3956046,4.4955044,4.5954046,4.695305,4.7952046,4.895105,4.995005,5.094905,5.194805,5.2947054,5.394605,5.4945054,5.5944057,5.694306,5.7942057,5.894106,5.994006,6.093906,6.193806,6.2937064,6.393606,6.4935064,6.5934067,6.693307,6.7932067,6.893107,6.993007,7.092907,7.192807,7.2927074,7.392607,7.4925075,7.5924077,7.6923075,7.7922077,7.892108,7.992008,8.091908,8.191808,8.291708,8.391608,8.4915085,8.591409,8.691309,8.791209,8.8911085,8.991009,9.090909,9.190809,9.2907095,9.39061,9.490509,9.590409,9.69031,9.79021,9.89011,9.99001,10.0899105,10.18981,10.28971,10.38961,10.489511,10.589411,10.689311,10.78921,10.889111,10.989011,11.088911,11.188811,11.288712,11.388612,11.488511,11.588411,11.688312,11.788212,11.888112,11.988012,12.087913,12.187812,12.287712,12.387612,12.487513,12.587413,12.687313,12.787212,12.887113,12.987013,13.086913,13.186813,13.286714,13.386614,13.486513,13.586413,13.686314,13.786214,13.886114,13.986014,14.085914,14.185814,14.285714,14.385614,14.485515,14.585415,14.685315,14.785214,14.885115,14.985015,15.084915,15.184815,15.284716,15.384615,15.484515,15.584415,15.684316,15.784216,15.884116,15.984016,16.083916,16.183817,16.283716,16.383615,16.483517,16.583416,16.683317,16.783216,16.883118,16.983017,17.082916,17.182817,17.282717,17.382618,17.482517,17.582418,17.682318,17.782217,17.882118,17.982018,18.081919,18.181818,18.28172,18.381618,18.481518,18.581419,18.681318,18.78122,18.881119,18.981018,19.08092,19.180819,19.28072,19.38062,19.48052,19.58042,19.680319,19.78022,19.88012,19.98002,20.07992,20.179821,20.27972,20.37962,20.47952,20.57942,20.679321,20.77922,20.879122,20.979021,21.07892,21.178822,21.27872,21.378622,21.478521,21.57842,21.678322,21.778221,21.878122,21.978022,22.077923,22.177822,22.277721,22.377623,22.477522,22.577423,22.677322,22.777224,22.877123,22.977022,23.076923,23.176823,23.276724,23.376623,23.476524,23.576424,23.676323,23.776224,23.876123,23.976025,24.075924,24.175825,24.275724,24.375624,24.475525,24.575424,24.675325,24.775225,24.875124,24.975025,25.074924,25.174826,25.274725,25.374626,25.474525,25.574425,25.674326,25.774225,25.874126,25.974026,26.073927,26.173826,26.273726,26.373627,26.473526,26.573427,26.673326,26.773228,26.873127,26.973026,27.072927,27.172827,27.272728,27.372627,27.472527,27.572428,27.672327,27.772228,27.872128,27.972029,28.071928,28.171827,28.271729,28.371628,28.471529,28.571428,28.67133,28.771229,28.871128,28.97103,29.070929,29.17083,29.27073,29.37063,29.47053,29.570429,29.67033,29.77023,29.87013,29.97003,30.06993,30.16983,30.26973,30.36963,30.46953,30.569431,30.66933,30.76923,30.869131,30.96903,31.068932,31.16883,31.268732,31.368631,31.46853,31.568432,31.668331,31.768232,31.868132,31.968033,32.067932,32.16783,32.26773,32.367634,32.467533,32.567432,32.66733,32.76723,32.867134,32.967033,33.066933,33.166832,33.266735,33.366634,33.466534,33.566433,33.666332,33.766235,33.866135,33.966034,34.065933,34.165833,34.265736,34.365635,34.465534,34.565434,34.665333,34.765236,34.865135,34.965034,35.064934,35.164837,35.264736,35.364635,35.464535,35.564434,35.664337,35.764236,35.864136,35.964035,36.063934,36.163837,36.263737,36.363636,36.463535,36.56344,36.663338,36.763237,36.863136,36.963036,37.06294,37.162838,37.262737,37.362637,37.462536,37.56244,37.66234,37.762238,37.862137,37.962036,38.06194,38.16184,38.261738,38.361637,38.46154,38.56144,38.66134,38.76124,38.861137,38.96104,39.06094,39.16084,39.26074,39.360638,39.46054,39.56044,39.66034,39.76024,39.86014,39.96004,40.05994,40.15984,40.25974,40.359642,40.45954,40.55944,40.65934,40.75924,40.859142,40.95904,41.05894,41.15884,41.25874,41.358643,41.45854,41.55844,41.65834,41.758244,41.858143,41.958042,42.05794,42.15784,42.257744,42.357643,42.457542,42.55744,42.65734,42.757244,42.857143,42.957043,43.056942,43.15684,43.256744,43.356644,43.456543,43.556442,43.656345,43.756245,43.856144,43.956043,44.055943,44.155846,44.255745,44.355644,44.455544,44.555443,44.655346,44.755245,44.855145,44.955044,45.054947,45.154846,45.254745,45.354645,45.454544,45.554447,45.654346,45.754246,45.854145,45.954044,46.053947,46.153847,46.253746,46.353645,46.453545,46.553448,46.653347,46.753246,46.853146,46.95305,47.052948,47.152847,47.252747,47.352646,47.45255,47.55245,47.652348,47.752247,47.852146,47.95205,48.05195,48.151848,48.251747,48.35165,48.45155,48.55145,48.65135,48.751247,48.85115,48.95105,49.05095,49.15085,49.250748,49.35065,49.45055,49.55045,49.65035,49.750248,49.85015,49.95005,50.04995,50.14985,50.249752,50.34965,50.44955,50.54945,50.64935,50.749252,50.84915,50.94905,51.04895,51.14885,51.248753,51.34865,51.44855,51.54845,51.64835,51.748253,51.848152,51.94805,52.04795,52.147854,52.247753,52.347652,52.44755,52.54745,52.647354,52.747253,52.847153,52.947052,53.04695,53.146854,53.246754,53.346653,53.446552,53.546455,53.646355,53.746254,53.846153,53.946053,54.045956,54.145855,54.245754,54.345654,54.445553,54.545456,54.645355,54.745255,54.845154,54.945053,55.044956,55.144855,55.244755,55.344654,55.444557,55.544456,55.644356,55.744255,55.844154,55.944057,56.043957,56.143856,56.243755,56.343655,56.443558,56.543457,56.643356,56.743256,56.84316,56.943058,57.042957,57.142857,57.242756,57.34266,57.44256,57.542458,57.642357,57.742256,57.84216,57.94206,58.041958,58.141857,58.241756,58.34166,58.44156,58.54146,58.641357,58.74126,58.84116,58.94106,59.04096,59.140858,59.24076,59.34066,59.44056,59.54046,59.640358,59.74026,59.84016,59.94006,60.03996,60.13986,60.23976,60.33966,60.43956,60.53946,60.639362,60.73926,60.83916,60.93906,61.03896,61.138863,61.23876,61.33866,61.43856,61.53846,61.638363,61.738262,61.83816,61.93806,62.037964,62.137863,62.237762,62.33766,62.43756,62.537464,62.637363,62.737263,62.837162,62.93706,63.036964,63.136864,63.236763,63.336662,63.43656,63.536465,63.636364,63.736263,63.836163,63.936066,64.035965,64.135864,64.23576,64.33566,64.43556,64.53546,64.63537,64.73527,64.83517,64.93507,65.034966,65.134865,65.234764,65.33466,65.43456,65.53446,65.63437,65.73427,65.83417,65.93407,66.033966,66.133865,66.233765,66.333664,66.43356,66.53347,66.63337,66.73327,66.83317,66.93307,67.03297,67.132866,67.232765,67.332664,67.43256,67.53247,67.63237,67.73227,67.83217,67.93207,68.03197,68.13187,68.231766,68.331665,68.43157,68.53147,68.63137,68.73127,68.83117,68.93107,69.03097,69.13087,69.23077,69.330666,69.43057,69.53047,69.63037,69.73027,69.83017,69.93007,70.02997,70.12987,70.22977,70.32967,70.42957,70.52947,70.62937,70.72927,70.82917,70.92907,71.02897,71.12887,71.228775,71.328674,71.42857,71.52847,71.62837,71.72827,71.82817,71.92807,72.02797,72.12787,72.227776,72.327675,72.427574,72.52747,72.62737,72.72727,72.82717,72.92707,73.02697,73.12688,73.226776,73.326675,73.426575,73.526474,73.62637,73.72627,73.82617,73.92607,74.02597,74.12588,74.22578,74.325676,74.425575,74.525475,74.625374,74.72527,74.82517,74.92507,75.02498,75.12488,75.22478,75.32468,75.424576,75.524475,75.624374,75.72427,75.82417,75.92407,76.02398,76.12388,76.22378,76.32368,76.42358,76.523476,76.623375,76.723274,76.82317,76.92308,77.02298,77.12288,77.22278,77.32268,77.42258,77.52248,77.622375,77.722275,77.822174,77.92208,78.02198,78.12188,78.22178,78.32168,78.42158,78.52148,78.621376,78.721275,78.82118,78.92108,79.02098,79.12088,79.22078,79.32068,79.42058,79.52048,79.62038,79.72028,79.82018,79.92008,80.01998,80.11988,80.21978,80.31968,80.41958,80.51948,80.61938,80.719284,80.81918,80.91908,81.01898,81.11888,81.21878,81.31868,81.41858,81.51848,81.618385,81.718285,81.818184,81.91808,82.01798,82.11788,82.21778,82.31768,82.41758,82.51748,82.617386,82.717285,82.817184,82.91708,83.01698,83.11688,83.21678,83.31668,83.41658,83.51649,83.61639,83.716286,83.816185,83.916084,84.01598,84.11588,84.21578,84.31568,84.41558,84.51549,84.61539,84.71529,84.815186,84.915085,85.014984,85.11488,85.21478,85.31468,85.41459,85.51449,85.61439,85.71429,85.814186,85.914085,86.013985,86.113884,86.21378,86.31368,86.41359,86.51349,86.61339,86.71329,86.81319,86.913086,87.012985,87.112885,87.21278,87.31269,87.41259,87.51249,87.61239,87.71229,87.81219,87.91209,88.011986,88.111885,88.21179,88.31169,88.41159,88.51149,88.61139,88.71129,88.81119,88.91109,89.01099,89.110886,89.21079,89.31069,89.41059,89.51049,89.61039,89.71029,89.81019,89.91009,90.00999,90.10989,90.20979,90.30969,90.40959,90.50949,90.60939,90.70929,90.80919,90.90909,91.00899,91.108894,91.20879,91.30869,91.40859,91.50849,91.60839,91.70829,91.80819,91.90809,92.007996,92.107895,92.207794,92.30769,92.40759,92.50749,92.60739,92.70729,92.80719,92.90709,93.006996,93.106895,93.206795,93.306694,93.40659,93.50649,93.60639,93.70629,93.80619,93.9061,94.006,94.105896,94.205795,94.305695,94.405594,94.50549,94.60539,94.70529,94.80519,94.9051,95.005,95.1049,95.204796,95.304695,95.404594,95.50449,95.60439,95.70429,95.8042,95.9041,96.004,96.1039,96.2038,96.303696,96.403595,96.503494,96.60339,96.7033,96.8032,96.9031,97.003,97.1029,97.2028,97.3027,97.402596,97.502495,97.602394,97.7023,97.8022,97.9021,98.002,98.1019,98.2018,98.3017,98.401596,98.501495,98.6014,98.7013,98.8012,98.9011,99.001,99.1009,99.2008,99.3007,99.4006,99.500496,99.6004,99.7003,99.8002,99.9001,100.0],"cos":[1.0,0.95115423,0.80938876,0.5885529,0.31022033,0.0015579486,-0.30723387,-0.5860115,-0.80754083,-0.95018023,-0.99999505,-0.9521189,-0.81122875,-0.5910884,-0.31320378,-0.0046977988,0.30424434,0.5834644,0.8056849,0.9491968,0.9999803,0.9530741,0.8130607,0.59361815,0.31616136,0.007837603,-0.30125183,-0.5809115,-0.8038211,-0.9482041,-0.99995565,-0.95401996,-0.81488466,-0.596142,-0.31913862,-0.01097733,0.29825634,0.5783529,0.80194926,0.947202,0.99992114,0.9549564,0.8167006,0.5986408,0.3221127,0.0141169485,-0.29525793,-0.5757886,-0.80006963,-0.9461906,-0.9998768,-0.95588344,-0.8184947,-0.60115296,-0.32508364,-0.017256428,0.2922566,0.5732186,0.798182,0.9451698,0.99982256,0.95680106,0.82029456,0.60365915,0.32805136,0.020395737,-0.28925237,-0.57064295,-0.7962866,-0.9441398,-0.9997585,-0.95770234,-0.8220863,-0.6061594,-0.33101583,-0.023534844,0.28624532,0.5680617,0.7943833,0.9431004,0.9996845,0.9586012,0.82386994,0.60865366,0.33397707,0.026673721,-0.2832354,-0.56547487,-0.7924722,-0.9420517,-0.9996014,-0.95949054,-0.8256455,-0.6111419,-0.33693498,-0.029812334,0.28022274,0.5628824,0.7905533,0.9409937,0.99950784,0.9603704,0.8274129,0.6136242,0.3398896,0.032950655,-0.2772073,-0.56028444,-0.78862655,-0.9399347,-0.99940443,-0.9612408,-0.8291722,-0.61610043,-0.34284085,-0.036088645,0.2741891,0.5576809,0.786692,0.9388582,0.9992912,0.9621018,0.83092326,0.61857057,0.34578872,0.039226286,-0.27116823,-0.5550719,-0.78476465,-0.9377725,-0.99916804,-0.96295327,-0.83266616,-0.62103456,-0.3487332,-0.04236354,0.26814467,0.5524774,0.7828147,0.9366776,0.99903506,0.96379524,0.83440083,0.6234925,0.35167423,0.04550037,-0.26511848,-0.5498575,-0.780857,-0.9355734,-0.99889225,-0.96462774,-0.8361273,-0.62594426,-0.35461178,-0.048636757,0.2621128,0.5472322,0.7788917,0.93446004,0.99873954,0.9654507,0.83784544,0.62838984,0.35754585,0.051772665,-0.25908142,-0.5446015,-0.77691865,-0.9333374,-0.998577,-0.9662641,-0.8395554,-0.6308292,-0.36047637,-0.05488413,0.2560475,0.5419654,0.774938,0.9322056,0.9984047,0.967068,0.8412571,0.6332624,0.36340338,0.058018986,-0.25301105,-0.53932405,-0.77294964,-0.9310646,-0.9982225,-0.9678624,-0.84295046,-0.6356893,-0.3663045,-0.06115327,0.24997209,0.5366773,0.77095366,0.9299144,0.9980304,0.96864724,0.8446355,0.63811,0.3692243,0.064286955,-0.24693067,-0.53402525,-0.7689501,-0.92875504,-0.9978285,-0.9694226,-0.8463122,-0.64050597,-0.37214047,-0.067420006,0.24388683,0.531368,0.766939,0.92758656,0.99761677,0.9701883,0.8479679,0.6429141,0.375053,0.070552394,-0.24084058,-0.5287055,-0.7649203,-0.9264089,-0.9973952,-0.97094446,-0.84962803,-0.6453159,-0.3779618,-0.07368408,0.23779196,0.52603775,0.7628941,0.9252221,0.99716383,0.9716854,0.85127974,0.6477113,0.3808669,0.07681505,-0.23474099,-0.5233648,-0.7608603,-0.92402625,-0.9969226,-0.9724225,-0.8529231,-0.6501003,-0.38376823,-0.07994525,0.2316877,0.52068675,0.75881904,0.9228212,0.9966735,0.97315,0.854558,0.6524829,0.38666576,0.08307467,-0.22863212,-0.5180035,-0.7567703,-0.9216071,-0.9964127,-0.9738679,-0.8561845,-0.65485907,-0.3895595,-0.08620327,0.2255743,0.5153152,0.75471413,0.9203933,0.9961421,0.97457623,0.8578025,0.6572288,0.3924494,0.089331016,-0.22251426,-0.51262176,-0.7526505,-0.9191611,-0.9958616,-0.9752749,-0.85941213,-0.65959203,-0.39533544,-0.09245788,0.21945202,0.50992334,0.7505953,0.9179198,0.9955713,0.975964,0.86101323,0.6619488,0.39821756,0.09558384,-0.21638761,-0.5072405,-0.74851686,-0.9166695,-0.99527127,-0.97664344,-0.86260587,-0.664299,-0.40109578,-0.09870885,0.21332107,0.50453204,0.74643105,0.9154101,0.9949614,0.9773133,0.86419004,0.66664267,0.40397,0.1018329,-0.21027587,-0.5018186,-0.7443379,-0.9141418,-0.99464166,-0.9779735,-0.86576563,-0.66897976,-0.4068403,-0.104955934,0.20720518,0.49910024,0.74223745,0.9128644,0.99431217,0.97862405,0.8673327,0.6713103,0.40970653,0.10805411,-0.20413242,-0.49637696,-0.74012965,-0.911578,-0.99397284,-0.979265,-0.86889124,-0.6736342,-0.41256875,-0.11117505,0.20105767,0.49364877,0.7380146,0.9102826,0.99362373,0.97989625,0.8704353,0.6759426,0.415416,0.11430681,-0.19798094,-0.49091572,-0.7358922,-0.9089782,-0.9932648,-0.9805155,-0.8719767,-0.6782532,-0.41827008,-0.11742552,0.19490226,0.48817784,0.73376256,0.90766495,0.99289614,0.98112744,0.8735095,0.6805571,0.42112002,0.12053119,-0.19182165,-0.48543513,-0.73162574,-0.9063427,-0.9925191,-0.98172975,-0.87503374,-0.6828543,-0.4239658,-0.12364756,0.18873915,0.48268765,0.72948164,0.9050166,0.9921309,0.98232234,0.8765493,0.6851448,0.4267966,0.12676272,-0.18565479,-0.4799354,-0.7273304,-0.9036765,-0.99173284,-0.98290527,-0.8780562,-0.6874285,-0.429634,-0.12987663,0.1825686,0.47717842,0.7251802,0.9023275,0.991325,0.98347855,0.8795545,0.6896968,0.4324672,0.13298926,-0.17948061,-0.47441673,-0.72301465,-0.9009696,-0.9909075,-0.98404205,-0.8810441,-0.69196695,-0.43529612,-0.13610058,0.17639084,0.47166094,0.72084194,0.89960283,0.9904801,0.9845959,0.88251936,0.69423026,0.43812075,0.13921055,-0.17329934,-0.46888995,-0.7186622,-0.8982272,-0.99004304,-0.985138,-0.88399166,-0.6964868,-0.44094107,-0.14231916,0.17021795,0.46611434,0.7164753,0.8968427,0.9895962,0.9856725,0.8854552,0.6987364,0.44375703,0.14542635,-0.16712306,-0.4633341,-0.7142814,-0.89544934,-0.9891413,-0.9861972,-0.88690996,-0.7009792,-0.44656864,-0.14852026,0.16402654,0.46054935,0.71208036,0.8940472,0.988675,0.9867122,0.88835603,0.703215,0.4493651,0.15162458,-0.1609284,-0.45776004,-0.70987236,-0.8926416,-0.9881989,-0.9872175,-0.88979334,-0.7054439,-0.45216787,-0.15472738,0.15782867,0.4549662,0.7076574,0.8912219,0.9877131,0.9877131,0.8912219,0.7076574,0.4549662,0.15782867,-0.15472738,-0.45216787,-0.7054439,-0.88979334,-0.9872175,-0.9881989,-0.8926416,-0.70987236,-0.45776004,-0.1609284,0.15162458,0.4493651,0.703215,0.88835603,0.9867122,0.988675,0.8940472,0.71208036,0.46054935,0.16402654,-0.14852026,-0.44656864,-0.7009792,-0.88690996,-0.9861972,-0.9891413,-0.89544934,-0.7142814,-0.4633341,-0.16712306,0.14542635,0.44375703,0.6987364,0.8854552,0.9856725,0.9895962,0.8968427,0.7164753,0.46611434,0.17021795,-0.14231916,-0.44094107,-0.6964868,-0.88399166,-0.985138,-0.99004304,-0.8982272,-0.7186622,-0.46888995,-0.17329934,0.13921055,0.43812075,0.69423026,0.88251936,0.9845959,0.9904801,0.89960283,0.72084194,0.47166094,0.17639084,-0.13610058,-0.43529612,-0.69196695,-0.8810441,-0.98404205,-0.9909075,-0.9009696,-0.72301465,-0.47441673,-0.17948061,0.13298926,0.4324672,0.6896968,0.8795545,0.98347855,0.991325,0.9023275,0.7251802,0.47717842,0.1825686,-0.12987663,-0.429634,-0.6874285,-0.8780562,-0.98290527,-0.99173284,-0.9036765,-0.7273304,-0.4799354,-0.18565479,0.12676272,0.4267966,0.6851448,0.8765493,0.98232234,0.9921309,0.9050166,0.72948164,0.48268765,0.18873915,-0.12364756,-0.4239658,-0.6828543,-0.87503374,-0.98172975,-0.9925191,-0.9063427,-0.73162574,-0.48543513,-0.19182165,0.12053119,0.42112002,0.6805571,0.8735095,0.98112744,0.99289614,0.90766495,0.73376256,0.48817784,0.19490226,-0.11742552,-0.41827008,-0.6782532,-0.8719767,-0.9805155,-0.9932648,-0.9089782,-0.7358922,-0.49091572,-0.19798094,0.11430681,0.415416,0.6759426,0.8704353,0.97989625,0.99362373,0.9102826,0.7380146,0.49364877,0.20104593,-0.11118697,-0.41255784,-0.6736253,-0.8688853,-0.979265,-0.99397284,-0.911578,-0.74012965,-0.49636656,-0.2041207,0.10806602,0.4096956,0.6713014,0.8673327,0.97862405,0.99431217,0.9128644,0.74223745,0.49908987,0.20719345,-0.10494401,-0.40682933,-0.6689709,-0.86576563,-0.9779735,-0.99464166,-0.9141418,-0.7443299,-0.5018082,-0.21026415,0.101820976,0.40395907,0.66664267,0.86419004,0.9773133,0.9949614,0.9154077,0.7464271,0.50452167,0.21333279,-0.09870289,-0.40109026,-0.66429454,-0.86260587,-0.97664344,-0.99527067,-0.9166671,-0.74850893,-0.50723016,-0.21639931,0.09557787,0.39821208,0.6619488,0.86101323,0.9759653,0.9955708,0.91791743,0.75058734,0.50993365,0.21945786,-0.092451915,-0.39532992,-0.65959203,-0.85941213,-0.97527623,-0.99586105,-0.9191563,-0.75265837,-0.5126321,-0.2225201,0.08932505,0.3924494,0.6572288,0.8578056,0.97457755,0.99614155,0.9203886,0.754722,0.5153203,0.22558014,-0.08620327,-0.3895595,-0.65485907,-0.8561876,-0.97386926,-0.9964117,-0.9216117,-0.7567782,-0.51800865,-0.22863796,0.08307467,0.38666576,0.65248746,0.8545611,0.9731514,0.9966725,0.9228258,0.758823,0.5206918,0.2316877,-0.07994525,-0.38376823,-0.6501048,-0.8529262,-0.9724253,-0.99692357,-0.9240285,-0.7608642,-0.5233699,-0.23474099,0.07681505,0.38087243,0.6477158,0.8512829,0.9716882,0.9971647,0.9252244,0.76289797,0.52603775,0.23779196,-0.07368408,-0.37796736,-0.6453204,-0.84963435,-0.9709416,-0.99739563,-0.92641115,-0.76492417,-0.5287055,-0.24084058,0.07055837,0.37505853,0.6429233,0.8479743,0.9701854,0.9976172,0.9275888,0.766939,0.531368,0.24388102,-0.06742598,-0.37214604,-0.6405152,-0.84630585,-0.9694211,-0.9978289,-0.9287573,-0.7689501,-0.53402525,-0.24692488,0.06429294,0.36923543,0.6381008,0.8446291,0.96864575,0.9980308,0.9299144,0.77095366,0.53667223,0.2499663,-0.061159253,-0.36631563,-0.6356801,-0.84294724,-0.96786094,-0.9982225,-0.9310646,-0.77294964,-0.539319,-0.25300524,0.058030948,0.3633922,0.63325316,0.8412538,0.9670665,0.9984047,0.9322056,0.7749342,0.5419604,0.2560417,-0.054896094,-0.3604652,-0.63082457,-0.83955216,-0.9662641,-0.998577,-0.9333374,-0.7769149,-0.5445965,-0.25906986,0.051760696,0.35754025,0.6283852,0.83784217,0.9654507,0.99873954,0.934459,0.7788879,0.5472247,0.26210123,-0.04862778,-0.35460618,-0.62593955,-0.8361256,-0.96462774,-0.99889207,-0.9355713,-0.7808514,-0.54985,-0.26513004,0.045491394,0.35166863,0.62349015,0.83440083,0.963796,0.99903494,0.9366755,0.7828091,0.5524674,0.26815334,-0.04235755,-0.34872758,-0.62103224,-0.83266616,-0.9629541,-0.9991678,-0.9377694,-0.7847572,-0.5550819,-0.27117687,0.0392203,0.34578592,0.61857057,0.8309249,0.9621026,0.99929094,0.9388551,0.7866994,0.55768836,0.27419487,-0.036085654,-0.34283805,-0.61610043,-0.82917386,-0.9612425,-0.99940413,-0.93993056,-0.78863204,-0.5602919,-0.27721304,0.03294766,0.3398896,0.61362654,0.8274163,0.9603721,0.99950755,0.9409978,0.79055876,0.5628874,0.2802256,-0.029812334,-0.33693498,-0.6111443,-0.8256489,-0.95949304,-0.99960107,-0.9420547,-0.79247767,-0.5654798,-0.2832383,0.026673721,0.33397987,0.60865843,0.82387507,0.95860374,0.9996848,0.9431034,0.7943869,0.56806415,0.28624675,-0.023536341,-0.3310201,-0.60616416,-0.8220914,-0.9577058,-0.9997587,-0.9441422,-0.7962893,-0.57064545,-0.28925237,0.020398732,0.32805702,0.6036651,0.8203005,0.956798,0.99982274,0.9451718,0.79818386,0.57321984,0.29225516,-0.01726092,-0.3250907,-0.6011601,-0.81850153,-0.9558808,-0.99987686,-0.946192,-0.8000705,-0.5757886,-0.29525506,0.01412294,0.3221198,0.5986492,0.8166945,0.9549542,0.9999212,0.947203,0.80194974,0.5783511,0.29825205,-0.010984071,-0.31914786,-0.5961324,-0.8148794,-0.95401794,-0.99995565,-0.9482046,-0.8038206,-0.5809085,-0.3012461,0.007845841,0.31617203,0.5936097,0.81305593,0.95307255,0.99998033,0.94919693,0.80568355,0.58346045,0.30423722,-0.0047075357,-0.31319275,-0.59108114,-0.811225,-0.9521176,-0.99999505,-0.9501799,-0.8075386,-0.5860065,-0.3072255,0.0015691838,0.31021073,0.58854675,0.8093858,0.95115346,1.0,0.95115346,0.8093858,0.58854675,0.31021073,0.0015691838,-0.3072255,-0.5860065,-0.8075386,-0.9501799,-0.99999505,-0.9521176,-0.811225,-0.59108114,-0.31319275,-0.0047075357,0.30423722,0.58346045,0.80568355,0.94919693,0.99998033,0.95307255,0.81305593,0.5936097,0.31617203,0.007845841,-0.3012461,-0.5809085,-0.8038206,-0.9482046,-0.99995565,-0.95401794,-0.8148794,-0.5961324,-0.31914786,-0.010984071,0.29825205,0.5783511,0.80194974,0.947203,0.9999212,0.9549542,0.8166945,0.5986492,0.3221198,0.01412294,-0.29525506,-0.5757886,-0.8000705,-0.946192,-0.99987686,-0.9558808,-0.81850153,-0.6011601,-0.3250907,-0.01726092,0.29225516,0.57321984,0.79818386,0.9451718,0.99982274,0.956798,0.8203005,0.6036651,0.32805702,0.020398732,-0.28925237,-0.57064545,-0.7962893,-0.9441422,-0.9997587,-0.9577058,-0.8220914,-0.60616416,-0.3310201,-0.023536341,0.28624675,0.56806415,0.7943869,0.9431034,0.9996848,0.95860374,0.82387507,0.60865843,0.33397987,0.026673721,-0.2832383,-0.5654798,-0.79247767,-0.9420547,-0.99960107,-0.95949304,-0.8256489,-0.6111443,-0.33693498,-0.029812334,0.2802256,0.5628874,0.79055876,0.9409978,0.99950755,0.9603721,0.8274163,0.61362654,0.3398896,0.03294766,-0.27721304,-0.5602919,-0.78863204,-0.93993056,-0.99940413,-0.9612425,-0.82917386,-0.61610043,-0.34283805,-0.036085654,0.27419487,0.55768836,0.7866994,0.9388551,0.99929094,0.9621026,0.8309249,0.61857057,0.34578592,0.0392203,-0.27117687,-0.5550819,-0.7847572,-0.9377694,-0.9991678,-0.9629541,-0.83266616,-0.62103224,-0.34872758,-0.04235755,0.26815334,0.5524674,0.7828091,0.9366755,0.99903494,0.963796,0.83440083,0.62349015,0.35166863,0.045491394,-0.26513004,-0.54985,-0.7808514,-0.9355713,-0.99889207,-0.96462774,-0.8361256,-0.62593955,-0.35460618,-0.04862778,0.26210123,0.5472247,0.7788879,0.934459,0.99873954,0.9654507,0.83784217,0.6283852,0.35754025,0.051760696,-0.25906986,-0.5445965,-0.7769149,-0.9333374,-0.998577,-0.9662641,-0.83955216,-0.63082457,-0.3604652,-0.054896094,0.2560417,0.5419604,0.7749342,0.9322056,0.9984047,0.9670665,0.8412538,0.63325316,0.3633922,0.058030948,-0.25300524,-0.539319,-0.77294964,-0.9310646,-0.9982225,-0.96786094,-0.84294724,-0.6356801,-0.36631563,-0.061159253,0.2499663,0.53667223,0.77095366,0.9299144,0.9980308,0.96864575,0.8446291,0.6381008,0.36923543,0.06429294,-0.24692488,-0.53402525,-0.7689501,-0.9287573,-0.9978289,-0.9694211,-0.84630585,-0.6405152,-0.37214604,-0.06742598,0.24388102,0.531368,0.766939,0.9275888,0.9976172,0.9701854,0.8479743,0.6429233,0.37505853,0.07055837,-0.24084058,-0.5287055,-0.76492417,-0.92641115,-0.99739563,-0.9709416,-0.84963435,-0.6453204,-0.37796736,-0.07368408,0.23779196,0.52603775,0.76289797,0.9252244,0.9971647,0.9716882,0.8512829,0.6477158,0.38087243,0.07681505,-0.23474099,-0.5233699,-0.7608642,-0.9240285,-0.99692357,-0.9724253,-0.8529262,-0.6501048,-0.38376823,-0.07994525,0.2316877,0.5206918,0.758823,0.9228258,0.9966725,0.9731514,0.8545611,0.65248746,0.38666576,0.08307467,-0.22863796,-0.51800865,-0.7567782,-0.9216117,-0.9964117,-0.97386926,-0.8561876,-0.65485907,-0.3895595,-0.08620327,0.22558014,0.5153203,0.754722,0.9203886,0.99614155,0.97457755,0.8578056,0.6572288,0.3924494,0.08932505,-0.2225201,-0.5126321,-0.75265837,-0.9191563,-0.99586105,-0.97527623,-0.85941213,-0.65959203,-0.39532992,-0.092451915,0.21945786,0.50993365,0.75058734,0.91791743,0.9955708,0.9759653,0.86101323,0.6619488,0.39821208,0.09557787,-0.21639931,-0.50723016,-0.74850893,-0.9166671,-0.99527067,-0.97664344,-0.86260587,-0.66429454,-0.40109026,-0.09870289,0.21333279,0.50452167,0.7464271,0.9154077,0.9949614,0.9773133,0.86419004,0.66664267,0.40395907,0.101820976,-0.21026415,-0.5018082,-0.7443299,-0.9141418,-0.99464166,-0.9779735,-0.86576563,-0.6689709,-0.40682933,-0.10494401,0.20719345,0.49908987,0.74223745,0.9128644,0.99431217,0.97862405,0.8673327,0.6713014,0.4096956,0.10806602,-0.2041207,-0.49636656,-0.74012965,-0.911578,-0.99397284,-0.979265,-0.8688853,-0.6736253,-0.41255784,-0.11118697,0.20104593,0.49364877,0.7380146,0.9102826,0.99362373,0.97989625,0.8704353,0.6759426,0.415416,0.11430681,-0.19798094,-0.49091572,-0.7358922,-0.9089782,-0.9932648,-0.9805155,-0.8719767,-0.6782532,-0.41827008,-0.11742552,0.19490226,0.48817784,0.73376256,0.90766495,0.99289614,0.98112744,0.8735095,0.6805571,0.42112002,0.12053119,-0.19182165,-0.48543513,-0.73162574,-0.9063427,-0.9925191,-0.98172975,-0.87503374,-0.6828543,-0.4239658,-0.12364756,0.18873915,0.48268765,0.72948164,0.9050166,0.9921309,0.98232234,0.8765493,0.6851448,0.4267966,0.12676272,-0.18565479,-0.4799354,-0.7273304,-0.9036765,-0.99173284,-0.98290527,-0.8780562,-0.6874285,-0.429634,-0.12987663,0.1825686,0.47717842,0.7251802,0.9023275,0.991325,0.98347855,0.8795545,0.6896968,0.4324672,0.13298926,-0.17948061,-0.47441673,-0.72301465,-0.9009696,-0.9909075,-0.98404205,-0.8810441,-0.69196695,-0.43529612,-0.13610058,0.17639084,0.47166094,0.72084194,0.89960283,0.9904801,0.9845959,0.88251936,0.69423026,0.43812075,0.13921055,-0.17329934,-0.46888995,-0.7186622,-0.8982272,-0.99004304,-0.985138,-0.88399166,-0.6964868,-0.44094107,-0.14231916,0.17021795,0.46611434,0.7164753,0.8968427,0.9895962,0.9856725,0.8854552,0.6987364,0.44375703,0.14542635,-0.16712306,-0.4633341,-0.7142814,-0.89544934,-0.9891413,-0.9861972,-0.88690996,-0.7009792,-0.44656864,-0.14852026,0.16402654,0.46054935,0.71208036,0.8940472,0.988675,0.9867122,0.88835603,0.703215,0.4493651,0.15162458,-0.1609284,-0.45776004,-0.70987236,-0.8926416,-0.9881989,-0.9872175,-0.88979334,-0.7054439,-0.45216787,-0.15472738,0.15782867,0.4549662,0.7076574,0.8912219,0.9877131,0.9877131,0.8912219,0.7076574,0.4549662,0.15782867,-0.15472738,-0.45216787,-0.7054439,-0.88979334,-0.9872175,-0.9881989,-0.8926416,-0.70987236,-0.45776004,-0.1609284,0.15162458,0.4493651,0.703215,0.88835603,0.9867122,0.988675,0.8940472,0.71208036,0.46054935,0.16402654,-0.14852026,-0.44656864,-0.7009792,-0.88690996,-0.9861972,-0.9891413,-0.89544934,-0.7142814,-0.4633341,-0.16712306,0.14542635,0.44375703,0.6987364,0.8854552,0.9856725,0.9895962,0.8968427,0.7164753,0.46611434,0.17021795,-0.14231916,-0.44094107,-0.6964868,-0.88399166,-0.985138,-0.99004304,-0.8982272,-0.7186622,-0.46888995,-0.17329934,0.13921055,0.43812075,0.69423026,0.88251936,0.9845959,0.9904801,0.89960283,0.72084194,0.47166094,0.17639084,-0.13610058,-0.43529612,-0.69196695,-0.8810441,-0.98404205,-0.9909075,-0.9009696,-0.72301465,-0.47441673,-0.17948061,0.13298926,0.4324672,0.6896968,0.8795545,0.98347855,0.991325,0.9023275,0.7251802,0.47717842,0.1825686,-0.12987663,-0.429634,-0.6874285,-0.8780562,-0.98290527,-0.99173284,-0.9036765,-0.7273304,-0.4799354,-0.18565479,0.12676272,0.4267966,0.6851448,0.8765493,0.98232234,0.9921309,0.9050166,0.72948164,0.48268765,0.18873915,-0.12364756,-0.4239658,-0.6828543,-0.87503374,-0.98172975,-0.9925191,-0.9063427,-0.73162574,-0.48543513,-0.19182165,0.12053119,0.42112002,0.6805571,0.8735095,0.98112744,0.99289614,0.90766495,0.73376256,0.48817784,0.19490226,-0.11742552,-0.41827008,-0.6782532,-0.8719767,-0.9805155,-0.9932648,-0.9089782,-0.7358922,-0.49091572,-0.19798094,0.11430681,0.415416,0.6759426,0.8704353,0.97989625,0.99362373,0.9102826,0.7380146,0.49364877,0.20105767,-0.11117505,-0.41256875,-0.6736342,-0.86889124,-0.979265,-0.99397284,-0.911578,-0.74012965,-0.49637696,-0.20413242,0.10805411,0.40970653,0.6713103,0.8673327,0.97862405,0.99431217,0.9128644,0.74223745,0.49910024,0.20720518,-0.104955934,-0.4068403,-0.66897976,-0.86576563,-0.9779735,-0.99464166,-0.9141418,-0.7443379,-0.5018186,-0.21027587,0.1018329,0.40397,0.66664267,0.86419004,0.9773133,0.9949614,0.9154101,0.74643105,0.50453204,0.21332107,-0.09870885,-0.40109578,-0.664299,-0.86260587,-0.97664344,-0.99527127,-0.9166695,-0.74851686,-0.5072405,-0.21638761,0.09558384,0.39821756,0.6619488,0.86101323,0.975964,0.9955713,0.9179198,0.7505953,0.50992334,0.21945202,-0.09245788,-0.39533544,-0.65959203,-0.85941213,-0.9752749,-0.9958616,-0.9191611,-0.7526505,-0.51262176,-0.22251426,0.089331016,0.3924494,0.6572288,0.8578025,0.97457623,0.9961421,0.9203933,0.75471413,0.5153152,0.2255743,-0.08620327,-0.3895595,-0.65485907,-0.8561845,-0.9738679,-0.9964127,-0.9216071,-0.7567703,-0.5180035,-0.22863212,0.08307467,0.38666576,0.6524829,0.854558,0.97315,0.9966735,0.9228212,0.75881904,0.52068675,0.2316877,-0.07994525,-0.38376823,-0.6501003,-0.8529231,-0.9724225,-0.9969226,-0.92402625,-0.7608603,-0.5233648,-0.23474099,0.07681505,0.3808669,0.6477113,0.85127974,0.9716854,0.99716383,0.9252221,0.7628941,0.52603775,0.23779196,-0.07368408,-0.3779618,-0.6453159,-0.84962803,-0.97094446,-0.9973952,-0.9264089,-0.7649203,-0.5287055,-0.24084058,0.070552394,0.375053,0.6429141,0.8479679,0.9701883,0.99761677,0.92758656,0.766939,0.531368,0.24388683,-0.067420006,-0.37214047,-0.64050597,-0.8463122,-0.9694226,-0.9978285,-0.92875504,-0.7689501,-0.53402525,-0.24693067,0.064286955,0.3692243,0.63811,0.8446355,0.96864724,0.9980304,0.9299144,0.77095366,0.5366773,0.24997209,-0.06115327,-0.3663045,-0.6356893,-0.84295046,-0.9678624,-0.9982225,-0.9310646,-0.77294964,-0.53932405,-0.25301105,0.058018986,0.36340338,0.6332624,0.8412571,0.967068,0.9984047,0.9322056,0.774938,0.5419654,0.2560475,-0.05488413,-0.36047637,-0.6308292,-0.8395554,-0.9662641,-0.998577,-0.9333374,-0.77691865,-0.5446015,-0.25908142,0.051772665,0.35754585,0.62838984,0.83784544,0.9654507,0.99873954,0.93446004,0.7788917,0.5472322,0.2621128,-0.048636757,-0.35461178,-0.62594426,-0.8361273,-0.96462774,-0.99889225,-0.9355734,-0.780857,-0.5498575,-0.26511848,0.04550037,0.35167423,0.6234925,0.83440083,0.96379524,0.99903506,0.9366776,0.7828147,0.5524774,0.26814467,-0.04236354,-0.3487332,-0.62103456,-0.83266616,-0.96295327,-0.99916804,-0.9377725,-0.78476465,-0.5550719,-0.27116823,0.039226286,0.34578872,0.61857057,0.83092326,0.9621018,0.9992912,0.9388582,0.786692,0.5576809,0.2741891,-0.036088645,-0.34284085,-0.61610043,-0.8291722,-0.9612408,-0.99940443,-0.9399347,-0.78862655,-0.56028444,-0.2772073,0.032950655,0.3398896,0.6136242,0.8274129,0.9603704,0.99950784,0.9409937,0.7905533,0.5628824,0.28022274,-0.029812334,-0.33693498,-0.6111419,-0.8256455,-0.95949054,-0.9996014,-0.9420517,-0.7924722,-0.56547487,-0.2832354,0.026673721,0.33397707,0.60865366,0.82386994,0.9586012,0.9996845,0.9431004,0.7943833,0.5680617,0.28624532,-0.023534844,-0.33101583,-0.6061594,-0.8220863,-0.95770234,-0.9997585,-0.9441398,-0.7962866,-0.57064295,-0.28925237,0.020395737,0.32805136,0.60365915,0.82029456,0.95680106,0.99982256,0.9451698,0.798182,0.5732186,0.2922566,-0.017256428,-0.32508364,-0.60115296,-0.8184947,-0.95588344,-0.9998768,-0.9461906,-0.80006963,-0.5757886,-0.29525793,0.0141169485,0.3221127,0.5986408,0.8167006,0.9549564,0.99992114,0.947202,0.80194926,0.5783529,0.29825634,-0.01097733,-0.31913862,-0.596142,-0.81488466,-0.95401996,-0.99995565,-0.9482041,-0.8038211,-0.5809115,-0.30125183,0.007837603,0.31616136,0.59361815,0.8130607,0.9530741,0.9999803,0.9491968,0.8056849,0.5834644,0.30424434,-0.0046977988,-0.31320378,-0.5910884,-0.81122875,-0.9521189,-0.99999505,-0.95018023,-0.80754083,-0.5860115,-0.30723387,0.0015579486,0.31022033,0.5885529,0.80938876,0.95115423,1.0],"sin":[-0.0,0.3087161,0.58727324,0.80845875,0.9506647,0.9999988,0.95163405,0.81030273,0.5898117,0.31170106,0.0031398619,-0.30572808,-0.58472896,-0.80660677,-0.94968593,-0.999989,-0.95259404,-0.81213874,-0.59234434,-0.31468296,-0.0062796925,0.30273703,0.58217895,0.80474687,0.94870543,0.9999693,0.9535446,0.8139667,0.59487116,0.31766173,0.009419462,-0.29974303,-0.57962316,-0.80287904,-0.9477081,-0.99993974,-0.95448583,-0.81578666,-0.59739214,-0.3206374,-0.012559137,0.29674605,0.57706165,0.8010176,0.94670135,0.99990034,0.9554176,0.81759864,0.59990716,0.32360992,0.01569869,-0.29374617,-0.5745141,-0.799134,-0.94568527,-0.9998511,-0.95633996,-0.81940246,-0.60241634,-0.3265792,-0.018838087,0.29074338,0.5719413,0.7972425,0.9446599,0.999792,0.95725286,0.8211983,0.60491955,0.32954532,0.0219773,-0.28776067,-0.5693629,-0.7953432,-0.9436252,-0.999723,-0.95815635,-0.82298595,-0.6074168,-0.33250815,-0.025116295,0.2847522,0.56677884,0.793436,0.9425812,0.9996442,0.9590504,0.82476556,0.60990804,0.33546773,0.028231082,-0.28174093,-0.5641892,-0.791521,-0.9415279,-0.9995555,-0.959935,-0.826537,-0.6123933,-0.338424,-0.031369552,0.27872688,0.561594,0.7895982,0.94046533,0.999457,0.9608101,0.8283003,0.6148725,0.34135437,0.034507714,-0.27571005,-0.5589933,-0.78766763,-0.9393935,-0.9993486,-0.9616758,-0.8300554,-0.61734563,-0.34430397,-0.037645537,0.27269053,0.55638707,0.7857293,0.9383124,0.9992303,0.962532,0.83180237,0.6197939,0.34725013,0.040782988,-0.2696683,-0.5537753,-0.7837832,-0.93722206,-0.99910223,-0.96337867,-0.83352786,-0.6222549,-0.3501929,-0.043920036,0.26664346,0.55115813,0.78182936,0.9361225,0.9989643,0.9642158,0.8352585,0.6247098,0.35313222,0.047056653,-0.26361597,-0.5485355,-0.7798678,-0.93501365,-0.99881655,-0.9650372,-0.8369808,-0.62715846,-0.35606804,-0.050192803,0.26058587,0.5459075,0.7778986,0.9338956,0.9986589,0.9658555,0.83869493,0.629601,0.35900038,0.05332846,-0.2575532,-0.5432741,-0.7759217,-0.93276834,-0.9984927,-0.9666642,-0.84040076,-0.6320373,-0.36192915,-0.05646359,0.254518,0.54063535,0.77393717,0.9316319,0.99831545,0.9674634,0.84209836,0.63446736,0.36485437,0.059598166,-0.25148028,-0.5379912,-0.771945,-0.930495,-0.9981284,-0.968253,-0.84378755,-0.63689125,-0.36777598,-0.06273215,0.24844009,0.5353418,0.7699452,0.9293403,0.9979315,0.9690331,0.8454685,0.63930875,0.37069398,0.06586552,-0.24539743,-0.5326871,-0.76795316,-0.9281764,-0.9977247,-0.9698037,-0.8471411,-0.64172,-0.37360832,-0.06899824,0.24235238,0.53004754,0.7659383,0.9270034,0.99750805,0.97056466,0.84880537,0.6441249,0.37651896,0.07213028,-0.23930493,-0.52738243,-0.76391584,-0.9258212,-0.9972816,-0.9713161,-0.85046124,-0.6465235,-0.3794259,-0.07526161,0.2362784,0.5247121,0.7618859,0.92462987,0.99704534,0.97205794,0.8521087,0.6489157,0.3823291,0.07839219,-0.23322628,-0.5220366,-0.7598484,-0.9234294,-0.99679923,-0.97279024,-0.85374784,-0.6513015,-0.38522854,-0.081498116,0.23017186,0.519356,0.75780344,0.92221993,0.99654335,0.9735129,0.8553785,0.65368086,0.38812417,0.08462713,-0.22711517,-0.5166702,-0.755751,-0.9210013,-0.9962776,-0.97422594,-0.85700077,-0.6560538,-0.39099392,-0.08775531,0.22405624,0.5139794,0.75369114,0.9197736,0.996002,0.97492945,0.8586145,0.65842026,0.3938819,0.09088263,-0.2209951,-0.51128346,-0.7516238,-0.91853684,-0.9957166,-0.9756233,-0.86021984,-0.66076225,-0.39676598,-0.09400905,0.21793178,0.50858253,0.74954903,0.917291,0.9954214,0.9763075,0.86180454,0.66311574,0.39964616,0.09713454,-0.21486631,-0.50587654,-0.7474669,-0.9160361,-0.99511635,-0.9769822,-0.86339295,-0.66546273,-0.40252241,-0.10025907,0.21179873,0.5031656,0.7453774,0.9147722,0.9948015,0.9776421,0.8649729,0.66780317,0.4053947,0.103382625,-0.20872906,-0.50044966,-0.7432806,-0.9134993,-0.99447685,-0.97829753,-0.86654425,-0.670137,-0.40826297,-0.10650515,0.20565732,0.49772882,0.7411764,0.9122174,0.99414504,0.9789433,0.8681071,0.6724642,0.41112724,0.10962663,-0.20258357,-0.49500307,-0.73906493,-0.91092646,-0.9938008,-0.9795794,-0.8696614,-0.6747848,-0.41398743,-0.11274702,0.19950782,0.49228287,0.7369543,0.90963155,0.9934455,0.9802059,0.87120706,0.6770987,0.41684356,0.11586631,-0.19644184,-0.48954737,-0.7348283,-0.9083227,-0.9930817,-0.9808227,-0.8727442,-0.679406,-0.41969556,-0.11898445,0.19336219,0.48680708,0.73269504,0.9070049,0.9927095,0.9814298,0.8742727,0.68170655,0.42254344,0.12208953,-0.19028063,-0.484062,-0.7305546,-0.9056782,-0.9923262,-0.98202723,-0.87579256,-0.6840004,-0.4253763,-0.1252053,0.1871972,0.48131213,0.7284069,0.90434766,0.99193305,0.98261505,0.87730384,0.68628746,0.42821583,0.12831983,-0.18411192,-0.4785575,-0.7262521,-0.9030031,-0.9915302,-0.9831931,-0.8788064,-0.6885591,-0.43105114,-0.13143311,0.18102482,0.47579816,0.7240983,0.90164965,0.9911175,0.9837615,0.8803004,0.6908327,0.4338822,0.13454509,-0.17793594,-0.47303414,-0.7219292,-0.90028733,-0.990695,-0.9843202,-0.88177997,-0.69309944,-0.436709,-0.13765574,0.17484531,0.47027603,0.71975297,0.8989161,0.9902628,0.9848692,0.8832566,0.6953594,0.43953145,0.14076503,-0.17176476,-0.4675027,-0.71756965,-0.89753604,-0.98982084,-0.98540646,-0.8847245,-0.69761246,-0.44234958,-0.14387293,0.16867071,0.4647248,0.71537924,0.89614713,0.9893691,0.98593605,0.8861837,0.69985867,0.44516337,0.14696756,-0.16557501,-0.46194232,-0.71318173,-0.8947494,-0.98890936,-0.9864559,-0.8876341,-0.70209795,-0.44797277,-0.1500726,0.16247767,0.45915526,0.71097726,0.8933482,0.9884381,0.9869661,0.8890758,0.7043303,0.45076704,0.15317616,-0.15937874,-0.45636368,-0.70876575,-0.89193285,-0.9879572,-0.9874665,-0.8905087,-0.7065557,-0.4535676,-0.15627822,0.15627822,0.4535676,0.7065557,0.8905087,0.9874665,0.9879572,0.89193285,0.70876575,0.45636368,0.15937874,-0.15317616,-0.45076704,-0.7043303,-0.8890758,-0.9869661,-0.9884381,-0.8933482,-0.71097726,-0.45915526,-0.16247767,0.1500726,0.44797277,0.70209795,0.8876341,0.9864559,0.98890936,0.8947494,0.71318173,0.46194232,0.16557501,-0.14696756,-0.44516337,-0.69985867,-0.8861837,-0.98593605,-0.9893691,-0.89614713,-0.71537924,-0.4647248,-0.16867071,0.14387293,0.44234958,0.69761246,0.8847245,0.98540646,0.98982084,0.89753604,0.71756965,0.4675027,0.17176476,-0.14076503,-0.43953145,-0.6953594,-0.8832566,-0.9848692,-0.9902628,-0.8989161,-0.71975297,-0.47027603,-0.17484531,0.13765574,0.436709,0.69309944,0.88177997,0.9843202,0.990695,0.90028733,0.7219292,0.47303414,0.17793594,-0.13454509,-0.4338822,-0.6908327,-0.8803004,-0.9837615,-0.9911175,-0.90164965,-0.7240983,-0.47579816,-0.18102482,0.13143311,0.43105114,0.6885591,0.8788064,0.9831931,0.9915302,0.9030031,0.7262521,0.4785575,0.18411192,-0.12831983,-0.42821583,-0.68628746,-0.87730384,-0.98261505,-0.99193305,-0.90434766,-0.7284069,-0.48131213,-0.1871972,0.1252053,0.4253763,0.6840004,0.87579256,0.98202723,0.9923262,0.9056782,0.7305546,0.484062,0.19028063,-0.12208953,-0.42254344,-0.68170655,-0.8742727,-0.9814298,-0.9927095,-0.9070049,-0.73269504,-0.48680708,-0.19336219,0.11898445,0.41969556,0.679406,0.8727442,0.9808227,0.9930817,0.9083227,0.7348283,0.48954737,0.19644184,-0.11586631,-0.41684356,-0.6770987,-0.87120706,-0.9802059,-0.9934455,-0.90963155,-0.7369543,-0.49228287,-0.19950782,0.11274702,0.41398743,0.6747848,0.8696614,0.97958183,0.9937995,0.9109314,0.73907304,0.49501348,0.20258357,-0.10962663,-0.41112724,-0.6724642,-0.86811304,-0.97894573,-0.9941437,-0.91222227,-0.7411845,-0.49772882,-0.20565732,0.10650515,0.40826297,0.670137,0.8665502,0.9783,0.9944781,0.9135042,0.74328864,0.50044966,0.20872906,-0.103382625,-0.4053947,-0.66781205,-0.8649789,-0.9776446,-0.9948027,-0.91477704,-0.7453774,-0.5031656,-0.21179873,0.10025907,0.4025279,0.6654672,0.863399,0.9769796,0.99511695,0.9160385,0.7474709,0.50587654,0.21486631,-0.097140506,-0.39965168,-0.66312474,-0.8618106,-0.97630495,-0.99542195,-0.91729337,-0.74954903,-0.50858253,-0.21792594,0.09401501,0.3967715,0.66077125,0.86021376,0.975622,0.99571717,0.91853917,0.7516238,0.51128346,0.22098926,-0.0908886,-0.3938929,-0.65841126,-0.85860837,-0.9749281,-0.99600255,-0.9197736,-0.75369114,-0.51397425,-0.2240504,0.08776128,0.39100495,0.6560448,0.85699767,0.9742246,0.9962776,0.9210013,0.755751,0.5166651,0.22710933,-0.08463907,-0.3881131,-0.6536718,-0.8553754,-0.9735115,-0.99654335,-0.92221993,-0.7577995,-0.5193509,-0.23016603,0.08151006,0.38521746,0.651297,0.8537447,0.97279024,0.99679923,0.9234294,0.75984454,0.5220315,0.23321463,-0.07838024,-0.38232356,-0.6489111,-0.8521056,-0.97205794,-0.99704534,-0.9246276,-0.761882,-0.524707,-0.23626676,0.07524966,0.37942037,0.64651895,0.85046124,0.9713161,0.9972816,0.9258189,0.763912,0.52737224,0.23931655,-0.0721243,-0.37651342,-0.64412034,-0.84880537,-0.97056466,-0.99750763,-0.9270011,-0.7659306,-0.5300374,-0.242364,0.068992265,0.37360275,0.64172,0.8471411,0.9698052,0.9977243,0.9281742,0.7679455,0.53269726,0.24540325,-0.06585954,-0.3706884,-0.63930875,-0.8454685,-0.9690346,-0.99793106,-0.9293359,-0.76995283,-0.53535193,-0.24844588,0.06272617,0.36777598,0.63689125,0.84379077,0.96825457,0.998128,0.9304907,0.7719526,0.5379963,0.25148606,-0.059598166,-0.36485437,-0.63446736,-0.8421016,-0.9674649,-0.9983148,-0.9316363,-0.77394474,-0.54064035,-0.25452378,0.05646359,0.36192915,0.63204193,0.84040403,0.96666574,0.99849206,0.93277264,0.77592546,0.5432791,0.2575532,-0.05332846,-0.35900038,-0.62960565,-0.8386982,-0.9658586,-0.9986595,-0.93389773,-0.77790236,-0.5459125,-0.26058587,0.050192803,0.35607085,0.6271632,0.83698577,0.9650404,0.99881697,0.93501574,0.7798716,0.548538,0.26361597,-0.047059644,-0.35313782,-0.6247168,-0.83526343,-0.96421266,-0.9989647,-0.93612456,-0.7818312,-0.55115813,-0.26664057,0.043923028,0.35019854,0.62226194,0.8335345,0.9633762,0.99910253,0.93722415,0.78378505,0.5537753,0.26966545,-0.040788975,-0.34725857,-0.6198033,-0.8317957,-0.96252954,-0.99923056,-0.9383134,-0.7857293,-0.55638456,-0.27268764,0.037651524,0.3443124,0.6173362,0.8300504,0.96167415,0.9993487,0.93939453,0.78766763,0.55899084,0.2757043,-0.0345167,-0.34136564,-0.6148654,-0.82829523,-0.96080846,-0.99945706,-0.94046533,-0.7895964,-0.56158906,-0.2787211,0.031378537,0.3384127,0.6123862,0.8265336,0.9599342,0.9995555,0.9415279,0.79151917,0.56418425,0.2817323,-0.028243061,-0.33545926,-0.60990095,-0.82476217,-0.9590496,-0.9996442,-0.9425802,-0.79343235,-0.56677145,-0.28474358,0.025104314,0.33249968,0.60741204,0.8229843,0.95815593,0.99972296,0.9436237,0.7953396,0.5693555,0.2877492,-0.021966815,-0.32953826,-0.604916,-0.82119656,-0.95725286,-0.9997919,-0.9446579,-0.797238,-0.57193273,-0.2907534,0.0188291,0.32657355,0.60241395,0.8194016,0.9563404,0.99985105,0.9456828,0.7991286,0.5745043,0.29375476,-0.0156912,-0.32360566,-0.59990597,-0.81759864,-0.95541847,-0.9999003,-0.9466989,-0.8010113,-0.57707024,-0.2967532,0.012553146,0.32063457,0.59739155,0.815788,0.95448714,0.9999397,0.947705,0.8028862,0.5796305,0.29974946,-0.009414967,-0.31766033,-0.59487176,-0.8139689,-0.9535464,-0.99996924,-0.94870186,-0.80475307,-0.5821856,-0.30274203,0.0062766965,0.3146826,0.59234613,0.81214154,0.9525963,0.9999889,0.94968957,0.8066121,0.58473414,0.30573198,-0.0031383638,-0.31170213,-0.5898147,-0.8103064,-0.95163673,-0.99999875,-0.9506678,-0.8084632,-0.5872773,-0.30871847,0.0,0.30871847,0.5872773,0.8084632,0.9506678,0.99999875,0.95163673,0.8103064,0.5898147,0.31170213,0.0031383638,-0.30573198,-0.58473414,-0.8066121,-0.94968957,-0.9999889,-0.9525963,-0.81214154,-0.59234613,-0.3146826,-0.0062766965,0.30274203,0.5821856,0.80475307,0.94870186,0.99996924,0.9535464,0.8139689,0.59487176,0.31766033,0.009414967,-0.29974946,-0.5796305,-0.8028862,-0.947705,-0.9999397,-0.95448714,-0.815788,-0.59739155,-0.32063457,-0.012553146,0.2967532,0.57707024,0.8010113,0.9466989,0.9999003,0.95541847,0.81759864,0.59990597,0.32360566,0.0156912,-0.29375476,-0.5745043,-0.7991286,-0.9456828,-0.99985105,-0.9563404,-0.8194016,-0.60241395,-0.32657355,-0.0188291,0.2907534,0.57193273,0.797238,0.9446579,0.9997919,0.95725286,0.82119656,0.604916,0.32953826,0.021966815,-0.2877492,-0.5693555,-0.7953396,-0.9436237,-0.99972296,-0.95815593,-0.8229843,-0.60741204,-0.33249968,-0.025104314,0.28474358,0.56677145,0.79343235,0.9425802,0.9996442,0.9590496,0.82476217,0.60990095,0.33545926,0.028243061,-0.2817323,-0.56418425,-0.79151917,-0.9415279,-0.9995555,-0.9599342,-0.8265336,-0.6123862,-0.3384127,-0.031378537,0.2787211,0.56158906,0.7895964,0.94046533,0.99945706,0.96080846,0.82829523,0.6148654,0.34136564,0.0345167,-0.2757043,-0.55899084,-0.78766763,-0.93939453,-0.9993487,-0.96167415,-0.8300504,-0.6173362,-0.3443124,-0.037651524,0.27268764,0.55638456,0.7857293,0.9383134,0.99923056,0.96252954,0.8317957,0.6198033,0.34725857,0.040788975,-0.26966545,-0.5537753,-0.78378505,-0.93722415,-0.99910253,-0.9633762,-0.8335345,-0.62226194,-0.35019854,-0.043923028,0.26664057,0.55115813,0.7818312,0.93612456,0.9989647,0.96421266,0.83526343,0.6247168,0.35313782,0.047059644,-0.26361597,-0.548538,-0.7798716,-0.93501574,-0.99881697,-0.9650404,-0.83698577,-0.6271632,-0.35607085,-0.050192803,0.26058587,0.5459125,0.77790236,0.93389773,0.9986595,0.9658586,0.8386982,0.62960565,0.35900038,0.05332846,-0.2575532,-0.5432791,-0.77592546,-0.93277264,-0.99849206,-0.96666574,-0.84040403,-0.63204193,-0.36192915,-0.05646359,0.25452378,0.54064035,0.77394474,0.9316363,0.9983148,0.9674649,0.8421016,0.63446736,0.36485437,0.059598166,-0.25148606,-0.5379963,-0.7719526,-0.9304907,-0.998128,-0.96825457,-0.84379077,-0.63689125,-0.36777598,-0.06272617,0.24844588,0.53535193,0.76995283,0.9293359,0.99793106,0.9690346,0.8454685,0.63930875,0.3706884,0.06585954,-0.24540325,-0.53269726,-0.7679455,-0.9281742,-0.9977243,-0.9698052,-0.8471411,-0.64172,-0.37360275,-0.068992265,0.242364,0.5300374,0.7659306,0.9270011,0.99750763,0.97056466,0.84880537,0.64412034,0.37651342,0.0721243,-0.23931655,-0.52737224,-0.763912,-0.9258189,-0.9972816,-0.9713161,-0.85046124,-0.64651895,-0.37942037,-0.07524966,0.23626676,0.524707,0.761882,0.9246276,0.99704534,0.97205794,0.8521056,0.6489111,0.38232356,0.07838024,-0.23321463,-0.5220315,-0.75984454,-0.9234294,-0.99679923,-0.97279024,-0.8537447,-0.651297,-0.38521746,-0.08151006,0.23016603,0.5193509,0.7577995,0.92221993,0.99654335,0.9735115,0.8553754,0.6536718,0.3881131,0.08463907,-0.22710933,-0.5166651,-0.755751,-0.9210013,-0.9962776,-0.9742246,-0.85699767,-0.6560448,-0.39100495,-0.08776128,0.2240504,0.51397425,0.75369114,0.9197736,0.99600255,0.9749281,0.85860837,0.65841126,0.3938929,0.0908886,-0.22098926,-0.51128346,-0.7516238,-0.91853917,-0.99571717,-0.975622,-0.86021376,-0.66077125,-0.3967715,-0.09401501,0.21792594,0.50858253,0.74954903,0.91729337,0.99542195,0.97630495,0.8618106,0.66312474,0.39965168,0.097140506,-0.21486631,-0.50587654,-0.7474709,-0.9160385,-0.99511695,-0.9769796,-0.863399,-0.6654672,-0.4025279,-0.10025907,0.21179873,0.5031656,0.7453774,0.91477704,0.9948027,0.9776446,0.8649789,0.66781205,0.4053947,0.103382625,-0.20872906,-0.50044966,-0.74328864,-0.9135042,-0.9944781,-0.9783,-0.8665502,-0.670137,-0.40826297,-0.10650515,0.20565732,0.49772882,0.7411845,0.91222227,0.9941437,0.97894573,0.86811304,0.6724642,0.41112724,0.10962663,-0.20258357,-0.49501348,-0.73907304,-0.9109314,-0.9937995,-0.97958183,-0.8696614,-0.6747848,-0.41398743,-0.11274702,0.19950782,0.49228287,0.7369543,0.90963155,0.9934455,0.9802059,0.87120706,0.6770987,0.41684356,0.11586631,-0.19644184,-0.48954737,-0.7348283,-0.9083227,-0.9930817,-0.9808227,-0.8727442,-0.679406,-0.41969556,-0.11898445,0.19336219,0.48680708,0.73269504,0.9070049,0.9927095,0.9814298,0.8742727,0.68170655,0.42254344,0.12208953,-0.19028063,-0.484062,-0.7305546,-0.9056782,-0.9923262,-0.98202723,-0.87579256,-0.6840004,-0.4253763,-0.1252053,0.1871972,0.48131213,0.7284069,0.90434766,0.99193305,0.98261505,0.87730384,0.68628746,0.42821583,0.12831983,-0.18411192,-0.4785575,-0.7262521,-0.9030031,-0.9915302,-0.9831931,-0.8788064,-0.6885591,-0.43105114,-0.13143311,0.18102482,0.47579816,0.7240983,0.90164965,0.9911175,0.9837615,0.8803004,0.6908327,0.4338822,0.13454509,-0.17793594,-0.47303414,-0.7219292,-0.90028733,-0.990695,-0.9843202,-0.88177997,-0.69309944,-0.436709,-0.13765574,0.17484531,0.47027603,0.71975297,0.8989161,0.9902628,0.9848692,0.8832566,0.6953594,0.43953145,0.14076503,-0.17176476,-0.4675027,-0.71756965,-0.89753604,-0.98982084,-0.98540646,-0.8847245,-0.69761246,-0.44234958,-0.14387293,0.16867071,0.4647248,0.71537924,0.89614713,0.9893691,0.98593605,0.8861837,0.69985867,0.44516337,0.14696756,-0.16557501,-0.46194232,-0.71318173,-0.8947494,-0.98890936,-0.9864559,-0.8876341,-0.70209795,-0.44797277,-0.1500726,0.16247767,0.45915526,0.71097726,0.8933482,0.9884381,0.9869661,0.8890758,0.7043303,0.45076704,0.15317616,-0.15937874,-0.45636368,-0.70876575,-0.89193285,-0.9879572,-0.9874665,-0.8905087,-0.7065557,-0.4535676,-0.15627822,0.15627822,0.4535676,0.7065557,0.8905087,0.9874665,0.9879572,0.89193285,0.70876575,0.45636368,0.15937874,-0.15317616,-0.45076704,-0.7043303,-0.8890758,-0.9869661,-0.9884381,-0.8933482,-0.71097726,-0.45915526,-0.16247767,0.1500726,0.44797277,0.70209795,0.8876341,0.9864559,0.98890936,0.8947494,0.71318173,0.46194232,0.16557501,-0.14696756,-0.44516337,-0.69985867,-0.8861837,-0.98593605,-0.9893691,-0.89614713,-0.71537924,-0.4647248,-0.16867071,0.14387293,0.44234958,0.69761246,0.8847245,0.98540646,0.98982084,0.89753604,0.71756965,0.4675027,0.17176476,-0.14076503,-0.43953145,-0.6953594,-0.8832566,-0.9848692,-0.9902628,-0.8989161,-0.71975297,-0.47027603,-0.17484531,0.13765574,0.436709,0.69309944,0.88177997,0.9843202,0.990695,0.90028733,0.7219292,0.47303414,0.17793594,-0.13454509,-0.4338822,-0.6908327,-0.8803004,-0.9837615,-0.9911175,-0.90164965,-0.7240983,-0.47579816,-0.18102482,0.13143311,0.43105114,0.6885591,0.8788064,0.9831931,0.9915302,0.9030031,0.7262521,0.4785575,0.18411192,-0.12831983,-0.42821583,-0.68628746,-0.87730384,-0.98261505,-0.99193305,-0.90434766,-0.7284069,-0.48131213,-0.1871972,0.1252053,0.4253763,0.6840004,0.87579256,0.98202723,0.9923262,0.9056782,0.7305546,0.484062,0.19028063,-0.12208953,-0.42254344,-0.68170655,-0.8742727,-0.9814298,-0.9927095,-0.9070049,-0.73269504,-0.48680708,-0.19336219,0.11898445,0.41969556,0.679406,0.8727442,0.9808227,0.9930817,0.9083227,0.7348283,0.48954737,0.19644184,-0.11586631,-0.41684356,-0.6770987,-0.87120706,-0.9802059,-0.9934455,-0.90963155,-0.7369543,-0.49228287,-0.19950782,0.11274702,0.41398743,0.6747848,0.8696614,0.9795794,0.9938008,0.91092646,0.73906493,0.49500307,0.20258357,-0.10962663,-0.41112724,-0.6724642,-0.8681071,-0.9789433,-0.99414504,-0.9122174,-0.7411764,-0.49772882,-0.20565732,0.10650515,0.40826297,0.670137,0.86654425,0.97829753,0.99447685,0.9134993,0.7432806,0.50044966,0.20872906,-0.103382625,-0.4053947,-0.66780317,-0.8649729,-0.9776421,-0.9948015,-0.9147722,-0.7453774,-0.5031656,-0.21179873,0.10025907,0.40252241,0.66546273,0.86339295,0.9769822,0.99511635,0.9160361,0.7474669,0.50587654,0.21486631,-0.09713454,-0.39964616,-0.66311574,-0.86180454,-0.9763075,-0.9954214,-0.917291,-0.74954903,-0.50858253,-0.21793178,0.09400905,0.39676598,0.66076225,0.86021984,0.9756233,0.9957166,0.91853684,0.7516238,0.51128346,0.2209951,-0.09088263,-0.3938819,-0.65842026,-0.8586145,-0.97492945,-0.996002,-0.9197736,-0.75369114,-0.5139794,-0.22405624,0.08775531,0.39099392,0.6560538,0.85700077,0.97422594,0.9962776,0.9210013,0.755751,0.5166702,0.22711517,-0.08462713,-0.38812417,-0.65368086,-0.8553785,-0.9735129,-0.99654335,-0.92221993,-0.75780344,-0.519356,-0.23017186,0.081498116,0.38522854,0.6513015,0.85374784,0.97279024,0.99679923,0.9234294,0.7598484,0.5220366,0.23322628,-0.07839219,-0.3823291,-0.6489157,-0.8521087,-0.97205794,-0.99704534,-0.92462987,-0.7618859,-0.5247121,-0.2362784,0.07526161,0.3794259,0.6465235,0.85046124,0.9713161,0.9972816,0.9258212,0.76391584,0.52738243,0.23930493,-0.07213028,-0.37651896,-0.6441249,-0.84880537,-0.97056466,-0.99750805,-0.9270034,-0.7659383,-0.53004754,-0.24235238,0.06899824,0.37360832,0.64172,0.8471411,0.9698037,0.9977247,0.9281764,0.76795316,0.5326871,0.24539743,-0.06586552,-0.37069398,-0.63930875,-0.8454685,-0.9690331,-0.9979315,-0.9293403,-0.7699452,-0.5353418,-0.24844009,0.06273215,0.36777598,0.63689125,0.84378755,0.968253,0.9981284,0.930495,0.771945,0.5379912,0.25148028,-0.059598166,-0.36485437,-0.63446736,-0.84209836,-0.9674634,-0.99831545,-0.9316319,-0.77393717,-0.54063535,-0.254518,0.05646359,0.36192915,0.6320373,0.84040076,0.9666642,0.9984927,0.93276834,0.7759217,0.5432741,0.2575532,-0.05332846,-0.35900038,-0.629601,-0.83869493,-0.9658555,-0.9986589,-0.9338956,-0.7778986,-0.5459075,-0.26058587,0.050192803,0.35606804,0.62715846,0.8369808,0.9650372,0.99881655,0.93501365,0.7798678,0.5485355,0.26361597,-0.047056653,-0.35313222,-0.6247098,-0.8352585,-0.9642158,-0.9989643,-0.9361225,-0.78182936,-0.55115813,-0.26664346,0.043920036,0.3501929,0.6222549,0.83352786,0.96337867,0.99910223,0.93722206,0.7837832,0.5537753,0.2696683,-0.040782988,-0.34725013,-0.6197939,-0.83180237,-0.962532,-0.9992303,-0.9383124,-0.7857293,-0.55638707,-0.27269053,0.037645537,0.34430397,0.61734563,0.8300554,0.9616758,0.9993486,0.9393935,0.78766763,0.5589933,0.27571005,-0.034507714,-0.34135437,-0.6148725,-0.8283003,-0.9608101,-0.999457,-0.94046533,-0.7895982,-0.561594,-0.27872688,0.031369552,0.338424,0.6123933,0.826537,0.959935,0.9995555,0.9415279,0.791521,0.5641892,0.28174093,-0.028231082,-0.33546773,-0.60990804,-0.82476556,-0.9590504,-0.9996442,-0.9425812,-0.793436,-0.56677884,-0.2847522,0.025116295,0.33250815,0.6074168,0.82298595,0.95815635,0.999723,0.9436252,0.7953432,0.5693629,0.28776067,-0.0219773,-0.32954532,-0.60491955,-0.8211983,-0.95725286,-0.999792,-0.9446599,-0.7972425,-0.5719413,-0.29074338,0.018838087,0.3265792,0.60241634,0.81940246,0.95633996,0.9998511,0.94568527,0.799134,0.5745141,0.29374617,-0.01569869,-0.32360992,-0.59990716,-0.81759864,-0.9554176,-0.99990034,-0.94670135,-0.8010176,-0.57706165,-0.29674605,0.012559137,0.3206374,0.59739214,0.81578666,0.95448583,0.99993974,0.9477081,0.80287904,0.57962316,0.29974303,-0.009419462,-0.31766173,-0.59487116,-0.8139667,-0.9535446,-0.9999693,-0.94870543,-0.80474687,-0.58217895,-0.30273703,0.0062796925,0.31468296,0.59234434,0.81213874,0.95259404,0.999989,0.94968593,0.80660677,0.58472896,0.30572808,-0.0031398619,-0.31170106,-0.5898117,-0.81030273,-0.95163405,-0.9999988,-0.9506647,-0.80845875,-0.58727324,-0.3087161,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..7e3fb136cd7d --- /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 = Float32.( 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..6a59172c9d35 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/test/test.assign.js @@ -0,0 +1,210 @@ +/** +* @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 powf = require( '@stdlib/math/base/special/powf' ); +var Float32Array = require( '@stdlib/array/float32' ); +var f32 = require( '@stdlib/number/float64/base/to-float32' ); +var ulpdiff = require( '@stdlib/number/float32/base/ulp-difference' ); +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, 'returns output array' ); + 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 expected value' ); + t.strictEqual( y[ 1 ], c[ i ], 'returns expected value' ); + } + t.end(); +}); + +tape( 'if provided a value exceeding 2**24, the function returns [0,1]', function test( t ) { + var out; + var x; + var y; + var i; + + x = powf( 2.0, 24 ) + 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: '+( (i%2 === 0) ? 1.0 : -1.0 ) ); + t.strictEqual( y[ 1 ], 0.0, 'x: '+x+'. Expected: 0.0' ); + } + t.end(); +}); + +tape( 'the function computes sin(πx) and cos(πx) for decimal input', function test( t ) { + 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++ ) { + x[ i ] = f32( x[ i ] ); + s[ i ] = f32( s[ i ] ); + c[ i ] = f32( c[ i ] ); + out = new Float32Array( 2 ); + y = sincospif( x[ i ], out, 1, 0 ); + t.strictEqual( y, out, 'returns output array' ); + + t.strictEqual( ulpdiff( y[ 0 ], s[ i ] ) <= 1, true, 'returns expected sin value within 1 ulp. x: '+x[ i ]+'. Value: '+y[ 0 ]+'. Expected: '+s[ i ]+'.' ); + t.strictEqual( ulpdiff( y[ 1 ], c[ i ] ) <= 1, true, 'returns expected cos value within 1 ulp. x: '+x[ i ]+'. Value: '+y[ 1 ]+'. Expected: '+c[ i ]+'.' ); + } + 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..7270c7359f95 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/test/test.main.js @@ -0,0 +1,143 @@ +/** +* @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 f32 = require( '@stdlib/number/float64/base/to-float32' ); +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**24, the function returns [0,1]', function test( t ) { + var x; + var y; + var i; + + x = powf( 2.0, 24 ) + 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: '+( (i%2 === 0) ? 1.0 : -1.0 ) ); + t.strictEqual( y[ 1 ], 0.0, 'x: '+x+'. Expected: 0.0' ); + } + t.end(); +}); + +tape( 'the function computes 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 ] === f32( s[ i ] ) ) { + t.strictEqual( y[ 0 ], f32( s[ i ] ), 'x: '+x[ i ]+'. Expected: '+s[ i ] ); + } else { + delta = absf( y[ 0 ] - f32( s[ i ] ) ); + t.ok( delta <= EPS, 'within tolerance. x: '+x[ i ]+'. Value: '+y[ 0 ]+'. Expected: '+s[ i ]+'. Tolerance: '+EPS+'.' ); + } + if ( y[ 1 ] === f32( c[ i ] ) ) { + t.strictEqual( y[ 1 ], f32( c[ i ] ), 'x: '+x[ i ]+'. Expected: '+c[ i ] ); + } else { + delta = absf( y[ 1 ] - f32( 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..f1ac6c86bcb5 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/sincospif/test/test.native.js @@ -0,0 +1,153 @@ +/** +* @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 f32 = require( '@stdlib/number/float64/base/to-float32' ); +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 expected value' ); + t.strictEqual( y[ 1 ], c[ i ], 'returns expected value' ); + } + t.end(); +}); + +tape( 'if provided a value exceeding 2**24, the function returns [0,1]', opts, function test( t ) { + var x; + var y; + var i; + + x = powf( 2.0, 24 ) + 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: '+( (i%2 === 0) ? 1.0 : -1.0 ) ); + t.strictEqual( y[ 1 ], 0.0, 'x: '+x+'. Expected: 0.0' ); + } + t.end(); +}); + +tape( 'the function computes sin(πx) and cos(πx) for decimal input', opts, 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 ] === f32( s[ i ] ) ) { + t.strictEqual( y[ 0 ], f32( s[ i ] ), 'x: '+x[ i ]+'. Expected: '+s[ i ] ); + } else { + delta = absf( y[ 0 ] - f32( s[ i ] ) ); + t.ok( delta <= EPS, 'within tolerance. x: '+x[ i ]+'. Value: '+y[ 0 ]+'. Expected: '+s[ i ]+'. Tolerance: '+EPS+'.'); + } + + if ( y[ 1 ] === f32( c[ i ] ) ) { + t.strictEqual( y[ 1 ], f32( c[ i ] ), 'x: '+x[ i ]+'. Expected: '+c[ i ] ); + } else { + delta = absf( y[ 1 ] - f32( c[ i ] ) ); + t.ok( delta <= EPS, 'within tolerance. x: '+x[ i ]+'. Value: '+y[ 1 ]+'. Expected: '+c[ i ]+'. Tolerance: '+EPS+'.'); + } + } + t.end(); +});