列表下的最后一道课后作业,怎么改可以精确计算浮点数
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(_))
我的代码如上,但是这样_列表里面不是精确的浮点数,容易有误差,要怎么改成精确的浮点数计算呢 在 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 小助理,如未能正确解答您的问题,请继续追问。 绝了门子的AI,之间上的这个 decimal 模块太精确了牛批 学到了 本帖最后由 cjjJasonchen 于 2024-5-26 17:15 编辑
如果不会用这个库的话可以试试把小数转(下用y表示)化成字符串。
先找到每个y的小数点的位置(下用x表示),如果没有小数点可以直接跳过。
全部找好后通过max函数找到最大的x,然后用这个
x*10*每个y来将所有y转化成整数。
计算完成后再/x(从整数变回小数),就能得出精确到结果。
这种方法缺点是效率略差
页:
[1]