Orbital elements: Difference between revisions

m
→‎version 2: optimized a function.
m (→‎{{header|Sidef}}: use the Vector class added in Sidef 3.60)
m (→‎version 2: optimized a function.)
Line 1,077:
rot: procedure; parse arg i,j,$; return MA(i,cos($),j,sin($))'~'MA(i, -sin($), j, cos($))
r2r: return arg(1) // (pi() * 2) /*normalize radians ──► a unit circle*/
.sinCos: arg z 1 _,i; do k=2 by 2 until p=z; p=z; _= -_ * xx$ / (k*(k+i)); z= z+_; end; return z
/*──────────────────────────────────────────────────────────────────────────────────────*/
cos: procedure; arg x; x= r2r(x); if x=0 then return 1; a= abs(x); Hpi= pi * .5
numeric fuzz min(6, digits() - 3); if a=pi then return '-1'
if a=Hpi | a=Hpi*3 then return 0; if a=pi / 3 then return .5
if a=pi * 2 / 3 then return '-.5'; $= x * x; return .sinCos(1, '-1')
/*──────────────────────────────────────────────────────────────────────────────────────*/
sin: procedure; arg x; x= r2r(x); numeric fuzz min(5, max(1, digits() - 3) )
if x=0 then return 0; if x=pi*.5 then return 1; if x==pi*1.5 then return '-1'
if abs(x)=pi then return 0; $= x * x; return .sinCos(x, 1)
/*──────────────────────────────────────────────────────────────────────────────────────*/
.sinCos: parse arg z 1 _,i; xx= x*x
do k=2 by 2 until p=z; p=z; _= -_ * xx / (k*(k+i)); z= z+_; end; return z
/*──────────────────────────────────────────────────────────────────────────────────────*/
sqrt: procedure; arg x; if x=0 then return 0; d= digits(); numeric form; m.= 9; h= d+6