package attribute import ( "fmt" "math" ) //εŸΊε‡†ε€ζ•° const CARDINAL_NUMBER int = 10000 func NewFixedPoint(value float32) FixedPoint { return FixedPoint(math.Round(float64(value * float32(CARDINAL_NUMBER)))) } type FixedPoint int func (this FixedPoint) SetInt(v int) { this = FixedPoint(v) } func (this FixedPoint) Scalar() float32 { return float32(this) * 0.0001 } func (this FixedPoint) ToInt() int { return int(this) / CARDINAL_NUMBER } func (this FixedPoint) ToFloat() float32 { return this.Scalar() } func (this FixedPoint) ToString() string { return fmt.Sprintf("%f", this.Scalar()) } /// - func (this FixedPoint) Add(v float32) { y := NewFixedPoint(v) this = FixedPoint(int(this) + int(y)) } /// - func (this FixedPoint) Reduce(v float32) { y := NewFixedPoint(v) this = FixedPoint(int(this) - int(y)) } /// + func FixedPoint_Add(x, y FixedPoint) FixedPoint { return FixedPoint(x + y) } /// - func FixedPoint_Reduce(x, y FixedPoint) FixedPoint { return FixedPoint(x - y) } /// * func FixedPoint_Multiply(x, y FixedPoint) FixedPoint { return FixedPoint((int(x) * int(y)) / CARDINAL_NUMBER) } /// / func FixedPoint_Divide(x, y FixedPoint) FixedPoint { return FixedPoint((int(x) * CARDINAL_NUMBER) / int(y)) }