-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #10 from fortran-fans/Euler-37-patch-1
Create ch03-01-precision.md
- Loading branch information
Showing
1 changed file
with
43 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
# 变量的表示范围与浮点数精度 | ||
|
||
本节主要介绍Fortran中的变量的范围,简单介绍IEEE754和浮点数的误差 | ||
|
||
## 整数 | ||
|
||
计算机使用二进制来表示数据,一个默认的整数类型占4个字节,一共有32位,每个位有两种状态,所以一共可以表示的数据量为$2^{32}$。 | ||
|
||
因为我们需要同时表示负数、正数和零,所以,整数的表示范围被设计为$[-2^{31},2^{31}-1]$ 一共有$2^{32}$个数。 | ||
|
||
如果需要表示的数据超过了这个限度,那么就需要kind值更大的整数类型`integer(8)`来表示 | ||
|
||
## 浮点数 | ||
|
||
整数是完全精确的,但是在实际的生活工作中,我们不一定需要这么精确的数,$\pi=3.14$或者是$\pi=3.141592653$对某些计算来说并不重要。但是相对的,数值可以表达的范围对某些行业更为有用,比如天体之间的距离。所以我们可以舍弃一部分的精确度来换取更大的表示范围,这就是浮点数。 | ||
|
||
### IEEE754 | ||
按照IEEE754 浮点数的标准,浮点数由三部分组成:符号位(sign),指针偏移值(exponent)和分数值(fraction)。 一个浮点数是这三部分的乘积$Value=sign*exponent*fraction$ | ||
|
||
浮点数的默认类型也是占4个字节,32个位,所以能表示的状态最多也是$2^{32}$个,因此,**注定有些数字没有办法精确表示**,IEEE754的处理方法是: | ||
|
||
$$(sign)1+(exponent)8+(fraction)23=32$$ | ||
|
||
- 用23个位表示一组分数,$fraction=1+\sum_{i=1}^{23}\frac{a[i]}{2^i}$,其中$a[i]$表示这个位是0还是1。 | ||
|
||
- 用8个位表示指数,$exponent=2^{M-127}$,M的取值范围是[0,255] | ||
|
||
浮点数就是利用exponent把给定的fraction按照比例放大或者缩小。即能用这个公式表示出来的都是精确的数,其余的数都是近似等于这些数中的一个。 | ||
|
||
所以,浮点数的精度是由fraction来决定的,在十进制表示下,精度为$log_{10}2^{23}=6.923$,所以通常说单精度浮点数的有效数字是6.9 | ||
|
||
### Infinity | ||
|
||
当符号位$M$取最大值255,且分数位全为0时,此时规定这个值为$Infinity$ | ||
|
||
### Nan | ||
|
||
当符号位$M$取最大值255,且分数位不全为0时,此时规定这些值均为$Nan$ | ||
|
||
## 思考题 | ||
|
||
- 按照浮点数公式,推算在浮点数表示下可以精确表示的最大整数是多少 | ||
- 调研什么是非格式化浮点数(denormal) |