C语言典型例题19

《C程序设计教程(第四版)——谭浩强》


例题2.7 检查浮点型数据的舍去误差

C语言知识:

浮点数在C语言用有两个类型,有float和double类型,其中double类型的数据精度更高


解题思路:

可以将一个double类型的数据和float类型的数据输入,观察他们的输出情况,从而判断他们的舍去误差

代码:

//《C程序设计教程(第四版)——谭浩强》
//例题2.7 检查浮点型数据的舍去误差

//C语言知识:浮点数在C语言用有两个类型,有float和double类型,其中double类型的数据精度更高
//解题思路:可以将一个double类型的数据和float类型的数据输入,观察他们的输出情况,从而判断他们的舍去误差

#include <stdio.h>
int main()
{
	float a;
	double b;
	
	printf("请输入一个浮点数a,用于判断float类型的误差:\n");
	scanf("%f",&a);
	printf("请输入一个浮点数b,用于判断double类型的误差:\n");
	scanf("%lf",&b);//读取 double 类型的输入(注意 %lf)
	
	printf("float类型的数据a的输出结果为:\n%f\n",a);
	printf("double类型的数据b的输出结果为:\n%lf\n",b);
	
	return 0;
}

运行过程:

代码运行过程中遇到的问题:

1.scanf格式化符号:在读取double类型的变量时,您使用了%f ,这是不正确的,应该使用 %lf。
2.输出格式:虽然%f在 printf 中是正确的,但通常打印 double 类型的变量时应该使用%lf来强调其类型。
3.浮点数精度:您可能想要展示浮点数的精度误差,而仅仅打印这些数字可能不足以体现。

// 额外:演示浮点数的误差
printf("\n浮点数在计算机内部的存储及其误差示例:\n");
printf("a + 1.0f = %f\n", a + 1.0f);
printf("b + 1.0 = %lf\n", b + 1.0);

4.单精度浮点数变量,只能提供6~7位有效数字,第7位之后的数字不起作用,后面的几位被忽略了。

5.C编译系统把所有浮点数常量都按照双精度处理,分配8字节,这是为了在运算时保持较高的精度。如果不想把浮点型常量按照双精度处理,可以在数值后面加字母f或者F,这样编译系统就会把他们当成单精度浮点数处理,分配4字节。这样,数值范围和有效位数都减小了。

  • 15
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值