4.7 - 科学计数法
在谈论下一个话题之前,我们先来讨论一下科学计数法。
科学计数法是一种将大数表示为精简格式的非常有用的方法。尽管科学计数法第一眼看上去会有些陌生,理解科学计数法可以帮助我们理解浮点数的工作原理及其限制。
科学计数法的表示形式为:\(有效数字 * 10^{指数}\)。例如 1.2 x 10⁴
中,1.2
是有效数字而4是指数。因为10的四次方等于10,000,所以 1.2 x 10⁴
等于12,000。
按照惯例,科学计数法的有效数字部分,小数点前写一个非零数字,其他非零数字则写到小数点后。
例如,以十进制表示法表示地球的质量时,我们会写成5973600000000000000000000 kg
。好长一串数字!(而且大到不能被8字节整型所表示)。同时,读起来也很困难(到底是19个0还是20个0?)。即便以逗号来分割成 5,973,600,000,000,000,000,000,000,看上去仍然非常吃力。
如果用科学计数法表示,则可以写作 5.9736 x 10²⁴ kg
,看上去就非常简洁了。除此之外,科学计数法还有利于对两个非常大或非常小的值比较其数量级,因为只需要比较指数部分即可。
因为在C++中,输入和显示指数记号会比较困难,所以我们使用字母e
(有时也使用大写字母E
)来表示10的次方。例如 1.2 x 10⁴
会写作 1.2e4
,而 5.9736 x 10²⁴
则写作 5.9736e24
。
对于小于1的数,指数部分则是负数,例如 5e-2
等价于 5 * 10⁻²
,即 5 / 10²
或 0.05
。电子的质量可以表示为 9.1093822e-31 kg
。
如何将数字转换为科学计数法
使用下面步骤:
- 指数部分从0开始。
- 移动小数点,使其左边只有一位数。
- 每次向左移动,指数+1
- 每次向右移动,指数-1
- 删除有效数字左边的0
- 如果原数字没有小数部分,删除有效数字末尾的0,如果没有特别指明,我们认为这些0没有意义。
一些例子:
1 2 3 4 |
|
1 2 3 4 |
|
1 2 3 4 |
|
重点理解:有效数字部分的位数 (‘e’前面的部分) 称为有效数字。有效数字决定了这个数的精度,有效数字位数越多说明精度越高。
精度以及小数点后的0
想象一下,如果我们就同一个苹果的重量询问两个实验室助手,一个回答苹果重为87克,另一个回答为87.00克,假设它们的结果都是对的,对于前一个回答来说,苹果的真实重量可能位于86.50 和 87.49 克之间。也许他使用的天平精度只到克,也许是他进行了四舍五入。而对于后一种情况,我们可以对其精度更加自信(重量在 86.9950 和 87.0049 克之间,变化区间更小了)。
所以,在标准的科学计数法中,我们倾向于保留小数点后面尾部的0,因为这些0可以有效地表明该数值的精度。
不过,在C++中,87 和 87.000 并没有任何区别,编译器存储两数的结果也是完全一样的。从技术上讲,使用两种写法没有任何区别(当然,如果你使用的是代码即文档的表示方式,也许会有出于科学上的理由)。
介绍完科学计数法,我们可以开始介绍浮点数了。