当前位置: 首页 > news >正文

浮点数精度问题(CSP38思考)

        CSP38的第一题,考到了浮点数的除法(当然考完发现其实也可以不涉及浮点数,直接转化为整型),我第一题一直卡到70、80分,,故写下此文。


        浮点数的运算有精度损失问题,那么应该如何解决和避免呢?

        一个int类型变量乘以1.0,转化的是double型(64位系统下,8字节),如果乘以1.0f,那就是float型(4字节)。

	int a=10;cout<<sizeof(a*1.0f)<<endl;cout<<sizeof(a*1.0)<<endl;/*48*/

        这是常见的在除法中避免精度损失的方法,如下:

int a=2;
int b=5;
cout<<a/b<<" "<<a*1.0/b<<endl;
/*0 0.4*/

        这样看似确实解决了精度,但是这只是保证了过程中的精度问题 ,如果我们把这个double类型的值赋给其它变量,那就又要看这个赋值变量了。

float 与 double 的区别 

        float为32位,double位64位,但这并不代表和整型一样,实际用来计算的位数更少,因为有符号位等。就和我们计算Pi后的小数点一样,小数点后位数越多,精度肯定越高。在一些对精度要求高的地方肯定是用double。但是肯定不能和整数运算相比。

        商业级的有BigDecimal,目前在算法比赛中,如果涉及到浮点数运算,大多数都是可以进行约分的,把分母约掉,要仔细观察题目。如果没有,那就是你没找到正确的方法。被迫用小数运算,就用double,不要用float!!!

        最后可以看一下我写的CSP38第一题,一个80分代码,一个AC代码,大家可以看看有什么区别,问题在哪里?

80分代码:

#include<bits/stdc++.h>
using namespace std;int main()
{int n;cin>>n;int a=0,b=0,c=0;float s=0;int x=0,y=0;for(int i=0;i<n;i++){cin>>a>>b>>c;s=((c*1.0-a*1.0)*1.0/b*1.0)*10.0;
//		s=((c-a)/b)*10.0;x=(int)s;s=s*1.0-int(s)*1.0;
//		cout<<s<<endl;s*=10.0;y=(int)s;printf("%d %d\n",++x,++y);}return 0;
}

AC代码:

#include<bits/stdc++.h>using namespace std;int k;int main(){cin >> k;while(k--){int u,sgm,n;cin >> u >> sgm >> n;double ans = 0.00;double ans2=0.00;int ans1 = 0;int ans3 = 0;ans = (double) (n-u)/sgm;ans2 = abs((int)(ans*10)-(ans*10))*10+1;ans = ans*10+1;ans1 = ans;cout << ans1 << " " <<ans2 << endl;}
}

         目前我想的就是float与double问题,具体还要等我下次模拟开放提交一下代码试试了。

参考文献

浮点类型计算精度不准确原因及如何规避 - wangsong412 - 博客园

相关文章:

  • Visual Studio 2022打包程序流程
  • 【靶场】XXE-Lab xxe漏洞
  • 比较一组结构之间的变换
  • 浮点数运算和精度总结
  • 官网Numpy教程
  • C++.OpenGL (17/64)深度测试(Depth Testing)
  • [mdm9607] Qualcomm mdm9607新增nand flash支持修改方法
  • 【拆机系列】暴力拆解AOC E2270SWN6液晶显示屏
  • 图神经网络(GNN)模型的基本原理
  • Python学习——数组的行列互换
  • 学习日记-day24-6.8
  • JS设计模式(5): 发布订阅模式
  • Java 高级泛型实战:8 个场景化编程技巧
  • 【Liunx专栏_6】Linux线程概念与控制
  • GitFlow 工作模式(详解)
  • Continue 开源 AI 编程助手框架深度分析
  • 小记Vert.x的Pipe都做了什么
  • 【GPT模型训练】第二课:张量与秩:从数学本质到深度学习的基础概念解析
  • 自动化立体仓库堆垛机控制系统STEP7 OB1功能块
  • 贝叶斯定理与医学分析(t检验场景)
  • 怎么做网站一张图/体验式营销
  • java做安卓游戏破解版下载网站/收录优美的图片
  • 属于垂直型b2b网站的有/seo优化软件
  • 东莞电子网站建设/计算机培训机构哪个最好
  • 加工厂网站建设/信息流广告的特点
  • 江门网站制作培训/2023推广平台