首页 > 系统相关 >Linux C进阶 —— 浮点数表示(IEEE标准754)

Linux C进阶 —— 浮点数表示(IEEE标准754)

时间:2024-06-20 23:43:24浏览次数:31  
标签:舍入 编码 frac 进阶 754 浮点数 exp bit0

1. IEEE标准754

    IEEE标准754制订了表示浮点数的标准, 解决了浮点数在不同机器上的可移植性。该标准使用

            F = (-1)* M * 2E

    形式来表示一个实数。

    s: 表示符号, 1为负实数, 0为正实数;

    M: 表示尾数,是一个二进制小数;

    E: 表示阶码,对浮点数加权。为正数时,意为将M的小数点右移E位;为负数时,意为将M的小数点左移 |E| 位。

    IEEE标准754包含2中常见的标准浮点格式R32.23(如图1)和R64.52(如图2)。图中s为符号位;exp为阶码E的编码;frac为小数部分,是对尾数M的编码。

    

                                  图1 单精度32位浮点格式R32.23                                            

 

 图2 双精度64位浮点格式R64.52

        根据exp的值,被编码的实数分3中不同的情况,以单精度格式RS32.23为例:

(1)规格化的(exp不为全0、不为全1)

     E = exp - 127;

     M = 1 + frac (尾数M的开头1不会编码到frac,而作为隐含数字)

(2)非规格化的(exp 为全0)

      E = 1 - 127;

     M = frac

     该格式有2个作用, 一是用来表示±0.0, 二是用来表示非常接近0的数。

(3-a)无穷大(exp 为全1, frac 为0)

     s = 1时, 为-∞ 的编码;  

     s = 0时, 为+∞ 的编码。

(3-b)NaN(Not a Number, exp 为全1, frac 不为0)

 

2. 浮点数编码举例

(1)小数的二进制转换

      循环取小数部分乘以2,取积的整数部分,直到积等于1.以0.375为例,如下图

    另外,二进制0.011转十进制小数的方法,如下图

 (2)规格化编码

      同样以0.375为例,按R32.23格式将其编码:

  • 移动二进制小数点,使最高有效数字为1

          0.011右移2位变成 1.1。相反的,1.1需左移2位变成0.011,所以

          frac = 0.1 (1.1 隐藏整数1)

          M = exp - 127 = -2,求得 exp = 125

          s = 0

  • 转成规格化编码格式为

  十六进制即为0x3EC00000。

3. 浮点数舍入

    在浮点运算中,当运算结果超出表示范围时会对数值进行舍入,IEEE浮点格式定义了四种不同的舍入方式,默认为“向最接近的值舍入”,也叫“向偶数舍入”,类似十进制中的“四舍五入法”,但只在“五入”后最低有效位为偶数才会“入”,否则就舍弃。

举例1:

   预丢弃的10最高位为1,应该向bit0 进位,但若进位后bit0 = 1,不符合最低有效数为偶数的要求,所以直接丢弃超出的 10.

举例2:

   若向bit0进位后 bit1 ~ bit0 = 10,此时bit0为偶数0,所以可以向bit0进位。

   注意, 在从float或者double强转int时,会采用另一种舍入方式(向零舍入),即舍弃小数部分,只保留整数部分。

标签:舍入,编码,frac,进阶,754,浮点数,exp,bit0
From: https://www.cnblogs.com/rtthread/p/18259574

