C语言浮点型精度缺失解决
C语言 解决 精度 缺失 浮点
2023-06-13 09:11:17 时间
原题:
- 判断求解二元一次方程的根,
在判断根的情况,按照数学知识理解,我是在代码 中以
if Δ<0
来判断根的情况的 但是在答案中代码判断语句则是 Δ<1e-6 那么为什么是要用10^-6 来判断?为什么不用0呢? 在百思不得其解下 ,我查阅各个文章都没有很好的 专门关于 浮点精度缺失 导致 预期结果 的文章 所以在此记录,
结果:
- 其实在C语言中浮点型是有误差的,会导致结果不一样,
比如我们不可以直接把两个浮点型用==和!= 比较的(注:只要是关于大小比较都不可以),因为小数位是不一样的,所以再等号上要比较浮点型解决方法是
abs(x-y) <1e-6
(小于则认为二者一样,否则不一样(大于或者小于,要得到具体去掉绝对值函数abs()
即可),因为两者差非常小,接近于0)其中在这里就把系统那一部分精度问题解决了,对于其他情况下举一反三。
对应原题例子:
比如这样一个情况 1/3 - 1/3 按照数学知识 应该为0 但如果在设置中精度不同, 如在不同精度下 结果会为 一个为0.3333333一个为0.3333那结果是0.0000333就不为0,
那么如果此时判断语句为if Δ<0
就不能达到预期效果了,所以为了避免这种情况,解决办法:
- 设置一个足够小的值(一般情况用10e-6)当作0,使其作为浮点型之间判断大小的准则,就可以避免出现精度损失导致判断语句分支错误或达不到所要效果。
相关文章
- 【C语言】动态内存管理(heap)
- 【C语言】解决C语言题目中的多组输入问题
- [编程] C语言Linux系统编程-等待终止的子进程(僵死进程)详解编程语言
- Linux系统下C语言编写的监听端口程序(linuxc监听端口)
- C语言abs()函数:求整数的绝对值
- Linux下C语言动态链接库实现(linuxc动态链接库)
- Linux下如何解决C语言内存泄漏问题(c内存泄漏linux)
- 语言Linux下C语言开发实践经验(linux的c)
- idC语言中MySQL返回自增ID的实现方式(c mysql返回自增)
- C语言编写MySQL表备份工具实战(c mysql 表备份)
- MySQL连接池C语言实现(c mysql 有连接池)
- 解决方案C语言MySQL解决之路未寻(c mysql找不到)
- MySQL批量查询让C语言操作更加高效(c mysql批量查询)
- C语言程序使用MySQL存储和管理音乐文件(c mysql存储音乐)
- 解决MySQL失败问题C语言实现解决方案(c mysql失败)
- C语言编写MySQL数据备份程序实现方法(c mysql备份程序)
- 解决C语言连接Oracle超时问题(c 连接oracle超时)
- 高并发下的C语言与 Oracle数据库协同处理(c oracle 高并发)
- 深入C语言把文件读入字符串以及将字符串写入文件的解决方法
- 对C语言中sizeof细节的三点分析介绍
- C语言安全编码之数组索引位的合法范围