问题描述
float32 的精度是小数点后面 6 位,这个我没说错吧。。(万一我记错了请批我)
那么我的理解就是把 float32 的 10000018 表示成科学计数法就应该是:1.000002e+07 (四舍五入了)
但是 go 输出的结果是:1.0000018e+07,代码如下
package main import "fmt" var num float32 = 10000018 // 8 位 <==> 1.0000018 * 10^7 func main() { fmt.Println("num: ", num) // 1.0000018e+07 ??小数点后面怎么有 7 位 } 小数点后面怎么有 7 位?和我预想的不一样。。
并且
并且我把 10000018 加个 7 得到 100000187 然后再试一次,又变成小数点后 8 位了,代码如下:
package main import "fmt" //var myfloat float32 = 10000018 // 8 位 <==> 1.0000018 * 10^7 var myfloat float32 = 100000182 // 9 位 <==> 1.00000182 * 10^8 var ans float32 = 100000187 // 9 位 <==> 1.00000187 * 10^8 func main() { fmt.Println("myfloat: ", myfloat) // 1.00000184e+08 fmt.Println(myfloat == myfloat + 1) // true fmt.Println("myfloat: ", myfloat+5) // 1.0000019e+08 fmt.Println(ans == myfloat+5) // false } 1.00000184e+08 这个数有 8 个小数,我不太懂了。。
关于 IEEE-754 的介绍我也看了,还是有疑惑。
求大神指教。
