浮点问题及其克服方法

2024-09-29 21:56:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须非常正确地计算不同点之间的高程。这意味着它们应该尽可能正确。遗憾的是,我已经完成了我的完整脚本在浮动数字。现在在最后的高程计算中,我得到了错误的高度信息。我已经读了很多关于浮动问题的书,但遗憾的是我找不到任何方法来克服它。有人说我应该把浮点数四舍五入,然后再使用它,也有人说应该使用十进制。可悲的是,没有一个真正的来源,我可以找到最好的解决方案,最适合我的问题。你知道吗

我的高程值(variable ListOfValues)是:

195,1850 
195,1550 
195,1625 
195,1400 
195,1350 
195,0925 
195,1050 
195,0800 
195,0825 
195,0625 
195,0650 
195,0350 
195,0425

这是我的密码:

for i in range(0, len(ListOfValues)-1):
        Elevation = Elevation + abs(ListOfValues[i] - ListOfValues[i+1])
    for i in range(0, len(ListOfValues)-2):
        if ListOfValues[i]<ListOfValues[i+1]:
            ElevationUpwards=ElevationUpwards+(ListOfValues[i+1] - ListOfValues[i])

        if ListOfValues[i]>ListOfValues[i+1]:
            ElevationDownwards=ElevationDownwards+(ListOfValues[i] - ListOfValues[i+1])

我没有得到向上提升的值0,0325,而是通过Python 0.024999999999977263。差别太大了,我无法承受。 下面是Python的计算:

195.185-195.155=0.030000000000001137
195.1625-195.155=0.007499999999993179
195.1625-195.14=0.052500000000009095
195.14-195.135=0.05750000000000455
195.135-195.0925=0.09999999999999432
195.105-195.0925=0.01999999999998181
195.105-195.08=0.12499999999997158
195.0825-195.08=0.022499999999979536
195.0825-195.0625=0.1449999999999818
195.065-195.0625=0.024999999999977263
195.065-195.035=0.17499999999998295

您建议如何尽可能接近“真实”高程值?你知道吗


编辑: 虽然有人建议用十进制,但我试过这个。我的代码是:

Elevation=Decimal(0.0)
ElevationUpwards=Decimal(0.0)
ElevationDownwards=Decimal(0.0)
for i in range(0, len(ListOfValues)-1):
        Elevation = Elevation + abs(Decimal(ListOfValues[i]) - Decimal(ListOfValues[i+1]))
for i in range(0, len(ListOfValues)-1):
        if ListOfValues[i]<ListOfValues[i+1]:
            ElevationUpwards=ElevationUpwards+(Decimal(ListOfValues[i+1]) - Decimal(ListOfValues[i]))

        if ListOfValues[i]>ListOfValues[i+1]:
            ElevationDownwards=ElevationDownwards+(Decimal(ListOfValues[i]) - Decimal(ListOfValues[i+1]))

这个代码的结果是:0.03249999999997044142219237984 我做错什么了吗?你知道吗


Tags: 代码inforlenifrangeabs建议
1条回答
网友
1楼 · 发布于 2024-09-29 21:56:53

这就是你想写的代码。你知道吗

如果你能在第一时间发布这个代码,那就太好了。你知道吗

ListOfValues = [195.1850,
195.1550,
195.1625,
195.1400,
195.1350,
195.0925,
195.1050,
195.0800,
195.0825,
195.0625,
195.0650,
195.0350,
195.0425]

Elevation = 0             # Elevation is not used after the loops
ElevationUpwards = 0
ElevationDownwards = 0    # ElevationDownwards is not used after the loops

for i in range(0, len(ListOfValues)-1):
    Elevation = Elevation + abs(ListOfValues[i] - ListOfValues[i+1])

for i in range(0, len(ListOfValues)-1):  # Changed this to -1 instead of -2 as posted
    if ListOfValues[i]<ListOfValues[i+1]:
        ElevationUpwards=ElevationUpwards+(ListOfValues[i+1] - ListOfValues[i])

    if ListOfValues[i]>ListOfValues[i+1]:
        ElevationDownwards=ElevationDownwards+(ListOfValues[i] - ListOfValues[i+1])

print(ElevationUpwards)

输出:

0.03249999999997044

这似乎就是你要寻找的价值。你知道吗

您的代码在编写时使用了适当的缩进,产生了错误的0.0245值。你知道吗

更新:

您可以在计算前固定值,然后更正结果:

ListOfValues=[int(v*10000) for v in ListOfValues]
# Then do the calculations
print(ElevationUpwards/10000)

输出:

0.0325

相关问题 更多 >

    热门问题