@@ -126,19 +126,17 @@ pub fn advance(bodies: &mut [Body; N_BODIES], dt: f64) {
126126 }
127127
128128 let mut mag = [ 0.0 ; N ] ;
129- let mut i = 0 ;
130- while i < N {
129+ for i in ( 0 ..N ) . step_by ( 2 ) {
131130 let d2s = f64x2:: from_array ( [
132131 ( r[ i] * r[ i] ) . horizontal_sum ( ) ,
133132 ( r[ i + 1 ] * r[ i + 1 ] ) . horizontal_sum ( ) ,
134133 ] ) ;
135134 let dmags = f64x2:: splat ( dt) / ( d2s * d2s. sqrt ( ) ) ;
136135 mag[ i] = dmags[ 0 ] ;
137136 mag[ i + 1 ] = dmags[ 1 ] ;
138- i += 2 ;
139137 }
140138
141- i = 0 ;
139+ let mut i = 0 ;
142140 for j in 0 ..N_BODIES {
143141 for k in j + 1 ..N_BODIES {
144142 let f = r[ i] * mag[ i] ;
@@ -164,23 +162,21 @@ pub fn run(n: usize) -> (f64, f64) {
164162 ( energy_before, energy_after)
165163}
166164
167- // Good enough for demonstration purposes, not going for strictness here.
168- fn approx_eq_f64 ( a : f64 , b : f64 ) -> bool {
169- ( a - b) . abs ( ) < 0.00001
170- }
171-
172165#[ cfg( test) ]
173166mod tests {
167+ // Good enough for demonstration purposes, not going for strictness here.
168+ fn approx_eq_f64 ( a : f64 , b : f64 ) -> bool {
169+ ( a - b) . abs ( ) < 0.00001
170+ }
174171 #[ test]
175172 fn test ( ) {
176- use super :: * ;
177173 const OUTPUT : [ f64 ; 2 ] = [ -0.169075164 , -0.169087605 ] ;
178174 let ( energy_before, energy_after) = super :: run ( 1000 ) ;
179175 assert ! ( approx_eq_f64( energy_before, OUTPUT [ 0 ] ) ) ;
180176 assert ! ( approx_eq_f64( energy_after, OUTPUT [ 1 ] ) ) ;
181177 }
182178}
183179
184- fn main ( ) {
180+ fn main ( ) {
185181 // empty main to pass CI
186182}
0 commit comments