浮点数及其计算

news2024/11/18 15:33:41

目录

引言

1.浮点数的表示

1.1浮点数的作用和基本原理

1.2浮点数规格化

左规

右规 

2.IEEE 754 标准

2.1图示: 

2.2 阶码的全零全一有特殊含义:

2.3 IEEE 754 表示的范围:

2.4 十进制转IEEE 754:

2.5 IEEE 754转十进制:

3.浮点数的加减运算 

①对阶

②尾数加减

③规格化

④舍入

⑤判溢出

4.C语言的强制类型转换 

无损

有损


引言

浮点数(floating-point number)是一种用于表示实数的计算机数据类型,可以表示非常大或非常小的数,同时也可以表示带小数的数。浮点数通常用科学计数法表示,其中包含一个有效数字和一个指数。例如,3.14可以表示为3.14×10^0,而3000可以表示为3.0×10^3。

浮点数的表示方式通常如下: 浮点数=有效数字×10指数\text{浮点数} = \text{有效数字} \times 10^{\text{指数}}浮点数=有效数字×10指数 在计算机中,浮点数一般遵循IEEE 754标准,该标准定义了浮点数的表示格式。

具体实例: 假设我们需要表示数字123.456。

在科学计数法中,这个数字可以表示为: 1.23456×1021.23456 \times 10^21.23456×102

在IEEE 754单精度浮点数(32位)中,该数字的表示方式如下:

  • 符号位(1位):0 表示正数,1 表示负数。
  • 指数部分(8位):表示指数部分。
  • 尾数部分(23位):表示有效数字的小数部分。

我们来具体计算这个例子:

  1. 将123.456转换为二进制形式:

    • 整数部分123转换为二进制:1111011
    • 小数部分0.456转换为二进制:0.0111011111...
    • 组合起来:1111011.0111011111...
  2. 转换为标准化形式(科学计数法形式):1.1110110111011111... × 2^6

    • 其中,1.1110110111011111... 是有效数字,6 是指数。
  3. 指数部分加上偏移量(127,对于单精度浮点数):6 + 127 = 133

    • 转换为二进制:133 = 10000101
  4. 尾数部分截取23位:1110110111011111...

最终,浮点数的表示为:

  • 符号位:0
  • 指数部分:10000101
  • 尾数部分:1110110111011111...

整个32位浮点数的二进制表示如下: 0 10000101 11101101110111110 \, 10000101 \, 11101101110111110100001011110110111011111

这是一个具体的浮点数表示实例,展示了如何在计算机中表示和存储浮点数。

1.浮点数的表示

1.1浮点数的作用和基本原理

 定点数可以表示的数字范围有限,但我们又不能无限制的增加数据的长度。

 浮点数就可以做到在二进制位数不变的情况下增加数据的表示范围。

 

1.2浮点数规格化

在整体存储空间不变的情况下尽可能多的保存更多的精度。

例如十进制的科学表示法会要求尾数部分的最高位是有效值:

左规

当浮点数运算的结果为非规格化时要进行规格化处理,将尾数算数左移一位,阶码减1。

右规 

当浮点数运算的结果尾数出现溢出(双符号位为01或10)时,将尾数算数右移一位,阶码加1。

2.IEEE 754 标准

2.1图示: 

 

类型数符阶码位数数值总位数偏置值
十六进制十进制
短浮点数(float)1823327FH127(2^(8-1)-1)
长浮点数(double)11152643FFH1023(2^(11-1)-1)
临时浮点数(long double)11564803FFFH16383(2^(15-1)-1)

2.2 阶码的全零全一有特殊含义:

阶码尾数表示
全为0不全为0表示非规格化小数±(0.xx..x)ⅹ2^-126 
全为0全为0表示真值±0
全为1全为0无穷大±∞
全为1不全为0表示非数值“NaN”(NotaNumber)

2.3 IEEE 754 表示的范围:

格式数值码值
单精度最大绝对值2^128 - 2^1040 11111110 1111 1111 1111 1111 1111 111
最小绝对值2^(-126)0 00000001 0000 0000 0000 0000 0000 000
双精度最大绝对值2^1024 - 2^9710 11111111110 1*52 
最小绝对值2^(-1022)0 00000000001 0*52

解释:

单精度浮点数格式有1位符号位,8位指数位,23位尾数位(但有效数字是24位,因为有一个隐含的1)。

  • 最大指数是 254 (即 11111110),但减去偏移量 127 得到 127,所以最大的实际指数是 127
  • 最大的尾数是 1.11111111111111111111111,即 2 - 2^-23

IEEE 754单精度浮点数的尾数部分是一个24位的二进制数,包括一个隐含的1位。也就是说,尾数可以表示为1.xxx...xxx,其中xxx...xxx表示尾数的23位。

当尾数的23位全是1时,这个数值表示的是最大的尾数值:

 这个数值可以写成:

这是一个几何级数,其总和是:

这个级数可以表示为:

即:

因此,当尾数的23位全是1时,其值为:

2.4 十进制转IEEE 754:

将-0.75转换为IEEE 754单精度浮点数格式表示。

数符:负数为1;

