在这一节课当中,我们来了解一下在C语言中的“浮点类型”,并且通过一段程序来了解在C语言中的浮点类型存在的“误差”现象。
在C语言中,浮点类型又可以再分为“单精度浮点类型”,也就是float;以及“双精度浮点类型”,也就是double。浮点类型在外形上,看起来和数学中的“小数”很类似,但是却是和数学中的小数是有区别的。这种区别主要是体现在两个方面:
第一个方面:在C语言中的浮点型是有边界的,double类型所表示的小数数值和精度范围都要比float大,但是再怎么大,总之是有界限的,而数学中的小数就不一样了,在数学中,可以表示无穷无尽的数值大小和精度范围。
第二个方面:在C语言中的浮点类型,存在一定程度上的“误差”。比方说:99.999这个数字,在数学中就是“99.999”,连一个符号都不会多,一个符号都不会少。但是在C语言中,使用float类型的变量存储这个数,如果我们使用“printf”这个函数,在屏幕上输出这样一个小数,会看到并不是完全显示“99.999”,而是存在一定的误差。
我们通过下面这一段代码,来看一下在C语言中,浮点类型的这一特点,代码如下图所示:
上图中的这段代码,运行之后的效果如下图所示:
我们通过这个运行的结果可以看出,对于99.999这个小数,double类型的变量(num2)就没有出现误差,但是float类型的变量(num1)表示99.999这个数字,就显示出了误差(多出了0.000001)。
可以得出两个结论:1.在C语言中,浮点数存在一定程度的误差;2.double类型的变量,里面存储的数值,要比float类型的变量存储的数值范围广。
接下来,我们再来看这样一段代码:
上述这段代码中,在第5行定义了一个float型的变量num1,在第6行定义了一个double型的变量num2,里面都存储着圆周率,精确到小数点后面的14位。
在第8行和第9行,分别输出了这两个变量里面的值,最终程序运行的效果,如下图所示:
我们可以看到这个程序的运行结果,num1是存在误差的。因为float类型的变量,存储不了太多的精度。这个现象也说明了一个道理:在C语言中的浮点数,和数学中的小数相比,是存在“边界”的,不能超过数值的最大精度和范围。
我们在使用C语言中的浮点类型的时候,一定要有一个印象,就是存在一定程度的“误差”,它和整型不太一样。
我们再来看如下这样一段代码,还有一个知识点我们也要了解一下,就是“浮点型”和“整型”之间的计算问题。代码如下图所示:
上述这段代码中,在第5行定义了float类型变量num1,在第6行中定义了float类型变量num2,但是在第5行和第6行,等号右边的(1/3和1.0/3),在C语言中是不一样的,尽管在数学上1和1.0是一样,但是在C语言中,一个是表示(int)类型,另一个是表示(double)类型。上述这段代码最终的运行效果,如下图所示:
可以看到:num1由于接收的是两个int类型数字的运算,结果并不是数学中的0.333333这个数字。1除以3,在C语言中,结果是一个整数0,这也是C语言和数学不一样的一个地方。
截止到目前为止,我们已经了解了C语言中的基本数据类型:整型、字符型和浮点型。在后面的课程中,我们就来了解“运算符”相关的概念了。
这一节课我们就暂时先讲解到这里,我们下一节课再见!
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.