math/fixed: add Floor, Round and Ceil methods.
Change-Id: I7ed8c79a9098f45b38db947b5d99d021358e4e96 Reviewed-on: https://go-review.googlesource.com/21700 Reviewed-by: David Crawshaw <crawshaw@golang.org>
This commit is contained in:
parent
22f1b5f81b
commit
0991244d9d
|
@ -41,6 +41,15 @@ func (x Int26_6) String() string {
|
||||||
return "-33554432:00" // The minimum value is -(1<<25).
|
return "-33554432:00" // The minimum value is -(1<<25).
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Floor returns the greatest integer value less than or equal to x.
|
||||||
|
func (x Int26_6) Floor() Int26_6 { return (x + 0x00) &^ 0x3f }
|
||||||
|
|
||||||
|
// Round returns the nearest integer value to x. Ties are rounded up.
|
||||||
|
func (x Int26_6) Round() Int26_6 { return (x + 0x20) &^ 0x3f }
|
||||||
|
|
||||||
|
// Ceil returns the least integer value greater than or equal to x.
|
||||||
|
func (x Int26_6) Ceil() Int26_6 { return (x + 0x3f) &^ 0x3f }
|
||||||
|
|
||||||
// Int52_12 is a signed 52.12 fixed-point number.
|
// Int52_12 is a signed 52.12 fixed-point number.
|
||||||
//
|
//
|
||||||
// The integer part ranges from -2251799813685248 to 2251799813685247,
|
// The integer part ranges from -2251799813685248 to 2251799813685247,
|
||||||
|
@ -65,6 +74,15 @@ func (x Int52_12) String() string {
|
||||||
return "-2251799813685248:0000" // The minimum value is -(1<<51).
|
return "-2251799813685248:0000" // The minimum value is -(1<<51).
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Floor returns the greatest integer value less than or equal to x.
|
||||||
|
func (x Int52_12) Floor() Int52_12 { return (x + 0x000) &^ 0xfff }
|
||||||
|
|
||||||
|
// Round returns the nearest integer value to x. Ties are rounded up.
|
||||||
|
func (x Int52_12) Round() Int52_12 { return (x + 0x800) &^ 0xfff }
|
||||||
|
|
||||||
|
// Ceil returns the least integer value greater than or equal to x.
|
||||||
|
func (x Int52_12) Ceil() Int52_12 { return (x + 0xfff) &^ 0xfff }
|
||||||
|
|
||||||
// P returns the integer values x and y as a Point26_6.
|
// P returns the integer values x and y as a Point26_6.
|
||||||
//
|
//
|
||||||
// For example, passing the integer values (2, -3) yields Point26_6{128, -192}.
|
// For example, passing the integer values (2, -3) yields Point26_6{128, -192}.
|
||||||
|
|
|
@ -9,17 +9,33 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestInt26_6(t *testing.T) {
|
func TestInt26_6(t *testing.T) {
|
||||||
got := Int26_6(1<<6 + 1<<4).String()
|
x := Int26_6(1<<6 + 1<<4)
|
||||||
want := "1:16"
|
if got, want := x.String(), "1:16"; got != want {
|
||||||
if got != want {
|
t.Errorf("String: got %q, want %q", got, want)
|
||||||
t.Fatalf("got %q, want %q", got, want)
|
}
|
||||||
|
if got, want := x.Floor(), Int26_6(1<<6); got != want {
|
||||||
|
t.Errorf("Floor: got %v, want %v", got, want)
|
||||||
|
}
|
||||||
|
if got, want := x.Round(), Int26_6(1<<6); got != want {
|
||||||
|
t.Errorf("Round: got %v, want %v", got, want)
|
||||||
|
}
|
||||||
|
if got, want := x.Ceil(), Int26_6(2<<6); got != want {
|
||||||
|
t.Errorf("Ceil: got %v, want %v", got, want)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestInt52_12(t *testing.T) {
|
func TestInt52_12(t *testing.T) {
|
||||||
got := Int52_12(1<<12 + 1<<10).String()
|
x := Int52_12(1<<12 + 1<<10)
|
||||||
want := "1:1024"
|
if got, want := x.String(), "1:1024"; got != want {
|
||||||
if got != want {
|
t.Errorf("String: got %q, want %q", got, want)
|
||||||
t.Fatalf("got %q, want %q", got, want)
|
}
|
||||||
|
if got, want := x.Floor(), Int52_12(1<<12); got != want {
|
||||||
|
t.Errorf("Floor: got %v, want %v", got, want)
|
||||||
|
}
|
||||||
|
if got, want := x.Round(), Int52_12(1<<12); got != want {
|
||||||
|
t.Errorf("Round: got %v, want %v", got, want)
|
||||||
|
}
|
||||||
|
if got, want := x.Ceil(), Int52_12(2<<12); got != want {
|
||||||
|
t.Errorf("Ceil: got %v, want %v", got, want)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user