0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

计算机基础知识之处理小数1

jf_78858299 来源:前端柒八九 作者:前端柒八九 2023-03-31 16:10 次阅读

将0.1累加100次也得不到10

我们来一个计算机运算错误的例子。

function sum(){
    let sum = 0;
    for(let i=1;i<=100;i++){
        sum +=0.1;
    }
    console.log(sum)
}

我们在浏览器的控制台中,运行sum(),得到的运行结果为9.99999999999998。这显然和我们的九年义务教育所教导的 「背道而驰」

有句话说, 「雪崩的时候,没有一片雪花是无辜的」 。在这段代码中,程序没错,计算机也没有发生故障,当然和所使用的语言也没有关系(选用其他的高级语言可能运算结果不同)。如果硬要找一个背锅的,那就是 「计算机处理小数的机制」


用二进制数表示小数

计算机底层知识之二进制中我们讲过,由于计算机内部所有的信息都是以二进制数的形式来处理,因此, 「整数和小数并无差别」

在说明计算机如何用二进制数表示小数的具体方法前,我们先尝试将1011.0011这个有小数点的二进制数转换成十进制数。

小数点 「前面」 部分的转换方法在计算机底层知识之二进制中介绍过。只需将各 「数位」 数值和 「位权」 相乘,然后再将相乘的结果相加即可实现。其实,针对小数点后面的部分,也是 「照猫画虎」 ,也是将各 「数位」 数值和 「位权」 相乘的结果相加即可。

图片

二进制数小数转换成十进制数

二进制数小数点前面部分的**「位权」**

  • 第一位是20次幂
  • 第二位是21次幂
  • 第三位是22次幂
  • 以此类推

而小数点后面部分的**「位权」**

  • 第一位是2-1次幂
  • 第二位是2-2次幂
  • 第三位是2-3次幂
  • 以此类推

❝0次幂前面的位的位权按照1次幂、2次幂····的方式**「递增」**

0次幂后面的位的位权按照-1次幂、-2次幂····的方式**「递减」**


计算机运算出错的原因

❝计算机运算出错的原因:「有一些十进制数的小数无法转换成二进制」

小数点后4位用二进制数表示时的数值范围为0.0000~0.1111。这里只能表示0.50.240.1250.0625这四个二进制数小数点后面的位权组合而成(相加总和)的小数。

图片

❝可以看出:「二进制数是连续的,十进制数是非连续的」

在前面讲二进制的时候,我们说,根据IC引脚个数不同,我们可以表示位数不同的二进制数。我们可以通过增加引脚数,也就是增加二进制小数点后面的位数,与其相对应的十进制数的个数也会增加, 「但是不管增加多少位,2的-〇〇次幂怎么相加都无法得到0.1这个结果」

实际上,十进制数0.1转换成二进制后,会变成0.00011001100···1100循环)这样的 「循环小数」 。这和用十进制数来表示1/3是一样的道理。

❝计算机这个 「功能有限」 的机器设备,是无法处理 「无限循环」 的小数的

因此,在遇到 「循环小数」 时,计算机就会根据 「变量数据类型」 所对应的长度将数值从 「中间截断」 或者 「四舍五入」

然后,我们再结合我们上面的例子,一个 「循环小数」 在进行存储的时候,已经被 「掐头去尾」 ,而偏偏针对这个值,又进行了N多次处理。不怕你不努力,就怕你,持之以恒的向偏离既定轨道的方向上移动,那么结果可想而知,是永远不会达到最终想要的结果。


浮点数

1011.0011这样带小数点的表现形式,在计算机内部是无法使用的。

很多编程语言中都提供了两种表示小数的数据类型,分别是 「双精度浮点数」「单精度浮点数」

  • 「双精度浮点数」64位表示小数
  • 「单精度浮点数」32位表示小数

「浮点数」 是指用 「符号」「尾数」「基数」「指数」 这四部分表示的小数。

图片

❝计算机内部使用的是二进制数,所以 「基数是2」 ,因此,实际的数据中往往不考虑基数。只用 「符号」「尾数」「指数」 这三部分就可以表示 「浮点数」

浮点数表现形式

浮点数的表现方式有很多中,我们采用IEEE标准来解释。

图片

双精度浮点数和单精度浮点数在表示同一个数值时 「使用的位数」 不同。

「符号部分」 是指使用一个 「数据位」 来表示符号。「数据位是1时表示负,为0时表示正或者0」

