Golang : Test floating point numbers not-a-number and infinite example
A simple example to demonstrate how to create not-a-number
and infinite
floating-point values in Golang. Will show some example tests on the values and things to watch out for in order to get the most accurate result.
Here you go!
package main
import (
"fmt"
"math"
)
func main() {
fnum := float64(12.2)
fmt.Println(fnum)
fmt.Println("Is not-a-number ? : ", math.IsNaN(fnum))
fNaN := math.NaN()
fmt.Println(fNaN)
fmt.Println("Is not-a-number ? : ", math.IsNaN(fNaN))
// test if floating-point value is infinity
fmt.Println("Is positive infinity? : ", math.IsInf(fNaN, 1))
fmt.Println("Is negative infinity? : ", math.IsInf(fNaN, -1))
fmt.Println("Is either infinity? : ", math.IsInf(fNaN, 0))
// reference https://golang.org/pkg/math/#IsInf
fmt.Println("---------------------------------------------")
fmt.Println("Test positive infinite value")
fmt.Println("---------------------------------------------")
posInf := math.Inf(1)
posInf = posInf + 12.2 // infinite value will still propagate after add operation
fmt.Println("Symbol : ", posInf)
fmt.Println("Is positive infinity? : ", math.IsInf(posInf, 1))
fmt.Println("Is negative infinity? : ", math.IsInf(posInf, -1))
fmt.Println("Is either infinity? : ", math.IsInf(posInf, 0))
fmt.Println("---------------------------------------------")
fmt.Println("Watch out for operation such as 10 / posInf !!")
fmt.Println("---------------------------------------------")
posInf = 10 / posInf // HOWEVER! this will screw up the infinite
fmt.Println("Symbol : ", posInf)
fmt.Println("Is positive infinity? : ", math.IsInf(posInf, 1))
fmt.Println("Is negative infinity? : ", math.IsInf(posInf, -1))
fmt.Println("Is either infinity? : ", math.IsInf(posInf, 0))
fmt.Println("---------------------------------------------")
fmt.Println("Test negative infinite value")
fmt.Println("---------------------------------------------")
negInf := math.Inf(-1)
fmt.Println("Symbol : ", negInf)
fmt.Println("Is postive infinity? : ", math.IsInf(negInf, 1))
fmt.Println("Is negative infinity? : ", math.IsInf(negInf, -1))
fmt.Println("Is either infinity? : ", math.IsInf(negInf, 0))
fmt.Println("---------------------------------------------")
fmt.Println("Watch out for operation such as infinite / infinite !!")
fmt.Println("---------------------------------------------")
negInf = negInf / negInf // --- WILL turn infinite into NaN
fmt.Println("Symbol : ", negInf)
fmt.Println("Is postive infinity? : ", math.IsInf(negInf, 1))
fmt.Println("Is negative infinity? : ", math.IsInf(negInf, -1))
fmt.Println("Is either infinity? : ", math.IsInf(negInf, 0))
}
Output:
12.2
Is not-a-number ? : false
NaN
Is not-a-number ? : true
Is positive infinity? : false
Is negative infinity? : false
Is either infinity? : false
---------------------------------------------
Test positive infinite value
---------------------------------------------
Symbol : +Inf
Is positive infinity? : true
Is negative infinity? : false
Is either infinity? : true
---------------------------------------------
Watch out for operation such as 10 / posInf !!
---------------------------------------------
Symbol : 0
Is positive infinity? : false
Is negative infinity? : false
Is either infinity? : false
---------------------------------------------
Test negative infinite value
---------------------------------------------
Symbol : -Inf
Is postive infinity? : false
Is negative infinity? : true
Is either infinity? : true
---------------------------------------------
Watch out for operation such as infinite / infinite !!
---------------------------------------------
Symbol : NaN
Is postive infinity? : false
Is negative infinity? : false
Is either infinity? : false
Happy coding!
Reference:
See also : Golang : Accurate and reliable decimal calculations
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+14.4k Golang : Normalize unicode strings for comparison purpose
+51.8k Golang : How to get struct field and value by name
+10.7k How to test Facebook App on localhost ?
+35.4k Golang : Get file last modified date and time
+12.7k Golang : How to calculate the distance between two coordinates using Haversine formula
+11.1k Golang : Byte format example
+16.4k Golang : Get the IPv4 and IPv6 addresses for a specific network interface
+16.7k Golang : Find file size(disk usage) with filepath.Walk
+6.2k Golang : Spell checking with ispell example
+6k Golang : How to search a list of records or data structures
+39.1k Golang : Remove dashes(or any character) from string
+9.3k Random number generation with crypto/rand in Go