captaindai 发表于 2024-5-25 00:06:26

列表下的最后一道课后作业,怎么改可以精确计算浮点数

times =
names = ["A", "B", "C", "D", "E", "F", "G"]
_ = []
for i in range(len(times)):
    if i == 0:
      _.append(times)
    else:
      _.append(times - times)
print("速度最快的是:", names, "耗费时间是", min(_))
print("速度最快的是:", names, "耗费时间是", max(_))
我的代码如上,但是这样_列表里面不是精确的浮点数,容易有误差,要怎么改成精确的浮点数计算呢

FishC 发表于 2024-5-25 00:06:43

在 Python 中,浮点数的计算往往会出现一些误差。这是由于浮点数的存储方式决定的。要避免浮点数计算的误差,可以使用 decimal 模块来进行精确的浮点数计算。

以下是修改后的代码示例:

from decimal import Decimal

times =
names = ["A", "B", "C"]
_ = []

for i in range(len(times)):
    if i == 0:
      _.append(Decimal(times))
    else:
      _.append(Decimal(times) - Decimal(times))

fastest_index = _.index(min(_))
slowest_index = _.index(max(_))

print("速度最快的是:", names, "耗费时间是", min(_))
print("速度最慢的是:", names, "耗费时间是", max(_))

在代码中,我们首先从 decimal 模块导入了 Decimal 类。然后,通过将浮点数转换成 Decimal 对象,在进行计算时可以得到精确的结果。

另外,我还做了一些优化:使用 `_.index()` 方法找到最快和最慢耗时对应的索引,然后通过索引找到对应的名称,最后打印结果。

希望能帮到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

小肥狼haoran 发表于 2024-5-25 10:26:39

绝了门子的AI,之间上的这个 decimal 模块太精确了牛批 学到了

cjjJasonchen 发表于 2024-5-26 17:11:26

本帖最后由 cjjJasonchen 于 2024-5-26 17:15 编辑

如果不会用这个库的话可以试试把小数转(下用y表示)化成字符串。

先找到每个y的小数点的位置(下用x表示),如果没有小数点可以直接跳过。

全部找好后通过max函数找到最大的x,然后用这个
x*10*每个y来将所有y转化成整数。

计算完成后再/x(从整数变回小数),就能得出精确到结果。

这种方法缺点是效率略差
页: [1]
查看完整版本: 列表下的最后一道课后作业,怎么改可以精确计算浮点数