鱼C论坛

 找回密码
 立即注册
查看: 266|回复: 3

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

[复制链接]
发表于 2024-5-25 00:06:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
times = [1, 3, 3.5, 6.5, 9.5, 10, 10.8]
names = ["A", "B", "C", "D", "E", "F", "G"]
_ = []
for i in range(len(times)):
    if i == 0:
        _.append(times[i])
    else:
        _.append(times[i] - times[i - 1])
print("速度最快的是:", names[_.index(min(_))], "耗费时间是", min(_))
print("速度最快的是:", names[_.index(max(_))], "耗费时间是", max(_))
我的代码如上,但是这样_列表里面不是精确的浮点数,容易有误差,要怎么改成精确的浮点数计算呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-5-25 00:06:43 | 显示全部楼层
在 Python 中,浮点数的计算往往会出现一些误差。这是由于浮点数的存储方式决定的。要避免浮点数计算的误差,可以使用 decimal 模块来进行精确的浮点数计算。

以下是修改后的代码示例:
from decimal import Decimal

times = [1.23, 2.34, 3.45]
names = ["A", "B", "C"]
_ = []

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

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

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

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

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

希望能帮到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-25 10:26:39 | 显示全部楼层
绝了门子的AI,之间上的这个 decimal 模块  太精确了牛批 学到了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-26 17:11:26 From FishC Mobile | 显示全部楼层
本帖最后由 cjjJasonchen 于 2024-5-26 17:15 编辑

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

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

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

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

这种方法缺点是效率略差
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 04:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表