C连载12-float类型上、下溢以及打印格式说明

一、打印float类型

  • %f来表示float和double类型的数字
  • %e来打印指数记数法的浮点数
  • 如果系统支持十六进制的浮点数,可以使用a和A分别来代替e和E
  • 打印long double类型要使用%Lf或%Le或%La来替代
#include<stdio.h>
int D12_1_showf_pt(void) {
	float aboat = 32000.0;
	double abet = 2.14e9;
	long double dip = 5.32e-5;

	printf("%f can be written %e \n", aboat, aboat);
	//下一行要求编译器支持C99或其中的相关特性
	printf("And it's %a in hexademical,power of 2 notation\n", aboat);
	printf("%f can be written %e\n", abet, abet);
	printf("%Lf can be written %Le\n", dip, dip);

	return 0;
}

运行结果:
12.1

二、浮点值的上溢和下溢

  • 当计算导致数字过大,超过了当前类型所能表达的范围时,就会发生上溢
  • 这种行为过去是未定义的,现在会赋值一个无穷大的值,printf该值的时候会显示infinfinity
  • 当计算导致数字过大,超过了当前类型所能表达的范围时,就会发生下溢
  • C语言把损失了类型全精度称为低于正常值的浮点值。
  • C库已经提供了用于检查计算是否会产生一个低于正常值的函数。
#include<stdio.h>

int D12_2_Floaterr(void) {
	float a, b;
	b = 2.0e20 + 1.0;
	a = b - 2.0e20;
	printf("%f\n", a);

	return 0;
}

运行显示:
12.2

三、源码:

  • D12_1_showf_pt.c
  • D12_2_Floaterr.c
  • https://github.com/ruigege66/CPrimerPlus/blob/master/D12_1_showf_pt.c
  • https://github.com/ruigege66/CPrimerPlus/blob/master/D12_2_Floaterr.c
  • CSDN:https://blog.csdn.net/weixin_44630050
  • 博客园:https://www.cnblogs.com/ruigege0000/
  • 欢迎关注微信公众号:傅里叶变换,个人账号,仅用于技术交流,后台回复“礼包”获取Java大数据学习视频礼包
    20.4
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
(*pop-error-mode*) 下溢通常出现在数学计算领域中,特别是在涉及浮点数操作时。它是一种特殊情况,指在计算过程中,结果比计算机所能表示的最小数值还要小。 ### 概述 当涉及到浮点数运算时,特别是进行除法、开方等可能导致结果接近于零的操作时,“下溢”可能会发生。这种现象主要是由于浮点数表示的精度限制导致的。大多数现代计算机系统采用IEEE 754标准来处理浮点数。这个标准规定了如何将实数近似地表示为二进制形式,并对最大和最小值进行了定义。 ### IEEE 754 标准下的最小正正常数 在IEEE 754标准下,每个浮点数都有一个最小正常数,这是指可以准确表示的最大绝对值相对较小的浮点数。对于单精度浮点数(32位),最小正常数约为 `2^-149`;对于双精度浮点数(64位),则约为 `2^-1074`。这意味着,在实际应用中,如果计算过程的结果小于上述最小值,则会发生“下溢”。 ### 发生机制 当计算过程中的中间结果低于某个阈值时,例如在一个除法操作中分母非常大而分子非常小,最终结果可能变得非常接近于零或甚至更小,以至于无法精确地用现有的浮点数表示形式来存储。在这种情况下,系统会舍弃额外的小数部分,将结果近似为最接近的一个合法的浮点数。 ### 实际影响及应对策略 下溢的发生可能会导致计算结果的失真,尤其是在需要极高精度的应用场景中,如科学计算、金融建模等。为了减少或避免这个问题: 1. **选择合适的数据类型**:根据应用需求选择合适的浮点数类型(单精度 vs 双精度)。 2. **算法优化**:改进算法设计,避免过早进入导致下溢的计算路径,例如通过预处理减少极端值的影响。 3. **动态范围调整**:在某些情况下,可以根据实际需要动态调整数值范围,比如通过缩放因子预先扩大数值规模后再进行计算,之后再相应缩小结果。 4. **错误检测与处理**:在程序中加入适当的错误检查和异常处理机制,及时捕获并报告下溢情况,以便用户了解和调整计算流程。 ### 相关问题: 1. **如何识别并处理下溢错误?** 2. **在哪些计算环境中特别容易遇到下溢问题?** 3. **有哪些常见的技术手段能够有效预防或减轻下溢带来的影响?**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值