gpt4 book ai didi

python - 制作允许 0.1 + 0.2 = 0.3 的 testfunc

转载 作者:行者123 更新时间:2023-12-02 18:33:45 25 4
gpt4 key购买 nike

我刚刚开始我的第一门编程类(class)(过一段时间),我正在完成以下任务:

我们被要求创建一个将两个参数相加的函数 add(x,y)。然后,我们在测试函数 test_add() 中实现此函数,并使用断言语句来确保添加函数正常工作。只要参数是整数,一切都很好。然后,我们被要求在我们的 add-function 中实现测试以确保 0.1 + 0.2 = 0.3。我已经阅读了有关该主题的内容,并且知道它们的表示将使用二进制分数进行近似,这样我实际添加的是 0.100000000000000005551115123126 + 0.2200000000000000011102230246252 = 0.300000000000000004_ 因此,我的 testpyfunction 没有通过测试。我尝试过的其中一件事是

def add(x,y, tol=1e-9):
if abs(int(x) - x) <= tol:
x == int(x)
if abs(int(y) - y) <= tol:
y == int(y)


return x + y

我也试过

def add(x,y, tol=1e-9):
if isinstance(x, float):
x == round(x, 1)
if isinstance(y, float):
y == round(y, 1)
return x + y

不过还是不太走运……有什么提示可以让我通过这个测试吗?在此先感谢所有帮助和提示! :)

最佳答案

您想要舍入加法的结果,而不是方法的输入。即

>>> round(.1, 1) + round(.2, 1) == .3
False
>>> round(.1 + .2, 1) == .3
True

因此您的添加方法可能如下所示:

def add(x, y):
return round(x + y, 1)
>>> add(.1, .2) == .3
True

如果您仍想保持舍入的公差,请将 tol 参数更改为要保留的小数位数:

def add(x, y, tol=9):
return round(x + y, tol)
>>> add(.1, .2) == .3
True

另一方面,通常在测试浮点参数时,最好检查边界而不是准确检查值。你可以做这样的事情。

>>> tol = 1e-9
>>> expected = .3
>>> actual = .1 + .2
>>> expected - tol <= actual <= expected + tol
True

或者更简洁:

>>> abs(expected - actual) <= tol
True

关于python - 制作允许 0.1 + 0.2 = 0.3 的 testfunc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69090660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com