c语言如何控制浮点型的精度,c语言单精度浮点型
博客明星评选
原标题:判断解二元一次方程的根。在判断根的情况时,根据数学知识,我通过代码中的IF 0来判断根的情况。
但在答案中,代码判断语句是1e-6,为什么要用10-6来判断呢?为什么不用0?我百思不得其解,但是我也没有什么好的文章是关于浮点精度不足导致的预期结果的,就记录在这里吧。
结果:
其实C语言中浮点类型是有错误的,会导致不同的结果。比如不能直接用==和两个浮点型!=比较(注:只要是关于大小比较的,都不行)。因为小数位数不同,所以要在等号上比较的浮点解决方案是
Abs(x-y) 1e-6(如果小于,则认为两者相同;否则就不一样了(如果大于或小于,绝对值函数abs()要去掉),因为两者相差很小,接近于0)。这里解决了系统那部分的精度问题,其他情况可以外推。
对应原问题示例:
比如这样的情况,1/3-1/3根据数学知识应该是0,但是如果设置中精度不同,比如一个结果是0.333333,不同精度下一个结果是0.3333,那么0.000333的结果就不是0。
那么如果此时的判断语句是if0,则不能达到预期的效果,所以为了避免这种情况,解:
设置一个足够小的值(通常为10e-6)为0作为判断浮点类型之间大小的标准,可以避免精度的损失,导致判断语句的分支错误或达不到预期的效果。
电脑魔术师原创作品,
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。