前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python中的float类型计算精度不高的问题(已解决)

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

作者头像
全栈程序员站长
发布2022-09-08 10:44:06
7610
发布2022-09-08 10:44:06
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

说的可能比较啰嗦。

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

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

代码如下

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

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

代码如下

代码语言:javascript
复制
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模块)即可。

代码如下

代码语言:javascript
复制
import decimal

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

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/156030.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档