绝对值
维基百科,自由的百科全书
一個數的絕對值永遠非負,沒有負號,某數的絕對值表示為|某數|。對於所有實數x︰若x是負數,|x|為-x(即是一個正數);若x非負,|x|就是x本身。一個數的絕對值可以視為該數在数轴上的点和零的距離。例如3同時是3和-3的絕對值。
絕對值有以下性質:
- |a| ≥ 0
- |a| = 0 若且唯若 a = 0.
- |ab| = |a||b|
- |a/b| = |a| / |b| (if b ≠ 0)
- |a+b| ≤ |a| + |b| (見三角不等式)
- |a−b| ≥ ||a| − |b||
複數的絕對值定義為︰若z=a+ib,則 (見平方根和共軛複數)。它符合以上的六項性質,但以下的三項就未必:
- |a| ≤ b 若且唯若 −b ≤ a ≤ b
- |a| ≥ b 若且唯若 a ≤ −b or b ≤ a
最後的兩道式子常用於計算涉及絕對值的不等式。
[编辑] 演算法
C語言關於絕對值的函數有: abs()
, labs()
, llabs()
(in C99), fabs()
, fabsf()
, and fabsl()
functions compute the absolute value of an operand. Coding the integer version of the function is trivial, ignoring the boundary case where the largest negative integer is input:
int abs(int i) { if (i < 0) return -i; else return i; }
關於浮點數的絕對值演算法就要用點技巧, as they have to contend with special codes for infinity and not-a-numbers.
在Fortran和Matlab語言裡,取得絕對值的函數是 abs
. 可以計算整數、實數,以及複數(complex numbers)。
如以組合語言撰寫,應有可能以三行指令在暫存器內完成絕對值的判斷與轉換演算法 (example shown for a 32-bit register on an x86 architecture, Intel syntax):
cdq xor eax, edx sub eax, edx
cdq
指令將帶號位元(sign bit)的 eax
轉成 edx
。如果 eax
是非負值(nonnegative),那 edx
變成0,接下來的兩個指令會沒有影響,eax
將不變。如果 eax
是負數,那麼 edx
會變成 0xFFFFFFFF,或是 -1。接下來的兩個指令會變成倒轉的2的補數,並從 eax
暫存器中取得負數的絕對值。