Angles (geometric), normalization and conversion: Difference between revisions

Added Go
(added a (new) draft task, also added the REXX computer programming language entry.)
 
(Added Go)
Line 120:
__TOC__
 
 
=={{header|Go}}==
<lang go>package main
 
import (
"fmt"
"math"
"strconv"
"strings"
)
 
func d2d(d float64) float64 { return math.Mod(d, 360) }
 
func g2g(g float64) float64 { return math.Mod(g, 400) }
 
func m2m(m float64) float64 { return math.Mod(m, 6400) }
 
func r2r(r float64) float64 { return math.Mod(r, 2*math.Pi) }
 
func d2g(d float64) float64 { return d2d(d) * 400 / 360 }
 
func d2m(d float64) float64 { return d2d(d) * 6400 / 360 }
 
func d2r(d float64) float64 { return d2d(d) * math.Pi / 180 }
 
func g2d(g float64) float64 { return g2g(g) * 360 / 400 }
 
func g2m(g float64) float64 { return g2g(g) * 6400 / 400 }
 
func g2r(g float64) float64 { return g2g(g) * math.Pi / 200 }
 
func m2d(m float64) float64 { return m2m(m) * 360 / 6400 }
 
func m2g(m float64) float64 { return m2m(m) * 400 / 6400 }
 
func m2r(m float64) float64 { return m2m(m) * math.Pi / 3200 }
 
func r2d(r float64) float64 { return r2r(r) * 180 / math.Pi }
 
func r2g(r float64) float64 { return r2r(r) * 200 / math.Pi }
 
func r2m(r float64) float64 { return r2r(r) * 3200 / math.Pi }
 
// Aligns number to decimal point assuming 7 characters before and after.
func s(f float64) string {
wf := strings.Split(strconv.FormatFloat(f, 'g', 15, 64), ".")
if len(wf) == 1 {
return fmt.Sprintf("%7s ", wf[0])
}
le := len(wf[1])
if le > 7 {
le = 7
}
return fmt.Sprintf("%7s.%-7s", wf[0], wf[1][:le])
}
 
func main() {
angles := []float64{-2, -1, 0, 1, 2, 6.2831853, 16, 57.2957795,
359, 399, 6399, 1000000}
ft := "%s %s %s %s %s\n"
fmt.Printf(ft, " degrees ", "normalized degs", " gradians ", " mils ", " radians")
for _, a := range angles {
fmt.Printf(ft, s(a), s(d2d(a)), s(d2g(a)), s(d2m(a)), s(d2r(a)))
}
fmt.Printf(ft, "\n gradians ", "normalized grds", " degrees ", " mils ", " radians")
for _, a := range angles {
fmt.Printf(ft, s(a), s(g2g(a)), s(g2d(a)), s(g2m(a)), s(g2r(a)))
}
fmt.Printf(ft, "\n mils ", "normalized mils", " degrees ", " gradians ", " radians")
for _, a := range angles {
fmt.Printf(ft, s(a), s(m2m(a)), s(m2d(a)), s(m2g(a)), s(m2r(a)))
}
fmt.Printf(ft, "\n radians ", "normalized rads", " degrees ", " gradians ", " mils ")
for _, a := range angles {
fmt.Printf(ft, s(a), s(r2r(a)), s(r2d(a)), s(r2g(a)), s(r2m(a)))
}
}</lang>
 
{{out}}
<pre>
degrees normalized degs gradians mils radians
-2 -2 -2.2222222 -35.5555555 -0.0349065
-1 -1 -1.1111111 -17.7777777 -0.0174532
0 0 0 0 0
1 1 1.1111111 17.7777777 0.0174532
2 2 2.2222222 35.5555555 0.0349065
6.2831853 6.2831853 6.981317 111.701072 0.1096622
16 16 17.7777777 284.4444444 0.2792526
57.2957795 57.2957795 63.6619772 1018.5916355 0.9999999
359 359 398.8888888 6382.2222222 6.2657320
399 39 43.3333333 693.3333333 0.6806784
6399 279 310 4960 4.8694686
1000000 280 311.1111111 4977.7777777 4.8869219
 
gradians normalized grds degrees mils radians
-2 -2 -1.8 -32 -0.0314159
-1 -1 -0.9 -16 -0.0157079
0 0 0 0 0
1 1 0.9 16 0.0157079
2 2 1.8 32 0.0314159
6.2831853 6.2831853 5.6548667 100.5309648 0.0986960
16 16 14.4 256 0.2513274
57.2957795 57.2957795 51.5662015 916.732472 0.8999999
359 359 323.1 5744 5.6391588
399 399 359.1 6384 6.2674773
6399 399 359.1 6384 6.2674773
1000000 0 0 0 0
 
mils normalized mils degrees gradians radians
-2 -2 -0.1125 -0.125 -0.0019634
-1 -1 -0.05625 -0.0625 -0.0009817
0 0 0 0 0
1 1 0.05625 0.0625 0.0009817
2 2 0.1125 0.125 0.0019634
6.2831853 6.2831853 0.3534291 0.3926990 0.0061685
16 16 0.9 1 0.0157079
57.2957795 57.2957795 3.2228875 3.5809862 0.0562499
359 359 20.19375 22.4375 0.3524474
399 399 22.44375 24.9375 0.3917173
6399 6399 359.94375 399.9375 6.2822035
1000000 1600 90 100 1.5707963
 
radians normalized rads degrees gradians mils
-2 -2 -114.5915590 -127.3239544 -2037.1832715
-1 -1 -57.2957795 -63.6619772 -1018.5916357
0 0 0 0 0
1 1 57.2957795 63.6619772 1018.5916357
2 2 114.5915590 127.3239544 2037.1832715
6.2831853 6.2831853 359.9999995 399.9999995 6399.9999926
16 3.4336293 196.7324722 218.5916357 3497.4661726
57.2957795 0.7471117 42.8063492 47.5626102 761.0017646
359 0.8584374 49.1848451 54.6498279 874.3972479
399 3.1593256 181.0160257 201.1289174 3218.0626794
6399 2.7173572 155.6931042 172.9923380 2767.8774082
1000000 5.9256211 339.5130823 377.2367581 6035.7881301
</pre>
 
=={{header|REXX}}==
9,492

edits