章节目录

科学记数法

本节阅读量:

在我们讨论下一个主题之前,我们将简单讨论一下科学记数法。

科学记数法是以简洁的方式书写冗长数字的一种有用的速记方法。尽管科学记数法一开始可能看起来很陌生,但理解科学记数将有助于您理解浮点数的工作原理以及它们的局限性。

科学记数法中的数字采用以下形式:有效位x 10的指数。例如,在科学记数法1.2 x 10^4, 1.2是有效位,4是指数。 10^4为10000,1.2 x 10^4 为12000。

按照惯例,科学记数法中的数字在小数点之前写一个数字,然后写其余的数字。

考虑地球的质量。在十进制表示法中,我们将其写成597360000000000000000kg。这是一个非常大的数字(即使是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如果有效,则不能删除

下面是一些示例:

1
2
3
4
开始: 0.0078900
小数点右滑3: 0007.8900e-3
删除前导0: 7.8900e-3
保留尾部的0: 7.8900e-3 (5 个有效位)
1
2
3
4
开始: 600.410
小数点左滑2: 6.00410e2
无前导0: 6.00410e2
保留尾部的0: 6.00410e2 (6 个有效位)
1
2
3
4
开始: 42030 (尾部0无效的情况)
小数点左滑4: 4.2030e4
无前导0: 4.2030e4
删除尾部的0: 4.203e4 (4 个有效位)
1
2
3
4
开始: 42030 (尾部0有效的情况)
小数点左滑4: 4.2030e4
无前导0: 4.2030e4
保留尾部的0: 4.2030e4 (5 significant digits)

下面是需要理解的最重要的一点:有效位中的数字(“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。一旦存储,就无法从存储的值中确定最初使用的是两个数字中的哪一个。


4.5 固定宽度整数和size_t

上一节

4.7 浮点数

下一节