专业游戏门户,分享手游网游单机游戏百科知识攻略!

嗨游网
嗨游网

float范围怎么来的,详解float取值范围计算过程

来源:小嗨整编  作者:小嗨  发布时间:2023-02-21 07:30
摘要:float范围怎么来的,详解float取值范围计算过程1、先给出实型变量取值范围实型变量可以分为单精度(float)(4字节)、双精度(double)(8字节)、长双精度(longdouble)(8字节)三种类型。在VC6.0double和...

float范围怎么来的,详解float取值范围计算过程

1、先给出实型变量取值范围

实型变量可以分为单精度(float)(4字节)、双精度(double)(8字节)、长双精度(long double)(8字节)三种类型。

在 VC6.0 double和long double型具有完全相同的长度和存储格式,它们是等同的,但其它编译器可能不同。

下面给出实型变量取值范围:

float范围怎么来的,详解float取值范围计算过程

2、实型变量在C语言内存中的存放形式

首先在讨论这个问题之前,先给出实型变量在C语言内存中的存放形式:

在存储实型数据时,无论表示是小数还是指数,均以指数格式存储,即实数的存储由符号位、指数、以及尾数等三部分组成。

下面我就将标准值是怎么定义的,和你说一下:

这个比较复杂,建议你找一下IEEE754标准看一下。

float范围怎么来的,详解float取值范围计算过程


其中,s 表示 sign,即符号。如果 s == 0,则浮点数 V 为正;如果 s == 1,则浮点数 V 为负。

M 表示有效数字,在 [1, 2) 之间。

而 E 则是指数位。

故float存储的数字可以写成:

float范围怎么来的,详解float取值范围计算过程

(1)Sign(1位):用来表示浮点数是正数还是负数,0表示正数,1表示负数。

(2)Exponent(8位):指数部分。即上文提到数字c,但是这里不是直接存储c,为了同时表示正负指数以及他们的大小顺序,这里实际存储的是c+127。

(3)Mantissa(23位):尾数部分。也就是上文中提到的数字b。

float范围怎么来的,详解float取值范围计算过程


举个例子:计算float 13.14在C语言内存中存储情况

(1)首先整数用二进制表示为1101

(2)0.14用二进制表示为:

0.14x2=0.28      整数部分  0

0.28x2=0.56      整数部分  0

0.56x2=1.12      整数部分  1

0.12x2=0.24      整数部分  0

0.24x2=0.48      整数部分  0

0.48x2=0.96      整数部分  0

0.96x2=1.92      整数部分  1

0.92x2=1.84      整数部分  1

0.84x2=1.68      整数部分  1

这怎么还不出来结果呢,无奈。。。。。。(由于涉及后面循环了,所以临时更改一个例子,机智)

emmmmm,对的,这个例子不算了,下面来看下一个例子:

举个例子:计算float 2.5在C语言内存中存储情况

(1)整数部分可以写成二进制:0010

(2)小数部分0.5可以写成二进制如下:0.1

0.5x2=1     整数部分 1

(3)故2.5用二进制表示为10.1,然后可以写成类似于科学计数法:1.01x2^1

(4)根据上面的结论可以得出指数部分为:c=1+127=128   二进制表示为:10000000

(5)尾数部分为01填入即可

最后得出float 2.5在C语言内存中存储的形式为:

0 10000000 01000000000000000000000

下面验证这个结果是否等于2.5?

https://www.h-schmidt.net/FloatConverter/IEEE754.html

float范围怎么来的,详解float取值范围计算过程

3、下面开始讨论float取值范围

前面知float存储的数字可以写成 ;当b和c最大时候就是float的取值范围。

首先来看c,指数位数为11111111最大,因为这个数有特殊用途,所以要减去1得11111110

接下来看b,可知当b全为1时,11111111111111111111111

此时为最大取值范围。

float范围怎么来的,详解float取值范围计算过程

故可以得出最后结果float取值范围为:

float范围怎么来的,详解float取值范围计算过程



本文地址:IT问答频道 https://www.eeeoo.cn/itwenda/903209.html,嗨游网一个专业手游免费下载攻略知识分享平台,本站部分内容来自网络分享,不对内容负责,如有涉及到您的权益,请联系我们删除,谢谢!


IT问答
小编:小嗨整编
相关文章相关阅读
  • float多少位

    float多少位

    常见编程语言中float的位数:1、c语言中的float类型通常占用4个字节(32位),可以表示大约6到7位有效数字;2、c++语言中的float类型也通常占用4个字节(32位),具有与c语言中相同的范围和精度;3、java语言中的floa...

  • 什么是浮点型?单精度浮点数(float)和双精度浮点数(double)介绍

    什么是浮点型?单精度浮点数(float)和双精度浮点数(double)介绍

    作为一名java学习者,怎能不懂这些java基础中的基础呢?本文就带各位温顾温顾java浮点型、单精度浮点数、双精度浮点数。浮点型首先明确java中浮点型数据类型主要有:单精度float、双精度double至于浮点型就是跟int,stri...

  • float范围是多少?

    float范围是多少?

    float范围是“-3.4e+38~3.4e+38”。float数据类型用于存储单精度浮点数或双精度浮点数;浮点数使用ieee格式。浮点类型的单精度值具有4个字节,包括一个符号位、一个8位二进制指数和一个23位尾数。1、Float:比...

  • float精度能到多少

    float精度能到多少

    float精度能到6到9位小数。根据ieee754标准,float类型可以表示的有效数字位数为大约6到9位。需要注意的是,这只是理论上的最大精度,实际使用中由于浮点数的舍入误差,float类型的精度往往会更低。在计算机中进行浮点数运算时,由...

  • float范围怎么来的,详解float取值范围计算过程

    float范围怎么来的,详解float取值范围计算过程

    float范围怎么来的,详解float取值范围计算过程1、先给出实型变量取值范围实型变量可以分为单精度(float)(4字节)、双精度(double)(8字节)、长双精度(longdouble)(8字节)三种类型。在VC6.0double和...

  • 周排行
  • 月排行
  • 年排行

精彩推荐