浮点数

二进制分数:和二进制的整数类似,小数点后第一位代表0.5即$1/2$,第二位代表0.25即$1/4$,以此类推。例如$0.10011_b=1*1/2+0*1/4+0*1/8+1*1/16+1*1/32$

浮点数的表示:包括阶数以及尾数,浮点数=符号*尾数*2^阶数($Value=s*2^E*M$),其中s是符号位,只有0或者1,M是一个在$1~2-\epsilon$或者$0~1-\epsilon$之间的二进制分数,E用来衡量2的指数。

IEEE 754中,浮点数的表示如下:

在这里,单精度浮点数中,符号位占1位,阶数占8位,而剩下的23位则是尾数,而双精度浮点数中,符号位占1位,阶数占11位,尾数占52位。

浮点数中的Normalized Value与Denormalized Value:
Normalized Value指一个浮点数的阶数不全为0或者不全为1.这时,指数表示的是尾数的偏移量。这个时候,指数的值$E=e-Bias$,其中$e$是阶数代表的无符号整数,而$Bias$则表示$2^{k-1}-1$,其中对于单精度浮点数这里是127,双精度浮点数这里则是1023.因此最后的E的范围则是-126到+127(单精度)或者-1022到+1023(双精度)。(实际上这里就差不多是一个带符号数,去除了exp全为0或者全为1的情况,因此少了两个数)
而此时$frac$部分则是代表分数$f$,其中$0\le f \lt 1$。其代表$0.f_{n-1}… f_1 f_0$。而有效数字则是被定义为$1+f$。

对于Denormalized Value:其中的指数部分为全0,而此时指数部分表示的是$E=1-Bias$,此时,有效数字则是$M=f$。此时,分数部分不再有数字1开头(就是1.xxxxx变为0.xxxxx?)。其中的作用包括了能够表示0,在Normalized Value中,至少有一个1,而当使用Denormalized Value的时候就能表示0.另外,其还能够表示一些非常接近于0的数字。

其他数字:阶数部分全为1,而尾数部分全为0,则表示正/负无穷(于符号位s有关),此时也能够表示计算溢出,包括两个大数相乘,或者是一个数被0除。当阶数部分全为1,而尾数部分不全为0,此时表示NaN(Not a number)。此时会表示一些无法计算的数,如$\sqrt(-1)$或者$\infty-\infty$

一般有几种多种近似的方式,一般分为:向上取整,向下取整,靠0近似,靠偶数近似。

一般有四种精确方式,Round-to-even是四舍五入,另外三种实际上就是顾名思义了。

浮点运算

IEEE定义了一个对于浮点运算的简单规则,对于任何浮点运算,实际上的结果都是进行精确运算之后得到的一个近似值。即对于两个浮点数$x,y$以及运算$\odot$,其结果实际上是$Round(x\odot y)$。此外,还有一些特殊的运算,如1/-0结果是$-\infty$,而1/+0结果是$+\infty$。

对于浮点数来说,定义加法$x+^f y=Round(x+y)$。这种运算实际上是可交换的。而实际上对于浮点数的加法运算,是不能够结合的。比如$(3.14+1e10)-1e10=0$,因为3.14在进行运算的时候被丢失了。而$3.14+(1e10-1e10)$实际上就还是等于3.14。一般情况,和整数计算类似,大部分的值实际上都有逆运算,如$x+^f x = 0$。不过无穷以及$NaN$例外。$+\infty -\infty = NaN$。

此外,浮点数加法符合单调性原则,$a \ge b \Rightarrow x +^f a \ge x+^f b$。无符号加法和二进制补码加法不遵守实数(和整数)加法的这一特性。而浮点数的乘法实际上大部分情况也是和整数乘法类似的。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