4
4
#
5
5
# USAGE: perl6 n-body.p6.pl 1000
6
6
7
- constant PI = 3.141592653589793 ;
8
- constant SOLAR_MASS = (4 * PI * PI);
9
- constant DAYS_PER_YEAR = 365.24 ;
7
+ constant SOLAR_MASS = (4 * pi * pi );
8
+ constant DAYS_PER_YEAR = 365.24e0 ;
10
9
11
10
constant $ LAST = 4 ;
12
11
13
12
# @ns = ( sun, jupiter, saturn, uranus, neptune )
14
- my Num @ XS = (0 , 4.84143144246472090 e+ 00, 8.34336671824457987 e+ 00, 1.28943695621391310 e+ 01, 1.53796971148509165 e+ 01);
15
- my Num @ YS = (0 , -1.16032004402742839 e+ 00, 4.12479856412430479 e+ 00, -1.51111514016986312 e+ 01, -2.59193146099879641 e+ 01);
16
- my Num @ ZS = (0 , -1.03622044471123109e-01 , -4.03523417114321381e-01 , -2.23307578892655734e-01 , 1.79258772950371181e-01 );
13
+ my Num @ XS = (0e0 , 4.84143144246472090 e+ 00, 8.34336671824457987 e+ 00, 1.28943695621391310 e+ 01, 1.53796971148509165 e+ 01);
14
+ my Num @ YS = (0e0 , -1.16032004402742839 e+ 00, 4.12479856412430479 e+ 00, -1.51111514016986312 e+ 01, -2.59193146099879641 e+ 01);
15
+ my Num @ ZS = (0e0 , -1.03622044471123109e-01 , -4.03523417114321381e-01 , -2.23307578892655734e-01 , 1.79258772950371181e-01 );
17
16
my Num @ VXS = map {$ ^ a * DAYS_PER_YEAR},
18
17
(0 , 1.66007664274403694e-03 , -2.76742510726862411e-03 , 2.96460137564761618e-03 , 2.68067772490389322e-03 );
19
18
my Num @ VYS = map {$ ^ a * DAYS_PER_YEAR},
63
62
sub energy {
64
63
my Num ($ e , $ dx , $ dy , $ dz , $ distance );
65
64
66
- $ e = 0.0 ;
65
+ $ e = 0e0 ;
67
66
for 0 .. $ LAST -> $ i {
68
67
$ e += 0.5 * @ MASS [$ i ] *
69
68
(@ VXS [$ i ]* @ VXS [$ i ] + @ VYS [$ i ]* @ VYS [$ i ] + @ VZS [$ i ]* @ VZS [$ i ]);
@@ -79,7 +78,7 @@ sub energy {
79
78
}
80
79
81
80
sub offset_momentum {
82
- my Num ($ px , $ py , $ pz ) = (0.0 , 0.0 , 0.0 );
81
+ my Num ($ px , $ py , $ pz ) = (0e0 , 0e0 , 0e0 );
83
82
84
83
for 0 .. $ LAST -> $ i {
85
84
$ px += @ VXS [$ i ] * @ MASS [$ i ];
0 commit comments