Languages often have built-in math methods. With Go we import the math module. This provides commonly-used methods like Abs
and Pow
.
Math methods here operate on the float64
numeric type. So we cannot use an int
directly with them—we must cast it first. This requires some extra complexity.
Math.Abs
Let us begin with Abs
. We import the math module in the import-statement at the top. Next we introduce the "negative" integer.
float64
and pass that to the math.Abs
method. This returns a positive number.package main import ( "fmt" "math" ) func main() { negative := -10 fmt.Println(negative) // Use math.Abs to convert to a positive number. // ... We first convert to a float64. result := math.Abs(float64(negative)) fmt.Println(result) }-10 10
Pow
, compute exponentsPow
raises one number to another. Here we compute the cube of 2, which is 8. We can also square numbers (with a second argument of 2) or use higher powers.
package main import ( "fmt" "math" ) func main() { // This can handle ints. result := math.Pow(2, 3) fmt.Println(result) }8
Max
, Min
The math.Max
and math.Min
methods both receive two float64
values. Max
returns the higher of the two. Min
returns the lower.
package main import ( "fmt" "math" ) func main() { small := float64(3) large := float64(40) // Get the larger of the two numbers. max := math.Max(small, large) fmt.Println(max) // Get the smaller value. min := math.Min(small, large) fmt.Println(min) }40 3
Floor
The floor is beneath us. With math.Floor
, a number with a fractional part is always reduced so the fractional part does not exist. Both negative and positive numbers are reduced.
package main import ( "fmt" "math" ) func main() { value1 := 1.23 fmt.Println(value1) fmt.Println(math.Floor(value1)) value2 := 2.99 fmt.Println(value2) fmt.Println(math.Floor(value2)) value3 := -1.1 fmt.Println(value3) fmt.Println(math.Floor(value3)) }1.23 1 2.99 2 -1.1 -2
This math method returns a bool
. If the number is negative (has a sign bit) then Signbit returns true. For positive numbers, it returns false.
package main import ( "fmt" "math" ) func main() { value1 := float64(1) negative := math.Signbit(value1) fmt.Println(negative) value2 := float64(-1) negative = math.Signbit(value2) fmt.Println(negative) value3 := float64(0) negative = math.Signbit(value3) fmt.Println(negative) }false true false
An int
has a parity: this is whether it is odd or even. To compute parity, we use a modulo division. We can define "odd" as "not even."
In the Fibonacci sequence, each number is equal to the preceding two numbers. This sequence occurs often in the natural world. It has many uses.
Many math methods are available in the math package. We can implement math methods directly, with imperative statements. But this often leads to unneeded complexity.