浮点数表示的计算方法
转载:https://mp.weixin.qq.com/s/VghDOJCJTN61y_6TqLDc2g
0.1(10)转化为二进制:整数部分的二进制就是整数部分除以2得余数压栈,商再除以2得余数压栈,直到商为零压栈最后一个余数,因此整数部分就是0(2);比如整数6的二进制表示就是压栈顺序为0、1、1,倒序弹出所得110(2)就是6的二进制表示。
小数部分与此相反,0.1*2=0.2取出整数部分0压栈,小数部分0.2继续0.2*2=0.4取出整数部分0压栈,小数部分0.4继续0.4*2=0.8取出整数部分0压栈,小数部分0.8继续0.8*2=1.6取出整数部分1压栈,小数部分0.6继续0.6*2=1.2取出整数部分1压栈,小数部分0.2...陷入循环,因此小数部分也就是.00011 00011 0011 0011。
综上,0.1(10)转换为二进制就是0.00011 0011 0011 ...(2),6.1(10)转换为二进制就是110.00011 0011 0011 ...(2)。
小数二进制转成浮点数:
浮点数分为单精度对应32位操作系统和双精度对应64位操作系统。这里解释一下二进制如何转成双精度浮点数二进制。
双精度浮点数用1位表示符号位,11位表示指数位,52位表示小数位,如下:
符号位:正数为0,负数为1;
指数位:阶数+偏移量,阶数是2^(e-1)-1,e为阶码的位数,也就是指数位的位数。偏移量是把小数点移动到整数位只有1时移动的位数,正数表示向左移,负数表示向右移;
小数位:即二进制小数点后面的数。
把0.1(10)转成的二进制0.00011 0011 0011 ...(2)转成浮点数形式的二进制:
1、先要把小数点移动到整数位只有1,要向右移动4位,故偏移量为-4,通过指数位的计算公式2^(e-1)-1+偏移量=2^(11-1)-1-4=1019,把1019转成二进制为1111111011,不够11位要补零,最终得出指数位位01111111011;
2、移位后的小数位为.1 0011 0011 ...,因为小数位只能保留52位,第50、51、52位、53位分别为0011,故对第52位进1使第51位为1,使第50、51、52位为010。
转换结果为:
链接还介绍了两个浮点数相加时让指数位小的浮点数指数位对齐(也就是增加到大的浮点数的指数位,相应地,小浮点数的精度位要左移)后再相加。
误差来源:1、浮点数存储的误差;2、浮点数计算时较小的浮点数精度位左移(指数位向较大数对齐)后"挤掉"小数位右边部分;3、浮点数相加时小数位舍去部分。
20210403:https://mp.weixin.qq.com/s/fMzU3PYPSi_BUT5MsGywRw介绍了JS的大数危机。
浮点数表示的计算方法相关推荐
- Python中的浮点数探秘
下面的探讨主要针对Python3,在Python2中不一定适用. 查看Python的浮点数如何在内存中存储 Python的浮点数实现原理: CPython实现有一个PyFloatObject的结构体, ...
- 处理js两个数相乘的坑
//两个浮点数相乘的计算方法 function accMul(arg1, arg2) { var m = 0, s1 = arg1.toString(), s2 = arg2.toString(); ...
- 浮点型数据存储格式详解
本文是对 Computer Systems__A Programmer's Perspective 一书中 Chapter2__2.4 Floating Point一节的理解 在1985年之前,每个p ...
- c语言如何将浮点数转换为字节,浅谈C语言整型与浮点型转换
本篇博客将阐述.讨论的内容: ●int int的范围根据计算机的不同存在16位或32位的差异,以16位举例,最大值为1111 1111 1111 1111,也就是65535,如果出现65536,就会溢 ...
- 64位浮点数_浮点数运算的机器误差分析
感觉跟专栏主题不是很搭... 不过这是这学期计算物理的作业,还是放上来吧,也算勉强沾边了吧. 用一个浮点数相加的例子来演示计算机在计算时所产生的误差. 在Python中,用0.2+0.4 会得到0.6 ...
- python精确小数点_python执行精确的小数计算方法
在进行浮点数计算时它们无法精确表达出所有的十进制小数位. a = 4.1 b = 5.329 print(a+b) 9.428999999999998 这些误差实际上是底层CPU的浮点运算单元和IEE ...
- sqlite数值长度超过7位出错_数值计算方法 第一章 绪论
一.数值计算方法概览 1.研究对象:数值问题--有限个输入数据(问题的自变量.原始数据)与有限个输出数据(待求解数据)之间函数关系的一个明确无歧义的描述. 例如,求解微分方程的符号解即可看做无限输出, ...
- js计算浮点数出现小数;解决js计算小数问题;js数组相加出现小数;
原博1 原博2 方案1和方案2都是有效的 情景: 在计算浮点数时候,出现多余小数. 例如: 1.11 + 1 = 2.1100000000000003 为什么计算小数会出现误差? 浮点数值的最高进度是 ...
- python中浮点数能用乘法吗_简单讲解Python中的数字类型及基本的数学计算
Python有四种类型的数字:1.整型 a = 2 print a 2.长整型 b = 123456789 print b 3.浮点数 c = 3.2E2 print c 4.复数 复数为实数的推广, ...
最新文章
- Unbuntu 终端中使用Tab键不能自动补全
- 安徽职高计算机专业对口学校,安徽对口高考学校
- 【阿里云课程】如何从零开始完成一个完整的CV项目
- 20个jQuery 图片及多媒体画廊插件
- bzoj 刷题计划~_~
- 软件质量保证计划_如何做好软件项目的质量管理?
- kickstart_具有Java Kickstart的MongoDB
- awk输出指定行,awk如何取反
- 写一个sql实现以下查询结果_SQL复杂查询—知识点梳理(四)
- 专题开发十二:JEECG微云快速开发平台-基础用户权限
- USACO 2006 Open, Problem. The Country Fair 动态规划
- 你知道Arrays.asList 有坑吗?千万别踩啊!
- 图片轮播,鼠标放上去即停止,鼠标移除即播放下一张图片
- MS word自带公式编辑器、MathType、AxMath三种公式编辑器的比较
- matlab 安装 cvx 和 mosek 以及 gurobi
- GAMES101-现代计算机图形学入门-闫令琪 - lecture7 着色(Shading) - 课后笔记
- 微服务api网关_微服务设计api网关模式
- 《微积分:一元函数积分学》——指数函数积分进阶
- 图像扭曲(仿射变换)
- B2B企业越早做网络营销会有哪些优势 由上海添力张进老师讲解