Skip to content

Instantly share code, notes, and snippets.

@shawnsmithdev
Last active August 29, 2015 14:15
Show Gist options
  • Save shawnsmithdev/58dfbb89c07b90cdfaa3 to your computer and use it in GitHub Desktop.
Save shawnsmithdev/58dfbb89c07b90cdfaa3 to your computer and use it in GitHub Desktop.
Breakdown of float64 (IEEE 754 double-precision binary floating-point format)
package main
import (
"fmt"
"math"
)
const float64MantissaMask = 0xFFFFFFFFFFFFF
const float64ExponentMask = 0x7FF0000000000000
const float64SignMask = 0x8000000000000000
const float64ExponentBitOffset = 52
const float64ExponentValueOffset = -1023
const float64SignOffset = 63
func main() {
floatDebug(math.Pi)
}
func floatDebug(bar float64) {
barBits := math.Float64bits(bar)
fmt.Printf("Value : %f\n", bar)
fmt.Printf("Bits : %X\n", barBits)
fmt.Printf("Mantissa : %X\n", barBits&float64MantissaMask)
fmt.Printf("Exponent : %X\n", (int64(barBits&float64ExponentMask)>>float64ExponentBitOffset)+float64ExponentValueOffset)
fmt.Printf("Sign : %X\n", (barBits&float64SignMask)>>float64SignOffset)
}
@shawnsmithdev
Copy link
Author

Value    : 3.141593
Bits     : 400921FB54442D18
Mantissa : 921FB54442D18
Exponent : 1
Sign     : 0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment