C/C++中浮点数格式学习——以IEEE75432位单精度为例

2023-11-19

这是浮点数的通常表示形式,在IEEE754中,单精度浮点数有如下形式:

32位单精度

单精度二进制小数,使用32个比特存储。

1

8

23位长

S

Exp

Fraction

31

3023
偏正值(实际的指数大小+127

220位编号(从右边开始为0

S为符号位,Exp为指数字,Fraction为有效数字。 指数部分即使用所谓的偏正值形式表示,偏正值为实际的指数大小与一个固定值(32位的情况是127)的和。采用这种方式表示的目的是简化比较。因为,指数的值可能为正也可能为负,如果采用补码表示的话,全体符号位SExp自身的符号位将导致不能简单的进行大小比较。正因为如此,指数部分通常采用一个无符号的正数值存储。单精度的指数部分是−126+127加上偏移值127,指数值的大小从12540255是特殊值)。浮点小数计算时,指数值减去偏正值将是实际的指数大小。(当指数为0的时候,用非规约数表示,这样做的理由在于,所有的非归约数都比归约数更加接近0,非规约形式的浮点数的指数值是同种情况下规约形式浮点数的指数值再加1。)

注意通常情况下,23位尾数部分前边自动省略了一个整数部分1,也就是说 num = -1^S * 2^(Exp+127) * (1.xxxxxxx……)    其中xxxx表示尾数部分。

此外有一些特别的约定:

单精度浮点数各种极值情况:

类别

正负号

实际指数

有偏移指数

指数域

尾数域

数值

0

-127

0

0000 0000

000 0000 0000 0000 0000 0000

0.0

负零

1

-127

0

0000 0000

000 0000 0000 0000 0000 0000

−0.0

1

0

0

127

0111 1111

000 0000 0000 0000 0000 0000

1.0

-1

1

0

127

0111 1111

000 0000 0000 0000 0000 0000

−1.0

最小的非规约数

*

-126

0

0000 0000

000 0000 0000 0000 0000 0001

±2−23 × 2−126 = ±2−149 ≈ ±1.4×10-45

中间大小的非规约数

*

-126

0

0000 0000

100 0000 0000 0000 0000 0000

±2−1 × 2−126 = ±2−127 ≈ ±5.88×10-39

最大的非规约数

*

-126

0

0000 0000

111 1111 1111 1111 1111 1111

±(1−2−23) × 2−126 ≈ ±1.18×10-38

最小的规约数

*

-126

1

0000 0001

000 0000 0000 0000 0000 0000

±2−126 ≈ ±1.18×10-38

最大的规约数

*

127

254

1111 1110

111 1111 1111 1111 1111 1111

±(2−2−23) × 2127 ≈ ±3.4×1038

正无穷

0

128

255

1111 1111

000 0000 0000 0000 0000 0000

+∞

负无穷

1

128

255

1111 1111

000 0000 0000 0000 0000 0000

−∞

NaN

*

128

255

1111 1111

non zero

NaN

* 符号位可以为01 .

这里边比较值得一提的,一个是NaN的设置,还有一个是指数为0情况下几种数字的关系。

1. 在NaN中,尾数必须要非零。

2. 中间大小的非归约数的二倍正好是最小的归约数,同时也是最大的非规约数;因此,在对浮点数进行乘二操作时,可以依照如下代码:

  1. unsigned float_twice(unsigned uf) {  
  2.     unsigned expn = (uf >> 23) & 0xFF;  
  3.     unsigned sign = uf & 0x80000000;  
  4.     unsigned frac = uf & 0x007FFFFF;  
  5.     if (expn == 255 || (expn == 0 && frac == 0)) return uf;  
  6.     if (expn) {  
  7.         expn++;  
  8.     } else 
  9.         frac <<= 1;  
  10.     return (sign) | (expn << 23) | (frac);  
  11. }  

    首先检测是否为-0;然后看如果不是特殊数字的话,就将指数自增;如果是特殊数字(需要考虑的特殊数字只有指数是0的情况下需要单独进行考虑),对于最大的非规约数,则要增加指数并改变自身(因为此时由非归约数转化为了归约数),对于其他情形,则只需要左移一位,如果发生了进位,则此时正好变为规约表示,前面省略了一个1;如果没发生进位,则代表尾数部分放大二倍,而整个数字就只有尾数部分。

    在需要进行舍尾操作时,采取四舍六入五六双的Bankers' Round规则。

转载于:https://www.cnblogs.com/shawnChi/p/5952979.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C/C++中浮点数格式学习——以IEEE75432位单精度为例 的相关文章

  • android通过JNI用C/C++创建本地文件

    通过jni在本地创建文件 1 在android studio创建基本的jni工程 并且在APP界面成功显示 Hello from C 不会的可以看android studio使用jni 2 在native lib cpp文件中创建文件 为了
  • 解决“17: 错误:程序中有游离的‘\240’,\302’

    参考链接 https blog csdn net asuphy article details 54602426 执行如下命令即可 sed i s o240 o302 g dy haikang test cpp
  • typedef struct 用法详解

    typedef为C语言的关键字 作用是为一种数据类型定义一个新名字 当typedef与结构结合使用时 会有一些比较复杂的情况 而且在C语言和C 里面有略有差别 本文将详细讲解typedef struct的用法 第一篇 typedef str
  • 大端模式和小端模式转化

    在工作中遇到一个问题 数据是以大端模式存储的 而机器是小端模式 必须进行转换 否则使用时会出问题 一 定义 大端模式 Big Endian 数据的高字节 保存在内存的低地址中 数据的低字节 保存在内存的高地址中 小端模式 Little En
  • C/C++ 引用作为函数的返回值

    语法 类型 函数名 形参列表 函数体 特别注意 1 引用作为函数的返回值时 必须在定义函数时在函数名前将 2 用引用作函数的返回值的最大的好处是在内存中不产生返回值的副本 代码来源 RUNOOB include
  • 【C++】VS code如何配置使用C++(手把手教学)

    博 主 米码收割机 技 能 C Python语言 公众号 测试开发自动化 获取源码 商业合作 荣 誉 阿里云博客专家博主 51CTO技术博主 专 注 专注主流机器人 人工智能等相关领域的开发 测试技术 VS code如何配置使用C 手把手教
  • Lua和C++交互总结(很详细)

    出处 http blog csdn net shun fzll article details 39120965 一 lua堆栈 要理解lua和c 交互 首先要理解lua堆栈 简单来说 Lua和C c 语言通信的主要方法是一个无处不在的虚拟
  • 【干货】Chrome插件(扩展)开发全攻略(不点进来看看你肯定后悔)<转>

    干货 Chrome插件 扩展 开发全攻略 不点进来看看你肯定后悔 写在前面 我花了将近一个多月的时间断断续续写下这篇博文 并精心写下完整demo 写博客的辛苦大家懂的 所以转载务必保留出处 本文所有涉及到的大部分代码均在这个demo里面 h
  • dev-c++官网位置和源码/库位置

    1 http devpaks org 2 http www bloodshed net 3 http www bloodshed net dev 转载于 https www cnblogs com vilyLei articles 1812
  • 值得学习与推荐的c/c++框架和函数库

    这几天不上班 翻翻Evernote中记录的一些笔记 刚好有时间把记录的一些好玩链接转载一下 这篇文章里提到的很多库都用过 尤其是图像处理相关库 尤其是opencv及cximage 当时做图像算法时 很多算法就是从上面找来 然后自己修改的 比
  • mfc窗口创建的create与oncreate

    在view类中 create 是虚函数由框架调用 是用来 生成一个窗口的子窗口 oncreate 消息响应函数 是用来 表示一个窗口正在生成 某个CWnd的Create函数由当前CWnd的Owner调用 而在CWnd Create中 又会调
  • C++:指向类的成员的指针

    引 想必接触过C的朋友们对C语言中指针的概念已经有了深入的了解 如果初步进行了解的朋友可以看一下 C语言基础学习笔记 指针展开来讲的基本知识点包括 指针的概念 指针的定义和初始化及简单使用 指针函数和函数指针 有关指针函数和函数指针的内容上
  • 在聚会中常玩数七的游戏,七的倍数和带有七的数字都不能说,比如14,27,28。请找出1~100的不能说的数字。...

    利用ES5的filter高阶函数来实现 var arr 1 2 3 4 5 6 7 17 27 21 22 28 100 r arr filter function x return x 10 7 x 7 0 alert r 7 14 17
  • Public Private Protect Inheritance and access specifiers

    In the previous lessons on inheritance we ve been making all of our data members public in order to simplify the example
  • stat 函数解析

    stat 函数的简单使用 stat 函数是用来获取文件的各种属性的一个linux下的常用API函数 函数原型为int stat const char path struct stat buf stat定义如下 struct stat dev
  • 一个简单的参数帮助框架,c实现

    文章目录 具体实现如下 include
  • C/C++编程:令人印象深刻的高级技巧案例

    C C 编程语言在软件开发领域有着悠久的历史 由于其高效 灵活和底层访问能力 至今仍然被广泛应用 本文将介绍一些在C C 编程中令人印象深刻的高级技巧 帮助读者提升编程水平 更加高效地使用这两种强大的编程语言 一 指针运算与内存管理 C C
  • C++ 字符串比较------strcmp函数和strncmp函数

    strcmp 函数原型 int strcmp const char str1 const char str2 功能 strcmp函数会按照字典顺序逐个比较两个字符串的字符 直到遇到不同的字符或者遇到字符串结束符 0 返回值 该函数返回值如下
  • C++ 字符串比较------strcmp函数和strncmp函数

    strcmp 函数原型 int strcmp const char str1 const char str2 功能 strcmp函数会按照字典顺序逐个比较两个字符串的字符 直到遇到不同的字符或者遇到字符串结束符 0 返回值 该函数返回值如下
  • C++中的引用

    一 引用的概念 引用不是新定义一个变量 而是给已有变量取一个别名 编译器不会为引用变量开辟内存空间 而和它引用的变量共用一块内存空间 注意 由于C 兼容C 所以 既可以是引用符号 也可以是取地址 int a 0 int b a cout l

随机推荐

  • vue判断undefined_这几个小技巧,让你书写不一样的Vue!

    前言 最近一直在阅读Vue的源码 发现了几个实战中用得上的小技巧 下面跟大家分享一下 同时也可以阅读我之前写的Vue文章 vue开发中的 骚操作 挖掘隐藏在源码中的Vue技巧 抽丝剥茧般的阅读源码 将 nextTick 拉下神坛 隐藏在源码
  • Spring框架之AOP详解

    Spring AOP 理论 AOP 灵魂三问 AOP的一些术语概念 Spring AOP 底层实现 五种通知形式 实现 如何写切面类 具体举例 理论 AOP 灵魂三问 1 AOP是什么 AOP中文叫做面向切面编程 为Aspect Orien
  • Spring Boot入门&整合常用框架整理丨深度好文

    一 SpringBoot简介 1 1 原有Spring优缺点分析 1 1 1 Spring的优点分析 Spring是Java企业版 Java Enterprise Edition JEE 也称J2EE 的轻量级代替品 无需开发重量级的Ent
  • Altium Designer导出STEP文件

    Tips 由于我使用的是13版本 没有高版本具有的STEP导出功能 故采用以下方式导出PCB 此种方式对元器件模型支持较差 对模型要求较高的同学 建议还是升级DXP版本 首先在PCB文件中 点击 工具 遗留工具 3D显示 在弹出的PCB3D
  • 空谱结合多标准的主动学习用于高光谱分类

    摘要 阶段1首先使用PCA降维 然后使用形态学的腐蚀膨胀方法获取一系列图像 阶段2引入了一种新的基于uncertainty diversity和聚类假设的query function 使用主动学习 介绍 降维解决了维度灾难的问题 解决样本数
  • MySQL存储引擎MyISAM和InnoDB

    1 MySQL的程序结构 2 数据库逻辑结构 1 库 属性 名称 2 表 字段 名称 属性 数据类型 约束 记录 完整的数据 3 关系 库 表 记录 记录 字段 3 物理结构 1 库 操作系统下的目录 2 表 多个文件组成 Myisam表
  • java与redis连接过程中遇到问题

    java与redis连接过程中遇到问题 文章目录 java与redis连接过程中遇到问题 前言 一 redis是什么 特征 二 命令 1 redis通用命令 String类型常见命令 Hash常用命令 List常见命令 Set常见命令 三
  • Vuejs(一):Vuejs模板语法

    Vuejs模板语法 一 vuejs介绍 二 修改webstorm为2个空格 三 插值操作 3 1 v once 3 2 v html 3 3 v pre 3 4 v cloak 四 绑定属性 v bind 4 1 v bind绑定class
  • 计算机提示由于找不到VCRUNTIME140.dll,无法继续执行代码,重新安装程序可能会解决

    vcruntime140 dll文件是一个动态链接库 是Windows操作系统中非常重要的一个动态链接库文件 用于支持使用Microsoft Visual C 编译器创建的应用程序的运行 当我们运行的软件是有C 编译器创建的程序 就需要到系
  • DHCP原理与配置+DHCP中继

    一 DHCP服务的简介 DHCP基于客户 服务器模式 当DHCP客户端启动时 它会自动与DHCP服务器通信 由DHCP服务器为DHCP客户端提供自动分配IP地址的服务 安装了DHCP服务软件的服务器称为DHCP服务器 而启用了DHCP功能的
  • 安装visual studio 2013【转】

    本文转载自 http blog csdn net tina ttl article details 51544733 1下载 visual studio ultimate 2013安装包 微软已经向MSDN订阅用户提供了Visual Stu
  • IDEA 通过svn 导入项目

    SVN 点击菜单 VCS gt Checkout from Version Controll gt Subversion
  • 嵌入式经典面试题

    文章目录 一 常见面试题 1 用预处理指令 define 声明一个常数 用以表明1年中有多少秒 忽略闰年问题 2 写一个 标准 宏MIN 这个宏输入两个参数并返回较小的一个 3 预处理器标识 error的目的是什么 4 数据声明 5 sta
  • 01 用栈实现队列(leecode 232)

    1 问题 请你仅使用两个栈实现先入先出队列 队列应当支持一般队列的支持的所有操作 push pop peek empty 实现 MyQueue 类 void push int x 将元素 x 推到队列的末尾 int pop 从队列的开头移除
  • Web_for_Pentester_I之XML attacks

    Web for Pentester是国外安全研究者开发的一款渗透测试平台 由PentesterLab出品 官方给自己的定义是一个简单又十分有效地学习渗透测试的演练平台 XML attacks通常都是通过使用XPATH来恢复XML文件的解析设
  • 搭建以图搜图检索系统

    引言 当您听到 以图搜图 时 是否首先想到了百度 Google 等搜索引擎的以图搜图功能呢 事实上 您完全可以搭建一个属于自己的以图搜图系统 自己建立图片库 自己选择一张图片到库中进行搜索 并得到与其相似的若干图片 Milvus 作为一款针
  • #import与#include、@class有什么区别?

    import与 include class有什么区别 import与 include都是用来引入头文件的 与 include相比 Objective C中 import的优势是不会重复引入头文件 相当于多了C C 中 pragma once
  • js中通过ajax调用网上接口

  • 华为云云耀云服务器L实例评测

    目录 华为云云耀云服务器L实例 一键搭建 WordPress 准备工作 购买云耀云服务器L实例 设置 Nginx 安全级别 运行nginx huaweicloud sh脚本 配置安全组 初始化WordPress 部署应用 强大的插件库 配置
  • C/C++中浮点数格式学习——以IEEE75432位单精度为例

    这是浮点数的通常表示形式 在IEEE754中 单精度浮点数有如下形式 32位单精度 单精度二进制小数 使用32个比特存储 1 8 23位长 S Exp Fraction 31 30至23偏正值 实际的指数大小 127 22至0位编号 从右边