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//}