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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 怎么让FOXMAIL关了以后在右下角自动收取邮件

    怎么让FOXMAIL关了以后在右下角自动收取邮件

    2021年10月19日
    40
  • 多线程01_01-02

    多线程01_01-02一.基本概念程序——指令和数据的有序集合——静态Process进程——执行程序的依次执行过程——动态——系统资源分配的单位Thread线程——一个进程中可以包含多个线程(至少一个)——动态——CPU调度和执行的单位(main函数是主线程)**多线程:**有多个CPU即多核,如服务器。notes:线程是独立执行的路径程序运行时,即使没有自己创建线程,后台也会有多个线程,如主线程,垃圾回收线程gcmain()称为主线程,是系统的入口,用于执行整个程序在一个进程中,如果开辟了

    2022年8月9日
    6
  • navicat2021 7 mac激活码【2021免费激活】

    (navicat2021 7 mac激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlMLZPB5EL5Q-eyJsaWN…

    2022年3月20日
    46
  • 一个可以恶搞朋友的关机程序!!!

    一个可以恶搞朋友的关机程序!!!文章目录前言一、关机程序1.思路分析二、运行结果如下1.点击后总结前言这是一个可以恶搞朋友的关机程序,实现原理是通过system直接调用dos命令窗口启动关机程序,既然是恶搞那就一定要给你的恶搞对象一定的“机会”,下面我将带大家一起来学习一个这个简单的恶搞程序。(源码可以私信找我要,简单改一下输出语句便可以直接自己使用)大家编译后可以直接把.exe文件发给你所需要恶搞的对象一、关机程序1.思路分析1.使用system调用dos命令窗口直接输入关机命令并弹出提示,此时windows响应跳出关机

    2022年7月22日
    8
  • wireshark抓包分析UDP

    wireshark抓包分析UDP1 什么是 UDP 传输层有两个协议 之前讨论过的 TCP 协议和现在要说的 UDP 协议 二者互为补充 UDP 是无连接的协议 它无需经过繁琐的握手就能建立连接并且发送已封装的 IP 数据包 它能做的事情很少 而面向连接的 TCP 协议几乎可以做所有事情 特点 UDP 最大的三个特点是无连接 不可靠 快速传输 UDP 提供了无连接通信 且不对传送数据包进行可靠性保证 适合于一次传输少量数据 UDP 传输的可靠性由应用层负责 常用的 UDP 端口号有 53 DNS 69 TFTP 161 SNMP UDP 报文没有可

    2025年6月20日
    1
  • OpenProcessToken

    OpenProcessTokenOpenProcessToken  要对一个任意进程(包括系统安全进程和服务进程)进行指定了写相关的访问权的OpenProcess操作,只要当前进程具有SeDeDebug权限就可以了。要是一个用户是Administrator或是被给予了相应的权限,就可以具有该权限。可是,就算我们用Administrator帐号对一个系统安全进程执行OpenProcess(PROCESS_ALL_ACCES

    2022年6月25日
    22

发表回复

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

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