2025年python中的float类型计算精度不高的问题(已解决)

python中的float类型计算精度不高的问题(已解决)说的可能比较啰嗦 在洛谷 P2181 对角线 问题中 按照高中所学的组合数可推答案为 Cn4 该题题解中有详细过程 这里不多赘述 问题在本文中并不重要 但题中有一个有意思的点 就是题目的答案是非常大的 用 long long 都不行 c 中需要用 unsigned long long 自然 我就想到 python 中的 int 类型范围与内存挂钩 一般可理解能取到该系统的最大值 代码如下 m

说的可能比较啰嗦。

在洛谷P2181 对角线 问题中,按照高中所学的组合数可推答案为Cn4(该题题解中有详细过程,这里不多赘述),问题在本文中并不重要。

但题中有一个有意思的点,就是题目的答案是非常大的,用long long都不行,c++中需要用unsigned long long,自然,我就想到python中的int类型范围与内存挂钩,(一般可理解能取到该系统的最大值)

代码如下

m = int(input())
n = int(m*(m-1)/2*(m-2)/3*(m-3)/4)
# 首先大家可以注意一个点,我在这里注意到了要把结果转换为int类型
print(n)

那么大家可以运行一下这个程序,其实如果精度较低的情况下,答案是没有问题的,但是此题正好碰到了它的最高精度,会发现结果相差不多,导致我没有全ac,于是我开始探寻原因 其实我最开始没有主要float类型,直到一个dl告诉我把他改为这样就好

代码如下

m = int(input())
n = m*(m-1)//2*(m-2)//3*(m-3)//4
print(n)

此时,我才想起来python内部将“/”默认为float除法,根据计算机给予的float类型的精度本身就是小于c++中的unsigned long long类型 查阅为2的53次方,自然不满足题意,float就会取一个近似值(这不糊弄人吗?[doge])

上边代码应该时最简单的改法了,但是其实还有一种改法 就是提高精度(利用python中的decimal模块)即可。

代码如下

import decimal

m = decimal.Decimal(int(input()))
n = int(m*(m-1)/2*(m-2)/3*(m-3)/4)
print(n)
编程小号
上一篇 2025-01-26 14:30
下一篇 2025-03-06 23:27

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/135947.html