如何解决python添加非精确数字的问题

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负数

我觉得我在这里很蠢

lvshanglin 回答:如何解决python添加非精确数字的问题

要了解发生了什么,它有助于使用调试器或通过打印出值来检查程序阶段的所有变量。

您的问题不是准确性。当您的'r = 0.1'时,则为'r ** 2 = 0.01',同时将cx循环为0,0.1,0.2,...。因此,r**2必定会比cx**2小,而您正在尝试使用负数的平方根。

r=2.5r**2=6.25和您的cx走到0,...,25.0时,cx**2r**2大。

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

import math

def getpoints(r):
    x = []
    y = []
    cx = 0
    while cx <= r:
        cy = math.sqrt(r**2-cx**2)  #circle formula
        print(cx,cy)
        x.append(cx)
        y.append(cy)
        cx += 0.1
    return x,y

x_coords,y_coords = getpoints(2.5)

print(x_coords)
print(y_coords)
本文链接:https://www.f2er.com/3118016.html

大家都在问