1、科学记数法在程序代码中的便捷书写方式
因为科学记数法的指数部分要用上标的形式表示,这种方法在纸上书写没有问题,但在电子设备中就比较麻烦了,需要将指数部分设定为上标,或者插入公式编辑器。
为了在电子设备上书写方便,常使用符号e或E来表示科学记数法,这个符号来源于exponent(指数)的首字母。
在各种编程语言中,基本上都是用e或E来表示科学记数法,例如在C语言中:
float num1 = 1.23e-4; // 表示 1.23 * 10^-4
double num2 = 4.56e+7; // 表示 4.56 * 10^7
2、科学记数法中的e只是一个表示符号
e或E在科学记数法中并不执行任何运算操作,它们只是作为一种表示法来指示接下来的数字是指数(exponent)部分。因此,它不是运算符。
如1e3只是在代码中对10^3的表示方法,编译器内置了对这种表示法的支持,在编译时会自动把1e3转换成二进制浮点数。
e或E本身都可以定义为变量,因此也不是关键字。
标识符是标识某个实体的符号,是程序员给变量、常量、函数、语句块等起的名字。代码中可以直接将e或E定义为变量,所以e或E本身可以作为标识符。但其用于科学记数法时,只能用e或E,不能用其他字母,而从标识符的定义来看,用户拥有命名的权利,在遵守命名规则的前提下爱用什么名就用什么名,所以科学记数法中的e或E显然也不能算作标识符。
那么,科学记数法中的e或E到底是什么呢?老金查了半天也没查出个所以然来。管它是什么,只要知道能用它表示科学记数法就行了。权当它是一个科学记数法的表示符号。
3、科学记数法中的e与数学中的自然常数e的区别
科学记数法中的e与数学中的自然常数e是完全不同的概念。
1)用符号e表示科学记数法完全是为了书写方便。例如1.03乘10的8次方,可简写为“1.03e8”。在一些计算器中可以直接以这种形式输入数值。
2)自然常数e是数学中一个常数,它是一个无限不循环小数,其值约为2.71828。
自然常数e也叫欧拉数(Euler number),这可能就是用字母e命名这个常数的原因。
它在计算器中像π一样有一个单独的按键。
4、科学记数法中在代码中的语法要求
从数学角度讲,科学记数法的书写是有严格的规范的:把一个大于10的数表示成的形式(其中a大于或等于1且小于10,n是正整数)。
不过在C/C++中,并没有那么严格的规范,使用科学记数法时,其实只要记住一点即可:
e或E前面必须有数字(可以是整数,也可以是小数),否则编译器会报错。比如要表示10^-6,应写成1e-6,不能图方便写成e-6。
为什么要有这个要求呢?其实原因很简单,如果写成“e-6”,编译器会将其识别为一个表达式:变量e减6;而如果写成e6,编译器会把e6看成一个标识符,从而将其识别为一个变量。
回想一下标识符的命名规则就了然了。标识符只能由字母、数字和下划线组成,且不能以数字开头。这个“不能以数字开头”就是不能省略e前数字的奥秘所在。因为只有这样,才能彻底杜绝被错误识别为标识符的可能。
感兴趣的可以用以下程序测试一下:
#include<stdio.h>
int main(){
double e=1, e6=2;
printf("%f\n", 1e-6);
printf("%f\n", 1E-6);
printf("%f\n", e-6);
printf("%f\n", e6);
return 0;
}
关于e或E的语法要求,还有以下两点。不过在实际编程时无需在意,了解即可。
1)e或E后面必须是整数。1e3、1e0合法,1e3.5、1e不合法(基本上没有人会傻到用这种不合法的形式)。
2)e或E后的指数为正整数时,写不写“+”都可以。