@@ -126,19 +126,17 @@ pub fn advance(bodies: &mut [Body; N_BODIES], dt: f64) {
126
126
}
127
127
128
128
let mut mag = [ 0.0 ; N ] ;
129
- let mut i = 0 ;
130
- while i < N {
129
+ for i in ( 0 ..N ) . step_by ( 2 ) {
131
130
let d2s = f64x2:: from_array ( [
132
131
( r[ i] * r[ i] ) . horizontal_sum ( ) ,
133
132
( r[ i + 1 ] * r[ i + 1 ] ) . horizontal_sum ( ) ,
134
133
] ) ;
135
134
let dmags = f64x2:: splat ( dt) / ( d2s * d2s. sqrt ( ) ) ;
136
135
mag[ i] = dmags[ 0 ] ;
137
136
mag[ i + 1 ] = dmags[ 1 ] ;
138
- i += 2 ;
139
137
}
140
138
141
- i = 0 ;
139
+ let mut i = 0 ;
142
140
for j in 0 ..N_BODIES {
143
141
for k in j + 1 ..N_BODIES {
144
142
let f = r[ i] * mag[ i] ;
@@ -164,23 +162,21 @@ pub fn run(n: usize) -> (f64, f64) {
164
162
( energy_before, energy_after)
165
163
}
166
164
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
-
172
165
#[ cfg( test) ]
173
166
mod 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
+ }
174
171
#[ test]
175
172
fn test ( ) {
176
- use super :: * ;
177
173
const OUTPUT : [ f64 ; 2 ] = [ -0.169075164 , -0.169087605 ] ;
178
174
let ( energy_before, energy_after) = super :: run ( 1000 ) ;
179
175
assert ! ( approx_eq_f64( energy_before, OUTPUT [ 0 ] ) ) ;
180
176
assert ! ( approx_eq_f64( energy_after, OUTPUT [ 1 ] ) ) ;
181
177
}
182
178
}
183
179
184
- fn main ( ) {
180
+ fn main ( ) {
185
181
// empty main to pass CI
186
182
}
0 commit comments