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并不会存储,但它一定存在。

上图的计算结果如下:
在这里插入图片描述
更一般情况的计算方式如下:
在这里插入图片描述

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?

单、双精度的误差曲线如下图:
在这里插入图片描述

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

在这里插入图片描述

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

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值