數學中,實數絕對值,記號為,是指去掉符號所得的非負。若正數,則; 若負數(則是正數),則的絕對值為零()。例如,的絕對值都是。絕對值可看作該數和零之間的距離

絕對值可視作該數與零之間的距離

絕對值的定義也可以從實數擴展到複數四元數有序環向量空間等範圍。在數學和物理中,絕對值與距離範數等概念密切相關。

實數的絕對值

 
實數絕對值的平面座標圖

若實數  ,則在兩個相互對稱的數    中恰有一個數大於 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暫存器中取得負數的絕對值。

參見

參考資料