在数学中,实数的绝对值或模,记号为,是指去掉的符号所得的非负值。若是正数,则; 若是负数(则是正数),则;零的绝对值为零()。例如,和的绝对值都是。绝对值可看作该数和零之间的距离。
绝对值的定义也可以从实数扩展到复数、四元数、有序环、域、向量空间等范围。在数学和物理中,绝对值与量、距离、范数等概念密切相关。
若實數 ,則在兩個相互對稱的數 和 中恰有一個數大於 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
暫存器中取得負數的絕對值。