Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go与Python中的浮点精度_Python_Python 3.x_Go_Floating Point - Fatal编程技术网

Go与Python中的浮点精度

Go与Python中的浮点精度,python,python-3.x,go,floating-point,Python,Python 3.x,Go,Floating Point,我现在正在学习go,教程给出了以下示例: myNum:=0.1234 //这计算结果为false 如果myNum==math.Powmath.SqrtmyNum,则为2{ 打印真实 }否则{ 打印错误 } //这一估计是正确的 如果math.AbsmyNum/math.Powmath.SqrtmyNum,则2-1

我现在正在学习go,教程给出了以下示例:

myNum:=0.1234 //这计算结果为false 如果myNum==math.Powmath.SqrtmyNum,则为2{ 打印真实 }否则{ 打印错误 } //这一估计是正确的 如果math.AbsmyNum/math.Powmath.SqrtmyNum,则2-1<0.000000000000001{ 打印真实 }否则{ 打印错误 } 现在有人说前者的计算结果不是真的,因为浮点数是十进制值的近似值。但是为什么。。。那确实行吗

同样的例子在python中也可以使用,所以我有点困惑。对于像这样的计算机应该擅长的一些“简单”算法,我们必须采取这些额外的预防措施,这让我感到很烦恼

a=0.12345 a==math.sqrta**2的计算结果为True 现在有人说前者的计算结果不是真的,因为浮点数是十进制值的近似值。但是为什么。。。那确实行吗

在我相信Go使用的IEEE-754二进制64格式中,与.1234最接近的表示值是0.123399999999958033569669169082771986722946169921875 8891907104280307/256。与其平方根最接近的可表示值为0.35128336140500593387514527421446544647216796875 632815846210160/254。最接近其平方的可表示值为0.12340000000000000968144774731365032494068145751953125 8891907104280308/256

发生的情况是,每个操作都必须将其结果四舍五入到一个可表示的值,从而在过程中失去一些准确性。在这种情况下,甚至不存在使用二进制或浮点的问题:平方根通常不能用有限的数值格式表示,因此它们必然会失去精度

同样的例子在python中也适用


Python文档没有精确地指定浮点运算。实现各不相同。您可能需要指定一个特定的实现来获得答案。

我认为这里真正的问题是为什么它在Python中工作;我最好的猜测是编辑者看到了sqrtn^2并完全省略了它。你在围棋中看到的并不是围棋特有的,它只是普通的浮点运算,精度有限。你的问题是什么?为什么它不能在Go中工作,或者为什么它可以在Python中工作?什么是“在Python中工作”呢?这两个报告都是真的吗?David,打印值0.1234,myNum,math.Powmath.SqrtmyNum,2,至少有17位重要数字以查看详细信息。您的Python代码与Go代码不匹配。在围棋中,你要计算平方根的平方。在Python中,计算平方的平方根。感谢您的回答,这很有意义。附带问题;例如,计算器是否使用了与IEEE-754不同的格式?因为它们提供了“真实的”numbers@DavidBrouwer:计算器不提供“真”数字。他们的许多错误都被掩盖了。例如,它们可能在内部使用12位数字,但只显示10位,因此,在您完成许多操作或知道如何暴露错误之前,舍入误差不会变得足够大。他们的一些错误不会引起您的惊讶,因为他们可能会使用十进制,因此您可以通过自己使用十进制的方式获得四舍五入的答案。但是我保证如果你在计算器上取2的平方根,它不会计算完整的数值结果,因为它是无限长的。