❝数值的大小用 「尾数部分」「指数部分」 来表示。即用 「尾数部分 × 2的指数部分次幂」 的形式来表示。

  • 「尾数部分」 用的是**「将小数点前面的值固定为1的正则表达式」**
  • 「指数部分」 用的是**「EXCESS系统表示」**

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计算机
    +关注

    关注

    19

    文章

    7489

    浏览量

    87870
  • 程序
    +关注

    关注

    117

    文章

    3785

    浏览量

    81006
  • 代码
    +关注

    关注

    30

    文章

    4780

    浏览量

    68531
收藏 人收藏

    评论

    相关推荐

    计算机组成原理基础知识

    计算机组成原理基础知识,前言参考:《王道计算机组成原理》学习笔记总目录+思维导图2019 王道考研 计算机组成原理第一章 计算机系统概述1.
    发表于 07-16 07:48

    计算机网络基础知识了解

    计算机网络威廉希尔官方网站 复习一、 计算机网络基础知识了解:计算机网络(Internet)的发展 面向终端的计算机网络(单个
    发表于 07-26 06:27

    计算机基础知识

    前言《MSP430单片机应用基础与实践》(华中科技大学出版社)------第0章------计算机基础知识(本文章作备忘录使用)1.进制转换2.数值数据的表示3.计算机的码制
    发表于 11-29 06:03

    计算机简介

    1计算机基础知识1.计算机简介1.1计算机定义:按照一定逻辑
    发表于 12-23 06:45

    计算机应用基础课件

    计算机应用基础课件内容有计算机基础知识计算机键盘及汉字输入,操作系统及使用,网络基础知识和Internet,电子表格软件Excel2000
    发表于 09-25 12:30 0次下载
    <b class='flag-5'>计算机</b>应用基础课件

    微型计算机基础知识

    1.1 微型计算机的组成及工作原理1.1.1  微型计算机中的基本概念1. 微处理器2. 微型计算机  &nb
    发表于 02-23 12:02 64次下载

    计算机基础知识选择题

    计算机基础知识选择题 1.微型计算机是由( )、存储器、输入设备和输出设备等部件组成的。  A. 硬盘 B. 软盘 C. 键盘 D. 运算控
    发表于 03-03 08:32 89次下载

    计算机基础知识练习题

    计算机基础知识练习题(一)单选题:1计算机的描述中,( )是错误的。A. 计算机是一种可供计算
    发表于 03-03 08:33 70次下载

    计算机基础知识试题

    计算机基础知识试题 1、CPU的主要功能是进行(     )。
    发表于 10-25 10:59 7949次阅读

    计算机总线威廉希尔官方网站 基础知识

    计算机总线威廉希尔官方网站 基础知识 任何一个微处理器都要与一定数量的部件和外围设备连接,但如果将各部件和每一种外围设 备都分别用一
    发表于 05-22 08:52 823次阅读

    计算机基础知识介绍

    计算机基础知识计算机基础知识计算机基础知识
    发表于 12-03 16:13 0次下载

    计算机测控系统与操作系统概述集合【labview基础知识

    计算机测控系统与操作系统概述集合,labview基础知识
    发表于 01-12 11:13 19次下载

    计算机控制威廉希尔官方网站 的基础知识点说明

    本文档的主要内容详细介绍的是计算机控制威廉希尔官方网站 的基础知识点说明包括了:1 计算机控制系统的概念,2 计算机控制系统的组成,3
    发表于 04-27 08:00 5次下载
    <b class='flag-5'>计算机</b>控制威廉希尔官方网站
的<b class='flag-5'>基础知识</b>点说明

    图像处理基础知识 1

    我一直都在这里分享计算机基础知识,比如计算机组成原理、数据结构与算法、计算机网络和操作系统等。 不过偶尔我也想写一下其他的话题,今天就想和你聊聊图像
    的头像 发表于 02-08 17:08 806次阅读
    图像<b class='flag-5'>处理</b><b class='flag-5'>基础知识</b> <b class='flag-5'>1</b>

    计算机基础知识之处理小数2

    有句话说, 「雪崩的时候,没有一片雪花是无辜的」 。在这段代码中,程序没错,计算机也没有发生故障,当然和所使用的语言也没有关系(选用其他的高级语言可能运算结果不同)。如果硬要找一个背锅的,那就是 「计算机处理
    的头像 发表于 03-31 16:10 1280次阅读
    <b class='flag-5'>计算机</b><b class='flag-5'>基础知识</b><b class='flag-5'>之处理</b><b class='flag-5'>小数</b>2