本篇文章给大家谈谈c语言精度控制,以及c语言高精度对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
C语言中浮点数的精度问题
这里有个概念要搞清楚,精度和输出小数点后多少位不是一回事。精度是说某种类型的浮点数在C中计算时有多少位是有效的,这实际上是包括整数部分的,但不包括小数点那一位;而输出小数点后多少位是由输出函数printf中的控制字符串确定的。
xf中的x确定输出多少位小数,如%.12f就把对应的浮点变量值输出12位小数。但是,由于浮点数的长度都是有限的,float的精度是7位左右(包括整数部分),double的精度为16位左右(同样包括整数部分),当x值大到超出对应变量类型的最大表达能力时,后续数字实际上是系统填上的垃圾数,没有实际意义。
如果两个都是整形数的话,结果当然是整形。这个谁都知道 但是当有一个是浮点数的话,其结果也就是浮点数啦。和一负一正为负一样的。至于为什么后面结果有6个0.那是因为float浮点数。在你没有限制的情况下,自动默认为6位小数。当你有限制的时候。比如%,2f。就表示两位小数啦。
在做乘100之类的操作时,由于阶码增大,尾数要右移,会造成精度丢失。简单来说,此时内存中存储的数字是999999..,但输出到屏幕上时,由于保留6位,显示为000000。而浮点数转整数类型时只保留整数部分,因此99999..强制类型转换后等于9。
浮点数表示法的确存在精度丢失的问题,是由于最低有效位的限制造成的。而且一般其实际表示的数值会比规定的要小。
需要注意的是,由于计算机内部表示浮点数的方式,有时可能会出现精度问题。即使使用“%.2f”格式化字符串,在某些情况下也可能得不到完全精确的两位小数结果。这通常是由于计算机内部处理小数的方式导致的。但大多数情况下,这种精度损失是可以接受的。
c语言精度控制的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言高精度、c语言精度控制的信息别忘了在本站进行查找喔。