rat.gno
0.71 Kb ยท 47 lines
1package rat
2
3//----------------------------------------
4// Rat fractions
5
6// represents a fraction.
7type Rat struct {
8 X int32
9 Y int32 // must be positive
10}
11
12func NewRat(x, y int32) Rat {
13 if y <= 0 {
14 panic("invalid std.Rat denominator")
15 }
16 return Rat{X: x, Y: y}
17}
18
19func (r1 Rat) IsValid() bool {
20 if r1.Y <= 0 {
21 return false
22 }
23 return true
24}
25
26func (r1 Rat) Cmp(r2 Rat) int {
27 if !r1.IsValid() {
28 panic("invalid std.Rat left operand")
29 }
30 if !r2.IsValid() {
31 panic("invalid std.Rat right operand")
32 }
33 var p1, p2 int64
34 p1 = int64(r1.X) * int64(r2.Y)
35 p2 = int64(r1.Y) * int64(r2.X)
36 if p1 < p2 {
37 return -1
38 } else if p1 == p2 {
39 return 0
40 } else {
41 return 1
42 }
43}
44
45//func (r1 Rat) Plus(r2 Rat) Rat {
46// XXX
47//}