尾数:(-0.75)10 = (-0.11)2 = (-1.1 ✖ 2^-1)2 为 1000 0000 0000 0000 0000 000 因为自动代表最前头有个1.

阶码:-1 转为移码表示 -1+127 = (126)10 = (0111 1110)2  

IEEE754: 

0    1            89                                             32
10111 11101000 0000 0000 0000 0000 000

2.5 IEEE 754转十进制:

 将IEEE754 的单精度浮点数C0A00000H 化为十进制数:

先化为二进制: 1100 0000 1010 0000 0000 0000 0000 0000

 数符:1,是个负数

 阶码:(1000 0001)2 = (129)10 129 - 127 = 2

 尾数:1.01 (自动前头表示的有个零)

(1.01)2乘以2^2= (101)2 = 5 

是个负数,所以结果是 -5 

3.浮点数的加减运算 

以2009年考研题为例:

【2009 统考真题】浮点数加、减运算过程一般包括对阶、尾数运算、规格化、舍入和判

断溢出等步骤。设浮点数的阶码和尾数均采用补码表示,且位数分别为5和7(均含2位符号位)。若有两个数X=2^7×29/32和Y=2^5×5/8,则用浮点加法计算X+Y的最终结果是(D)

A. 00111 1100010         B. 00111 0100010

C. 01000 0010001         D.发生溢出

 先将xy化为对应二进制浮点数:

X:

 00111 0011101

Y:

 

00111 0000101 

①对阶

小阶对大阶

我们在最开始就化好了 

②尾数加减

   0011101

 +0000101 

——————

    0100010 

00111 0100010 

③规格化

01000 0010001 

④舍入

无舍入 

⑤判溢出

阶码符号位01,溢出,故选D选项。 

4.C语言的强制类型转换 

类型16位机器32位机器(考研常考)64位机器
char888
short161616
int163232
long323264
long long646464
float163232
double646464

无损

 char → int → long →double,数值位完全够用,既不会损失精度也不会溢出

有损

 int → float 可能会损失精度

float → int ,可能溢出,也可能损失精度

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1991395.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Electron-builder 打包

