36 lines
782 B
Text
36 lines
782 B
Text
#include
|
|
"share/atspre_staload.hats"
|
|
|
|
staload "libc/SATS/math.sats"
|
|
staload _ = "libc/DATS/math.dats"
|
|
staload "libc/SATS/stdio.sats"
|
|
staload "libc/SATS/stdlib.sats"
|
|
|
|
#define R 6372.8
|
|
#define TO_RAD (3.1415926536 / 180)
|
|
|
|
typedef d = double
|
|
|
|
fun
|
|
dist
|
|
(
|
|
th1: d, ph1: d, th2: d, ph2: d
|
|
) : d = let
|
|
val ph1 = ph1 - ph2
|
|
val ph1 = TO_RAD * ph1
|
|
val th1 = TO_RAD * th1
|
|
val th2 = TO_RAD * th2
|
|
val dz = sin(th1) - sin(th2)
|
|
val dx = cos(ph1) * cos(th1) - cos(th2)
|
|
val dy = sin(ph1) * cos(th1)
|
|
in
|
|
asin(sqrt(dx*dx + dy*dy + dz*dz)/2)*2*R
|
|
end // end of [dist]
|
|
|
|
implement
|
|
main0((*void*)) = let
|
|
val d = dist(36.12, ~86.67, 33.94, ~118.4);
|
|
/* Americans don't know kilometers */
|
|
in
|
|
$extfcall(void, "printf", "dist: %.1f km (%.1f mi.)\n", d, d / 1.609344)
|
|
end // end of [main0]
|