Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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
Python 3.x python中的平方根不精确_Python 3.x - Fatal编程技术网

Python 3.x python中的平方根不精确

Python 3.x python中的平方根不精确,python-3.x,Python 3.x,为什么小数点显示的平方根不准确?它必须完全为零 print('Enter your input:') n = input() def squareroot(n): i = 0.01 while i*i < float(n): i += 0.01 return i print (squareroot(n)) 您的算法相当于“将i重复增加0.01,直到i*i大于n”。如果x是真正的平方根,这将返回一个介于x和

为什么小数点显示的平方根不准确?它必须完全为零

print('Enter your input:')
n = input()

def squareroot(n):
        i = 0.01
        while i*i < float(n):
                i += 0.01
        return i

print (squareroot(n))
您的算法相当于“将
i
重复增加0.01,直到
i*i
大于
n
”。如果
x
是真正的平方根,这将返回一个介于
x
x+.01
之间的数字,这正是您所看到的。如果你想要一个更准确的答案,选择一个较小的增量或者(更好的)使用一个更好的算法,比如 或或者,如果这不是家庭作业,只需使用
math.sqrt

您的算法相当于“将
i
重复增加0.01,直到
i*i
大于
n
”。如果
x
是真正的平方根,这将返回一个介于
x
x+.01
之间的数字,这正是您所看到的。如果你想要一个更准确的答案,选择一个较小的增量或者(更好的)使用一个更好的算法,比如
或或者,如果这不是家庭作业,只需使用
math.sqrt

这是因为二进制浮点数的值在不是2的幂时是近似值

标准
binary64
格式中表示的
0.1
实际上是十进制的
0.1000000000000005555115123125782702118158340451015625
。有关详细说明,请参见

为了避免二进制浮点数的继承不准确,您可以使用
十进制
模块,或者在您的情况下,只需将
i
增加一个2的幂,例如
0.0078125
,即
2**-7

def squareroot(n):
    i = 0.0078125
    while i * i < float(n):
        i += 0.0078125
    return i

这是因为二进制浮点数的值在不是2的幂时是近似的

标准
binary64
格式中表示的
0.1
实际上是十进制的
0.1000000000000005555115123125782702118158340451015625
。有关详细说明,请参见

为了避免二进制浮点数的继承不准确,您可以使用
十进制
模块,或者在您的情况下,只需将
i
增加一个2的幂,例如
0.0078125
,即
2**-7

def squareroot(n):
    i = 0.0078125
    while i * i < float(n):
        i += 0.0078125
    return i
可能的重复可能的重复
Enter your input:
25
5.0