数学中,实数绝对值,记号为,是指去掉符号所得的非负。若正数,则; 若负数(则是正数),则的绝对值为零()。例如,的绝对值都是。绝对值可看作该数和零之间的距离

绝对值可视作该数与零之间的距离

绝对值的定义也可以从实数扩展到复数四元数有序环向量空间等范围。在数学和物理中,绝对值与距离范数等概念密切相关。

实数的绝对值

 
实数绝对值的平面座标图

若实数  ,则在两个相互对称的数    中恰有一个数大于 0,这个大于 0 的数就称为数   和数  绝对值,记为   ,0 的绝对值为 0 。 一个的绝对值最小值为0,某数的绝对值表示为   某数   。对于所有实数   :若  负数  (即是   是一个正数);若   非负,   本身。即:

 

一个数的绝对值可以视为该数在数线上的点和零的距离。例如 3 同时是 3 和 -3 的绝对值。

绝对值有以下性质:

  1.  
  2.   
  3.  
  4.   
  5.   ( 见三角不等式 )
  6.  
  7.  ,则 ;若 ,则 

复数的绝对值

复数的绝对值定义为:若 ,则  (见平方根共轭复数)。它符合以上的六项性质,但以下的三项就不成立

  1.  
  2.   若且唯若  
  3.   若且唯若    

但此时有

  1.  
  2.  

最后两道式子常用于计算涉及复数绝对值的不等式

有序环上的绝对值

绝对值的定义可以照搬到有序环上。定义如下:

 

其中    的加法反元素,而 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)撰写特别的程式码。

PascalFortranMatlab 语言里,取得绝对值的函数是 abs,可以计算整数实数,以及复数。

如以组合语言撰写,应有可能以三行指令在暂存器内完成绝对值的判断与转换演算法,以下例子是 x86 结构上的 32 位元暂存器,采英特尔语法。

cdq
xor eax, edx
sub eax, edx

cdq 指令将带号位元(sign bit)的 eax 转成 edx。如果 eax 是非负值,那 edx 变成 0,接下来的两个指令会没有影响,eax 将不变。如果 eax 是负数,那么 edx 会变成 0xFFFFFFFF ,或是 -1。接下来的两个指令会变成倒转的二补数,并从 eax暂存器中取得负数的绝对值。

参见

参考资料