/usr/share/doc/geographiclib/html/geodC4.mac is in geographiclib-tools 1.37-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | load("geod30.lsp")$
taylordepth:5$
jtaylor(expr,var1,var2,ord):=expand(subst([zz=1],
ratdisrep(taylor(subst([var1=zz*var1,var2=zz*var2],expr),zz,0,ord))))$
h(x):=if x=0 then 0 else block([n:0],while integerp(x/16) do (x:x/16,n:n+1),n);
formatnum(x):=block([n:h(x)],
if n>4 then (x:x/16^n,n:concat("<<",4*n)) else n:"",
concat(if x=0 then "0"
else if abs(x)<1000000 then string(x)
else concat(if x<0 then "-" else "",
"0x",block([obase:16,s],
s:sdowncase(string(abs(x))),
if substring(s,1,2) = "0" then s:substring(s,2),
s)),"LL",n))$
formatnumx(x):=if abs(x)<2^63
then concat("real(",formatnum(x),")") else
concat("reale(",formatnum(floor(x/2^52)),",",
formatnum(x-floor(x/2^52)*2^52),")")$
printterm(x,line):=block([lx:slength(x)+1,lline:slength(line)],
x:concat(x,","),
if lline=0 then line:concat(" ",x)
else (if lx+lline<80 then line:concat(line,x)
else (print(line),line:concat(" ",x))),
line)$
flushline(line):=(if slength(line)>0 then (print(line),line:""),line)$
codeC4():=block([tab2:" ",tab3:" ",linel:90],
print(concat(" // Generated by Maxima on ",timedate())),
print(" // The coefficients n^k in C4[l] in the Fourier expansion of I4
const Math::real* GeodesicExact::rawC4coeff() {"),
for nn:0 thru maxpow do block([c],
if nn = 0 then
print(concat("#if GEOGRAPHICLIB_GEODESICEXACT_ORDER == ",nn))
else
print(concat("#elif GEOGRAPHICLIB_GEODESICEXACT_ORDER == ",nn)),
print(concat(tab2,"static const real coeff[] = {")),
c:0,
for m:0 thru nn-1 do block(
[q:jtaylor(subst([n=_n],C4[m]),_n,eps,nn-1),line:""],
for j:m thru nn-1 do block(
[p:ratsimp(coeff(q,eps,j)),den],
d:abs(denom(p)),
p:expand(d*p),
line:flushline(line),
print(concat(tab3,"// _C4x[",c,"]")),
for k:nn-1-j step -1 thru 0 do block(
[t:coeff(p,_n,k)],
line:printterm(formatnumx(t),line)),
line:printterm(formatnumx(d),line),
c:c+1),
line:flushline(line)),
print(concat(tab2,"};"))),
print("#else
#error \"Bad value for GEOGRAPHICLIB_GEODESICEXACT_ORDER\"
#endif
return coeff;
}
"),
'done)$
|