浮点数float、double的存储原理

浮点数在计算机内存中由符号位、指数部分和尾数部分组成,这种结构导致运算可能产生微小误差,尤其是在运算后。尽管如此,浮点数能表示较大范围的数值,但精度会受指数位数限制。C语言保证至少6位有效数字,避免了某些情况下精度问题。对于大数表示,增加指数位数可扩展表示范围,但会牺牲尾数精度。
摘要由CSDN通过智能技术生成

浮点数在计算机内的存储分为三部分

符号位 (第1位)
指数部分
尾数部分(在二进制下保证在1-2之间,开头都是1可以截掉)

请添加图片描述

这种结构也导致浮点数之间的运算较慢,并提高了浮点型的范围

并不是位数越多越慢,在有些机器上double计算要快于float,这些并没有统一标准

1.运算时舍入误差

注意:
仅在运算时出现误差,浮点数在一定位数之后一旦进行 + - * / 等运算,会导致出现极其微小的误差

但是:
如果直接让 float a = 2; a==2 会是true
一旦进行运算,则会出现不可控的误差

float a = 100;

if( Math.Abs( a-100 ) < 0.00001f )
{
	//判断a和100近似相等
}

2.部分语言表示大数时精度丢失

float 使用指数-尾数形式表示数值。
如果允许指数部分的位数不限,虽然可以表示更大的数,但是会降低数值的分辨率。
举个例子:

float 制定了 8 bit 来表示指数部分,既能表示很大的数,又能保证较高的数值分辨率。
如果指数部分超过8位,可能会占用小数位表示指数,这样就可以表示非常大的数,甚至能做到远超long,但是会降低小数位的精度。
这也是”浮点“的由来,浮动的小数点

在C语言中,至少会保证6位的有效数字,无需担心精度问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YUE ZHEN PENG

码字不易,如果你想请我喝杯果汁

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值