你可能没有那么熟悉它——浮点数(以float和double为例)

本文探讨了浮点数在计算机中的表示和精度限制,通过实例展示了浮点数的数值范围和有效数字的概念。尽管浮点数能够表示很大范围的数,但其精度有限,通常只有大约7位可靠的数字。当进行浮点数运算时,可能出现无法精确表示的数,计算机将取最接近的可表示值。此外,整数除法和浮点数除法在处理除以零时有不同的行为,浮点数除以零会得到无穷大(inf)的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于浮点数

关于浮点数有两个概念较不易理解——数值范围有效数字

数值范围:此数据类型可表达的范围。
有效数字:此数据类型有几位可靠的的数字。

或许还是迷糊,接着往下看吧

以float与double为例
float为例
1.float可以表达如此大的范围,可是它靠得住得就只有位数字(不管是否有小数),也就是说可以若是存放0.1234567时最后那个7就不可靠了。抑或是存放12345678时最后那个8就不可靠了。为什么呢?
看官别急,接着往下看去吧

我们编译这样几串代码

#include<stdio.h>

int main()
{
	printf("%.2f\n",-0.0099); 
	printf("%.30f\n",-0.0099);
	printf("%.2f\n",-0.00099);
	printf("%.30f\n",-0.009900000000000000900000000000);
	
	 return 0;
}

运行结果如下
在这里插入图片描述

观察发现。原来,虽然数学中任意两个数之间的数是连续的,数量是连续无穷多个的,但在计算机中却是离散的,是有限多个的。若你想存放的数据刚好在计算机可以表达的两个数之间,那么计算机会取离你那个数最近的那个计算机可准确表达的数来替代它。如此一来,大概能对有效数字数值范围有个大概的理解了吧。

浮点数在内部的表达

问题

大家先思考对于计算机==12/0==与==12.0/0.0==的结果是相同的吗

相关知识

  1. 在计算机中,整数之间可以直接做运算,而小数之间却先要经过专门的浮点数硬件来处理。
  2. 整数在计算机中是通过二进制数直接来存储的,而浮点数则是通过编码的形式存储,要想进行运算,要通过专门的硬件解码然后进行计算,计算完后再编码出结果给你。

解答

于是我们会知道,在我们想要在计算机中计算12/0时,编译器会显示编译错误,而12.0/0.0时却会通过,并最后的结果是inf,表示无穷大

作者水平有限,若有纰漏,还请读者朋友斧正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值