float型变量能存储的最大正值和最小正值

2024-01-23 23:08

本文主要是介绍float型变量能存储的最大正值和最小正值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天写一写我对float变量的理解,我也是学习了网上的一些作者的看法,现在用最白的白话文记录下我对float变量存储格式怎么存储最大值和最小正值的理解。

首先上面的单精度格式大家都知道,IEEE(Instituteof Electrical and Electronics Engineers (IEEE)指定的格式,也许是因为这样设计更加科学吧。

float型变量存储格式被安排32个bits(1个bit就是一个由并联和串联的电路组合,可以在command指令下让其通电(0)还是断电(1))。其中如图所示,31位被安排了符号,指数位安排了8个bits(其中30号位也是符号位,是指数的符号位),尾数位安排了23个bits

随机选一个十进制数23.125,转为二进制数为:10111.001

换算成科学计数法10111.001=1.0111001 * 2^4

其中标红部分(0111001)就是将要保存到float格式中的尾数位(那么二进制整数位1为什么不用保存呢,是因为这是个定值,保存在隐藏位了)

指数4就是将要保存到float格式中的指数位,4是个十进制数,保存到计算机中需要换算成二进制,即100,但是这样还不能直接存储到指数位置,这是因为指数位采用移位存储技术,意思就是,8bits的空间可以本可以存储256个十进制正值,但是因为由于有负指数的需求,所以IEEE指定127到0计为负,127 到 255为正,且255和0表示无穷值,不能输出!所以正指数最大值只有127是可以输出实际值,负指数只有-126是可以输出实际值的。

当指数为+4时,指数位置需要表示的十进制数就是127+4=131,换算成二进制为10000011才能被计算机认为是4!

那么,十进制数23.125的储存到float格式中就是

0

1

0

0

0

0

0

1

1

0

1

1

1

0

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

那么,我们反过来算float格式中能存储的最大数值,当指数位最大值为127,尾数位为.11111111111111111111111时,

max=1.11111111111111111111111*2^1273.4*10^38

当指数位最大值为-126,尾数位为.0时,

min=1*2^-1261.175*10^-38

这篇关于float型变量能存储的最大正值和最小正值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/637816

相关文章

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

变量与命名

引言         在前两个课时中,我们已经了解了 Python 程序的基本结构,学习了如何正确地使用缩进来组织代码,并且知道了注释的重要性。现在我们将进一步深入到 Python 编程的核心——变量与命名。变量是我们存储数据的主要方式,而合理的命名则有助于提高代码的可读性和可维护性。 变量的概念与使用         在 Python 中,变量是一种用来存储数据值的标识符。创建变量很简单,

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

poj 1287 Networking(prim or kruscal最小生成树)

题意给你点与点间距离,求最小生成树。 注意点是,两点之间可能有不同的路,输入的时候选择最小的,和之前有道最短路WA的题目类似。 prim代码: #include<stdio.h>const int MaxN = 51;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int P;int prim(){bool vis[MaxN];

poj 2349 Arctic Network uva 10369(prim or kruscal最小生成树)

题目很麻烦,因为不熟悉最小生成树的算法调试了好久。 感觉网上的题目解释都没说得很清楚,不适合新手。自己写一个。 题意:给你点的坐标,然后两点间可以有两种方式来通信:第一种是卫星通信,第二种是无线电通信。 卫星通信:任何两个有卫星频道的点间都可以直接建立连接,与点间的距离无关; 无线电通信:两个点之间的距离不能超过D,无线电收发器的功率越大,D越大,越昂贵。 计算无线电收发器D

poj 1734 (floyd求最小环并打印路径)

题意: 求图中的一个最小环,并打印路径。 解析: ans 保存最小环长度。 一直wa,最后终于找到原因,inf开太大爆掉了。。。 虽然0x3f3f3f3f用memset好用,但是还是有局限性。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#incl

hdu 1102 uva 10397(最小生成树prim)

hdu 1102: 题意: 给一个邻接矩阵,给一些村庄间已经修的路,问最小生成树。 解析: 把已经修的路的权值改为0,套个prim()。 注意prim 最外层循坏为n-1。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstri

poj 3723 kruscal,反边取最大生成树。

题意: 需要征募女兵N人,男兵M人。 每征募一个人需要花费10000美元,但是如果已经招募的人中有一些关系亲密的人,那么可以少花一些钱。 给出若干的男女之间的1~9999之间的亲密关系度,征募某个人的费用是10000 - (已经征募的人中和自己的亲密度的最大值)。 要求通过适当的招募顺序使得征募所有人的费用最小。 解析: 先设想无向图,在征募某个人a时,如果使用了a和b之间的关系

poj 3258 二分最小值最大

题意: 有一些石头排成一条线,第一个和最后一个不能去掉。 其余的共可以去掉m块,要使去掉后石头间距的最小值最大。 解析: 二分石头,最小值最大。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <c