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

2024-06-16 14:52:31 发布

您现在位置: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负数

我觉得我在这里很蠢


Tags: infordefrangemathsqrtintprint
1条回答
网友
1楼 · 发布于 2024-06-16 14:52:31

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

你的问题不在于准确性。当您的'r=0.1',然后'r**2=0.01',而您将cx循环为0, 0.1, 0.2, ...。所以r**2必然比cx**2小,你试图取一个负数的sqrt

r=2.5r**2=6.25和你的cx0, 0.1, 0.2, ..., 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)

相关问题 更多 >