本文共 1956 字,大约阅读时间需要 6 分钟。
实验目的:
1.掌握double型浮点数与float型浮点数的区别
2.与整型数据相比,浮点型数据会出现误差,只要使用浮点型数据就一定会出现误差吗?
实验步骤:
1. 填表并分析
double型 | fa | fb | fc | fd |
值 | 2.3 | -0.0023 | 2.3e5 | 0.00023E-2 |
以%f格式预期的输出为 |
|
|
|
|
以%e格式预期的输出为 |
|
|
|
|
以%E格式预期的输出为 |
|
|
|
|
以%f格式实际的输出为 |
|
|
|
|
以%e格式实际的输出为 |
|
|
|
|
以%E格式实际的输出为 |
|
|
|
|
#include <stdio.h>
void main()
{
double fa, fb, fc, fd;
fa = 2.3;
fb = -0.0023;
fc = 2.3e5;
fd = 0.00023E-2;
printf("%f,%e,%E\n", fa, fa, fa);
printf("%f,%e,%E\n", fb, fb, fb);
printf("%f,%e,%E\n", fc, fc, fc);
printf("%f,%e,%E\n", fd, fd, fd);
}
分析:
1)与实验2-4中的第一步相比,输出有何不同?
2)double型变量与float型变量相比有何不同?
2. 填表并编程验证
double型 | fa | fb | fc | fd |
值 | 2.3 | -0.0023 | 2.3e5 | 0.00023E-2 |
以%13.2f格式输出为 |
|
|
|
|
以%3.0f格式输出为 |
|
|
|
|
以%-13.2f格式输出为 |
|
|
|
|
以%.15f格式输出为 |
|
|
|
|
分析:
1)与实验2-4中的第三步相比,输出有何不同?
2)double型变量与float型变量相比有何不同?
3. 填表并分析
变量为double型 | scanf("…", &fa, &fb, &fc, &fd) |
以%f格式输入 | 2.3 -0.0023 2.3e5 0.00023E-2 |
以%e格式输入 | 2.3 -0.0023 2.3e5 0.00023E-2 |
以%E格式输入 | 2.3 -0.0023 2.3e5 0.00023E-2 |
给出每次输入后每个变量以%f格式的预期输出,并通过下面程序验证。
#include <stdio.h>
void main()
{
double fa, fb, fc, fd;
scanf("%f%f%f%f", &fa, &fb, &fc, &fd);
printf("%f,%f, %f,%f\n", fa, fb, fc, fd);
scanf("%e%e%e%e", &fa, &fb, &fc, &fd);
printf("%f,%f, %f,%f\n", fa, fb, fc, fd);
scanf("%E%E%E%E", &fa, &fb, &fc, &fd);
printf("%f,%f, %f,%f\n", fa, fb, fc, fd);
}
分析:
1)与实验2-4中的第二步相比,输出有何不同?可以得出一个什么结论?
切记:输出时格式字符f,e,E对double型变量和float型变量通用,但在输入时double型变量所对应的格式字符前必须加长度修饰符l。
2)除了double型变量所对应的格式字符前须加长度修饰符l之外,其与float型变量在输入时还有区别吗?
4.给出程序的输出并分析。
#include <stdio.h>
void main()
{
float fb = 0.1;
printf("%.15f\n", fb);
printf("%.15f\n", fb+fb+fb+fb+fb+fb+fb+fb+fb+fb);
printf("%.15f\n", 1.0);
}
分析:
变量fb加十次等于1吗?为什么?
5. 浮点型变量的误差。
5.1填表并编程验证。
float型 | fa | fb | fc | fd |
值 | 0.125 | 0.00125 | 0.125e-3 | -0.125 |
用二进制的指数形式表示为 |
|
|
|
|
以%.18f格式的输出为 |
|
|
|
|
double型 | fa | fb | fc | fd |
值 | 0.125 | 0.00125 | 0.125e-3 | -0.125 |
以%.18f格式的输出为 |
|
|
|
|
分析:
1)当变量为float型时,变量fa为何没有误差?
2)当变量为float型时,变量fb的输出是:0.001249999972060323,这与float型浮点数只能精确到小数点后的6至7位矛盾吗?
3)浮点型数据什么情况没有误差?
5.2填表并编程验证
float型 | fa |
值 | 125125125.125e2 |
用二进制的指数形式表示为 |
|
以%.18f格式的输出为 |
|
double型 | fa |
值 | 125125125.125e2 |
用二进制的指数形式表示为 |
|
以%.18f格式的输出为 |
|
分析:
浮点型数据在什么情况下没有误差?
转载地址:http://tbdti.baihongyu.com/