Skip to content

Commit

Permalink
Standardized to usize
Browse files Browse the repository at this point in the history
Remove instances of i64 & isize when indexing, standardized on usize
  • Loading branch information
valarauca committed Jan 24, 2024
1 parent c4de165 commit d8bbc65
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 54 deletions.
58 changes: 28 additions & 30 deletions src/geodesic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,13 @@ pub struct Geodesic {
pub _b: f64,
pub _c2: f64,
_etol2: f64,
_A3x: [f64; GEODESIC_ORDER as usize],
_C3x: [f64; _nC3x_ as usize],
_C4x: [f64; _nC4x_ as usize],
_A3x: [f64; GEODESIC_ORDER],
_C3x: [f64; _nC3x_],
_C4x: [f64; _nC4x_],

pub GEODESIC_ORDER: i64,
_nC3x_: i64,
_nC4x_: i64,
pub GEODESIC_ORDER: usize,
_nC3x_: usize,
_nC4x_: usize,
maxit1_: u64,
maxit2_: u64,

Expand Down Expand Up @@ -80,11 +80,11 @@ const COEFF_C4: [f64; 77] = [
-3328.0, 1144.0, 315315.0, -128.0, 135135.0, -2560.0, 832.0, 405405.0, 128.0, 99099.0,
];

pub const GEODESIC_ORDER: i64 = 6;
pub const GEODESIC_ORDER: usize = 6;
#[allow(non_upper_case_globals)]
const _nC3x_: i64 = 15;
const _nC3x_: usize = 15;
#[allow(non_upper_case_globals)]
const _nC4x_: i64 = 21;
const _nC4x_: usize = 21;

impl Geodesic {
pub fn new(a: f64, f: f64) -> Self {
Expand Down Expand Up @@ -113,42 +113,40 @@ impl Geodesic {
/ 2.0;
let _etol2 = 0.1 * _tol2_ / (f.abs().max(0.001) * (1.0 - f / 2.0).min(1.0) / 2.0).sqrt();

let mut _A3x: [f64; GEODESIC_ORDER as usize] = [0.0; GEODESIC_ORDER as usize];
let mut _C3x: [f64; _nC3x_ as usize] = [0.0; _nC3x_ as usize];
let mut _C4x: [f64; _nC4x_ as usize] = [0.0; _nC4x_ as usize];
let mut _A3x: [f64; GEODESIC_ORDER] = [0.0; GEODESIC_ORDER];
let mut _C3x: [f64; _nC3x_] = [0.0; _nC3x_];
let mut _C4x: [f64; _nC4x_] = [0.0; _nC4x_];

// Call a3coeff
let mut o: i64 = 0;
let mut o: usize = 0;
for (k, j) in (0..GEODESIC_ORDER).rev().enumerate() {
let m = j.min(GEODESIC_ORDER - j - 1);
_A3x[k] = geomath::polyval(m as isize, &COEFF_A3[o as usize..], _n)
/ COEFF_A3[(o + m + 1) as usize];
_A3x[k] = geomath::polyval(m, &COEFF_A3[o..], _n)
/ COEFF_A3[o + m + 1];
o += m + 2;
}

// c3coeff
let mut o: i64 = 0;
let mut o = 0;
let mut k = 0;

for l in 1..GEODESIC_ORDER {
for j in (l..GEODESIC_ORDER).rev() {
let m = j.min(GEODESIC_ORDER - j - 1);
_C3x[k as usize] = geomath::polyval(m as isize, &COEFF_C3[o as usize..], _n)
/ COEFF_C3[(o + m + 1) as usize];
_C3x[k] = geomath::polyval(m, &COEFF_C3[o..], _n)
/ COEFF_C3[o + m + 1];
k += 1;
o += m + 2;
}
}

// c4coeff
let mut o: i64 = 0;
let mut o = 0;
let mut k = 0;

for l in 0..GEODESIC_ORDER {
for j in (l..GEODESIC_ORDER).rev() {
let m = GEODESIC_ORDER - j - 1;
_C4x[k as usize] = geomath::polyval(m as isize, &COEFF_C4[o as usize..], _n)
/ COEFF_C4[(o + m + 1) as usize];
_C4x[k] = geomath::polyval(m, &COEFF_C4[o..], _n)
/ COEFF_C4[o + m + 1];
k += 1;
o += m + 2;
}
Expand Down Expand Up @@ -184,7 +182,7 @@ impl Geodesic {
}

pub fn _A3f(&self, eps: f64) -> f64 {
geomath::polyval(self.GEODESIC_ORDER as isize - 1, &self._A3x, eps)
geomath::polyval(self.GEODESIC_ORDER - 1, &self._A3x, eps)
}

pub fn _C3f(&self, eps: f64, c: &mut [f64]) {
Expand All @@ -193,22 +191,22 @@ impl Geodesic {
for (l, c_item) in c
.iter_mut()
.enumerate()
.take(self.GEODESIC_ORDER as usize)
.take(self.GEODESIC_ORDER)
.skip(1)
{
let m = self.GEODESIC_ORDER as usize - l - 1;
let m = self.GEODESIC_ORDER - l - 1;
mult *= eps;
*c_item = mult * geomath::polyval(m as isize, &self._C3x[o..], eps);
*c_item = mult * geomath::polyval(m, &self._C3x[o..], eps);
o += m + 1;
}
}

pub fn _C4f(&self, eps: f64, c: &mut [f64]) {
let mut mult = 1.0;
let mut o = 0;
for (l, c_item) in c.iter_mut().enumerate().take(self.GEODESIC_ORDER as usize) {
let m = self.GEODESIC_ORDER as usize - l - 1;
*c_item = mult * geomath::polyval(m as isize, &self._C4x[o..], eps);
for (l, c_item) in c.iter_mut().enumerate().take(self.GEODESIC_ORDER) {
let m = self.GEODESIC_ORDER - l - 1;
*c_item = mult * geomath::polyval(m, &self._C4x[o..], eps);
o += m + 1;
mult *= eps;
}
Expand Down
44 changes: 20 additions & 24 deletions src/geomath.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,16 +52,12 @@ pub fn sum(u: f64, v: f64) -> (f64, f64) {
}

// Evaluate a polynomial
pub fn polyval(n: isize, p: &[f64], x: f64) -> f64 {
if n < 0 {
0.0
} else {
let mut y = p[0];
for val in &p[1..=n as usize] {
y = y * x + val;
}
y
pub fn polyval(n: usize, p: &[f64], x: f64) -> f64 {
let mut y = p[0];
for val in &p[1..=n] {
y = y * x + val;
}
y
}

// Round an angle so taht small values underflow to 0
Expand Down Expand Up @@ -291,14 +287,14 @@ pub fn astroid(x: f64, y: f64) -> f64 {
}
}

pub fn _A1m1f(eps: f64, geodesic_order: i64) -> f64 {
pub fn _A1m1f(eps: f64, geodesic_order: usize) -> f64 {
const COEFF: [f64; 5] = [1.0, 4.0, 64.0, 0.0, 256.0];
let m: i64 = geodesic_order / 2;
let t = polyval(m as isize, &COEFF, sq(eps)) / COEFF[(m + 1) as usize];
let m = geodesic_order / 2;
let t = polyval(m , &COEFF, sq(eps)) / COEFF[m + 1];
(t + eps) / (1.0 - eps)
}

pub fn _C1f(eps: f64, c: &mut [f64], geodesic_order: i64) {
pub fn _C1f(eps: f64, c: &mut [f64], geodesic_order: usize) {
const COEFF: [f64; 18] = [
-1.0, 6.0, -16.0, 32.0, -9.0, 64.0, -128.0, 2048.0, 9.0, -16.0, 768.0, 3.0, -5.0, 512.0,
-7.0, 1280.0, -7.0, 2048.0,
Expand All @@ -308,14 +304,14 @@ pub fn _C1f(eps: f64, c: &mut [f64], geodesic_order: i64) {
let mut o = 0;
for l in 1..=geodesic_order {
let m = (geodesic_order - l) / 2;
c[l as usize] =
d * polyval(m as isize, &COEFF[o as usize..], eps2) / COEFF[(o + m + 1) as usize];
c[l] =
d * polyval(m , &COEFF[o..], eps2) / COEFF[o + m + 1];
o += m + 2;
d *= eps;
}
}

pub fn _C1pf(eps: f64, c: &mut [f64], geodesic_order: i64) {
pub fn _C1pf(eps: f64, c: &mut [f64], geodesic_order: usize) {
const COEFF: [f64; 18] = [
205.0, -432.0, 768.0, 1536.0, 4005.0, -4736.0, 3840.0, 12288.0, -225.0, 116.0, 384.0,
-7173.0, 2695.0, 7680.0, 3467.0, 7680.0, 38081.0, 61440.0,
Expand All @@ -325,21 +321,21 @@ pub fn _C1pf(eps: f64, c: &mut [f64], geodesic_order: i64) {
let mut o = 0;
for l in 1..=geodesic_order {
let m = (geodesic_order - l) / 2;
c[l as usize] =
d * polyval(m as isize, &COEFF[o as usize..], eps2) / COEFF[(o + m + 1) as usize];
c[l] =
d * polyval(m , &COEFF[o..], eps2) / COEFF[o + m + 1];
o += m + 2;
d *= eps;
}
}

pub fn _A2m1f(eps: f64, geodesic_order: i64) -> f64 {
pub fn _A2m1f(eps: f64, geodesic_order: usize) -> f64 {
const COEFF: [f64; 5] = [-11.0, -28.0, -192.0, 0.0, 256.0];
let m: i64 = geodesic_order / 2;
let t = polyval(m as isize, &COEFF, sq(eps)) / COEFF[(m + 1) as usize];
let m = geodesic_order / 2;
let t = polyval(m , &COEFF, sq(eps)) / COEFF[m + 1];
(t - eps) / (1.0 + eps)
}

pub fn _C2f(eps: f64, c: &mut [f64], geodesic_order: i64) {
pub fn _C2f(eps: f64, c: &mut [f64], geodesic_order: usize) {
const COEFF: [f64; 18] = [
1.0, 2.0, 16.0, 32.0, 35.0, 64.0, 384.0, 2048.0, 15.0, 80.0, 768.0, 7.0, 35.0, 512.0, 63.0,
1280.0, 77.0, 2048.0,
Expand All @@ -349,8 +345,8 @@ pub fn _C2f(eps: f64, c: &mut [f64], geodesic_order: i64) {
let mut o = 0;
for l in 1..=geodesic_order {
let m = (geodesic_order - l) / 2;
c[l as usize] =
d * polyval(m as isize, &COEFF[o as usize..], eps2) / COEFF[(o + m + 1) as usize];
c[l] =
d * polyval(m , &COEFF[o..], eps2) / COEFF[o + m + 1];
o += m + 2;
d *= eps;
}
Expand Down

0 comments on commit d8bbc65

Please sign in to comment.