C语言浮点型精度缺失解决

简介: C语言浮点型精度缺失解决

原题:

  • 判断求解二元一次方程的根,

在判断根的情况,按照数学知识理解,我是在代码 中以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,使其作为浮点型之间判断大小的准则,就可以避免出现精度损失导致判断语句分支错误或达不到所要效果。


相关文章
|
2月前
|
存储 程序员 C语言
C语言数据存储 —— 浮点型篇
C语言数据存储 —— 浮点型篇
23 0
|
2月前
|
C语言
【C语言】求整型变量和浮点型变量的绝对值
【C语言】求整型变量和浮点型变量的绝对值
26 0
|
9月前
|
存储 C语言
【C语言进阶】数据的存储----浮点型篇
【C语言进阶】数据的存储----浮点型篇
146 0
|
26天前
|
存储 编译器 C语言
爱上C语言:整型和浮点型在内存中的存储(进制转换,原码,反码,补码以及大小端)
爱上C语言:整型和浮点型在内存中的存储(进制转换,原码,反码,补码以及大小端)
|
2月前
|
存储 编译器 程序员
【C语言】整形数据和浮点型数据在内存中的存储
【C语言】整形数据和浮点型数据在内存中的存储
16 0
|
10月前
|
存储 C语言
C语言进阶:浮点型数据的存储
C语言进阶:浮点型数据的存储
104 0
|
2月前
|
存储 程序员 C语言
探索C语言中的浮点型数据类型及其应用
探索C语言中的浮点型数据类型及其应用
19 0
|
5月前
|
缓存 C语言
C语言中限定输入scanf的为整型(整数),浮点型
C语言中限定输入scanf的为整型(整数),浮点型
|
7月前
|
存储 小程序 程序员
8k字详解整型(int)/字符型(char)/浮点型(float)/有符号(signed)/无符号(unsigned)数据在内存中的存储【程序员内功修炼/C语言】
8k字详解整型(int)/字符型(char)/浮点型(float)/有符号(signed)/无符号(unsigned)数据在内存中的存储【程序员内功修炼/C语言】
64 0
|
9月前
|
存储 C语言
【C语言】 数据的存储 -- 数据类型介绍 -- 存储 -- 浮点型在内存中的存储,很详细也很重要,不明白的一定要看3
【C语言】 数据的存储 -- 数据类型介绍 -- 存储 -- 浮点型在内存中的存储,很详细也很重要,不明白的一定要看3
【C语言】 数据的存储 -- 数据类型介绍 -- 存储 -- 浮点型在内存中的存储,很详细也很重要,不明白的一定要看3