在数学中,实数的绝对值或模,记号为,是指去掉的符号所得的非负值。若是正数,则; 若是负数(则是正数),则;零的绝对值为零()。例如,和的绝对值都是。绝对值可看作该数和零之间的距离。
绝对值的定义也可以从实数扩展到复数、四元数、有序环、域、向量空间等范围。在数学和物理中,绝对值与量、距离、范数等概念密切相关。
若实数 ,则在两个相互对称的数 和 中恰有一个数大于 0,这个大于 0 的数就称为数 和数 的绝对值,记为 ,0 的绝对值为 0 。
一个数的绝对值最小值为0,某数的绝对值表示为 某数 。对于所有实数 :若 是负数, (即是 是一个正数);若 非负, 本身。即:
一个数的绝对值可以视为该数在数线上的点和零的距离。例如 3 同时是 3 和 -3 的绝对值。
绝对值有以下性质:
- 若 ,
- 若 ,
- ( 见三角不等式 )
- 若 ,则;若,则
复数的绝对值定义为:若,则 (见平方根和共轭复数)。它符合以上的六项性质,但以下的三项就不成立:
- 若且唯若
- 若且唯若 或
但此时有
最后两道式子常用于计算涉及复数绝对值的不等式。
绝对值的定义可以照搬到有序环上。定义如下:
其中 是 的加法反元素,而 0 是有序环的加法单位元素。
在抽象的域上,我们用绝对值的基本性质来推广定义。一个域 上的绝对值是一个函数 ,满足以下四条公理:
|
非负性质
|
|
正定性质
|
|
积性
|
|
三角不等式
|
由以上公理可以导出 。距离函数 赋予 度量空间结构。
如果将定义中的三角不等式换作以下较强的形式(有时又叫做强三角不等式)
则称 为超度量域,或称绝对值 不满足阿基米德性质;反之则称 满足阿基米德性质。[1]。
超度量域的典型例子是 p进数域。一般来说,值群在 里的赋值环对应到超度量域,此时赋值与绝对值的关系由 给出,其中 ;不同的 给出等价的拓扑结构。
绝对值函数在不可导。
其中是积分常数。
C 语言关于绝对值的函数有: abs()
, labs()
, llabs()
(在 C99 中),fabs()
、fabsf()
与 fabsl()
函数计算一个对象的绝对值。当输入值不是最大负整数时,很容易写出计算绝对值的巨集或函数。
以下巨集可接受整数或浮点数:
#define abs(i) ((i)>0 ? (i) : (-i))
如果以函数计算,需要写多个函数,多载来处理不同数据类型:
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 语言里,取得绝对值的函数是 abs
,可以计算整数、实数,以及复数。
如以组合语言撰写,应有可能以三行指令在暂存器内完成绝对值的判断与转换演算法,以下例子是 x86 结构上的 32 位元暂存器,采英特尔语法。
cdq
xor eax, edx
sub eax, edx
cdq
指令将带号位元(sign bit)的 eax
转成 edx
。如果 eax
是非负值,那 edx
变成 0,接下来的两个指令会没有影响,eax
将不变。如果 eax
是负数,那么 edx
会变成 0xFFFFFFFF ,或是 -1。接下来的两个指令会变成倒转的二补数,并从 eax
暂存器中取得负数的绝对值。