如何修复添加不精确数字的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