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
+14k Golang : Get uploaded file name or access uploaded files
+20.8k Golang : For loop continue,break and range
+15.7k Golang : Read large file with bufio.Scanner cause token too long error
+7.3k Gogland : Single File versus Go Application Run Configurations
+5.9k Golang : How to verify input is rune?
+9.9k Golang : Test a slice of integers for odd and even numbers
+18.4k Golang : Set, Get and List environment variables
+5.5k Javascript : How to refresh page with JQuery ?
+18.2k Golang : How to get hour, minute, second from time?
+10.3k Swift : Convert (cast) String to Integer