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)

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 根据调试工具看Vue源码之生命周期(一)

    根据调试工具看Vue源码之生命周期(一)

  • OutputStreamWriter_input用法

    OutputStreamWriter_input用法InputStreamReader和OutputStreamWriter类用法简介。一、InputStreamReader类InputStreamReader将字节流转换为字符流。是字节流通向字符流的桥梁。如果不指定字符集编码,该解码过程将使用平台默认的字符编码,如:GBK。构造方法:InputStreamReaderisr=newInputStreamRead…

  • 我学MSMQ(二)

    我学MSMQ(二)

  • Ubuntu14.04使用DEB安装Mysql5.7

    Ubuntu14.04使用DEB安装Mysql5.7基于Debian的mysql5.7软件包安装(ubuntu14.0464bit)

  • docker(1)下载安装for mac

    docker(1)下载安装for mac前言Docker提供轻量的虚拟化,你能够从Docker获得一个额外抽象层,你能够在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用,例如你可以将Tomcat运行在一个D

  • 做了三年Java,java注释的三种形式

    做了三年Java,java注释的三种形式前言很多同学想进大厂,特别是刚毕业的,以及工作年限短的,不要有任何侥幸心理,踏踏实实的把基础弄扎实了,这是你通往高薪之路的唯一正确姿势。首先从面试题做起~好了,不多说了,直接上正菜。拼多多一面首先自我介绍参加过哪些项目并发编程三要素?实现可见性的方法有哪些?多线程的价值?创建线程的三种方式的对比?画出线程的状态流转图常用的并发工具类有哪些?CyclicBarrier和CountDownLatch的区别CAS的问题:1、CAS容易造成ABA问题2、不能保证代码块的原子

发表回复

您的电子邮箱地址不会被公开。

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