float32与float64

bit, bytes与word

bit即比特位,是最小一级的信息单位;
byte即字节,是计算机存储容量的计量单位,1 byte=8 bits;
word指计算机字,简称字。在存储器中,通常每个单元存储一个字。因此每个字都是可以寻址的。字的长度用位数来表示,计算机的每个字所包含的位数称为字长,计算的字长是指它一次可处理的二进制数字的数目。一般地,大型计算机的字长为32-64位。

常用的字节单位:
KB(Kilobyte)
MB(Megabyte)
GB(Gigabyte)
TB(Trillionbyte)
PB(Petabyte)
EB(Exabyte)
ZB(Zettabyte)
YB(Yottabyte)
BB(Brontobyte)

float16,float32与float64

上述三者分别被称为半精度、单精度和双精度。

单精度的二进制存储结构如下:
在这里插入图片描述
上图第一位用来表示符号,0代表是正数,1代表是负数。
中间八位是指数部分,低位在右边,需要从右往左数;一共可以表示256个数(0-255),0到126代表-127到-1,127代表零,128-255代表1-128。
后面23位是尾数部分(决定整个值的精度),低位在左边,需要从左往右数。图中尾数部分的1在第二位,则尾数部分的值为 ( 1 + 2 − 2 ) (1+2^{-2}) (1+22),这个1并不会存储,但它一定存在。

上图的计算结果如下:
float32与float64_第1张图片
更一般情况的计算方式如下:
float32与float64_第2张图片

ASCLL码、UTF-8和Unicode占用的字节数

[ASCII码]:一个英文字母(不分大小写)占一个字节的空间,一个中文[汉字]占两个字节的空间。一个[二进制数]字序列,在[计算机]中作为一个数字单元,一般为8位二进制数,换算为[十进制]。最小值0,最大值255。如一个ASCII码就是一个字节。

UTF-8编码:一个英文[字符]等于一个字节,一个中文(含繁体)等于三个字节。

Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节。
符号:英文[标点]占一个字节,中文标点占两个字节。

单精度和双精度的选择问题

考虑下面三个方面:
1,What kind of precision does my output need?
2,Is speed not an issue at all?
3,what precision is needed in parts per million?

单、双精度的误差曲线如下图:
float32与float64_第3张图片

各种精度情况下的计算方法

float32与float64_第4张图片

Reference

https://www.jianshu.com/p/d15f17a4356e
https://stackoverflow.com/questions/43440821/the-real-difference-between-float32-and-float64
https://en.wikipedia.org/wiki/Double-precision_floating-point_format

你可能感兴趣的:(计算机基础)