相关文章

  • AI绘画工具进阶指南
    AI绘画工具进阶指南目录引言高级AI绘画工具概述进阶功能及技术风格迁移的高级应用生成对抗网络(GAN)文本到图像生成进阶使用教程DeepArt高级使用教程DeepDream高级使用教程Artbreeder高级使用教程DALL·E高级使用教程结合AI绘画工具进行创作结论引言在掌握了基础的AI......
  • 新手小白包会(python) | OpenCV进阶教程,带你踏入计算机视觉领域
    目录一、OpenCV简介1.应用场景2.学习与使用二、OpenCV安装 1.安装2.验证三、OpenCV使用1.边缘检测1)sobel算子(cv2.Sobel()) 2)Scharr算子(cv.Scharr()) 3)laplacian(cv2.Laplacian())4)canny算法(cv.Canny())2.下采样(cv2.pyrDown())3.上采样(cv2.pyrUp())4.拉普拉斯金字塔......
  • MySQL进阶知识之存储过程、函数、流程控制、索引
    【一】MySQL进阶知识之存储过程【1】什么是存储过程存储过程就类似于Python中的自定义函数内部包含了一系列可以执行的SQL语句,存储过程存储在MySQL服务端中,可以通过调用存储过程触发内部的SQL语句存储过程是在关系型数据库中存储的一组预定义的SQL语句集合,可以接收参数并返回......
  • MySQL进阶知识之视图、触发器、事务
    【一】MySQL进阶知识之视图【1】视图介绍(1)什么是视图视图就是通过查询得到一张虚拟表,然后保存下来,下次可以直接使用视图也是一张表在计算机科学中,视图(View)是一种虚拟表,其内容是一个或多个基本表的查询结果。视图基于数据库中的数据,通过定义查询语句来构建,并在需要时动......
  • 进阶篇06——锁
    概述全局锁表级锁表锁元数据锁元数据锁是系统自动加的,不需要我们手动执行命令添加。意向锁 意向锁和元数据锁一样,也是在加行锁的时候自动给表加上相应的意向锁,不需要我们手动添加。行级锁行锁读锁和读锁兼容,写锁和读锁互斥,写锁和写锁也互斥间隙锁、临......
  • C/指针进阶
    一.指针数组与二维指针1.指针数组:变量类型*指针[n],这种形式来定义,比如char*c[3]。如图表示c c[0]与字符型数据的关系。#include<stdio.h>intmain(void){ inta[2][3]={1,2,3,4,5,6}; char*c[3]={"abcd","bbbb","cccc"}; printf("a=%d\n",a); printf(&quo......
  • EarMaster pro 7 For Mac软件下载-EarMaster Pro(音乐赏析进阶专业版)V6.1下载附加详
    EarMasterpro7ForMac最新版是一款相当专业的听力训练和音乐理论练习软件,这个EarMasterpro7ForMac版带来了全的操作界面,并且更新了课程信息,内置了2000多种课程供用户选择,可以用于听耳训练、视唱和节奏训练等操作。安装包获取地址:EarMasterProwin版:​​https......
  • 代码随想录算法训练营第四十三天 | 完全背包理论基础、518.零钱兑换II、377. 组合总和
    完全背包理论基础题目链接:https://kamacoder.com/problempage.php?pid=1052文档讲解:https://programmercarl.com/%E8%83%8C%E5%8C%85%E9%97%AE%E9%A2%98%E7%90%86%E8%AE%BA%E5%9F…视频讲解:https://www.bilibili.com/video/BV1uK411o7c9/思路完全背包中,每个物品可以......
  • 排序算法进阶
    1.归并排序简介归并排序基于分治思想将数组分段排序后合并,时间复杂度在最优、最坏与平均情况下均为O(nlogn) ,空间复杂度为O(n)。归并排序可以只使用O(1) 的辅助空间,但为便捷通常使用与原数组等长的辅助数组。归并排序最核心的部分是合并(merge)过程:将两个有序的数组......
  • 【暑假Python上岸计划】最新20+Python实战案例,全程干货,30天看完即可接单就业!(基础+进阶
    前言今天给大家分享20+个基于python的实战案例,主要包含:数据分析、可视化、机器学习/深度学习、时序预测等,案例的主要特点:*提供源码:代码都是基于jupyternotebook,附带一定的注释,运行即可*数据齐全:大部分案例都有提供数据,部分案例使用内置数据集学习资料已打包,需要......