如何修复添加不精确数字的python

如何修复添加不精确数字的python,python,geometry,Python,Geometry,这是我代码的一部分。它用于计算圆上的绘图 开始时的x在每次迭代中都会添加0.1,但随着迭代的进行,它开始将1.600000000000003作为x的输出。这会导致一个问题,例如r=2.5和x=2.400000000000001,然后它加上0.1,并尝试平方根r^2-x^2,但x大于r,即使它不应该小于br> x是指cx 我尝试了math.fabs(),在我看来,这似乎可行,但没有成功。 我该如何解决这个问题。它只需要精确到0位小数,而不是sqrt负数 我觉得我在这里很傻为了知道发生了什么,可以

这是我代码的一部分。它用于计算圆上的绘图
开始时的x在每次迭代中都会添加0.1,但随着迭代的进行,它开始将
1.600000000000003
作为x的输出。这会导致一个问题,例如r=2.5和x=2.400000000000001,然后它加上0.1,并尝试平方根r^2-x^2,但x大于r,即使它不应该小于br> x是指cx
我尝试了
math.fabs()
,在我看来,这似乎可行,但没有成功。

我该如何解决这个问题。它只需要精确到0位小数,而不是sqrt负数


我觉得我在这里很傻

为了知道发生了什么,可以在程序的各个阶段使用调试器或via打印值来检查所有变量

你的问题不是准确性。当您的'r=0.1',然后'r**2=0.01',而您将
cx
循环为
0,0.1,0.2,…
。因此,
r**2
必然小于
cx**2
,并且您试图取一个负数的sqrt

r=2.5
r**2=6.25
和你的
cx
0,0.1,0.2,…,25.0
使
cx**2
r**2
大很多

您应该修改为
cx
选择范围的策略。最简单的方法是忘记令人困惑的变量
i
,只需检查
cx
的值:

导入数学
def获取点(r):
x=[]
y=[]
cx=0

而cx如果只需要精确到某个小数位数,只需将数字四舍五入到该精度即可。
def getpoints(r):
    cx = 0
    rt = int(r*10)
    for i in range(rt*10+1):
        cy = math.sqrt(r**2-cx**2)  #circle formula
        print(cx, cy)
        x.append(cx)
        y.append(cy)
        cx = cx + 0.1