Rem*_*i.b 5 operating-system rounding-error go
考虑下面的代码
\nfunc main() {\n var (\n negativeTwoThirds = -2.0 / 3.0\n negativeSix = -6.0\n negativeThree = -3.0\n )\n\n for _, v := range []float64{negativeTwoThirds} {\n four := negativeSix * v // 4 = (-6.0) * (-2/3)\n\n print1(negativeThree + four)\n print2(negativeThree, four)\n }\n}\n\nfunc print1(c float64) {\n fmt.Printf("%f (%b)\\n", c, math.Float64bits(c))\n}\n\nfunc print2(a, b float64) {\n c := a + b\n fmt.Printf("%f (%b)\\n", c, math.Float64bits(c))\n}\nRun Code Online (Sandbox Code Playgroud)\n我在个人 Linux 机器以及 go Playground(演示)上尝试了代码,它产生的输出都是我期望的输出
\n1.000000 (11111111110000000000000000000000000000000000000000000000000000)\n1.000000 (11111111110000000000000000000000000000000000000000000000000000)\nRun Code Online (Sandbox Code Playgroud)\n我在两台 macOS 机器上尝试了该代码,两次都出现舍入错误
\n1.000000 (11111111101111111111111111111111111111111111111111111111111110)\n1.000000 (11111111110000000000000000000000000000000000000000000000000000)\nRun Code Online (Sandbox Code Playgroud)\n你能帮我理解这些差异吗
\nprint1print2?笔记
\n1.20.x| 归档时间: |
|
| 查看次数: |
154 次 |
| 最近记录: |