浮点数
@(Python入门)
[TOC]
导言
浮点数在python中可以直接处理的数据类型之一,那么什么是浮点数?它的表示方法是什么?它在python中有什么样的性质?它为什么叫浮点数?等等
浮点数的历史
人们需要比较在计算机中存储的数值的大小。如果是整数与整数的比较,只需要进行右对齐,空白的地方补0,然后依次比较对应位的数值大小。
2000
0100
但是如果是整数和小数的比较呢?
此时需要对齐它们的小数点,并在空白的地方补0,最后依次比较对应位的数值大小。
10000
02345.12
那么小数和小数的比较呢?
首先对齐小数点,其次空白补0,最后依次比较。
12345.6780
01234.6789
综上,符号相同的数比大小的时候,都需要先对齐小数点。既然如此,人们就规定计算机中储存的数值的数位和小数点位置都是固定的,这样的数集被称为定点数。但是出现了两个问题:
- 定点数不能储存太大的数值。因为数位固定及小数点位置固定,所以整数部分的数位也是固定的,一旦数值超过范围,计算机就无法处理了。
- 定点数不能有效储存太小的数值。同上,太小的数值会出现大量的0,浪费储存空间;并且,需要舍去超过数位后面的数,储存的数值精度低。
浮点数是被设计出来解决这两个问题的。
浮点数
浮点数在定点数的基础上引入了阶码,阶码是将定点数的小数点移动若干位的工具。因为浮点数在计算机中存储的小数点位置是不确定的,所以称为浮点数。
浮点数名称的由来是我个人定义的,知乎上和教程上写的都是“因为浮点数的小数点可以移动,所以称为浮点数。”但是,结合到科学计数法中的规定,尾数是大于等于1小于10的,所以我推测,在计算机中,数值的精读确定时,浮点数的储存格式是固定的,不存在有12.2e10和1.22e11这两种方式共存,因为表示简洁和节约空间。所以,我认为“浮点数的小数点可以移动”是浮点数被命名原因是不正确的。
浮点数有多种表示方法:二进制、十进制等等。其中二进制的表示是$ a×2^b $,其中a称为尾数,b称为指数,在计算机中尾数和指数是分开存储的。
浮点数的结构:阶符± + 阶码e + 数符± + 尾数m
阶符指正指数or负指数。
阶码e表示十进制。
数符表示数的正负。
尾数是由精度及数决定。
参考
https://www.zhihu.com/question/19848808
https://baike.baidu.com/item/%E6%B5%AE%E7%82%B9%E6%95%B0/6162520?fr=aladdin
https://baike.baidu.com/item/%E7%A7%91%E5%AD%A6%E8%AE%B0%E6%95%B0%E6%B3%95/1612882?fr=aladdin