絕對值

維基百科,自由的百科全書
前往: 導覽搜尋
Confusion grey.svg
提示:本條目的主題不是絕對賦值
絕對值可視作該數與零之間的距離

絕對值(或稱)用來表示一個數至原點的距離之大小。絕對值的概念也可以定義在複數有序環以及上。

實數的絕對值[編輯]

實數絕對值的平面座標圖

若實數a \neq 0,則在兩個相互對稱的數a-a中必有且僅有一個數大於0,這個大於0的數就稱為數a和數-a絕對值,記為\left |  a \right | = \left | -a \right |0的絕對值為0 一個絕對值永遠非負,沒有負號,某數的絕對值表示為|某數|。對於所有實數x:若x負數|x|為-x(即是一個正數);若x非負,|x|就是x本身。即:

\left| a \right| =
\begin{cases} a & (a>0) \\
0 & (a=0) \\
-a & (a<0) \end{cases}

一個數的絕對值可以視為該數在數線上的點和零的距離。例如3同時是3和-3的絕對值。

絕對值有以下性質:

  1. |a| ≥ 0
  2. a = 0,|a| =0
  3. |ab| = |a||b|
  4. |a/b| = |a| / |b| (若 b ≠ 0)
  5. |a+b| ≤ |a| + |b| (見三角不等式)
  6. |ab| ≥ ||a| − |b||
  7. a>0,則a= \left | a \right |;若a<0,則a = - \left | a \right |

複數的絕對值[編輯]

複數的絕對值定義為:若z=a+ib,則 |z| = \sqrt{a^2 + b^2} = \sqrt{z\bar{z}}(見平方根共軛複數)。它符合以上的六項性質,但以下的三項就未必成立

  1. \left| a \right| = \sqrt{a^2}
  2. |a| ≤ b 若且唯若 −bab
  3. |a| ≥ b 若且唯若 a ≤ −b ba

但此時有

  1. |\bar{z}| = |z|
  2. \sqrt{z\bar{z}} = |z|

最後兩道式子常用於計算涉及複數絕對值的不等式

有序環上的絕對值[編輯]

絕對值的定義可以照搬到有序環上。定義如下:

|a| = \begin{cases} a, & \;  a \ge 0  \\ -a,  & a < 0, \end{cases}

其中 -aa 的加法反元素,而 0 是有序環的加法單位元素。

域上的絕對值[編輯]

在抽象的域上,我們用絕對值的基本性質來推廣定義。一個域 F 上的絕對值是一個函數 |\cdot|: F \rightarrow \mathbb{R},滿足以下四條公理:

|a| \ge 0 非負性質
|a| = 0 \iff a = \mathbf{0} 正定性質
|ab| = |a| \cdot |b| \, 積性
|a+b|  \le |a| + |b|  三角不等式

由以上公理可以導出 |1|=1。距離函數 d(x,y) = |x-y| 賦予 F 度量空間結構。

如果將定義中的三角不等式換作以下較強的形式(有時又叫做強三角不等式

\forall a,b \in F \quad |a + b| \le \mathrm{max}\{|a|, |b|\}

則稱 (F,|\cdot|)超度量域,或稱絕對值 |\cdot| 不滿足阿基米德性質;反之則稱 |\cdot| 滿足阿基米德性質。[1]

超度量域的典型例子是 p進數域。一般來說,值群在 \mathbb{R} 裡的賦值環對應到超度量域,此時賦值與絕對值的關係由 |x| := a^{v(x)} 給出,其中 a \in ]0,1[;不同的 a 給出等價的拓撲結構。

微積分[編輯]

絕對值函數在 x=0 不可導

\frac{d}{dx}|x| = \frac{x}{|x|} = \begin{cases} 1 & x>0 \\  -1 & x<0 \end{cases}
\int|x|dx=\frac{x|x|}{2}+C

其中 C積分常數

演算法[編輯]

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暫存器中取得負數的絕對值。

參考資料[編輯]