绝对值 技术专题简介-冯金伟博客园

简介

  提示:此条目的主题不是绝对赋值。 绝对值可视作该数与零之间的距离在数学中,实数 a {displaystyle a} 的绝对值或模,记号为 | a | {displaystyle |a|} ,是指去掉 a {displaystyle a} 的符号所得的非负值。若 a {displaystyle a} 是正数,则 | a | = a {displaystyle |a|=a} ; 若 a {displaystyle a} 是负数(则 − a {displaystyle -a} 是正数),则 | a | = − a {displaystyle |a|=-a} ;零的绝对值为零( | 0 | = 0 {displaystyle |0|=0} )。例如, 3 {displaystyle 3} 和 − 3 {displaystyle -3} 的绝对值都是 3 {displaystyle 3} 。绝对值可看作该数和零之间的距离。绝对值的定义也可以从实数扩展到复数、四元数、有序环、域、向量空间等范围。在数学和物理中,绝对值与量、距离、范数等概念密切相关。

实数的绝对值

实数绝对值的平面坐标图

若实数 a ≠ 0 {displaystyle aneq 0} ,则在两个相互对称的数 a {displaystyle a} 和 − a {displaystyle -a} 中恰有一个数大于 0,这个大于 0 的数就称为数 a {displaystyle a} 和数 − a {displaystyle -a} 的绝对值,记为 | a | = | − a | {displaystyle left|aright|=left|-aright|} ,0 的绝对值为 0 。一个数的绝对值最小值为0,某数的绝对值表示为 | {displaystyle |} 某数 | {displaystyle |} 。对于所有实数 x {displaystyle x} :若 x {displaystyle x} 是负数, | x | = − x {displaystyle |x|=-x} (即是 − x {displaystyle -x} 是一个正数);若 x {displaystyle x} 非负, | x | = x {displaystyle |x|=x} 本身。即:

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

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

绝对值有以下性质:

| a | ≥ 0 {displaystyle |a|geq 0}

若 a = 0 {displaystyle a=0} , | a | = 0 {displaystyle |a|=0}

| a b | = | a | | b | {displaystyle |ab|=|a||b|}

若 b ≠ 0 {displaystyle bneq 0} , | a b | = | a | | b | {displaystyle |{frac {a}{b}}|={frac {|a|}{|b|}}}

| a + b | ≤ | a | + | b | {displaystyle |a+b|leq |a|+|b|} ( 见三角不等式 )

| a − b | ≥ | | a | − | b | | {displaystyle |a-b|geq {Big |}{big |}a{big |}-{big |}b{big |}{Big |}}

若 0}”> a > 0 {displaystyle a>0} ,则 a = | a | {displaystyle a=left|aright|} ;若<math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{displaystyle a a < 0 {displaystyle a<0} ,则 a = − | a | {displaystyle a=-left|aright|}

复数的绝对值

复数的绝对值定义为:若 z = a + i b {displaystyle z=a+ib} ,则 | z | = a 2 + b 2 = z z ¯ {displaystyle |z|={sqrt {a^{2}+b^{2}}}={sqrt {z{bar {z}}}}} (见平方根和共轭复数)。它符合以上的六项性质,但以下的三项就不成立

| a | = a 2 {displaystyle left|aright|={sqrt {a^{2}}}}

| a | ≤ b {displaystyle |a|leq b} 当且仅当 − b ≤ a ≤ b {displaystyle -bleq aleq b}

| a | ≥ b {displaystyle |a|geq b} 当且仅当 a ≤ b {displaystyle aleq -b} b ≤ a {displaystyle bleq a}

但此时有

| z ¯ | = | z | {displaystyle |{bar {z}}|=|z|}

z z ¯ = | z | {displaystyle {sqrt {z{bar {z}}}}=|z|}

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

有序环上的绝对值

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

<math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{displaystyle |a|={begin{cases}a,&;ageq 0\-a,&a | a | = { a , a ≥ 0 − a , a < 0 , {displaystyle |a|={begin{cases}a,&;ageq 0\-a,&a<0,end{cases}}}

其中 − a {displaystyle -a} 是 a {displaystyle a} 的加法逆元,而 0 是有序环的加法单位元。

域上的绝对值

在抽象的域上,我们用绝对值的基本性质来推广定义。一个域 F {displaystyle F} 上的绝对值是一个函数 | ⋅ | : F → R {displaystyle |cdot |:Frightarrow mathbb {R} } ,满足以下四条公理:

| a | ≥ 0 {displaystyle |a|geq 0} 非负性质 | a | = 0 ⟺ a = 0 {displaystyle |a|=0iff a=mathbf {0} } 正定性质 | a b | = | a | ⋅ | b | {displaystyle |ab|=|a|cdot |b|,} 积性 | a + b | ≤ | a | + | b | {displaystyle |a+b|leq |a|+|b|} 三角不等式

由以上公理可以导出 | 1 | = 1 {displaystyle |1|=1} 。距离函数 d ( x , y ) = | x − y | {displaystyle d(x,y)=|x-y|} 赋予 F {displaystyle F} 度量空间结构。

如果将定义中的三角不等式换作以下较强的形式(有时又叫做强三角不等式

a , b ∈ F | a + b | ≤ m a x { | a | , | b | } {displaystyle forall a,bin Fquad |a+b|leq mathrm {max} {|a|,|b|}}

则称 ( F , | ⋅ | ) {displaystyle (F,|cdot |)} 为超度量域,或称绝对值 | ⋅ | {displaystyle |cdot |} 不满足阿基米德性质;反之则称 | ⋅ | {displaystyle |cdot |} 满足阿基米德性质。。

超度量域的典型例子是 p进数域。一般来说,值群在 R {displaystyle mathbb {R} } 里的赋值环对应到超度量域,此时赋值与绝对值的关系由 | x | := a v ( x ) {displaystyle |x|:=a^{v(x)}} 给出,其中 a ∈ {displaystyle ain } ;不同的 a {displaystyle a} 给出等价的拓扑结构。

微积分

绝对值函数在 x = 0 {displaystyle x=0} 不可导。

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

其中 C {displaystyle 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)撰写特别的程式码。

在 Pascal、Fortran 和 Matlab 语言里,取得绝对值的函数是 abs,可以计算整数、实数,以及复数。

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

cdqxor eax, edxsub eax, edx

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