科学记数法
本节阅读量:在讨论下一个主题之前,我们先简单了解一下科学记数法。
科学记数法是一种以简洁方式书写冗长数字的速记方法。尽管科学记数法乍看可能有些陌生,但理解它将有助于您掌握浮点数的工作原理及其局限性。
科学记数法中的数字采用以下形式:有效位 x 10的指数次方。例如,在科学记数法1.2 x 10^4中,1.2是有效位,4是指数。10^4等于10000,所以1.2 x 10^4等于12000。
按照惯例,科学记数法中的数字在小数点前只写一位数字,其余数字写在小数点后。
考虑地球的质量。用十进制表示,需要写成5973600000000000000000000kg。这是一个非常大的数字(即使用8字节的整数也放不下)。而且很难阅读(到底是19个零还是20个零?)。即使加上分隔符(5,973,600,000,000,000,000,000,000),该数字仍然很难读。
用科学记数法表示,则写成5.9736 x 10^24 kg。科学记数法的另一个好处是,通过比较指数,可以更方便地比较两个非常大或非常小的数字的大小。
因为在C++中很难键入或显示指数,所以我们使用字母”e”来表示”10的幂次方”部分。例如,1.2 x 10^4 写为1.2e4,而5.9736 x 10^24 写为5.9736e24。
对于小于1的数字,指数可以为负数。数字5e-2相当于5*10^-2,即5/100或0.05。电子的质量为9.1093822e-31 kg。
如何将数字转换为科学记数法
使用以下步骤:
- 指数从零开始。
- 滑动小数点,使小数点左侧只有一个非零数字。
- 向左滑动一位,指数加一
- 向右滑动一位,指数减一
- 删去任何前导零(在有效位的左端)
- 尾部的0如果是有效的,则不能删除
下面是一些示例:
|
|
|
|
|
|
|
|
下面是最重要的一点:有效位中的数字(”e”之前的部分)称为有效数字。有效数字的个数决定了数字的精度。有效位中包含的数字越多,数字就越精确。
精度和小数点后的尾随零
考虑这样一种情况:我们让两个实验室助理分别称量同一个苹果。一个人回来说苹果重87.0克,另一个回来说苹果重87.000克。假设称重结果都是正确的。在前一种情况下,苹果的实际重量可能在86.950克到87.049克之间,天平的精度只有十分之一克。在后一种情况下,我们对苹果实际重量的把握更大(重量在86.99950到87.00049克之间,变化范围小得多)。
因此在标准科学记数法中,我们倾向于保留小数点后的尾随零,因为这些数字传达了关于精度的有用信息。
- 87.0g = 8.70e1
- 87.000g = 8.7000e1
然而从技术角度来看,数字87.0和87.000具有相同的值(和相同的类型)。当C++将这两个数字存储在内存中时,只会存储值87。一旦存储完成,就无法从存储的值中分辨出最初使用的是哪一个。