绝对值
绝对值
在数学中,实数formula_1的绝对值或模,记号为formula_2,是指去掉formula_1的符号所得的非负值。若formula_1是正数,则formula_5; 若formula_1是负数(则formula_7是正数),则formula_8;零的绝对值为零(formula_9)。例如,formula_10和formula_11的绝对值都是formula_10。绝对值可看作该数和零之间的距离。
绝对值的定义也可以从实数扩展到复数、四元数、有序环、域、向量空间等范围。在数学和物理中,绝对值与量、距离、范数等概念密切相关。
实数的绝对值.
若实数 formula_13,则在两个相互对称的数 formula_1 和 formula_7 中恰有一个数大于 0,这个大于 0 的数就称为数 formula_1 和数 formula_7 的绝对值,记为 formula_18 ,0 的绝对值为 0 。
一个数的绝对值最小值为0,某数的绝对值表示为 formula_19 某数 formula_19 。对于所有实数 formula_21 :若 formula_21 是负数, formula_23 (即是 formula_24 是一个正数);若 formula_21 非负, formula_26 本身。即:
formula_27
一个数的绝对值可以视为该数在数线上的点和零的距离。例如 3 同时是 3 和 -3 的绝对值。
绝对值有以下性质:
复数的绝对值.
复数的绝对值定义为:若formula_40,则 formula_41(见平方根和共轭复数)。它符合以上的六项性质,但以下的三项就不成立:
但此时有
最后两道式子常用于计算涉及复数绝对值的不等式。
有序环上的绝对值.
绝对值的定义可以照搬到有序环上。定义如下:
formula_50
其中 formula_7 是 formula_1 的加法反元素,而 0 是有序环的加法单位元素。
域上的绝对值.
在抽象的域上,我们用绝对值的基本性质来推广定义。一个域 formula_53 上的绝对值是一个函数 formula_54,满足以下四条公理:
由以上公理可以导出 formula_55。距离函数 formula_56 赋予 formula_53 度量空间结构。
如果将定义中的三角不等式换作以下较强的形式(有时又叫做强三角不等式)
formula_58
其中formula_59是积分常数。
演算法.
C 语言关于绝对值的函数有: codice_1, codice_2, codice_3(在 C99 中),codice_4、codice_5 与 codice_6 函数计算一个对象的绝对值。当输入值不是最大负整数时,很容易写出计算绝对值的巨集或函数。
以下巨集可接受整数或浮点数:
如果以函数计算,需要写多个函数,多载来处理不同数据类型:
int abs (int);
float abs (float);
double abs (double);
int abs (int i) {
if (i>0) {
return i;
} else {
return -i;
关于浮点数的绝对值演算法就要用点技巧,因为要为无穷大及 NaN(Not a Number)撰写特别的程式码。
在 Pascal、Fortran 和 Matlab 语言里,取得绝对值的函数是 codice_7,可以计算整数、实数,以及复数。
如以组合语言撰写,应有可能以三行指令在暂存器内完成绝对值的判断与转换演算法,以下例子是 x86 结构上的 32 位元暂存器,采英特尔语法。
cdq
xor eax, edx
sub eax, edx
codice_8 指令将带号位元(sign bit)的 codice_9 转成 codice_10。如果 codice_9 是非负值,那 codice_10 变成 0,接下来的两个指令会没有影响,codice_9 将不变。如果 codice_9 是负数,那么 codice_10 会变成 0xFFFFFFFF ,或是 -1。接下来的两个指令会变成倒转的二补数,并从 codice_9暂存器中取得负数的绝对值。