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
这是我代码的一部分。它用于计算圆上的绘图
每次迭代开始时,x都会向它添加0.1,但随着迭代的进行,它会开始得到1.6000000000000003
之类的东西作为x的输出。这会导致一个问题,例如r=2.5和x=2.400000000000001,然后它加上0.1,并尝试平方根r^2-x^2,但x大于r,即使它不应该
x是指cx
我试过math.fabs()
,在我看来,这似乎是可行的,但没有成功。
我该怎么解决这个问题。它只需要精确到0位小数,而不是sqrt负数
我觉得我在这里很蠢
要知道发生了什么,可以在程序的各个阶段检查所有变量,可以使用调试器,也可以通过打印值
你的问题不在于准确性。当您的'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
的值:相关问题 更多 >
编程相关推荐