}
let mut mag = [0.0; N];
- let mut i = 0;
- while i < N {
+ for i in (0..N).step_by(2) {
let d2s = f64x2::from_array([
(r[i] * r[i]).horizontal_sum(),
(r[i + 1] * r[i + 1]).horizontal_sum(),
let dmags = f64x2::splat(dt) / (d2s * d2s.sqrt());
mag[i] = dmags[0];
mag[i + 1] = dmags[1];
- i += 2;
}
- i = 0;
+ let mut i = 0;
for j in 0..N_BODIES {
for k in j + 1..N_BODIES {
let f = r[i] * mag[i];
(energy_before, energy_after)
}
-// Good enough for demonstration purposes, not going for strictness here.
-fn approx_eq_f64(a: f64, b: f64) -> bool {
- (a - b).abs() < 0.00001
-}
-
#[cfg(test)]
mod tests {
+ // Good enough for demonstration purposes, not going for strictness here.
+ fn approx_eq_f64(a: f64, b: f64) -> bool {
+ (a - b).abs() < 0.00001
+ }
#[test]
fn test() {
- use super::*;
const OUTPUT: [f64; 2] = [-0.169075164, -0.169087605];
let (energy_before, energy_after) = super::run(1000);
assert!(approx_eq_f64(energy_before, OUTPUT[0]));
}
}
-fn main () {
+fn main() {
// empty main to pass CI
}