浮点数一些设计原理

摘要:本篇文章会讲述浮点数的设计原理,比如如何存储二进制的问题,从而帮助我们更好的编码。

__1. deading code __

console.log(1.0-0.9 == 0.1);
//输出 false
console.log(1.0-0.9, 0.1);
//输出 0.09999999999999998 0.1
//所以判断浮点运算结果前要对参数进行精度缩小,缩小精度会四舍五入。
console.log(parseFloat((1.0-0.9).toFixed(10)) == 0.1);
//输出 true 
console.log(parseFloat((1.0-0.9).toFixed(10)),0.1)   
//输出 0.1 0.1
复制代码

所以使用 JavaScript 设计浮点数计算时,要考虑小数不准确的问题。

2.浮点数二进制存储

如 32 存储为例来讲解存储。

SignExponentMantissa
1bit8bits23bits
  • Sign:表示浮点数是正数还是负数。__0__表示正数,__1__表示负数
  • Exponent:指数部分。类似于科学技术法中的M*10^__N__中的 N,要注意规定 01111111 = 2^0 也就是 0,所以指数部分可以表达: -128 - 127
  • Mantissa:基数部分。浮点数具体数值的实际表示。

尝试把 3.1 转换成二进制存储:

  1. 是正数第一位是 0
  2. 3 转换成二进制 11
  3. 0.1 转换成二进制,__0.1 __ 转换成 0.0625+0.007825+0.00390625... 即 2^-3+2^-4+2^7....,二进制为 .00011001100110011001100 ,是1100无限循环,保留到23位。(这里确实有点绕,不理解的单独查资料能更快了解。也就是这里导致小数在计算机里的存储会不准确,是一个近似值。
  4. 整数和小数合并为 11.0001100110011001100110 , 然后保证小数点以前只有一位数,1.10001100110011001100110 * 2^1
  5. 合并后小数点前的一位数是要舍去的,由于我们上一个步骤,小数点前的数字总会为 1,所以为了减少存储我们舍去 . 前的为1数字,最后得 .100011001100110011001100 * 2^1
  6. 指数转换,由上一步得指数为 __2^1 __,由于规定 01111111 = 2^0(这样的目的就是为了,指数可以为正也可以为负), 2^110000000 ,合并后得 10000000 10001100110011001100110
  7. 添上第一位代表正负 0 10000000 10001100110011001100110 最终__ 3.1 __被用二进制表达。

其中最重要的部分是小数转二进制,像 0.5、0.25、0.125 这样的小数转化二进制为 0.1、0.01、0.001 ,但是 0.1、0.2 就不好表示了。如果不理解百度有在线二转十进制 地址

验证的网址:https://www.h-schmidt.net/FloatConverter/IEEE754.html

3.猜想

语言还没有组织好。

我的博客:http://liangtongzhuo.com

转载于:https://juejin.im/post/5a31f1906fb9a04514640e0e

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

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

相关文章

Atitit. http 代理原理  atiHttpProxy  大木马

Atitit. http 代理原理 atiHttpProxy 大木马 1. 面这张图可以清晰地阐明HttpProxy的实现原理:1 2. 代理服务器用途1 3. 其中流程具体如下:2 4. 设计规划3 5. 结束语4 1. 面这张图可以清晰地阐明HttpProxy的实现原理: 2. 代理服务器用途 代…

[转]一文揭秘阿里、腾讯、百度的薪资职级

上周,阿里巴巴董事长兼CEO逍遥子发布内部邮件,宣布了阿里巴巴新一轮组织部晋升名单,涉及所有晋升到P10、P11、P12的高P的人员。其中晋升到M7/ P12的高级管理者包括:淘宝、天猫、阿里妈妈事业群总裁蒋凡、阿里本地生活服务公司CEO王…

C语言试题188之实现strcspn函数功能

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款刷算法、笔试、面经、拿大公司offer神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目: 实现st…

【ArcGIS微课1000例】0014:ArcGIS中如何将kml(kmz)文件转shp,并进行投影转换?

KML(Keyhole Markup Language,Keyhole 标记语言)最初是由Google 旗下的Keyhole 公司开发和维护的一种基于XML 的标记语言,利用XML 语法格式描述地理空间数据(如点、线、面、多边形和模型等),适合网络环境下的地理信息协作与共享。2008 年4月,KML的最新版本2.2 被OGC 宣布为开…

写一键部署bash脚本

因为我开源的一键部署应用到linux服务器的AntDeploy, 在linux部署是需要安装一个agent服务(systemctl服务)如果是手动第一次安装的话 需要敲下载 wget解压 tar修改配置文件的token复制到指定安装目录设置权限设置systemd设置systemctl清除临时文件至少这8中类型的命…

UITableView的使用及代理方法

在App开放中我们经常会使用到UITabbleView&#xff0c;常用于数据展示。那么使用时不得不引入两个代理方法<UITableViewDataSource,UITableViewDelegate>。 下面我们来简单的创建一个TableView并介绍下其基本属性。 property (nonatomic,strong) UITableView * myTable; …

Java集合和泛型练习及面试题——博客园:师妹开讲啦

给定一段JAVA代码如下&#xff1a;要打印出list中存储的内容&#xff0c;以下语句正确的是&#xff08; B &#xff09; ArrayList list new ArrayList( ) list.add(“a”) list.add(“b”) Iterator it list.iterator( ) A.while(it. Next( ) )   system.out.prin…

对于经常需要truncate的表进行固定统计信息

为什么80%的码农都做不了架构师&#xff1f;>>> 大家做过统计的一些存储过程可能会知道&#xff0c;我们经常有这类表&#xff0c;要先truncate它&#xff0c;执行插入&#xff0c;再在执行相关sql&#xff0c;这就会导致有一个时间误差&#xff0c;如果在truncate…

ArcGIS实验教程——实验四十一:ArcGIS区域分析统计直方图(土地利用--坡度分级柱状统计图的制作)

文章目录 一、任务描述二、实验数据三、实验过程一、任务描述 在实际工作中,通常需要统计不同类型的土地利用数据与坡度的关系。本实验中以土地利用landuse和数字高程模型dem数据为例,基于ArcGIS平台,统计了村庄、风景名胜、林地、草地、旱地等多种类型土地利用数据所占用的…

[转]图片格式WEBP全面解析

前言 不管是 PC 还是移动端&#xff0c;图片一直是流量大头&#xff0c;以苹果公司 Retina 产品为代表的高 PPI 屏对图片的质量提出了更高的要求&#xff0c;如何保证在图片的精细度不降低的前提下缩小图片体积&#xff0c;成为了一个有价值且值得探索的事情。 但如今对于 JP…

C语言试题189之编写一个程序,按照下图中的样子创建数据结构,最后三个对象都是动态分配的结构。第一个对象则可能是一个静态的指向结构的指针

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款刷算法、笔试、面经、拿大公司offer神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目: 编写一…

基于.NetCore开发博客项目 StarBlog - (15) 生成随机尺寸图片

系列文章基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客&#xff1f;基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目基于.NetCore开发博客项目 StarBlog - (3) 模型设计基于.NetCore开发博客项目 StarBlog - (4) markdown博客批量导入基于.N…

【初探移动前端开发03】jQuery Mobile(上)

前言到目前为止&#xff0c;我打了几天酱油了&#xff0c;这几天落实了工作&#xff0c;并且看了一部电视连续剧&#xff08;陈道明-手机&#xff09;&#xff0c;我很少看连续剧了&#xff0c;但是手机质量很高啊&#xff0c;各位可以看看。我们今天先学习一下jquery mobile的…

Git Bash的一些命令和配置

查看git版本号&#xff1a; git --version 如果是第一次使用Git&#xff0c;你需要设置署名和邮箱&#xff1a; $ git config --global user.name "用户名" $ git config --global user.email "电子邮箱" 检查你的设置 $ git config --list 或单独检查一项…

/dev/null 文件

/dev/null 文件 如果希望执行某个命令&#xff0c;但又不希望在屏幕上显示输出结果&#xff0c;那么可以将输出重定向到 /dev/null&#xff1a; $ command > /dev/null /dev/null 是一个特殊的文件&#xff0c;写入到它的内容都会被丢弃&#xff1b;如果尝试从该文件读取内容…

C语言试题190之实现函数在第一个参数中进行查找,并返回匹配第二个参数所包含的字符的数目

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款刷算法、笔试、面经、拿大公司offer神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目: 实现函…

强大的多列 IN 查询语句,及数据库支持情况。

SQL 中最强大的也是最复杂的就是查询部分。在需要查询多条记录时我们一般会采用 in 关键字来指定要查询的条件&#xff1a;SELECT * FROM t_user WHERE uid IN (1,2,3,4,5,6,7,8,9);但如果对应的数据需要两个或更多字段才能确定&#xff0c;可能会写出以下的 SQL 语句&#xff…

ArcGIS实验教程——实验四十二:ArcGIS密度分析(核密度、点密度、线密度)

文章目录 一、密度分析原理二、点密度分析三、线密度分析四、核密度分析一、密度分析原理 密度分析是指根据输入的要素数据集计算整个区域的数据聚集状况,从而产生一个联系的密度表面。通过密度计算,将每个采样点的值散步到整个研究区域,并获得输出栅格中每个像元的密度值。…

Log4Net的WebApplication使用

一、Log4Net的WebApplication使用 1、首先使用nuget 添加log4Net 到WebApplication项目中 log4j每个符号的具体含义&#xff1a;%d %5p %c{1}:%L - %m%n log4j.properties# %m 输出代码中指定的消息# %p 输出优先级&#xff0c;即DEBUG&#xff0c;INFO&#xff0c;WARN&…

C语言试题191之实现strcat函数功能

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款刷算法、笔试、面经、拿大公司offer神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目: 实现st…