项目比较简单,仅使用了 Electron 原生js 安装 electron-builder npm install electron-builder --dev配置 package.json 中的打包命令 {"script":{// ..."dev": "electron .","pack": "electron-builder"} }添…

【QT】Qt 音视频

Qt 音视频 Qt 音视频1. Qt 音频2. Qt 视频 Qt 音视频 在 Qt 中,音频主要是通过 QSound 类来实现。但是需要注意的是 QSound 类只支持播放 wav 格式的音频文件。也就是说如果想要添加音频效果,那么首先需要将非 wav 格式的音频文件转换为 wav 格式。 通…

MySQL 5.7 DDL 与 GH-OST 对比分析

作者:来自 vivo 互联网存储研发团队- Xia Qianyong 本文首先介绍MySQL 5.7 DDL以及GH-OST的原理,然后从效率、空间占用、锁阻塞、binlog日志产生量、主备延时等方面,对比GH-OST和MySQL5.7 DDL的差异。 一、背景介绍 在 MySQL 数据库中&…

普元Devops学习笔记-devops构建后jenkins流水线sleep 1hr 23min的问题

1 背景 java项目命名为 simple2。 命名有点随意,不要在意这个,不重要。 simple2的代码维护在gitlab中。 simple2项目有两个git分支: dev 和 master 开发中的代码在 dev分支,dev分支需要合并(merge)到master主分支。 基于此目…

电机控制器遇上第三代半导体,杀手锏是什么?

导语 华东电机控制器市场的创新方向,文中参考答案都有了。 前言 随着工业自动化和智能化进程的加速推进,电机控制器作为驱动系统的核心部件,在推动产业升级转型中扮演着至关重要的角色。华东电机控制器市场以其独特的优势异军突起&#xff0c…

【C++ STL】unordered_mapunordered_set (哈希表)

文章目录 unordered_map&unordered_set1. unordered容器1.1 效率对比 2. 哈希2.1 哈希的定义哈希函数除留余数法自定义哈希函数 哈希冲突 2.2 哈希冲突的解决闭散列/开放定址法两种探测方式闭散列扩容 开散列/拉链法/哈希桶开散列实现 3. 模拟实现3.1 改造哈希表3.2 封装容…

GPIO输入模式之按键控制及光敏传感器控制应用案例

系列文章目录 STM32之GPIO(General Purpose Input/Output,通用型输入输出) GPIO输出控制之LED闪烁、LED流水灯以及蜂鸣器应用案例 文章目录 系列文章目录前言一、按键简介二、传感器模块简介2.1 AO模拟量输出模块2.2 DO数字量输出模块2.3 指…

【C语言加油站】数据在内存中的存储

数据在内存中的存储 导读一、计算机中的数据类型二、整数在计算机中的存储2.1 整数的存储形式——原码、反码与补码2.2 三种形式之间的相互转换2.3 采用补码存储整数的原因 三、大小端字节序与字节序判断3.1 大端存储与小端存储3.2 为什么会出现大小端存储?3.3 大端…

家用设备轻松搭建 AI 集群,畅跑 Llama 3.1 405B

作者:老余捞鱼 原创不易,转载请标明出处及原作者。 写在前面的话: 本文主要介绍如何在家用设备上运行大型开源语言模型Llama 3.1 405B,首先我会解释构建人工智能集群来提高运行效率的原理,随后会演示如何通过Distributed Llama项目支持在多个设备上运行LLM模型,并…

【STL】05.vector的模拟实现

一、vector的实现 1.1 基本框架 template<class T> class vector {typedef T* iterator;typedef const T* const_iterator; public:private:iterator _startnullptr;iterator _finishnullptr;iterator _end_of_storagenullptr; };1.2 vector的默认成员函数 1.2.1 构造…

如何通过大模型生成业务需要的数据集

现在大模型训练数据的主力都是LLM自己贡献的了。但是也不是说你让它输出什么&#xff0c;然后它就一劳永逸地不停地输出你想要的东西。受限于LLM本身的能力、上下文规定的长度、训练方式导致的有限变化&#xff0c;你需要不断变更你的prompt&#xff0c;以让输出更多样。 接下…

录屏为什么没有声音?一款软件为您解决无声难题

录屏已经成为我们日常工作和生活中不可或缺的一部分。然而&#xff0c;有时在录屏过程中&#xff0c;我们可能会遇到一个令人困惑的问题&#xff1a;录屏为什么没有声音&#xff1f;本文将详细解析电脑录屏没有声音的可能原因&#xff0c;并提供相应的解决方案。同时&#xff0…

YOLOv10问世,登顶GiTHub!性能飞升,【多尺度目标检测】值得大看特看!

【多尺度目标检测】是近年来在深度学习领域中备受关注的一项技术&#xff0c;它通过处理图像中不同尺度的目标&#xff0c;显著提升了模型在复杂场景中的检测精度和鲁棒性。多尺度目标检测技术已经在自动驾驶、安防监控和遥感图像分析等多个领域取得了显著成果&#xff0c;其独…

SQL Server Management Studio的使用

之前在 https://blog.csdn.net/fengbingchun/article/details/140961550 介绍了在Windows10上安装SQL Server 2022 Express和SSMS&#xff0c;这里整理下SSMS的简单使用&#xff1a; SQL Server Management Studio(SSMS)是一种集成环境&#xff0c;提供用于配置、监视和管理SQL…

前端工程师学习springboot2.x之配置idea热更新实现高效率开发节奏

目前已经学习springboot实现了增删改查分页查询&#xff0c;每次修改业财或者是代码重启项目都让我觉得很闹心&#xff0c;现在给出idea2021版本自带热更新操作设置&#xff0c;设置过程分享给大家 总结&#xff1a;以上就是配置的全部过程&#xff0c;祝大家写代码快乐…

鸿蒙(Harmony) NEXT - AlphabetIndexer实现联系人字母索引

鸿蒙(Harmony) NEXT 9月份就要正式上架了&#xff0c;并且不会再兼容安卓平台&#xff0c;于是我也赶紧给App开发鸿蒙版本&#xff0c;接下来会写一系列的Harmony开发教程。 今天使用AlphabetIndexer实现联系人字母索引&#xff0c;AlphabetIndexer是官方封装好的组件 咱们实…

【驱动程序】3.5寸SPI液晶屏_ILI9488_stm32f103c8t6_CubeMX_HAL库

【驱动程序】3.5寸SPI液晶屏_ILI9488_stm32f103c8t6_CubeMX_HAL库 主控芯片&#xff1a; stm32f103c8t6 接线&#xff1a; LED-3.3v其他管脚按main.h文件接: #define LCD_CS_Pin GPIO_PIN_1 #define LCD_CS_GPIO_Port GPIOA #define LCD_RS_Pin GPIO_PIN_2…

武汉流星汇聚:全球化与多元化并进,亚马逊展望电商领域无限可能

在全球电商的浩瀚星空中&#xff0c;亚马逊无疑是最为耀眼的一颗星辰。凭借其多年在跨境市场的深耕细作&#xff0c;亚马逊不仅积累了庞大的高活跃用户群&#xff0c;还构建了显著的平台流量优势。根据Similar Web的权威数据&#xff0c;亚马逊的独立访问用户数量已超过26.59亿…

EGO-Swarm 仿真环境搭建

EGO-Swarm仿真环境搭建 参考教程&#xff1a; https://github.com/ZJU-FAST-Lab/ego-planner-swarm EGO-Swarm是一种分散的异步系统解决方案&#xff0c;用于仅使用机载资源在未知的障碍物丰富的场景中进行多机器人自主导航。 1. 查看系统环境 要运行本仿真程序&#xff0c…

评估测量仪器/传感器时的各种精度解析一览

在工业测量中&#xff0c;精度是一个复合概念&#xff0c;涉及到多个方面&#xff0c;通常用来描述测量结果的准确性和可靠性。 在选择测量仪器/传感器时&#xff0c;面对众多的精度名称&#xff0c;你是否苦恼他们具体描述的是什么精度&#xff0c;是否和评估要求有直接关联&…