├── .gitignore ├── .travis.yml ├── Cargo.toml ├── README.md ├── LICENSE.md ├── src ├── complex.rs ├── real.rs └── lib.rs ├── benches └── lib.rs └── tests ├── lib.rs └── fixtures.rs /.gitignore: -------------------------------------------------------------------------------- 1 | Cargo.lock 2 | target 3 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: rust 2 | 3 | rust: 4 | - stable 5 | - beta 6 | - nightly 7 | 8 | script: 9 | - cargo build 10 | - cargo test 11 | - if [ "$TRAVIS_RUST_VERSION" == "nightly" ]; then 12 | cargo bench; 13 | fi 14 | 15 | notifications: 16 | email: false 17 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "dft" 3 | version = "0.5.5" 4 | license = "Apache-2.0/MIT" 5 | authors = [ 6 | "Christopher J. Woodall ", 7 | "Ivan Ukhov ", 8 | "Karol Harasim ", 9 | ] 10 | description = "The package provides an algorithm to compute the discrete Fourier transform." 11 | documentation = "https://docs.rs/dft" 12 | homepage = "https://github.com/stainless-steel/dft" 13 | repository = "https://github.com/stainless-steel/dft" 14 | readme = "README.md" 15 | categories = ["algorithms", "science"] 16 | keywords = ["fourier", "transform"] 17 | 18 | [dependencies] 19 | num-complex = { version = "0.1.35", default-features = false } 20 | num-traits = { version = "0.1.35", default-features = false } 21 | 22 | [dev-dependencies] 23 | assert = "0.7" 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DFT [![Package][package-img]][package-url] [![Documentation][documentation-img]][documentation-url] [![Build][build-img]][build-url] 2 | 3 | The package provides an algorithm to compute the [discrete Fourier 4 | transform][1]. 5 | 6 | ## Example 7 | 8 | ```rust 9 | use dft::{Operation, Plan, c64}; 10 | 11 | let plan = Plan::new(Operation::Forward, 512); 12 | let mut data = vec![c64::new(42.0, 69.0); 512]; 13 | dft::transform(&mut data, &plan); 14 | ``` 15 | 16 | ## Contribution 17 | 18 | Your contribution is highly appreciated. Do not hesitate to open an issue or a 19 | pull request. Note that any contribution submitted for inclusion in the project 20 | will be licensed according to the terms given in [LICENSE.md](LICENSE.md). 21 | 22 | [1]: https://en.wikipedia.org/wiki/Discrete_Fourier_transform 23 | 24 | [build-img]: https://travis-ci.org/stainless-steel/dft.svg?branch=master 25 | [build-url]: https://travis-ci.org/stainless-steel/dft 26 | [documentation-img]: https://docs.rs/dft/badge.svg 27 | [documentation-url]: https://docs.rs/dft 28 | [package-img]: https://img.shields.io/crates/v/dft.svg 29 | [package-url]: https://crates.io/crates/dft 30 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # License 2 | 3 | The project is dual licensed under the terms of the Apache License, Version 2.0, 4 | and the MIT License. You may obtain copies of the two licenses at 5 | 6 | * https://www.apache.org/licenses/LICENSE-2.0 and 7 | * https://opensource.org/licenses/MIT, respectively. 8 | 9 | The following two notices apply to every file of the project. 10 | 11 | ## The Apache License 12 | 13 | ``` 14 | Copyright 2015–2017 The dft Developers 15 | 16 | Licensed under the Apache License, Version 2.0 (the “License”); you may not use 17 | this file except in compliance with the License. You may obtain a copy of the 18 | License at 19 | 20 | http://www.apache.org/licenses/LICENSE-2.0 21 | 22 | Unless required by applicable law or agreed to in writing, software distributed 23 | under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR 24 | CONDITIONS OF ANY KIND, either express or implied. See the License for the 25 | specific language governing permissions and limitations under the License. 26 | ``` 27 | 28 | ## The MIT License 29 | 30 | ``` 31 | Copyright 2015–2017 The dft Developers 32 | 33 | Permission is hereby granted, free of charge, to any person obtaining a copy of 34 | this software and associated documentation files (the “Software”), to deal in 35 | the Software without restriction, including without limitation the rights to 36 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 37 | the Software, and to permit persons to whom the Software is furnished to do so, 38 | subject to the following conditions: 39 | 40 | The above copyright notice and this permission notice shall be included in all 41 | copies or substantial portions of the Software. 42 | 43 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 44 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 45 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 46 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 47 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 48 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 49 | ``` 50 | -------------------------------------------------------------------------------- /src/complex.rs: -------------------------------------------------------------------------------- 1 | // The implementation is based on: 2 | // http://www.librow.com/articles/article-10 3 | 4 | use num_complex::Complex; 5 | use num_traits::Float; 6 | 7 | use {Operation, Plan, Transform}; 8 | 9 | impl Transform for [Complex] 10 | where 11 | T: Float, 12 | { 13 | fn transform(&mut self, plan: &Plan) { 14 | let n = self.len(); 15 | assert!(n <= plan.n); 16 | rearrange(self, n); 17 | calculate(self, n, &plan.factors); 18 | if let Operation::Inverse = plan.operation { 19 | scale(self, n); 20 | } 21 | } 22 | } 23 | 24 | impl Transform for Vec> 25 | where 26 | T: Float, 27 | { 28 | #[inline(always)] 29 | fn transform(&mut self, plan: &Plan) { 30 | Transform::transform(&mut self[..], plan) 31 | } 32 | } 33 | 34 | #[inline(always)] 35 | fn calculate(data: &mut [Complex], n: usize, factors: &[Complex]) 36 | where 37 | T: Float, 38 | { 39 | let mut k = 0; 40 | let mut step = 1; 41 | while step < n { 42 | let jump = step << 1; 43 | for mut i in 0..step { 44 | while i < n { 45 | let j = i + step; 46 | unsafe { 47 | let product = *factors.get_unchecked(k) * *data.get_unchecked(j); 48 | *data.get_unchecked_mut(j) = *data.get_unchecked(i) - product; 49 | *data.get_unchecked_mut(i) = *data.get_unchecked(i) + product; 50 | } 51 | i += jump; 52 | } 53 | k += 1; 54 | } 55 | step <<= 1; 56 | } 57 | } 58 | 59 | #[inline(always)] 60 | fn rearrange(data: &mut [Complex], n: usize) { 61 | let mut j = 0; 62 | for i in 0..n { 63 | if j > i { 64 | data.swap(i, j); 65 | } 66 | let mut mask = n >> 1; 67 | while j & mask != 0 { 68 | j &= !mask; 69 | mask >>= 1; 70 | } 71 | j |= mask; 72 | } 73 | } 74 | 75 | #[inline(always)] 76 | fn scale(data: &mut [Complex], n: usize) 77 | where 78 | T: Float, 79 | { 80 | let factor = T::from(n).unwrap().recip(); 81 | for value in data { 82 | *value = value.scale(factor); 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /benches/lib.rs: -------------------------------------------------------------------------------- 1 | #![feature(test)] 2 | 3 | extern crate dft; 4 | extern crate test; 5 | 6 | use dft::{Operation, Plan, c64}; 7 | use test::{black_box, Bencher}; 8 | 9 | #[bench] fn complex_0004(bencher: &mut Bencher) { complex( 4, bencher); } 10 | #[bench] fn complex_0008(bencher: &mut Bencher) { complex( 8, bencher); } 11 | #[bench] fn complex_0016(bencher: &mut Bencher) { complex( 16, bencher); } 12 | #[bench] fn complex_0032(bencher: &mut Bencher) { complex( 32, bencher); } 13 | #[bench] fn complex_0064(bencher: &mut Bencher) { complex( 64, bencher); } 14 | #[bench] fn complex_0128(bencher: &mut Bencher) { complex( 128, bencher); } 15 | #[bench] fn complex_0256(bencher: &mut Bencher) { complex( 256, bencher); } 16 | #[bench] fn complex_0512(bencher: &mut Bencher) { complex( 512, bencher); } 17 | #[bench] fn complex_1024(bencher: &mut Bencher) { complex(1024, bencher); } 18 | #[bench] fn complex_2048(bencher: &mut Bencher) { complex(2048, bencher); } 19 | #[bench] fn complex_4096(bencher: &mut Bencher) { complex(4096, bencher); } 20 | #[bench] fn complex_8192(bencher: &mut Bencher) { complex(8192, bencher); } 21 | 22 | #[bench] fn real_0004(bencher: &mut Bencher) { real( 4, bencher); } 23 | #[bench] fn real_0008(bencher: &mut Bencher) { real( 8, bencher); } 24 | #[bench] fn real_0016(bencher: &mut Bencher) { real( 16, bencher); } 25 | #[bench] fn real_0032(bencher: &mut Bencher) { real( 32, bencher); } 26 | #[bench] fn real_0064(bencher: &mut Bencher) { real( 64, bencher); } 27 | #[bench] fn real_0128(bencher: &mut Bencher) { real( 128, bencher); } 28 | #[bench] fn real_0256(bencher: &mut Bencher) { real( 256, bencher); } 29 | #[bench] fn real_0512(bencher: &mut Bencher) { real( 512, bencher); } 30 | #[bench] fn real_1024(bencher: &mut Bencher) { real(1024, bencher); } 31 | #[bench] fn real_2048(bencher: &mut Bencher) { real(2048, bencher); } 32 | #[bench] fn real_4096(bencher: &mut Bencher) { real(4096, bencher); } 33 | #[bench] fn real_8192(bencher: &mut Bencher) { real(8192, bencher); } 34 | 35 | fn complex(size: usize, bencher: &mut Bencher) { 36 | let mut data = vec![c64::new(42.0, 69.0); size]; 37 | let plan = Plan::new(Operation::Forward, size); 38 | bencher.bytes = (data.len() * std::mem::size_of::()) as u64; 39 | bencher.iter(|| black_box(dft::transform(&mut data, &plan))); 40 | } 41 | 42 | fn real(size: usize, bencher: &mut Bencher) { 43 | let mut data = vec![42.0; 2 * size]; 44 | let plan = Plan::new(Operation::Forward, 2 * size); 45 | bencher.bytes = (data.len() * std::mem::size_of::()) as u64; 46 | bencher.iter(|| black_box(dft::transform(&mut data, &plan))); 47 | } 48 | -------------------------------------------------------------------------------- /src/real.rs: -------------------------------------------------------------------------------- 1 | use num_complex::Complex; 2 | use num_traits::Float; 3 | use std::slice::from_raw_parts_mut; 4 | 5 | use {Operation, Plan, Transform}; 6 | 7 | impl Transform for [T] 8 | where 9 | T: Float, 10 | { 11 | fn transform(&mut self, plan: &Plan) { 12 | let n = self.len(); 13 | assert!(n == plan.n); 14 | let h = n >> 1; 15 | if h == 0 { 16 | return; 17 | } 18 | let data = unsafe { from_raw_parts_mut(self.as_mut_ptr() as *mut _, h) }; 19 | match plan.operation { 20 | Operation::Forward => { 21 | data.transform(plan); 22 | compose(data, h, &plan.factors, false); 23 | } 24 | Operation::Backward | Operation::Inverse => { 25 | compose(data, h, &plan.factors, true); 26 | data.transform(plan); 27 | } 28 | } 29 | } 30 | } 31 | 32 | impl Transform for Vec 33 | where 34 | T: Float, 35 | { 36 | #[inline(always)] 37 | fn transform(&mut self, plan: &Plan) { 38 | Transform::transform(&mut self[..], plan) 39 | } 40 | } 41 | 42 | /// Unpack the result produced by the forward transform applied to real data. 43 | /// 44 | /// The function decodes the result of an application of `Transform::transform` 45 | /// with `Operation::Forward` to real data. See the top-level description of the 46 | /// crate for further details. 47 | pub fn unpack(data: &[T]) -> Vec> 48 | where 49 | T: Float, 50 | { 51 | let n = data.len(); 52 | assert!(n.is_power_of_two()); 53 | let h = n >> 1; 54 | let mut result = Vec::with_capacity(n); 55 | unsafe { result.set_len(n) }; 56 | result[0] = data[0].into(); 57 | if h == 0 { 58 | return result; 59 | } 60 | for i in 1..h { 61 | result[i] = Complex::new(data[2 * i], data[2 * i + 1]); 62 | } 63 | result[h] = data[1].into(); 64 | for i in (h + 1)..n { 65 | result[i] = result[n - i].conj(); 66 | } 67 | result 68 | } 69 | 70 | #[inline(always)] 71 | fn compose(data: &mut [Complex], n: usize, factors: &[Complex], inverse: bool) 72 | where 73 | T: Float, 74 | { 75 | let one = T::one(); 76 | let half = (one + one).recip(); 77 | let h = n >> 1; 78 | data[0] = Complex::new(data[0].re + data[0].im, data[0].re - data[0].im); 79 | if inverse { 80 | data[0] = data[0].scale(half); 81 | } 82 | if h == 0 { 83 | return; 84 | } 85 | let m = factors.len(); 86 | let sign: Complex = if inverse { Complex::i() } else { -Complex::i() }; 87 | for i in 1..h { 88 | let j = n - i; 89 | let part1 = data[i] + data[j].conj(); 90 | let part2 = data[i] - data[j].conj(); 91 | let product = sign * factors[m - j] * part2; 92 | data[i] = (part1 + product).scale(half); 93 | data[j] = (part1 - product).scale(half).conj(); 94 | } 95 | data[h] = data[h].conj(); 96 | } 97 | 98 | #[cfg(test)] 99 | mod tests { 100 | use c64; 101 | 102 | #[test] 103 | fn unpack() { 104 | let data = (0..4).map(|i| (i + 1) as f64).collect::>(); 105 | assert!( 106 | super::unpack(&data) 107 | == vec![ 108 | c64::new(1.0, 0.0), 109 | c64::new(3.0, 4.0), 110 | c64::new(2.0, 0.0), 111 | c64::new(3.0, -4.0), 112 | ] 113 | ); 114 | 115 | let data = (0..8).map(|i| (i + 1) as f64).collect::>(); 116 | assert!( 117 | super::unpack(&data) 118 | == vec![ 119 | c64::new(1.0, 0.0), 120 | c64::new(3.0, 4.0), 121 | c64::new(5.0, 6.0), 122 | c64::new(7.0, 8.0), 123 | c64::new(2.0, 0.0), 124 | c64::new(7.0, -8.0), 125 | c64::new(5.0, -6.0), 126 | c64::new(3.0, -4.0), 127 | ] 128 | ); 129 | } 130 | } 131 | -------------------------------------------------------------------------------- /tests/lib.rs: -------------------------------------------------------------------------------- 1 | extern crate assert; 2 | extern crate dft; 3 | 4 | use dft::{transform, unpack, Operation, Plan, c64}; 5 | 6 | mod fixtures; 7 | 8 | #[test] 9 | fn complex_forward_1() { 10 | let mut data = vec![c64::new(1.0, -2.0)]; 11 | transform(&mut data, &Plan::new(Operation::Forward, 1)); 12 | assert!(data == vec![c64::new(1.0, -2.0)]); 13 | } 14 | 15 | #[test] 16 | fn complex_forward_2() { 17 | let mut data = vec![c64::new(1.0, -2.0), c64::new(3.0, -4.0)]; 18 | transform(&mut data, &Plan::new(Operation::Forward, 2)); 19 | assert!(data == vec![c64::new(4.0, -6.0), c64::new(-2.0, 2.0)]); 20 | } 21 | 22 | #[test] 23 | fn complex_forward_128() { 24 | let mut data = fixtures::TIME_DATA_256.to_vec(); 25 | transform(as_c64_mut(&mut data), &Plan::new(Operation::Forward, 128)); 26 | assert::close(&data, &fixtures::FREQUENCY_DATA_128_COMPLEX[..], 1e-14); 27 | } 28 | 29 | #[test] 30 | fn complex_forward_real_256() { 31 | let mut data = to_c64(&fixtures::TIME_DATA_256); 32 | transform(&mut data, &Plan::new(Operation::Forward, 256)); 33 | assert::close( 34 | as_f64(&data), 35 | &fixtures::FREQUENCY_DATA_256_REAL_UNPACKED[..], 36 | 1e-13, 37 | ); 38 | } 39 | 40 | #[test] 41 | fn complex_inverse_128() { 42 | let mut data = fixtures::FREQUENCY_DATA_128_COMPLEX.to_vec(); 43 | transform(as_c64_mut(&mut data), &Plan::new(Operation::Inverse, 128)); 44 | assert::close(&data, &fixtures::TIME_DATA_256[..], 1e-14); 45 | } 46 | 47 | #[test] 48 | fn real_forward_1() { 49 | let mut data = vec![1.0]; 50 | transform(&mut data, &Plan::new(Operation::Forward, 1)); 51 | assert!(unpack(&data) == vec![c64::new(1.0, 0.0)]); 52 | } 53 | 54 | #[test] 55 | fn real_forward_2() { 56 | let mut data = vec![1.0, -2.0]; 57 | transform(&mut data, &Plan::new(Operation::Forward, 2)); 58 | assert!(unpack(&data) == vec![c64::new(-1.0, 0.0), c64::new(3.0, 0.0)]); 59 | } 60 | 61 | #[test] 62 | fn real_forward_4() { 63 | let mut data = vec![1.0, -2.0, 3.0, -4.0]; 64 | transform(&mut data, &Plan::new(Operation::Forward, 4)); 65 | assert!( 66 | unpack(&data) 67 | == vec![ 68 | c64::new(-2.0, 0.0), 69 | c64::new(-2.0, -2.0), 70 | c64::new(10.0, 0.0), 71 | c64::new(-2.0, 2.0), 72 | ] 73 | ); 74 | } 75 | 76 | #[test] 77 | fn real_forward_256() { 78 | let mut data = fixtures::TIME_DATA_256.to_vec(); 79 | transform(&mut data, &Plan::new(Operation::Forward, 256)); 80 | assert::close(&data, &fixtures::FREQUENCY_DATA_256_REAL_PACKED[..], 1e-13); 81 | let data = unpack(&data); 82 | assert::close( 83 | as_f64(&data), 84 | &fixtures::FREQUENCY_DATA_256_REAL_UNPACKED[..], 85 | 1e-13, 86 | ); 87 | } 88 | 89 | #[test] 90 | fn real_forward_512() { 91 | let mut data = fixtures::TIME_DATA_512.to_vec(); 92 | transform(&mut data, &Plan::new(Operation::Forward, 512)); 93 | let data = unpack(&data); 94 | assert::close( 95 | as_f64(&data), 96 | &fixtures::FREQUENCY_DATA_512_REAL_UNPACKED[..], 97 | 1e-12, 98 | ); 99 | } 100 | 101 | #[test] 102 | fn real_inverse_256() { 103 | let mut data = fixtures::FREQUENCY_DATA_256_REAL_PACKED.to_vec(); 104 | transform(&mut data, &Plan::new(Operation::Inverse, 256)); 105 | assert::close(&data, &fixtures::TIME_DATA_256[..], 1e-14); 106 | } 107 | 108 | #[test] 109 | fn real_inverse_512() { 110 | let mut data = fixtures::TIME_DATA_512.to_vec(); 111 | transform(&mut data, &Plan::new(Operation::Forward, 512)); 112 | transform(&mut data, &Plan::new(Operation::Inverse, 512)); 113 | assert::close(&data, &fixtures::TIME_DATA_512[..], 1e-14); 114 | } 115 | 116 | fn as_f64(slice: &[c64]) -> &[f64] { 117 | unsafe { std::slice::from_raw_parts(slice.as_ptr() as *const _, 2 * slice.len()) } 118 | } 119 | 120 | fn as_c64_mut(slice: &mut [f64]) -> &mut [c64] { 121 | unsafe { std::slice::from_raw_parts_mut(slice.as_mut_ptr() as *mut _, slice.len() / 2) } 122 | } 123 | 124 | fn to_c64(slice: &[f64]) -> Vec { 125 | slice.iter().map(|&re| c64::new(re, 0.0)).collect() 126 | } 127 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | //! [Discrete Fourier transform][1]. 2 | //! 3 | //! The `Transform` trait is responsible for performing the transform. The trait 4 | //! is implemented for both real and complex data. There are three transform 5 | //! operations available: forward, backward, and inverse. The desired operation 6 | //! is specified by the `Operation` enumeration passed to the `Plan::new` 7 | //! function, which precomputes auxiliary information needed for 8 | //! `Transform::transform`. All the operations are preformed in place. 9 | //! 10 | //! When applied to real data, the transform works as follows. If the operation 11 | //! is forward, the data are replaced by the positive frequency half of their 12 | //! complex transform. The first and last components of the complex transform, 13 | //! which are real, are stored in `self[0]` and `self[1]`, respectively. If the 14 | //! operation is backward or inverse, the data are assumed to be stored 15 | //! according to the above convention. See the reference below for further 16 | //! details. 17 | //! 18 | //! ## Example 19 | //! 20 | //! ``` 21 | //! use dft::{Operation, Plan, c64}; 22 | //! 23 | //! let plan = Plan::new(Operation::Forward, 512); 24 | //! let mut data = vec![c64::new(42.0, 69.0); 512]; 25 | //! dft::transform(&mut data, &plan); 26 | //! ``` 27 | //! 28 | //! ## References 29 | //! 30 | //! 1. W. Press, S. Teukolsky, W. Vetterling, and B. Flannery, “Numerical 31 | //! Recipes 3rd Edition: The Art of Scientific Computing,” Cambridge University 32 | //! Press, 2007. 33 | //! 34 | //! [1]: https://en.wikipedia.org/wiki/Discrete_Fourier_transform 35 | 36 | extern crate num_complex; 37 | extern crate num_traits; 38 | 39 | use num_complex::Complex; 40 | use num_traits::{Float, FloatConst, One}; 41 | 42 | /// A complex number with 32-bit parts. 43 | #[allow(non_camel_case_types)] 44 | pub type c32 = Complex; 45 | 46 | /// A complex number with 64-bit parts. 47 | #[allow(non_camel_case_types)] 48 | pub type c64 = Complex; 49 | 50 | mod complex; 51 | mod real; 52 | 53 | pub use real::unpack; 54 | 55 | /// A transform operation. 56 | #[derive(Clone, Copy, Debug, Eq, PartialEq)] 57 | pub enum Operation { 58 | /// The forward transform. 59 | Forward, 60 | /// The backward transform. 61 | Backward, 62 | /// The inverse transform. 63 | Inverse, 64 | } 65 | 66 | /// A transform plan. 67 | #[derive(Clone, Debug)] 68 | pub struct Plan { 69 | n: usize, 70 | factors: Vec>, 71 | operation: Operation, 72 | } 73 | 74 | /// The transform. 75 | pub trait Transform { 76 | /// Perform the transform. 77 | fn transform(&mut self, &Plan); 78 | } 79 | 80 | impl Plan 81 | where 82 | T: Float + FloatConst, 83 | { 84 | /// Create a plan for a specific operation and specific number of points. 85 | /// 86 | /// The number of points should be a power of two. 87 | pub fn new(operation: Operation, n: usize) -> Self { 88 | assert!(n.is_power_of_two()); 89 | let one = T::one(); 90 | let two = one + one; 91 | let mut factors = vec![]; 92 | let sign = if let Operation::Forward = operation { 93 | -one 94 | } else { 95 | one 96 | }; 97 | let mut step = 1; 98 | while step < n { 99 | let (multiplier, mut factor) = { 100 | let theta = T::PI() / T::from(step).unwrap(); 101 | let sine = (theta / two).sin(); 102 | ( 103 | Complex::new(-two * sine * sine, sign * theta.sin()), 104 | Complex::one(), 105 | ) 106 | }; 107 | for _ in 0..step { 108 | factors.push(factor); 109 | factor = multiplier * factor + factor; 110 | } 111 | step <<= 1; 112 | } 113 | Plan { 114 | n: n, 115 | factors: factors, 116 | operation: operation, 117 | } 118 | } 119 | } 120 | 121 | /// Perform the transform. 122 | /// 123 | /// The function is a shortcut for `Transform::transform`. 124 | #[inline(always)] 125 | pub fn transform(data: &mut D, plan: &Plan) 126 | where 127 | D: Transform, 128 | { 129 | Transform::transform(data, plan); 130 | } 131 | -------------------------------------------------------------------------------- /tests/fixtures.rs: -------------------------------------------------------------------------------- 1 | pub const TIME_DATA_256: [f64; 256] = [ 2 | 0.242578298897752, 0.013469574513598, 0.383138850044058, 0.414652690484492, 3 | 0.067768972864267, 0.993126929734427, 0.484308046514312, 0.765337766038877, 4 | 0.031833815403205, 0.030935481670748, 0.932640440265015, 0.887879534106646, 5 | 0.591329730391190, 0.478778684734729, 0.833354336597656, 0.186335196805343, 6 | 0.735652707394051, 0.115053171811184, 0.698658630577223, 0.355604111382553, 7 | 0.638300006575091, 0.908210507551306, 0.294000414802693, 0.264971588861650, 8 | 0.377493997745912, 0.541620115536088, 0.009281815034003, 0.999465276486923, 9 | 0.012901915708977, 0.842497320772380, 0.852470221394892, 0.467010983949067, 10 | 0.053607231962312, 0.976747590571990, 0.196754743436703, 0.856972940665191, 11 | 0.144213759873162, 0.800662188232253, 0.729397619482781, 0.985790647094041, 12 | 0.183405709538332, 0.499760210746788, 0.469862021258968, 0.970991299474142, 13 | 0.450770261907377, 0.095791877292000, 0.974081646638960, 0.390235061007661, 14 | 0.680670355763598, 0.026669318800172, 0.231241074498389, 0.468739094430925, 15 | 0.097960100554843, 0.415410025238716, 0.796294187100741, 0.316402602156812, 16 | 0.778534449533808, 0.828493314715332, 0.487140420585470, 0.369048780002188, 17 | 0.602845496778770, 0.024264360789333, 0.811111786314804, 0.355792592910953, 18 | 0.806109054389460, 0.274877123662679, 0.859817398646761, 0.951019056118568, 19 | 0.777276184771804, 0.680837459713611, 0.835185406652831, 0.961129614133914, 20 | 0.705424748689600, 0.073751226101886, 0.536857094400030, 0.957185581306548, 21 | 0.418065019146570, 0.418776796394389, 0.381617000504218, 0.836927474400460, 22 | 0.240062248539209, 0.726211198478104, 0.431612821496843, 0.116690897437134, 23 | 0.223913225915243, 0.309587957481662, 0.244801394289733, 0.377033827536290, 24 | 0.807539402417624, 0.314736433008097, 0.775229567091553, 0.283334107735816, 25 | 0.996348715851246, 0.632867311887847, 0.600910899043507, 0.509480224228222, 26 | 0.834128603727617, 0.199442850053051, 0.035980841627336, 0.730005230628888, 27 | 0.197911179716657, 0.293197497862017, 0.770346566927781, 0.214750355209573, 28 | 0.309220007299082, 0.060662675677176, 0.557590106296162, 0.416916519597600, 29 | 0.115944876855214, 0.685545305575032, 0.959950799569465, 0.893088363992557, 30 | 0.136133622907164, 0.997800200710911, 0.027973348287853, 0.148064673947200, 31 | 0.522975030598685, 0.641339272093651, 0.989146078000379, 0.578132952367017, 32 | 0.680530432462939, 0.674978404620187, 0.362046451476424, 0.914709964261721, 33 | 0.530369346742690, 0.917610704394807, 0.283108763528573, 0.208988624722226, 34 | 0.471815706450406, 0.806578311979109, 0.161689432878834, 0.514298394561884, 35 | 0.813117401587366, 0.064168478857804, 0.479624163117085, 0.043309508843026, 36 | 0.902915124736221, 0.294501441668021, 0.685730114432857, 0.066033273034745, 37 | 0.821219894951777, 0.242774454524170, 0.310257187723302, 0.492554065535103, 38 | 0.356179448476145, 0.307990538565438, 0.396981669309075, 0.070916077620776, 39 | 0.886516572389061, 0.684032142946512, 0.528226502020018, 0.902819450433748, 40 | 0.686503439995695, 0.063316007639894, 0.152140403702920, 0.023765034984688, 41 | 0.418942987648278, 0.174793404608403, 0.752751253430150, 0.490316400532758, 42 | 0.747743754064545, 0.329274562806485, 0.117577088585858, 0.118127862512194, 43 | 0.374985242437099, 0.376969640318756, 0.728744837329138, 0.014480990830102, 44 | 0.382012881516485, 0.490499647562625, 0.827576585033711, 0.079664661586128, 45 | 0.923967278061419, 0.118042378275675, 0.938251679268783, 0.195973470432671, 46 | 0.726117561909425, 0.857863011703763, 0.103637705139647, 0.838910282048821, 47 | 0.565110394528653, 0.810400843066350, 0.406969416144755, 0.934977144903958, 48 | 0.160874400828441, 0.816054723605539, 0.431739638294903, 0.248100822441327, 49 | 0.830522771380154, 0.596218586245653, 0.645779030698249, 0.608168945465316, 50 | 0.495466435558846, 0.304382437516182, 0.755627334469756, 0.828610433185757, 51 | 0.455550553023606, 0.438144667743773, 0.897430769585739, 0.118944427519545, 52 | 0.098993320995473, 0.780745970914488, 0.997533159795000, 0.539816674562086, 53 | 0.698849364974932, 0.561277133674024, 0.384785659324744, 0.092576270966128, 54 | 0.929386127707263, 0.192648375962231, 0.841254797224540, 0.969376952838794, 55 | 0.318446361608080, 0.127999546997249, 0.288386382762523, 0.909935089717589, 56 | 0.279052883516556, 0.041813262757758, 0.755507169643188, 0.809000193052460, 57 | 0.866244632688465, 0.973541595029431, 0.313587659650290, 0.467795742427835, 58 | 0.243042984624879, 0.823442590340712, 0.599615856353015, 0.743697725117066, 59 | 0.327666042525166, 0.083176720460493, 0.951140779513466, 0.823081282816399, 60 | 0.527120295226164, 0.310801866143384, 0.646964271854127, 0.528517052311691, 61 | 0.786098202590876, 0.952490944858869, 0.515310243012062, 0.819254303732540, 62 | 0.207082832794209, 0.441170772277364, 0.757169665655666, 0.750570674776365, 63 | 0.841330966372663, 0.249551825341560, 0.217528515596655, 0.001761632972286, 64 | 0.607765365209321, 0.712493073061338, 0.871078941911030, 0.223776698682353, 65 | 0.014974754310667, 0.680695699379172, 0.452619465744411, 0.175360766321123, 66 | ]; 67 | 68 | pub const FREQUENCY_DATA_128_COMPLEX: [f64; 2 * 128] = [ 69 | 6.750656266720340e+01, 6.279874768750683e+01, 7.714838837855442e-02, 5.819389938527752e+00, 70 | -5.303978155417409e+00, -2.887549849606836e-01, 4.308501796277235e+00, -2.780062259410463e-01, 71 | -1.084455288816293e-01, -9.653434181182980e-01, 7.727658650311002e-01, -8.707366039824819e+00, 72 | -5.278077778941212e+00, -4.066322943629877e+00, -3.458371226842232e+00, 8.013344593032468e+00, 73 | -3.599237215989637e+00, -1.105183198676696e+00, 4.133604334208186e+00, -3.445364011535524e+00, 74 | -4.944656692463901e+00, 5.315462183419959e+00, 3.880468387697888e+00, 1.634838899334416e+00, 75 | 2.983076467939860e+00, -3.013246639835038e+00, 8.405096230874929e-01, 4.498605610210712e+00, 76 | -2.972572998085648e+00, 5.831133886072569e+00, 4.288737227223233e+00, -3.968319162458111e+00, 77 | -8.048535626585105e-01, 4.667294297528397e+00, 1.411453345272351e+00, -1.449094611132408e+00, 78 | -7.921745368568175e+00, -7.472969089954909e+00, 3.116401263119543e+00, 8.060860339983653e-01, 79 | -1.098781173708808e+00, -4.976387399730230e+00, 2.090636515202629e+00, -2.544058986903604e+00, 80 | 2.305750958010683e+00, 3.711657195983209e-02, 8.516540731741751e-02, 1.846582481253431e+00, 81 | 2.344622479665092e+00, 9.782457560315421e-01, -5.653027779602048e+00, -4.457764259327358e+00, 82 | 4.396893371992927e+00, -1.781029123711273e+00, 1.303130356713504e+00, 1.104086803126383e-01, 83 | 8.202058412989162e+00, -1.912136722291750e+00, -2.386952673947501e+00, -3.800460327948856e-01, 84 | -4.755886984684770e+00, -2.371006165743835e+00, 9.838525643858385e-01, -1.970780039723673e+00, 85 | 8.843052074705682e-01, 1.209832476084040e+00, 4.482138368789980e+00, -8.618372361868662e+00, 86 | 2.553617632271545e+00, -2.515247887047421e+00, -1.310659972997361e+00, -4.744849190522960e+00, 87 | -5.848019862181545e+00, -1.853688693742562e+00, 2.211012545853336e+00, -3.584550392170881e+00, 88 | 1.466063738740644e+00, 3.285544689641922e-01, -3.772195284223943e+00, 2.554683615488591e+00, 89 | 3.144799926493497e+00, 5.320412494125712e-01, -1.617862103749616e+00, 4.505029568623644e+00, 90 | 4.841738890983537e+00, 4.304535776881372e+00, -1.874383165372953e+00, -1.816379942063393e+00, 91 | -1.559401743047192e+00, -2.563598701770973e+00, -2.768891360840021e+00, 1.367687274872984e+00, 92 | -3.451402723746730e+00, -2.019459598023322e-01, -1.849780677085415e+00, -6.075332676660432e+00, 93 | 3.813912169625591e+00, 1.672124644400447e+00, 2.897552781182169e+00, 4.424347873913383e+00, 94 | 5.144179917427660e-02, 8.187374675121173e+00, -6.307832248431945e-01, -1.040038800556793e+00, 95 | 9.638242571688409e-01, -1.315676780411990e+00, 4.548911919541162e+00, -3.110338786263292e+00, 96 | 7.143970293892079e-01, -1.027012942409028e+00, -6.771408853367402e-01, 7.689403378304775e+00, 97 | 3.266763808523832e+00, -4.939142356746464e+00, -1.680667450021413e+00, -5.672119730229586e+00, 98 | 2.356251252889546e+00, 3.100152502890580e+00, -1.718586561803939e+00, -2.848378813769422e+00, 99 | 2.166953458666474e+00, 3.698992188846235e+00, -2.521465228517406e+00, -1.483012583302976e+00, 100 | -1.385547239860872e+00, 4.278296734710759e+00, -3.231893261005089e+00, -3.499165263231714e+00, 101 | -3.991693675979821e+00, -2.395612192990072e+00, -7.551126038911470e+00, -1.253320876553413e+00, 102 | 2.949752700932412e+00, 2.757985604650246e+00, 2.965000493451835e+00, 5.042549679265349e+00, 103 | -2.276214983007470e+00, -8.605327422795508e-01, -3.429327683732336e+00, 3.634086096757940e-01, 104 | -9.235956441894744e-01, -1.735427210626094e+00, -3.923350081315737e+00, -8.961379286949720e-01, 105 | -4.027346047616183e+00, 5.509694798065775e+00, -6.249259838595390e+00, 6.001167756824247e+00, 106 | -7.578924142578991e-02, 1.719766675858380e+00, -3.682461675261361e-01, -1.498059975229270e+00, 107 | -2.253868990511852e+00, -2.913770876062722e+00, 2.473335187775014e+00, -3.737196599784345e-01, 108 | 9.237764999281854e-01, 2.150735454872202e+00, -2.202133267022083e+00, 1.329217526808811e+00, 109 | 5.396652531710098e-01, 7.023277604131626e-01, -9.987304998877746e-01, -1.368332585830754e+00, 110 | -2.853890281653036e+00, -3.715099310600182e+00, 9.673864924730763e-01, -5.576552424605284e+00, 111 | 3.905872946117088e+00, -2.826501461749119e+00, 6.414605960628869e+00, -5.679739832207091e+00, 112 | 1.909130437842080e+00, 9.955398727323348e-01, 3.638877999600390e+00, 1.258926814764474e+00, 113 | -8.414044119346986e-03, -3.991754204800230e+00, 5.146915245537949e+00, 2.820615592243083e-01, 114 | -4.264963191688312e-01, 3.030254700260019e+00, 4.878539287722978e+00, -1.459376706664878e+00, 115 | -3.399157829092533e+00, 2.161358937350359e+00, 4.840508528923103e+00, -3.204368559739170e+00, 116 | 2.979104548159062e+00, -1.160028660033101e+00, -2.413351595413149e-01, 3.101405290332420e+00, 117 | -2.699185197567189e+00, -5.897826029871508e+00, -6.632075418392930e+00, -1.685124294109047e+00, 118 | -2.674474141084143e+00, -2.563372692380101e+00, -4.348080993540033e-01, 2.147158479497566e+00, 119 | -3.420180348851098e-01, 2.522012423589093e+00, 7.249878567998773e-01, -2.068196780758695e+00, 120 | -1.005151880556292e+00, 2.902422614798151e+00, -3.071761940805398e-01, -5.087687483603752e+00, 121 | -1.792775263985136e+00, 2.641548369598412e-01, -7.517681005578722e-01, 2.124100304630884e+00, 122 | 3.012458946272915e+00, -6.457540983540484e+00, -4.860448155416430e-02, -2.372949299902082e+00, 123 | -2.236600417683022e+00, 7.389268307820533e-01, 1.495969367959897e+00, 1.905315704750479e+00, 124 | 2.398999344465012e+00, -7.411245301876057e-02, 2.554697843376545e+00, -2.629716248632333e+00, 125 | -2.002497059929998e+00, -3.607915605047513e+00, 1.320095075374978e+00, -2.156073489574819e+00, 126 | -1.629751417352065e+00, 4.497170521285455e+00, -2.956509867164297e+00, -3.563268353779526e+00, 127 | -1.949442402686502e+00, -1.250892366300881e+00, -1.286794839414063e+00, -3.596629452384589e+00, 128 | -5.636666719031170e+00, -3.624154259337708e+00, -6.973431206318839e+00, 1.575164194822264e+00, 129 | -2.627563294940978e-01, 3.254410744830774e+00, -6.749332581521038e+00, 4.840407656923577e+00, 130 | 8.039106767692121e-01, 1.470542740596267e-01, -4.663614419551561e-01, -5.481824322589377e+00, 131 | 5.049316157478017e+00, 4.568830841146547e-01, -3.884636396852787e+00, -6.613971933163752e+00, 132 | -1.213411748796469e+00, -2.824305441697994e+00, -2.916435892389174e+00, 2.258137395096740e+00, 133 | ]; 134 | 135 | pub const FREQUENCY_DATA_256_REAL_PACKED: [f64; 256] = [ 136 | 1.303053103547102e+02, 4.707814979696565e+00, 2.581170396731581e+00, 1.851687150427200e-01, 137 | -4.712992966498972e+00, 3.386970116076342e+00, -3.526081640989058e+00, -6.639837287112846e-01, 138 | 2.470203860537832e+00, 1.880268489878626e+00, -6.963879517225686e+00, -1.359220918694192e+00, 139 | -3.729301277306694e+00, 1.188929523990152e+00, 9.470909676459633e-01, -1.133537735465808e+00, 140 | -5.515738367157939e-01, -7.532580478755273e-01, -3.549075039135675e+00, -7.723961671240312e+00, 141 | -4.554423293554939e+00, 3.928695392899054e+00, -3.376141283756013e-01, 3.873091478779078e-01, 142 | -2.239363597649239e+00, -2.622333161216239e+00, -1.209463421383755e+00, 2.081549368638947e+00, 143 | 2.787306134089562e+00, -4.406059514292808e-01, -5.867907573418175e-01, -1.188914452808487e+00, 144 | -1.143465327856217e+00, 3.381662456994257e+00, 3.502762058115902e-01, 1.939344791605026e+00, 145 | -3.966269981614960e+00, 2.578889617469153e+00, 3.152848007718109e+00, -1.882857879463846e+00, 146 | -3.804426226346088e+00, -2.360628066063453e+00, -1.645310465960080e+00, 1.955745233096742e-01, 147 | 8.727435711779677e-02, 5.200789512413666e+00, 1.120142690086255e+00, -1.554454960578806e+00, 148 | -3.568747367377898e-01, -1.708135182867248e+00, -5.343117610163509e+00, 5.248479799162289e+00, 149 | 5.372292947253843e-01, -4.845214246729507e+00, 6.450571433636446e-02, 1.463660986831282e+00, 150 | 1.455587976273307e+00, -5.712855301747826e+00, -1.042998871212444e-01, -1.101626615691205e+00, 151 | -4.844351629884984e+00, 2.524159012105675e+00, -6.773746016629307e+00, -1.640287552626491e+00, 152 | -3.831851193928845e+00, 3.944330086139181e+00, -1.492165597423655e+00, -5.490578426839170e+00, 153 | 1.689911156425059e+00, 8.268603075350915e-01, 1.497677302367308e+00, 4.248256795204093e+00, 154 | -3.579498902285684e+00, -1.349669158977704e+00, 3.044651859669117e+00, 1.746167472193509e+00, 155 | 7.601446066545731e-01, -3.263458881514898e+00, 5.150135192916219e+00, 2.544519592918016e+00, 156 | -7.037646240419694e-01, 2.824304911746514e+00, 4.772947230001412e+00, 5.943735485336084e-01, 157 | 3.480135296267814e+00, -1.372346334547340e+00, 4.028770258877906e+00, 7.235631972573927e+00, 158 | 2.312768769350037e+00, 3.796429682741911e+00, -1.782620750385733e-01, 6.191786592630610e+00, 159 | -3.719950405898309e+00, 3.654794911963337e+00, -2.543476747185558e+00, 1.221476001211499e+00, 160 | 1.118615654278817e+00, -1.238455571070933e+00, -9.959356075165566e-01, -2.054128218014691e+00, 161 | 2.639682132748302e+00, -1.701633154204415e+00, 2.173264828603092e+00, 8.248948121629960e-01, 162 | -2.798464518993120e+00, 2.355688055046297e+00, -8.937461326272580e-01, 7.588584122960707e-01, 163 | 2.021391810490336e-02, -1.805385996360098e+00, -4.681753970646021e+00, -6.445270984734714e+00, 164 | -3.901614280067266e+00, -6.215718415805858e+00, -4.468302161079752e+00, 6.560811803588424e-01, 165 | -8.057225542680853e-01, 1.502186010252237e+00, -3.574988339289839e+00, -4.774591638105148e-01, 166 | -2.126408608816460e+00, 6.496133889843871e-01, 3.088495481715207e+00, -4.835922591012089e+00, 167 | 3.119768676762977e+00, -2.647386306731720e+00, -7.608791527035967e+00, 1.199605557244359e+00, 168 | -3.991693675979821e+00, 2.395612192990072e+00, -3.174227772880592e+00, 3.445449943922660e+00, 169 | -1.555563215691437e+00, -4.167697436792233e+00, -2.644960216780778e+00, 1.689639671556236e+00, 170 | 2.017147084475464e+00, -3.909911542141398e+00, -1.572925906246434e+00, 2.734328259634700e+00, 171 | 2.238378162968156e+00, -3.333393703264437e+00, -1.135715370257395e+00, 5.432062981893454e+00, 172 | 3.141032040974915e+00, 4.233118739006381e+00, -2.244646753286111e+00, -8.133506606215242e+00, 173 | 6.183938698585162e-01, 9.413936219073087e-01, 5.074411884642282e+00, 2.371137223330094e+00, 174 | 1.508419785650108e+00, 7.575939593955647e-01, -3.307128656712730e-01, 1.491213952741355e+00, 175 | -1.664463833645839e+00, -7.738272374453388e+00, 1.691355121676643e+00, -5.149258565119262e+00, 176 | 3.234961768517784e+00, -2.208252455058216e+00, -3.050344297876333e-01, 5.928476092041176e+00, 177 | -2.585342599501458e+00, 1.416415611654855e-01, -1.623242793328372e+00, -7.524531068476570e-01, 178 | 3.370243371985904e-02, 3.533526922763765e+00, 5.114525363780102e-01, 3.372272082430228e+00, 179 | 3.270734032557804e+00, -4.681342238696375e+00, -2.751931334150639e+00, -2.651729205325560e+00, 180 | 3.840150506416120e+00, -1.699490542466287e+00, -3.775415231602213e+00, 2.718975366537331e-01, 181 | 2.794228129172392e-01, -5.617586502190706e-01, 4.044899973907196e+00, 3.871341157699513e+00, 182 | -5.667678788988394e+00, 2.665378472115218e+00, 2.032171253558433e+00, 5.788737425987882e+00, 183 | 3.842811024005548e+00, 2.182079534549411e+00, 5.732968806672321e+00, 6.229199225361914e+00, 184 | 2.016971203832224e+00, -3.163328419816367e+00, 1.125523162622214e+00, -1.354631807011866e+00, 185 | -2.586009495883931e+00, 2.331792485469409e+00, -2.717460886180260e+00, 1.425577896601247e+00, 186 | 6.404452401830746e+00, -1.278706155866981e+00, 1.963612499177015e+00, -7.149444742400527e-01, 187 | 2.854512196711251e+00, -1.617625082200844e-01, -6.170863635190775e-01, 4.618556574885895e+00, 188 | 9.087219524177452e-01, -2.422226101938949e+00, -1.786745383326708e+00, -1.276937137201354e+00, 189 | 5.230935547165801e+00, -1.293868043086649e+00, 3.687342499608546e+00, 3.666842103111982e-01, 190 | 4.690446349542574e-01, 3.354686164448831e+00, 1.459522623361331e+00, -7.836282087117324e-01, 191 | -1.556476042488201e+00, 9.977746254405300e+00, 3.615874982837306e+00, 7.587231541051005e-01, 192 | -1.663885294732292e+00, -4.893547445581648e+00, 6.195623059940029e+00, 6.233312200748059e-01, 193 | -7.389630549527273e+00, -1.774569316216396e+00, -9.065368226930491e-01, -5.980324595351290e+00, 194 | 3.272997662902597e+00, -8.599788876820809e-01, 2.931287676659427e+00, -4.844159203841096e+00, 195 | -6.026900117940131e+00, -5.010921049858613e+00, 7.092481670250209e-01, -2.703433464882526e+00, 196 | -3.310419708767941e+00, 3.606335895631942e+00, -1.115479477600923e+01, -4.306474671574700e+00, 197 | -7.448658248653062e-01, 5.402306741679653e+00, 7.270283940301629e+00, 1.866320798541252e+00, 198 | 2.470666768058557e+00, 3.302494992111579e+00, 3.949947040413505e+00, -6.999949435933990e+00, 199 | -1.804396937714904e+00, 8.514196593390323e-01, -5.420457900742201e+00, -3.376083828388293e+00, 200 | ]; 201 | 202 | pub const FREQUENCY_DATA_256_REAL_UNPACKED: [f64; 2 * 256] = [ 203 | 1.303053103547102e+02, 0.000000000000000e+00, 2.581170396731584e+00, 1.851687150427199e-01, 204 | -4.712992966498973e+00, 3.386970116076343e+00, -3.526081640989057e+00, -6.639837287112855e-01, 205 | 2.470203860537831e+00, 1.880268489878626e+00, -6.963879517225685e+00, -1.359220918694192e+00, 206 | -3.729301277306694e+00, 1.188929523990150e+00, 9.470909676459618e-01, -1.133537735465806e+00, 207 | -5.515738367157939e-01, -7.532580478755269e-01, -3.549075039135673e+00, -7.723961671240310e+00, 208 | -4.554423293554938e+00, 3.928695392899054e+00, -3.376141283756011e-01, 3.873091478779083e-01, 209 | -2.239363597649238e+00, -2.622333161216238e+00, -1.209463421383755e+00, 2.081549368638949e+00, 210 | 2.787306134089560e+00, -4.406059514292826e-01, -5.867907573418165e-01, -1.188914452808486e+00, 211 | -1.143465327856217e+00, 3.381662456994260e+00, 3.502762058115909e-01, 1.939344791605027e+00, 212 | -3.966269981614962e+00, 2.578889617469152e+00, 3.152848007718109e+00, -1.882857879463846e+00, 213 | -3.804426226346088e+00, -2.360628066063453e+00, -1.645310465960079e+00, 1.955745233096744e-01, 214 | 8.727435711779785e-02, 5.200789512413666e+00, 1.120142690086254e+00, -1.554454960578805e+00, 215 | -3.568747367377906e-01, -1.708135182867247e+00, -5.343117610163509e+00, 5.248479799162289e+00, 216 | 5.372292947253837e-01, -4.845214246729507e+00, 6.450571433636654e-02, 1.463660986831282e+00, 217 | 1.455587976273307e+00, -5.712855301747824e+00, -1.042998871212450e-01, -1.101626615691207e+00, 218 | -4.844351629884981e+00, 2.524159012105676e+00, -6.773746016629306e+00, -1.640287552626490e+00, 219 | -3.831851193928844e+00, 3.944330086139181e+00, -1.492165597423655e+00, -5.490578426839169e+00, 220 | 1.689911156425059e+00, 8.268603075350915e-01, 1.497677302367308e+00, 4.248256795204092e+00, 221 | -3.579498902285684e+00, -1.349669158977704e+00, 3.044651859669117e+00, 1.746167472193509e+00, 222 | 7.601446066545735e-01, -3.263458881514898e+00, 5.150135192916220e+00, 2.544519592918017e+00, 223 | -7.037646240419698e-01, 2.824304911746514e+00, 4.772947230001412e+00, 5.943735485336072e-01, 224 | 3.480135296267813e+00, -1.372346334547339e+00, 4.028770258877906e+00, 7.235631972573928e+00, 225 | 2.312768769350037e+00, 3.796429682741911e+00, -1.782620750385735e-01, 6.191786592630609e+00, 226 | -3.719950405898309e+00, 3.654794911963335e+00, -2.543476747185558e+00, 1.221476001211498e+00, 227 | 1.118615654278817e+00, -1.238455571070932e+00, -9.959356075165555e-01, -2.054128218014691e+00, 228 | 2.639682132748301e+00, -1.701633154204415e+00, 2.173264828603092e+00, 8.248948121629960e-01, 229 | -2.798464518993120e+00, 2.355688055046297e+00, -8.937461326272578e-01, 7.588584122960702e-01, 230 | 2.021391810490292e-02, -1.805385996360099e+00, -4.681753970646017e+00, -6.445270984734710e+00, 231 | -3.901614280067265e+00, -6.215718415805858e+00, -4.468302161079752e+00, 6.560811803588420e-01, 232 | -8.057225542680848e-01, 1.502186010252237e+00, -3.574988339289840e+00, -4.774591638105163e-01, 233 | -2.126408608816460e+00, 6.496133889843878e-01, 3.088495481715207e+00, -4.835922591012088e+00, 234 | 3.119768676762977e+00, -2.647386306731720e+00, -7.608791527035966e+00, 1.199605557244359e+00, 235 | -3.991693675979821e+00, 2.395612192990072e+00, -3.174227772880593e+00, 3.445449943922659e+00, 236 | -1.555563215691436e+00, -4.167697436792233e+00, -2.644960216780778e+00, 1.689639671556237e+00, 237 | 2.017147084475464e+00, -3.909911542141400e+00, -1.572925906246435e+00, 2.734328259634699e+00, 238 | 2.238378162968156e+00, -3.333393703264438e+00, -1.135715370257396e+00, 5.432062981893455e+00, 239 | 3.141032040974913e+00, 4.233118739006381e+00, -2.244646753286113e+00, -8.133506606215240e+00, 240 | 6.183938698585155e-01, 9.413936219073080e-01, 5.074411884642281e+00, 2.371137223330093e+00, 241 | 1.508419785650108e+00, 7.575939593955644e-01, -3.307128656712724e-01, 1.491213952741355e+00, 242 | -1.664463833645840e+00, -7.738272374453387e+00, 1.691355121676642e+00, -5.149258565119261e+00, 243 | 3.234961768517784e+00, -2.208252455058217e+00, -3.050344297876335e-01, 5.928476092041176e+00, 244 | -2.585342599501457e+00, 1.416415611654855e-01, -1.623242793328371e+00, -7.524531068476575e-01, 245 | 3.370243371985926e-02, 3.533526922763765e+00, 5.114525363780107e-01, 3.372272082430229e+00, 246 | 3.270734032557803e+00, -4.681342238696377e+00, -2.751931334150639e+00, -2.651729205325561e+00, 247 | 3.840150506416120e+00, -1.699490542466287e+00, -3.775415231602213e+00, 2.718975366537348e-01, 248 | 2.794228129172385e-01, -5.617586502190708e-01, 4.044899973907196e+00, 3.871341157699510e+00, 249 | -5.667678788988395e+00, 2.665378472115218e+00, 2.032171253558434e+00, 5.788737425987882e+00, 250 | 3.842811024005547e+00, 2.182079534549411e+00, 5.732968806672320e+00, 6.229199225361914e+00, 251 | 2.016971203832223e+00, -3.163328419816367e+00, 1.125523162622212e+00, -1.354631807011866e+00, 252 | -2.586009495883930e+00, 2.331792485469409e+00, -2.717460886180259e+00, 1.425577896601245e+00, 253 | 6.404452401830746e+00, -1.278706155866979e+00, 1.963612499177015e+00, -7.149444742400535e-01, 254 | 2.854512196711251e+00, -1.617625082200842e-01, -6.170863635190793e-01, 4.618556574885894e+00, 255 | 9.087219524177454e-01, -2.422226101938949e+00, -1.786745383326708e+00, -1.276937137201355e+00, 256 | 5.230935547165801e+00, -1.293868043086650e+00, 3.687342499608545e+00, 3.666842103111971e-01, 257 | 4.690446349542567e-01, 3.354686164448831e+00, 1.459522623361330e+00, -7.836282087117322e-01, 258 | -1.556476042488200e+00, 9.977746254405300e+00, 3.615874982837306e+00, 7.587231541051001e-01, 259 | -1.663885294732292e+00, -4.893547445581650e+00, 6.195623059940027e+00, 6.233312200748062e-01, 260 | -7.389630549527272e+00, -1.774569316216395e+00, -9.065368226930496e-01, -5.980324595351290e+00, 261 | 3.272997662902595e+00, -8.599788876820805e-01, 2.931287676659427e+00, -4.844159203841096e+00, 262 | -6.026900117940132e+00, -5.010921049858612e+00, 7.092481670250197e-01, -2.703433464882523e+00, 263 | -3.310419708767940e+00, 3.606335895631941e+00, -1.115479477600923e+01, -4.306474671574700e+00, 264 | -7.448658248653059e-01, 5.402306741679653e+00, 7.270283940301631e+00, 1.866320798541251e+00, 265 | 2.470666768058556e+00, 3.302494992111579e+00, 3.949947040413504e+00, -6.999949435933990e+00, 266 | -1.804396937714905e+00, 8.514196593390326e-01, -5.420457900742202e+00, -3.376083828388293e+00, 267 | 4.707814979696565e+00, 0.000000000000000e+00, -5.420457900742202e+00, 3.376083828388293e+00, 268 | -1.804396937714905e+00, -8.514196593390326e-01, 3.949947040413504e+00, 6.999949435933990e+00, 269 | 2.470666768058556e+00, -3.302494992111579e+00, 7.270283940301631e+00, -1.866320798541251e+00, 270 | -7.448658248653059e-01, -5.402306741679653e+00, -1.115479477600923e+01, 4.306474671574700e+00, 271 | -3.310419708767940e+00, -3.606335895631941e+00, 7.092481670250197e-01, 2.703433464882523e+00, 272 | -6.026900117940132e+00, 5.010921049858612e+00, 2.931287676659427e+00, 4.844159203841096e+00, 273 | 3.272997662902595e+00, 8.599788876820805e-01, -9.065368226930496e-01, 5.980324595351290e+00, 274 | -7.389630549527272e+00, 1.774569316216395e+00, 6.195623059940027e+00, -6.233312200748062e-01, 275 | -1.663885294732292e+00, 4.893547445581650e+00, 3.615874982837306e+00, -7.587231541051001e-01, 276 | -1.556476042488200e+00, -9.977746254405300e+00, 1.459522623361330e+00, 7.836282087117322e-01, 277 | 4.690446349542567e-01, -3.354686164448831e+00, 3.687342499608545e+00, -3.666842103111971e-01, 278 | 5.230935547165801e+00, 1.293868043086650e+00, -1.786745383326708e+00, 1.276937137201355e+00, 279 | 9.087219524177454e-01, 2.422226101938949e+00, -6.170863635190793e-01, -4.618556574885894e+00, 280 | 2.854512196711251e+00, 1.617625082200842e-01, 1.963612499177015e+00, 7.149444742400535e-01, 281 | 6.404452401830746e+00, 1.278706155866979e+00, -2.717460886180259e+00, -1.425577896601245e+00, 282 | -2.586009495883930e+00, -2.331792485469409e+00, 1.125523162622212e+00, 1.354631807011866e+00, 283 | 2.016971203832223e+00, 3.163328419816367e+00, 5.732968806672320e+00, -6.229199225361914e+00, 284 | 3.842811024005547e+00, -2.182079534549411e+00, 2.032171253558434e+00, -5.788737425987882e+00, 285 | -5.667678788988395e+00, -2.665378472115218e+00, 4.044899973907196e+00, -3.871341157699510e+00, 286 | 2.794228129172385e-01, 5.617586502190708e-01, -3.775415231602213e+00, -2.718975366537348e-01, 287 | 3.840150506416120e+00, 1.699490542466287e+00, -2.751931334150639e+00, 2.651729205325561e+00, 288 | 3.270734032557803e+00, 4.681342238696377e+00, 5.114525363780107e-01, -3.372272082430229e+00, 289 | 3.370243371985926e-02, -3.533526922763765e+00, -1.623242793328371e+00, 7.524531068476575e-01, 290 | -2.585342599501457e+00, -1.416415611654855e-01, -3.050344297876335e-01, -5.928476092041176e+00, 291 | 3.234961768517784e+00, 2.208252455058217e+00, 1.691355121676642e+00, 5.149258565119261e+00, 292 | -1.664463833645840e+00, 7.738272374453387e+00, -3.307128656712724e-01, -1.491213952741355e+00, 293 | 1.508419785650108e+00, -7.575939593955644e-01, 5.074411884642281e+00, -2.371137223330093e+00, 294 | 6.183938698585155e-01, -9.413936219073080e-01, -2.244646753286113e+00, 8.133506606215240e+00, 295 | 3.141032040974913e+00, -4.233118739006381e+00, -1.135715370257396e+00, -5.432062981893455e+00, 296 | 2.238378162968156e+00, 3.333393703264438e+00, -1.572925906246435e+00, -2.734328259634699e+00, 297 | 2.017147084475464e+00, 3.909911542141400e+00, -2.644960216780778e+00, -1.689639671556237e+00, 298 | -1.555563215691436e+00, 4.167697436792233e+00, -3.174227772880593e+00, -3.445449943922659e+00, 299 | -3.991693675979821e+00, -2.395612192990072e+00, -7.608791527035966e+00, -1.199605557244359e+00, 300 | 3.119768676762977e+00, 2.647386306731720e+00, 3.088495481715207e+00, 4.835922591012088e+00, 301 | -2.126408608816460e+00, -6.496133889843878e-01, -3.574988339289840e+00, 4.774591638105163e-01, 302 | -8.057225542680848e-01, -1.502186010252237e+00, -4.468302161079752e+00, -6.560811803588420e-01, 303 | -3.901614280067265e+00, 6.215718415805858e+00, -4.681753970646017e+00, 6.445270984734710e+00, 304 | 2.021391810490292e-02, 1.805385996360099e+00, -8.937461326272578e-01, -7.588584122960702e-01, 305 | -2.798464518993120e+00, -2.355688055046297e+00, 2.173264828603092e+00, -8.248948121629960e-01, 306 | 2.639682132748301e+00, 1.701633154204415e+00, -9.959356075165555e-01, 2.054128218014691e+00, 307 | 1.118615654278817e+00, 1.238455571070932e+00, -2.543476747185558e+00, -1.221476001211498e+00, 308 | -3.719950405898309e+00, -3.654794911963335e+00, -1.782620750385735e-01, -6.191786592630609e+00, 309 | 2.312768769350037e+00, -3.796429682741911e+00, 4.028770258877906e+00, -7.235631972573928e+00, 310 | 3.480135296267813e+00, 1.372346334547339e+00, 4.772947230001412e+00, -5.943735485336072e-01, 311 | -7.037646240419698e-01, -2.824304911746514e+00, 5.150135192916220e+00, -2.544519592918017e+00, 312 | 7.601446066545735e-01, 3.263458881514898e+00, 3.044651859669117e+00, -1.746167472193509e+00, 313 | -3.579498902285684e+00, 1.349669158977704e+00, 1.497677302367308e+00, -4.248256795204092e+00, 314 | 1.689911156425059e+00, -8.268603075350915e-01, -1.492165597423655e+00, 5.490578426839169e+00, 315 | -3.831851193928844e+00, -3.944330086139181e+00, -6.773746016629306e+00, 1.640287552626490e+00, 316 | -4.844351629884981e+00, -2.524159012105676e+00, -1.042998871212450e-01, 1.101626615691207e+00, 317 | 1.455587976273307e+00, 5.712855301747824e+00, 6.450571433636654e-02, -1.463660986831282e+00, 318 | 5.372292947253837e-01, 4.845214246729507e+00, -5.343117610163509e+00, -5.248479799162289e+00, 319 | -3.568747367377906e-01, 1.708135182867247e+00, 1.120142690086254e+00, 1.554454960578805e+00, 320 | 8.727435711779785e-02, -5.200789512413666e+00, -1.645310465960079e+00, -1.955745233096744e-01, 321 | -3.804426226346088e+00, 2.360628066063453e+00, 3.152848007718109e+00, 1.882857879463846e+00, 322 | -3.966269981614962e+00, -2.578889617469152e+00, 3.502762058115909e-01, -1.939344791605027e+00, 323 | -1.143465327856217e+00, -3.381662456994260e+00, -5.867907573418165e-01, 1.188914452808486e+00, 324 | 2.787306134089560e+00, 4.406059514292826e-01, -1.209463421383755e+00, -2.081549368638949e+00, 325 | -2.239363597649238e+00, 2.622333161216238e+00, -3.376141283756011e-01, -3.873091478779083e-01, 326 | -4.554423293554938e+00, -3.928695392899054e+00, -3.549075039135673e+00, 7.723961671240310e+00, 327 | -5.515738367157939e-01, 7.532580478755269e-01, 9.470909676459618e-01, 1.133537735465806e+00, 328 | -3.729301277306694e+00, -1.188929523990150e+00, -6.963879517225685e+00, 1.359220918694192e+00, 329 | 2.470203860537831e+00, -1.880268489878626e+00, -3.526081640989057e+00, 6.639837287112855e-01, 330 | -4.712992966498973e+00, -3.386970116076343e+00, 2.581170396731584e+00, -1.851687150427199e-01, 331 | ]; 332 | 333 | pub const TIME_DATA_512: [f64; 512] = [ 334 | 1.806168877531084e-01, 4.505110747357421e-02, 7.231734791830953e-01, 3.474376455817901e-01, 335 | 6.606168245029038e-01, 3.838686010719714e-01, 6.273465024434670e-01, 2.164981463030646e-02, 336 | 9.105699885230285e-01, 8.005586562788111e-01, 7.458474843427212e-01, 8.131128136107607e-01, 337 | 3.833063186255292e-01, 6.172792323164492e-01, 5.754948597028139e-01, 5.300517047650156e-01, 338 | 2.750697558219350e-01, 2.486289596619704e-01, 4.516387704519728e-01, 2.277128260265476e-01, 339 | 8.044495836130701e-01, 9.861042418959701e-01, 2.999195026938994e-02, 5.356641906672377e-01, 340 | 8.707721990089234e-02, 8.020914405558039e-01, 9.891449097003400e-01, 6.694625839775015e-02, 341 | 9.393983618845348e-01, 1.817753363669572e-02, 6.838386137463554e-01, 7.837364800832186e-01, 342 | 5.341375678827283e-01, 8.853594509311418e-01, 8.990048989061401e-01, 6.259376260804959e-01, 343 | 1.378689924125582e-01, 2.178015937121246e-01, 1.821410758904337e-01, 4.181986397295434e-02, 344 | 1.069416585502070e-01, 6.164434850856851e-01, 9.396610101610667e-01, 3.544557309673289e-01, 345 | 4.106290900595140e-01, 9.843494169844516e-01, 9.455791890352626e-01, 6.766446784335391e-01, 346 | 9.883022623132862e-01, 7.668313872165943e-01, 3.366992643914761e-01, 6.623818603994812e-01, 347 | 2.441652867902793e-01, 2.955072508315968e-01, 6.801783712305021e-01, 5.278468304187979e-01, 348 | 4.115935134075346e-01, 6.026382180363972e-01, 7.505200559237356e-01, 5.835331742619586e-01, 349 | 5.517925149359675e-01, 5.835706187577144e-01, 5.118199199584752e-01, 8.259272699869935e-02, 350 | 7.195701348594897e-01, 9.961561112968694e-01, 3.545343049569218e-01, 9.712588151834057e-01, 351 | 3.464487613003596e-01, 8.865438617603063e-01, 4.546948649919078e-01, 4.134272890208153e-01, 352 | 2.177320683573004e-01, 1.256545873626262e-01, 3.089145935668153e-01, 7.261044316648319e-01, 353 | 7.828720729791232e-01, 6.937876149868972e-01, 9.802252263062083e-03, 8.432133380105096e-01, 354 | 9.223319977962757e-01, 7.709542206739245e-01, 4.265985593504873e-02, 3.781861370502189e-01, 355 | 7.043396244833676e-01, 7.295130455046469e-01, 2.242770706645144e-01, 2.690547317733650e-01, 356 | 6.730311650041190e-01, 4.774921977268612e-01, 6.237164126674425e-01, 2.364449326409104e-01, 357 | 1.771237544983165e-01, 8.296433856975846e-01, 7.669216679352648e-01, 9.344782731182696e-01, 358 | 1.078889050843636e-01, 1.822275056010557e-01, 9.909528242245846e-02, 4.897638019234469e-01, 359 | 1.932453304688705e-01, 8.958915737925682e-01, 9.908964968181455e-02, 4.416557176266112e-02, 360 | 5.572951558047619e-01, 7.724950671876241e-01, 3.119400574962689e-01, 1.789824793143351e-01, 361 | 3.389556782477182e-01, 2.101456370435520e-01, 5.101525197652502e-01, 9.063643232652148e-01, 362 | 6.289239386523179e-01, 1.015338888123122e-01, 3.908547527263546e-01, 5.461661522365757e-02, 363 | 5.012829132032153e-01, 4.317211718842472e-01, 9.975603495121891e-01, 8.116025809953229e-01, 364 | 4.856516698980177e-01, 8.944477555673932e-01, 1.375465947670648e-01, 3.900049144452854e-01, 365 | 9.273562249981249e-01, 9.174938324161169e-01, 7.135740115943158e-01, 6.183373836219400e-01, 366 | 3.432878902413454e-01, 9.360273266897697e-01, 1.247740406604926e-01, 7.305853615057071e-01, 367 | 6.464774324258138e-01, 8.331519856692950e-01, 3.982822282187755e-01, 7.498222093606359e-01, 368 | 8.352205104781305e-01, 3.224603973622594e-01, 5.522616168583550e-01, 9.791291324338921e-01, 369 | 5.493085330183027e-01, 3.304236096066028e-01, 6.194715551777799e-01, 3.606365710022027e-01, 370 | 7.565095435019443e-01, 4.139007486901897e-01, 4.923451043849377e-01, 6.947432331326101e-01, 371 | 9.727338850797841e-01, 3.277549604934068e-01, 8.378031830785756e-01, 7.390722272735281e-01, 372 | 9.541744563795431e-01, 3.192262950397839e-02, 3.568689861825420e-01, 6.626538342872145e-01, 373 | 2.815015591484906e-01, 2.303830673174637e-01, 7.111285511803251e-01, 6.245729169933085e-01, 374 | 5.906086529196359e-01, 6.604379663126019e-01, 4.755467311386607e-02, 3.487848085100589e-01, 375 | 4.513405803557432e-01, 2.409049971201107e-01, 7.150450132961765e-01, 8.561822920062879e-01, 376 | 2.815076951185533e-01, 7.310508297237415e-01, 1.377628925195163e-01, 8.367227817497175e-01, 377 | 1.386017157423600e-01, 5.882093853894936e-01, 3.661568004549378e-01, 8.067595446611057e-01, 378 | 5.037807857761559e-01, 4.895943387233542e-01, 8.770487233850439e-01, 3.531418129389555e-01, 379 | 4.494435565717483e-01, 9.635302868434269e-01, 4.229779791454280e-02, 9.729583341406347e-01, 380 | 1.892068431223760e-01, 6.671203000400749e-01, 5.864396146789179e-01, 6.751124164051153e-01, 381 | 3.610220491946609e-01, 6.202784270710855e-01, 8.111508851002852e-01, 1.925747741414141e-02, 382 | 8.387350828289986e-02, 9.748016671848904e-01, 6.513495324153533e-01, 2.312378161643522e-01, 383 | 4.034911431245899e-01, 1.220205182521296e-01, 2.684388213972831e-01, 2.578461701126047e-01, 384 | 3.316652387426293e-01, 1.522340128629465e-01, 3.480076597161135e-01, 1.216584543077261e-01, 385 | 8.841530577496601e-01, 9.427839006414607e-02, 9.300406261074891e-01, 3.990199690345555e-01, 386 | 4.740146202915074e-02, 3.423735031607398e-01, 7.359661588801641e-01, 7.946821573338052e-01, 387 | 5.449058982446715e-01, 6.862234629840409e-01, 8.936326959336016e-01, 5.479178991973244e-02, 388 | 3.036613797170159e-01, 4.619155633154781e-02, 1.954767636337984e-01, 7.201658025165256e-01, 389 | 7.217532734992967e-01, 8.777990711515272e-01, 5.824329644874103e-01, 7.068433538664998e-02, 390 | 9.227445701890922e-01, 8.003720923511071e-01, 2.859468564203632e-01, 5.436632328413619e-01, 391 | 9.847762369706098e-01, 7.156780671266215e-01, 8.389695973300002e-01, 4.332605610079483e-01, 392 | 4.706247156065407e-01, 5.607134110445561e-01, 2.690915435309975e-01, 7.490184676419461e-01, 393 | 5.038877734604886e-01, 6.468096662727805e-01, 3.077455820309407e-01, 1.387246360781446e-01, 394 | 4.755729337975629e-01, 3.624592808187460e-01, 7.881134283985473e-01, 7.802958208441096e-01, 395 | 6.685122142535449e-01, 1.335038596613123e-01, 2.155588720349699e-02, 5.598407058725097e-01, 396 | 3.008190180694891e-01, 9.394097138734583e-01, 9.809036360468590e-01, 2.866203888942593e-01, 397 | 8.008202869515346e-01, 8.961113514326038e-01, 5.975265768178296e-01, 8.840167357238198e-01, 398 | 9.437315411957914e-01, 5.491580874199027e-01, 7.283868245943567e-01, 5.767582978580098e-01, 399 | 2.585747108313963e-02, 4.465309782848144e-01, 6.463019573506555e-01, 5.212029526724182e-01, 400 | 3.723126607795121e-01, 9.371346663415623e-01, 8.295328245265149e-01, 8.490854799544552e-01, 401 | 3.725342398995395e-01, 5.931845752184903e-01, 8.725525646475586e-01, 9.335016085071053e-01, 402 | 6.684642743613756e-01, 2.067764579351050e-01, 6.538505920625881e-01, 7.205155122064988e-02, 403 | 4.067269150893638e-01, 6.669315332074987e-01, 9.337256595459297e-01, 8.109500322382651e-01, 404 | 4.845482718349904e-01, 7.567492100655122e-01, 4.170474537427670e-01, 9.717859929892940e-01, 405 | 9.879747012308320e-01, 8.641475290312027e-01, 3.888837759124285e-01, 4.547418280391118e-01, 406 | 2.466871976380792e-01, 7.844230930241771e-01, 8.828376055830525e-01, 9.137116812930182e-01, 407 | 5.582849236222750e-01, 5.988681027462054e-01, 1.488767203375491e-01, 8.997134845357385e-01, 408 | 4.503935806521155e-01, 2.056723394639635e-01, 8.996509905090808e-01, 7.625855393732269e-01, 409 | 8.824863074002980e-01, 2.849502180248212e-01, 6.732259864522577e-01, 6.642799044180507e-01, 410 | 1.228149938995259e-01, 4.073184230568129e-01, 2.752869513156900e-01, 7.166697406391417e-01, 411 | 2.833843816289363e-01, 8.961988568494954e-01, 8.265788923135602e-01, 3.900265128139977e-01, 412 | 4.979029429641866e-01, 6.948051926724939e-01, 8.343690010999377e-01, 6.096296896757324e-01, 413 | 5.747371608564080e-01, 3.260421709227913e-01, 4.564246008517470e-01, 7.137955832331345e-01, 414 | 8.844050452759949e-01, 7.208556708169315e-01, 1.861277472638612e-02, 6.747764671282858e-01, 415 | 4.385088242365128e-01, 4.378201791662700e-01, 1.170368195056578e-01, 8.146816895185822e-01, 416 | 3.248554386305090e-01, 2.462281142346414e-01, 3.427132211232795e-01, 3.756921400095883e-01, 417 | 5.465537930829589e-01, 5.619201542659767e-01, 3.958222286240010e-01, 3.981308795313359e-01, 418 | 5.153672192115724e-01, 6.575305420959110e-01, 9.509151982649592e-01, 7.223485143274979e-01, 419 | 4.000797453623376e-01, 8.318713393298099e-01, 1.343383417287082e-01, 6.046677193982841e-02, 420 | 8.424705231465957e-02, 1.638983183297082e-01, 3.242199202940490e-01, 3.017267772046470e-01, 421 | 1.168099113033960e-02, 5.399050938496253e-01, 9.537269262782155e-02, 1.465148564422315e-01, 422 | 6.311412070149550e-01, 8.593204114287853e-01, 9.742216312387133e-01, 5.708384274721835e-01, 423 | 9.968502145749486e-01, 5.535415734955326e-01, 5.154584548403258e-01, 3.306820659902671e-01, 424 | 4.300017983933964e-01, 4.918062536037447e-01, 7.103708391295271e-02, 8.877392155327161e-01, 425 | 6.463359105086841e-02, 4.361849557314483e-01, 8.266295066188918e-01, 3.945346842330335e-01, 426 | 6.134748817052620e-01, 8.186407350822091e-01, 8.862350390626065e-01, 9.311116274872206e-01, 427 | 1.907846480091222e-01, 2.585822514187723e-01, 8.978656848402992e-01, 5.933618603861089e-01, 428 | 5.038400818468479e-01, 6.128095888355591e-01, 8.194222422318759e-01, 5.318891694929258e-01, 429 | 2.020750965484316e-01, 4.538934656805219e-01, 4.279109198201708e-01, 9.660527496119991e-01, 430 | 6.200550541334737e-01, 6.953899519180036e-01, 7.201646120179794e-01, 3.468951902876136e-01, 431 | 5.169904205253102e-01, 5.566946320121019e-01, 1.564952191140445e-01, 5.620560455617748e-01, 432 | 6.948032891084562e-01, 4.264555357102374e-01, 8.362704206763141e-01, 7.313870661619331e-01, 433 | 3.600310420857716e-01, 4.542123718533986e-01, 3.863898985921723e-01, 7.755546422505355e-01, 434 | 7.342711056859393e-01, 4.302778450741556e-01, 6.937525741339134e-01, 9.452134871684603e-01, 435 | 7.842325982317409e-01, 7.055718581310688e-01, 1.093342395243457e-01, 3.899306571564850e-01, 436 | 5.909047304053364e-01, 4.593800479663254e-01, 5.033998673895412e-02, 2.286875840202208e-01, 437 | 8.341890610568995e-01, 1.564469269652702e-02, 8.637108650558657e-01, 7.806905303243428e-02, 438 | 6.690425900815554e-01, 5.002113242811024e-01, 2.179937987501536e-01, 5.716157254040891e-01, 439 | 1.221891509234198e-01, 6.711662329886530e-01, 5.995855481228138e-01, 5.597615738779049e-02, 440 | 5.634301854335677e-02, 1.525006370024703e-01, 1.962106676558406e-02, 4.351755456969518e-01, 441 | 8.322214752828176e-01, 6.173901714540843e-01, 5.201294153107420e-01, 8.638682229336107e-01, 442 | 9.769791816144313e-02, 9.080522031867692e-01, 1.080166941367590e-01, 5.169967580969449e-01, 443 | 1.431560220835761e-01, 5.593705724030039e-01, 4.579623947323475e-03, 7.666819986214874e-01, 444 | 8.487092264582824e-01, 9.168212702537381e-01, 9.869682747836581e-01, 5.051331017988225e-01, 445 | 2.714216244175151e-01, 1.007505119212356e-01, 5.078488308295366e-01, 5.856091257018784e-01, 446 | 7.628870959107409e-01, 8.296264911054385e-02, 6.615961930827142e-01, 5.169790147062131e-01, 447 | 1.710480175254472e-01, 9.385578643318424e-01, 5.904831771425717e-01, 4.406346807608401e-01, 448 | 9.419189303112829e-01, 6.559138202571413e-01, 4.519457092603858e-01, 8.396974207196690e-01, 449 | 5.326235024743463e-01, 5.538870657912750e-01, 6.800655300833607e-01, 3.671899053173674e-01, 450 | 2.392906061935454e-01, 5.789234924590936e-01, 8.668870546725078e-01, 4.067767602152256e-01, 451 | 1.126151410250468e-01, 4.438458367269573e-01, 3.001844012139000e-01, 4.013868538144928e-01, 452 | 8.333635634531343e-01, 4.036286627736071e-01, 3.901759381306066e-01, 3.604488933789446e-01, 453 | 1.402553592694443e-01, 2.601301941124401e-01, 8.681510086583366e-02, 4.293973370858053e-01, 454 | 2.572827847698599e-01, 2.975553841511184e-01, 4.248584117046258e-01, 1.192072594212871e-01, 455 | 4.950669238004591e-01, 7.064072275375605e-01, 2.435733726809508e-01, 7.850700819340061e-01, 456 | 7.408957686092688e-02, 3.938834269816966e-01, 3.394122964307411e-03, 2.206768919330240e-01, 457 | 1.300568700596139e-03, 1.891796709947352e-01, 1.424840548209715e-01, 2.680759991233760e-01, 458 | 1.748920653357828e-01, 1.386489715925953e-01, 5.988856103678650e-01, 9.010579056827256e-01, 459 | 9.393797658842382e-01, 2.211844559390779e-01, 4.826713753964138e-01, 3.760111159247546e-01, 460 | 5.237800369658695e-01, 2.648725935485898e-01, 6.835722047082915e-02, 4.363270774801027e-01, 461 | 1.738530373650010e-01, 2.610710815490491e-02, 9.546782740804495e-01, 4.305965198594173e-01, 462 | ]; 463 | 464 | pub const FREQUENCY_DATA_512_REAL_UNPACKED: [f64; 2 * 512] = [ 465 | 2.619138110805671e+02, 0.000000000000000e+00, -1.115198053389060e+01, -2.093238257176621e+00, 466 | -8.200015102444658e-01, -7.430644653475370e+00, -7.705513879535983e+00, -7.961932330163530e-01, 467 | 4.808921541164337e+00, -1.175049590959020e+01, -9.898825616254497e+00, -1.046847356411203e+00, 468 | -8.538542464542386e+00, -3.124513512169643e+00, 5.929533007177103e+00, -6.682324683920234e+00, 469 | 9.294132606813310e+00, -3.078788645618447e+00, 4.735864707544096e+00, -2.834662284625422e+00, 470 | -2.704976477147880e+00, -4.771762179832171e-01, 2.781628079065968e+00, 7.607033774189008e+00, 471 | 4.536471930820263e-01, -4.234186011130483e+00, -2.694473246748331e+00, -3.027108115093186e+00, 472 | 4.170109743112776e+00, -1.529841079065024e-01, -7.016838902047954e+00, 3.293945497290087e-01, 473 | -1.469436230459260e+00, 4.015828382290277e+00, -1.348484236823121e+00, -2.737227825621715e+00, 474 | 2.580580187332635e+00, -3.037540370839985e+00, -2.914789371223259e+00, 3.805515700385120e-01, 475 | 4.607789858888227e+00, 4.391538789546265e-01, -2.039094736161577e+00, 1.710674414552282e+00, 476 | -1.561214747151728e+00, -1.391093257125061e+00, -2.471811499127627e-01, -4.384445856884108e+00, 477 | -4.028581652984820e+00, 5.805438051017495e+00, -7.499100689400009e+00, -1.066241172885081e+01, 478 | -4.318228299783605e+00, -3.144074839146552e+00, -3.323455275844535e+00, 8.396352081437128e-01, 479 | -1.077138648563686e+01, -3.135963014122133e+00, 5.203510979945534e-01, 1.629783978974322e+00, 480 | -5.489661601924908e+00, 8.166418133379253e+00, -5.113967597278687e+00, -2.547150414055323e+00, 481 | 6.894482090786214e+00, -8.231000673725068e-01, 2.642620807324227e+00, 1.676033773179202e-01, 482 | -2.811320166242819e-01, -9.308479974806125e-01, -1.170323937144983e+00, -1.923971471364242e+01, 483 | 4.986096547926358e+00, 4.451554500839894e-02, 1.605346036925677e-01, -2.271501508783336e+00, 484 | 8.405811536822286e+00, 8.286416405851164e-01, 6.696466094116618e-01, 9.936421116532120e-01, 485 | -3.967756035766337e+00, 5.035600043550436e+00, -4.975862449438469e+00, -1.073002510922096e+00, 486 | 3.518076757813177e+00, 2.972120781785964e+00, 3.232843066707336e+00, 5.005214256068108e+00, 487 | 8.425460654609068e+00, 1.083552106138148e+01, 3.655636545651687e+00, 4.942944805021971e+00, 488 | 5.591137088101026e+00, 1.761738247406500e+00, -2.984093429544520e+00, -2.218066839523427e+00, 489 | 3.215220533360645e+00, -3.128430150390831e+00, 1.086079136001600e+00, -4.019600896223478e+00, 490 | -2.324426904773080e+00, -1.068077096198534e+00, 4.024480538702931e+00, 3.509122313302369e+00, 491 | -1.119130895924454e+00, 2.432804817795666e+00, 3.008268220389146e+00, 1.705981736759047e+00, 492 | -7.743663023539586e+00, 3.131051861809782e+00, 3.222893719481340e+00, -6.577825036895151e+00, 493 | 5.224562383239652e+00, -5.788258352733448e+00, -4.609225183406877e+00, 6.278249376932217e+00, 494 | 1.566503184043088e+00, 4.731268374069121e+00, -7.394233645645288e+00, 2.728068669997588e+00, 495 | 1.980268836206709e+00, 3.542570478843931e+00, 5.186505496936096e+00, -5.283947875955040e+00, 496 | -1.990235482339024e+00, -4.276211188283089e+00, -2.883109503407805e+00, -1.064048413268301e+00, 497 | -1.410970776522150e+00, -2.517124568836177e+00, 1.055180728528839e+01, 1.047260703002487e+00, 498 | -6.451549378495589e+00, -3.335397255493711e+00, -7.499255668636902e+00, 5.317817777814344e-01, 499 | 9.951693195362443e-01, -1.039482760623180e+00, -7.114591885454081e+00, 8.158194346990129e+00, 500 | -1.302307674670791e-01, -2.374747305214465e+00, -8.881661156617103e+00, -3.248060173083817e+00, 501 | 4.950075451033101e+00, 7.368026970180210e-01, -5.992306970550251e+00, 7.797959221937784e+00, 502 | 9.677969079964690e+00, -2.442582586274967e+00, -3.613491495111024e+00, 1.399683997077632e+00, 503 | -2.309781414201543e-01, -4.024697025058348e-01, 4.622841749472442e+00, -1.465485020859071e+00, 504 | 6.131933084766453e+00, -9.117509119579497e+00, 2.355314674509621e+00, -2.288029974265379e+00, 505 | 3.091776866072473e+00, 8.755469413649359e-01, -8.649090391178405e-01, 1.050403628184431e+01, 506 | -1.696728568992433e+00, 1.740913703996018e+00, -8.816405714122906e-01, -5.731103583499061e+00, 507 | -8.933035833007693e+00, 3.197595516414023e+00, -2.540807335668393e+00, -6.229493532160216e+00, 508 | -6.453143645663326e-01, 1.073060787660790e+01, 4.331264438236961e+00, -2.941850938813325e+00, 509 | -4.313753143682344e-01, 3.018899019083947e+00, -6.051879349876754e+00, -1.728740776409845e+00, 510 | -3.139444199854440e+00, 2.145999890329052e+00, -3.384269724366646e+00, 4.405313260844331e+00, 511 | -2.896001808690837e+00, 7.559961197961543e+00, -1.638182672518742e+00, -4.082193744619680e-01, 512 | -4.727842565426033e+00, 4.855440625454208e+00, -1.790739114954947e+00, 7.525039452975838e+00, 513 | 1.241090425199624e+00, 3.123291753380865e+00, -6.068289539732885e-02, 6.143211733539042e+00, 514 | 7.229887948433212e-01, -3.475310030263739e+00, -2.318171287092368e+00, -1.170967907224973e+00, 515 | -2.968963641410836e+00, 2.469949496124910e+00, 3.388508532171732e-01, 4.789425545228717e+00, 516 | 3.637640475089873e+00, 6.649844154272362e+00, 8.826458701518895e+00, -6.980243097247519e+00, 517 | -1.266147389960346e+00, -7.088716718480166e-01, -6.744394204515544e+00, -3.594984129647252e-01, 518 | -8.430184913706638e+00, -1.305497034366212e+00, -4.879622472929892e+00, 1.819633493360833e+00, 519 | 5.212016365855454e+00, -6.281540531689200e+00, 3.864620927561699e+00, 3.881224926440831e+00, 520 | -1.502451167763855e+00, -4.268215810346013e+00, 4.327407054442016e-01, -1.583096056467947e+00, 521 | -3.995151503093658e-01, -4.667499549445483e+00, -3.634428182616939e+00, 3.776311383916513e+00, 522 | 3.719809958874579e+00, 2.570744809568180e+00, 9.567748439612478e-01, 2.839338648906699e+00, 523 | -1.577291426041798e-01, -1.597019113268755e+00, -1.320768450278335e+00, -3.099578121966010e+00, 524 | -3.408303508938111e+00, 1.021495222387502e+00, 6.056619718885509e+00, 3.287912723104686e+00, 525 | -2.067717321818745e+00, 5.902778124521634e+00, 6.991904328291065e-02, 5.366962567660710e+00, 526 | 7.247167857384769e+00, -9.987817259132376e+00, 7.006817941978442e+00, 3.206690324747669e+00, 527 | -4.039152373799737e+00, 1.483261747626578e+00, 1.316149382945287e+00, 2.899506605970243e-01, 528 | -2.737498689702138e+00, -1.299115283811872e+00, 3.085717015621618e+00, 6.665104828580986e-01, 529 | -2.551385250652210e+00, 1.052417983754310e-01, -8.389993662474575e-01, -3.696966275555670e+00, 530 | -6.672280480071879e+00, -9.056162591704429e-01, -8.126681518176483e+00, 6.129234224931580e+00, 531 | 4.584323345988825e+00, 5.016242991080830e+00, -1.219393826108348e+00, -2.993870037055617e+00, 532 | -1.864312726912067e+00, 8.062054710462570e+00, 4.455035352772764e+00, 3.120998307009305e+00, 533 | -2.924636195377698e+00, -1.668578268256297e+00, -3.473727290432167e+00, -3.870691703118520e+00, 534 | -6.185334722726848e+00, 3.984395876382242e+00, -1.527851891080256e+00, 1.993364544205765e-01, 535 | -7.666009294630983e+00, -3.917504929311941e-01, 2.888140400676157e+00, -3.716178197877443e+00, 536 | 4.980166715244614e-01, 5.942302773943424e+00, -6.430845495211380e+00, 8.812516704722375e-01, 537 | 2.227989700065884e+00, -6.791950308263385e+00, -9.328538374431355e+00, 9.147826621930625e+00, 538 | 2.048806823194851e-01, 1.713872506312473e+00, 9.013265074447729e-01, 9.844987073093869e-01, 539 | 4.118838672020591e+00, 3.729736774300223e-01, 5.629103306378829e-01, -4.175870224636906e+00, 540 | -6.405664448972425e+00, 4.602133214791547e+00, 1.026855599307259e+00, -1.902249771522030e+00, 541 | 2.071808028976322e+00, -5.489037448246241e+00, -2.880374687838525e+00, -4.804607566030888e+00, 542 | -4.658936772476315e+00, -6.007793054144102e+00, -6.837257087056265e+00, 5.018812073479129e+00, 543 | 7.708317658744543e-01, 1.815061951080991e+00, -1.710941178124903e+00, -2.166134537369716e+00, 544 | 1.094038329635999e+00, 8.533521028686508e+00, -5.526632973003027e-01, 4.288943996680091e+00, 545 | -5.852033276229081e+00, 4.407153040194589e-02, -5.425581620899147e+00, -1.815508258033112e-01, 546 | 2.402622804491986e+00, -3.706878132036692e+00, -6.468255867015987e+00, -9.899006388950724e+00, 547 | -9.764037678609139e-02, 1.814994637565298e+00, -3.203759165327217e+00, 1.141425690003025e+00, 548 | 5.223945858903594e+00, 6.435077209064109e+00, -2.040287466475237e+00, -2.562399278971683e+00, 549 | 1.642149723401189e+00, 4.824685794822206e+00, -3.044537976414709e+00, 3.660214507064629e+00, 550 | 3.079161095441084e+00, 1.538355571483298e+00, -4.284845705831135e+00, -1.947331240925162e+00, 551 | -3.768483997655424e+00, 4.683615603641362e+00, -2.804522014157483e+00, -3.986619943343518e+00, 552 | -1.817984909284021e+00, -3.305358818768953e+00, 1.502584872579042e+00, 4.708364731482699e+00, 553 | 1.143729189846115e+00, -8.794631259124452e-02, -2.895754994560165e+00, 3.017419983238508e+00, 554 | 3.474806338399494e+00, 5.104246173950999e+00, -4.406737051771778e+00, -4.078246385418372e+00, 555 | -4.404694477921830e+00, 7.830813624414137e+00, 4.163608559006926e-01, -7.926413840769740e+00, 556 | 1.303461176226292e+01, -7.365683904389641e+00, 4.476211897682230e+00, -1.338373993085695e+00, 557 | -2.274764327943855e+00, 3.969082207635650e+00, -6.453082146368692e-01, -6.143999341367548e+00, 558 | -3.475488869191185e+00, -2.023271683875887e+00, -1.369103524248871e+00, -1.387037019447591e+00, 559 | -1.210489761702059e+00, -4.542343222749198e+00, -1.331431110781724e-01, -9.075946127921182e-01, 560 | -5.177564629651572e+00, 2.455970528216657e+00, 3.691249052573440e+00, -1.673080242300862e+00, 561 | 1.912182035375140e+00, -1.312615300521312e+00, -1.251141744555015e+00, 3.958327304016206e+00, 562 | 2.771123716702051e-01, 1.999063877905356e+00, -4.155155433181079e+00, -8.444156417906978e-01, 563 | -2.116273521786312e+00, 3.788095838420060e+00, -7.507754666590323e+00, 3.326089670218413e-02, 564 | 4.905796052897330e+00, 4.556223645818581e+00, 9.240108598837768e+00, -1.009350499228775e+01, 565 | 3.598337919127382e+00, -3.048404278311585e+00, 4.980718588535794e+00, 3.047519697392533e-01, 566 | -2.344033930886350e+00, -8.035245093554686e+00, 9.170890073497524e+00, -3.543571096766250e+00, 567 | 4.183930943883264e+00, -3.673598274208000e+00, -3.005278029624455e+00, -1.135725746340678e+00, 568 | -6.545171960243179e-02, 3.965945117860259e-01, 5.129683349114183e+00, -4.001620807901958e+00, 569 | -2.738518015096642e+00, -5.113202762289758e+00, -4.122911420601460e+00, -1.601192787646148e+00, 570 | -4.940616875054313e-01, -7.625851861756456e-01, -6.140656867341225e+00, 7.056509108397250e+00, 571 | -1.047647277680205e+01, -1.490537740526122e+00, 1.750125158407559e+00, -8.980052096244597e-01, 572 | -4.441113625642239e+00, -9.630808301176916e-01, 4.871201570796909e+00, 9.950714330413124e+00, 573 | 7.578893938310987e-01, -3.625968249215687e+00, -5.915214379585120e+00, 1.156388804338686e-01, 574 | 1.105860925400031e+00, 5.146404866535110e+00, 3.018223037908849e+00, -5.585303882451983e+00, 575 | 7.939380851394719e+00, 9.404451546831240e+00, 2.662384827989065e+00, 5.415980217834097e+00, 576 | 5.384808730374431e+00, -2.099994208860945e+00, -3.214839687312243e+00, -3.190403849749028e+00, 577 | 3.449820285335980e+00, -4.869521848106168e+00, -2.936756738941453e-01, -9.408874776611528e-01, 578 | 6.332613968385270e-01, 4.006208820446869e+00, 1.992726081555017e+00, 4.469594342604584e+00, 579 | -3.843002077006955e+00, 7.743129531845536e+00, -7.008944518173879e+00, -4.197783446638493e+00, 580 | 4.408841096823935e+00, 1.177308232239781e+00, -4.272335699448684e+00, 4.757654871323830e+00, 581 | -1.191146139678042e+00, -9.221772364771397e-04, 3.349188462779500e+00, 3.948069260833601e+00, 582 | 9.127371019005301e-01, -6.716150719696672e-01, -1.828365952626035e+00, 6.137975289408976e+00, 583 | -3.418884852600284e+00, 8.777867800360051e-01, -3.135109195213406e+00, 6.533347753457486e+00, 584 | 3.683389139629988e+00, -2.574900489200746e+00, 6.990020013124132e+00, -7.916582488718228e+00, 585 | 7.991122184404597e-01, -4.859788512723076e+00, 3.264782829214391e+00, 3.965023595567049e+00, 586 | 7.610469396179063e-01, 5.532678888281716e+00, 3.790752503936816e+00, -3.802744465906520e+00, 587 | -2.706339202089834e+00, -5.722734566436507e+00, 1.674161414638171e+00, 1.147184591426204e+00, 588 | 1.414569524174249e+01, -1.188079386264216e+00, 7.934033025983180e-01, -2.743016641560216e+00, 589 | -1.245322153627866e-01, 7.150529101422920e+00, 4.076112080871496e+00, -1.506043506392340e+00, 590 | -4.866676790136244e+00, -6.803342622748687e-01, 2.599023021817089e+00, 5.720397531899284e+00, 591 | 6.140571612873296e+00, -1.049863266190272e-01, 2.993531810286013e+00, 5.044661398396778e+00, 592 | 5.214526690760704e+00, -3.585233477406347e+00, 1.063679699244957e+00, 4.691687296086943e-01, 593 | -9.086160107535221e+00, 0.000000000000000e+00, 1.063679699244957e+00, -4.691687296086943e-01, 594 | 5.214526690760704e+00, 3.585233477406347e+00, 2.993531810286013e+00, -5.044661398396778e+00, 595 | 6.140571612873296e+00, 1.049863266190272e-01, 2.599023021817089e+00, -5.720397531899284e+00, 596 | -4.866676790136244e+00, 6.803342622748687e-01, 4.076112080871496e+00, 1.506043506392340e+00, 597 | -1.245322153627866e-01, -7.150529101422920e+00, 7.934033025983180e-01, 2.743016641560216e+00, 598 | 1.414569524174249e+01, 1.188079386264216e+00, 1.674161414638171e+00, -1.147184591426204e+00, 599 | -2.706339202089834e+00, 5.722734566436507e+00, 3.790752503936816e+00, 3.802744465906520e+00, 600 | 7.610469396179063e-01, -5.532678888281716e+00, 3.264782829214391e+00, -3.965023595567049e+00, 601 | 7.991122184404597e-01, 4.859788512723076e+00, 6.990020013124132e+00, 7.916582488718228e+00, 602 | 3.683389139629988e+00, 2.574900489200746e+00, -3.135109195213406e+00, -6.533347753457486e+00, 603 | -3.418884852600284e+00, -8.777867800360051e-01, -1.828365952626035e+00, -6.137975289408976e+00, 604 | 9.127371019005301e-01, 6.716150719696672e-01, 3.349188462779500e+00, -3.948069260833601e+00, 605 | -1.191146139678042e+00, 9.221772364771397e-04, -4.272335699448684e+00, -4.757654871323830e+00, 606 | 4.408841096823935e+00, -1.177308232239781e+00, -7.008944518173879e+00, 4.197783446638493e+00, 607 | -3.843002077006955e+00, -7.743129531845536e+00, 1.992726081555017e+00, -4.469594342604584e+00, 608 | 6.332613968385270e-01, -4.006208820446869e+00, -2.936756738941453e-01, 9.408874776611528e-01, 609 | 3.449820285335980e+00, 4.869521848106168e+00, -3.214839687312243e+00, 3.190403849749028e+00, 610 | 5.384808730374431e+00, 2.099994208860945e+00, 2.662384827989065e+00, -5.415980217834097e+00, 611 | 7.939380851394719e+00, -9.404451546831240e+00, 3.018223037908849e+00, 5.585303882451983e+00, 612 | 1.105860925400031e+00, -5.146404866535110e+00, -5.915214379585120e+00, -1.156388804338686e-01, 613 | 7.578893938310987e-01, 3.625968249215687e+00, 4.871201570796909e+00, -9.950714330413124e+00, 614 | -4.441113625642239e+00, 9.630808301176916e-01, 1.750125158407559e+00, 8.980052096244597e-01, 615 | -1.047647277680205e+01, 1.490537740526122e+00, -6.140656867341225e+00, -7.056509108397250e+00, 616 | -4.940616875054313e-01, 7.625851861756456e-01, -4.122911420601460e+00, 1.601192787646148e+00, 617 | -2.738518015096642e+00, 5.113202762289758e+00, 5.129683349114183e+00, 4.001620807901958e+00, 618 | -6.545171960243179e-02, -3.965945117860259e-01, -3.005278029624455e+00, 1.135725746340678e+00, 619 | 4.183930943883264e+00, 3.673598274208000e+00, 9.170890073497524e+00, 3.543571096766250e+00, 620 | -2.344033930886350e+00, 8.035245093554686e+00, 4.980718588535794e+00, -3.047519697392533e-01, 621 | 3.598337919127382e+00, 3.048404278311585e+00, 9.240108598837768e+00, 1.009350499228775e+01, 622 | 4.905796052897330e+00, -4.556223645818581e+00, -7.507754666590323e+00, -3.326089670218413e-02, 623 | -2.116273521786312e+00, -3.788095838420060e+00, -4.155155433181079e+00, 8.444156417906978e-01, 624 | 2.771123716702051e-01, -1.999063877905356e+00, -1.251141744555015e+00, -3.958327304016206e+00, 625 | 1.912182035375140e+00, 1.312615300521312e+00, 3.691249052573440e+00, 1.673080242300862e+00, 626 | -5.177564629651572e+00, -2.455970528216657e+00, -1.331431110781724e-01, 9.075946127921182e-01, 627 | -1.210489761702059e+00, 4.542343222749198e+00, -1.369103524248871e+00, 1.387037019447591e+00, 628 | -3.475488869191185e+00, 2.023271683875887e+00, -6.453082146368692e-01, 6.143999341367548e+00, 629 | -2.274764327943855e+00, -3.969082207635650e+00, 4.476211897682230e+00, 1.338373993085695e+00, 630 | 1.303461176226292e+01, 7.365683904389641e+00, 4.163608559006926e-01, 7.926413840769740e+00, 631 | -4.404694477921830e+00, -7.830813624414137e+00, -4.406737051771778e+00, 4.078246385418372e+00, 632 | 3.474806338399494e+00, -5.104246173950999e+00, -2.895754994560165e+00, -3.017419983238508e+00, 633 | 1.143729189846115e+00, 8.794631259124452e-02, 1.502584872579042e+00, -4.708364731482699e+00, 634 | -1.817984909284021e+00, 3.305358818768953e+00, -2.804522014157483e+00, 3.986619943343518e+00, 635 | -3.768483997655424e+00, -4.683615603641362e+00, -4.284845705831135e+00, 1.947331240925162e+00, 636 | 3.079161095441084e+00, -1.538355571483298e+00, -3.044537976414709e+00, -3.660214507064629e+00, 637 | 1.642149723401189e+00, -4.824685794822206e+00, -2.040287466475237e+00, 2.562399278971683e+00, 638 | 5.223945858903594e+00, -6.435077209064109e+00, -3.203759165327217e+00, -1.141425690003025e+00, 639 | -9.764037678609139e-02, -1.814994637565298e+00, -6.468255867015987e+00, 9.899006388950724e+00, 640 | 2.402622804491986e+00, 3.706878132036692e+00, -5.425581620899147e+00, 1.815508258033112e-01, 641 | -5.852033276229081e+00, -4.407153040194589e-02, -5.526632973003027e-01, -4.288943996680091e+00, 642 | 1.094038329635999e+00, -8.533521028686508e+00, -1.710941178124903e+00, 2.166134537369716e+00, 643 | 7.708317658744543e-01, -1.815061951080991e+00, -6.837257087056265e+00, -5.018812073479129e+00, 644 | -4.658936772476315e+00, 6.007793054144102e+00, -2.880374687838525e+00, 4.804607566030888e+00, 645 | 2.071808028976322e+00, 5.489037448246241e+00, 1.026855599307259e+00, 1.902249771522030e+00, 646 | -6.405664448972425e+00, -4.602133214791547e+00, 5.629103306378829e-01, 4.175870224636906e+00, 647 | 4.118838672020591e+00, -3.729736774300223e-01, 9.013265074447729e-01, -9.844987073093869e-01, 648 | 2.048806823194851e-01, -1.713872506312473e+00, -9.328538374431355e+00, -9.147826621930625e+00, 649 | 2.227989700065884e+00, 6.791950308263385e+00, -6.430845495211380e+00, -8.812516704722375e-01, 650 | 4.980166715244614e-01, -5.942302773943424e+00, 2.888140400676157e+00, 3.716178197877443e+00, 651 | -7.666009294630983e+00, 3.917504929311941e-01, -1.527851891080256e+00, -1.993364544205765e-01, 652 | -6.185334722726848e+00, -3.984395876382242e+00, -3.473727290432167e+00, 3.870691703118520e+00, 653 | -2.924636195377698e+00, 1.668578268256297e+00, 4.455035352772764e+00, -3.120998307009305e+00, 654 | -1.864312726912067e+00, -8.062054710462570e+00, -1.219393826108348e+00, 2.993870037055617e+00, 655 | 4.584323345988825e+00, -5.016242991080830e+00, -8.126681518176483e+00, -6.129234224931580e+00, 656 | -6.672280480071879e+00, 9.056162591704429e-01, -8.389993662474575e-01, 3.696966275555670e+00, 657 | -2.551385250652210e+00, -1.052417983754310e-01, 3.085717015621618e+00, -6.665104828580986e-01, 658 | -2.737498689702138e+00, 1.299115283811872e+00, 1.316149382945287e+00, -2.899506605970243e-01, 659 | -4.039152373799737e+00, -1.483261747626578e+00, 7.006817941978442e+00, -3.206690324747669e+00, 660 | 7.247167857384769e+00, 9.987817259132376e+00, 6.991904328291065e-02, -5.366962567660710e+00, 661 | -2.067717321818745e+00, -5.902778124521634e+00, 6.056619718885509e+00, -3.287912723104686e+00, 662 | -3.408303508938111e+00, -1.021495222387502e+00, -1.320768450278335e+00, 3.099578121966010e+00, 663 | -1.577291426041798e-01, 1.597019113268755e+00, 9.567748439612478e-01, -2.839338648906699e+00, 664 | 3.719809958874579e+00, -2.570744809568180e+00, -3.634428182616939e+00, -3.776311383916513e+00, 665 | -3.995151503093658e-01, 4.667499549445483e+00, 4.327407054442016e-01, 1.583096056467947e+00, 666 | -1.502451167763855e+00, 4.268215810346013e+00, 3.864620927561699e+00, -3.881224926440831e+00, 667 | 5.212016365855454e+00, 6.281540531689200e+00, -4.879622472929892e+00, -1.819633493360833e+00, 668 | -8.430184913706638e+00, 1.305497034366212e+00, -6.744394204515544e+00, 3.594984129647252e-01, 669 | -1.266147389960346e+00, 7.088716718480166e-01, 8.826458701518895e+00, 6.980243097247519e+00, 670 | 3.637640475089873e+00, -6.649844154272362e+00, 3.388508532171732e-01, -4.789425545228717e+00, 671 | -2.968963641410836e+00, -2.469949496124910e+00, -2.318171287092368e+00, 1.170967907224973e+00, 672 | 7.229887948433212e-01, 3.475310030263739e+00, -6.068289539732885e-02, -6.143211733539042e+00, 673 | 1.241090425199624e+00, -3.123291753380865e+00, -1.790739114954947e+00, -7.525039452975838e+00, 674 | -4.727842565426033e+00, -4.855440625454208e+00, -1.638182672518742e+00, 4.082193744619680e-01, 675 | -2.896001808690837e+00, -7.559961197961543e+00, -3.384269724366646e+00, -4.405313260844331e+00, 676 | -3.139444199854440e+00, -2.145999890329052e+00, -6.051879349876754e+00, 1.728740776409845e+00, 677 | -4.313753143682344e-01, -3.018899019083947e+00, 4.331264438236961e+00, 2.941850938813325e+00, 678 | -6.453143645663326e-01, -1.073060787660790e+01, -2.540807335668393e+00, 6.229493532160216e+00, 679 | -8.933035833007693e+00, -3.197595516414023e+00, -8.816405714122906e-01, 5.731103583499061e+00, 680 | -1.696728568992433e+00, -1.740913703996018e+00, -8.649090391178405e-01, -1.050403628184431e+01, 681 | 3.091776866072473e+00, -8.755469413649359e-01, 2.355314674509621e+00, 2.288029974265379e+00, 682 | 6.131933084766453e+00, 9.117509119579497e+00, 4.622841749472442e+00, 1.465485020859071e+00, 683 | -2.309781414201543e-01, 4.024697025058348e-01, -3.613491495111024e+00, -1.399683997077632e+00, 684 | 9.677969079964690e+00, 2.442582586274967e+00, -5.992306970550251e+00, -7.797959221937784e+00, 685 | 4.950075451033101e+00, -7.368026970180210e-01, -8.881661156617103e+00, 3.248060173083817e+00, 686 | -1.302307674670791e-01, 2.374747305214465e+00, -7.114591885454081e+00, -8.158194346990129e+00, 687 | 9.951693195362443e-01, 1.039482760623180e+00, -7.499255668636902e+00, -5.317817777814344e-01, 688 | -6.451549378495589e+00, 3.335397255493711e+00, 1.055180728528839e+01, -1.047260703002487e+00, 689 | -1.410970776522150e+00, 2.517124568836177e+00, -2.883109503407805e+00, 1.064048413268301e+00, 690 | -1.990235482339024e+00, 4.276211188283089e+00, 5.186505496936096e+00, 5.283947875955040e+00, 691 | 1.980268836206709e+00, -3.542570478843931e+00, -7.394233645645288e+00, -2.728068669997588e+00, 692 | 1.566503184043088e+00, -4.731268374069121e+00, -4.609225183406877e+00, -6.278249376932217e+00, 693 | 5.224562383239652e+00, 5.788258352733448e+00, 3.222893719481340e+00, 6.577825036895151e+00, 694 | -7.743663023539586e+00, -3.131051861809782e+00, 3.008268220389146e+00, -1.705981736759047e+00, 695 | -1.119130895924454e+00, -2.432804817795666e+00, 4.024480538702931e+00, -3.509122313302369e+00, 696 | -2.324426904773080e+00, 1.068077096198534e+00, 1.086079136001600e+00, 4.019600896223478e+00, 697 | 3.215220533360645e+00, 3.128430150390831e+00, -2.984093429544520e+00, 2.218066839523427e+00, 698 | 5.591137088101026e+00, -1.761738247406500e+00, 3.655636545651687e+00, -4.942944805021971e+00, 699 | 8.425460654609068e+00, -1.083552106138148e+01, 3.232843066707336e+00, -5.005214256068108e+00, 700 | 3.518076757813177e+00, -2.972120781785964e+00, -4.975862449438469e+00, 1.073002510922096e+00, 701 | -3.967756035766337e+00, -5.035600043550436e+00, 6.696466094116618e-01, -9.936421116532120e-01, 702 | 8.405811536822286e+00, -8.286416405851164e-01, 1.605346036925677e-01, 2.271501508783336e+00, 703 | 4.986096547926358e+00, -4.451554500839894e-02, -1.170323937144983e+00, 1.923971471364242e+01, 704 | -2.811320166242819e-01, 9.308479974806125e-01, 2.642620807324227e+00, -1.676033773179202e-01, 705 | 6.894482090786214e+00, 8.231000673725068e-01, -5.113967597278687e+00, 2.547150414055323e+00, 706 | -5.489661601924908e+00, -8.166418133379253e+00, 5.203510979945534e-01, -1.629783978974322e+00, 707 | -1.077138648563686e+01, 3.135963014122133e+00, -3.323455275844535e+00, -8.396352081437128e-01, 708 | -4.318228299783605e+00, 3.144074839146552e+00, -7.499100689400009e+00, 1.066241172885081e+01, 709 | -4.028581652984820e+00, -5.805438051017495e+00, -2.471811499127627e-01, 4.384445856884108e+00, 710 | -1.561214747151728e+00, 1.391093257125061e+00, -2.039094736161577e+00, -1.710674414552282e+00, 711 | 4.607789858888227e+00, -4.391538789546265e-01, -2.914789371223259e+00, -3.805515700385120e-01, 712 | 2.580580187332635e+00, 3.037540370839985e+00, -1.348484236823121e+00, 2.737227825621715e+00, 713 | -1.469436230459260e+00, -4.015828382290277e+00, -7.016838902047954e+00, -3.293945497290087e-01, 714 | 4.170109743112776e+00, 1.529841079065024e-01, -2.694473246748331e+00, 3.027108115093186e+00, 715 | 4.536471930820263e-01, 4.234186011130483e+00, 2.781628079065968e+00, -7.607033774189008e+00, 716 | -2.704976477147880e+00, 4.771762179832171e-01, 4.735864707544096e+00, 2.834662284625422e+00, 717 | 9.294132606813310e+00, 3.078788645618447e+00, 5.929533007177103e+00, 6.682324683920234e+00, 718 | -8.538542464542386e+00, 3.124513512169643e+00, -9.898825616254497e+00, 1.046847356411203e+00, 719 | 4.808921541164337e+00, 1.175049590959020e+01, -7.705513879535983e+00, 7.961932330163530e-01, 720 | -8.200015102444658e-01, 7.430644653475370e+00, -1.115198053389060e+01, 2.093238257176621e+00, 721 | ]; 722 | --------------------------------------------------------------------------------