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

python中的float类型计算精度不高的问题(已解决)说的可能比较啰嗦。在洛谷P2181对角线问题中,按照高中所学的组合数可推答案为Cn4(该题题解中有详细过程,这里不多赘述),问题在本文中并不重要。但题中有一个有意思的点,就是题目的答案是非常大

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

说的可能比较啰嗦。

在洛谷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)

 

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

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

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm中tensorflow配置环境_python3.6安装tensorflow

    pycharm中tensorflow配置环境_python3.6安装tensorflowpython版本:python3.6.4tensorflow版本:tensorflow2.4.0(CPU版)pycharm版本:pycharm2020.1python版本和tensorflow版本需要保证一定的对应关系,否则会在使用的时候出现问题,具体对应关系参见网站:https://tensorflow.google.cn/install/source#gpu如图,下面还有GPU版本的对应关系,可以自行查找。一、Python安装python官网:https://ww

    2022年8月29日
  • aspectjweaver AspectJ

    aspectjweaver AspectJ基于aop的依赖jar包,可以实现切面过滤拦截。依赖包:<!–https://mvnrepository.com/artifact/org.aspectj/aspectjweaver–><dependency><groupId>org.aspectj</groupId><artifactId>asp…

    2022年7月12日
  • sublime text3 激活码 2021(最新序列号破解)

    sublime text3 激活码 2021(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
  • oracle修改用户名密码语句_oracle修改数据库用户名

    oracle修改用户名密码语句_oracle修改数据库用户名oracle修改用户名,密码首先我们打开命令行,cmd,进入oracle的后台管理界面,当然,还有很多其他的方式可以进入oracle后台管理界面,比如使用PL/SQL界面化工具,或者使用oracle自带的SQL工具。打开命令窗口,登录oracle后台管理界面:具体命令为在运行处输入cmd,在弹出的命令提示窗口输入setoracle_sid=数据库名称,输入sqlplus进入ora…

    2022年7月28日
  • java字符串分割split_js的sort排序方法

    java字符串分割split_js的sort排序方法●利用split函数:Strings=newString(“2_8_7_4_3_9_1”);String[]arr=s.split(“_”);Java中用split函数进行分割字符串。1.语法如下String.split(sourceStr,maxSplit)String.split(sourceStr)参数说明:sourceStr是被分割的字

    2022年9月30日
  • 使用Nginx实现负载均衡[通俗易懂]

    使用Nginx实现负载均衡[通俗易懂]负载均衡的作用负载均衡:分摊到多个操作单元上进行执行,和它的英文名称很匹配。就是我们需要一个调度者,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优,这就是负载均衡。负载均衡这里面涉及的东西相对也是比较多的,理论就不说太多了,网上,书上很多,今天我们就利用Nginx服务器来实现一个简单的负载均衡负载均衡算法源地址哈希法:根据获取客户端的IP地址,通过哈…

    2022年4月20日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号