跳到主要内容
CalcMax

误差函数计算器

范围:-6 – 6

结果

0.842701

误差函数 erf(x)

互补误差函数 erfc(x)
0.157299

误差函数计算器对同一个输入同时给出 erf(x) 与它的余函数 erfc(x),两个读数加起来永远是 1。误差函数是钟形曲线从零点积到 x 的那块面积,这也是它总在需要度量高斯分布的地方出现的原因:erf(1) 是 0.842701,而 erfc(1) 是 0.157299——余误差函数就是用 1 减去第一个读数。本页的数值由级数定义现算,因为这个语言本身没有内置的误差函数;正负输入都收。输入限制在正负 6 之间,那是曲线再也没有东西可供分辨的位置。

常被查的那些取值下的误差函数与余函数

xerf(x)erfc(x)
001
0.250.2763260.7236736
0.50.52050.4795001
0.750.7111560.2888444
10.8427010.1572992
1.50.9661050.03389485
20.9953220.004677735
2.50.9995930.000406952
30.9999780.0000220905

每一行后两列相加都是一,这既是「余」的定义,也是检查这一页任何数字最快的办法。表的上半部分正是余函数变薄的地方:x = 2 时还有四位有效数字,到 x = 3 已经要先写五个零才见得到东西。沿着中间那一列往下读能看到曲线在变平——从 0 走到 0.5 占掉了半个量程,而 2 以后的一切加起来也只是最后那半个百分点。表里的小数点一律是普通句点,因为表格单元格不做本地化。

公式

erf x = (2 ÷ √π) ∫₀ˣ e^(−t²) dt erfc x = 1 − erf x

x
被度量的那个值,是一个没有量纲的纯数。它可以是负数,这时误差函数是奇函数,返回正数答案的相反数:erf(-1) 是 -0.842701。实用范围是 -6 到 6,再往外曲线平得彻底,双精度已经分辨不出它与 1 的差别。
e^(−t²)
被积的那条高斯钟形曲线。它的形状正是误差函数重要的原因:曲线在两点之间的面积就是概率,所以同一个积分会出现在每一个正态分布问题里,也所以这一页天然的搭档是正态分布计算器。
√π
积分号前面的归一化因子,约等于 1.772454。没有它,整条曲线积出来是 √π 而不是 1,误差函数也就不会从 -1 走到 1。它是常数不是变量,这一点值得说一句,因为它看起来像变量。
erf x
误差函数本身,印六位小数。它从 -1 走到 1,在原点穿过零,在 x = 1 处到 0.842701。这个值是面积而不是概率:要变成概率得先加 1 再除以 2,标准正态的分布函数就是这么由它搭出来的。
erfc x
余误差函数,等于 1 减 erf,输入很负时接近 1,往正方向一路落向零。它用科学计数法报出,因为它跨越的量级极大。它不是第二个测量值,而是同一个读数从另一端看:erfc 是尾部面积,而当 x 离零很远时,你要的正是那条尾巴。

需要的就是误差函数或余函数本身时用这一页。如果你真正要的是「正态变量落在一个值以下的概率」,正态分布计算器收均值与标准差、直接给出那个概率——同一个数,走的路更短。误差函数是它底下的原函数,而这一页正是读这个原函数的地方。

算例

  1. 所有人第一个遇到的取值:x = 1

    1. 级数在 x = 1 处求值,几十项就收敛
    2. erf(1) 算出来是 0.842701
    3. 余函数是 1 减去它:1 − 0.842701 = 0.157299
    4. 两个读数相加得 1.000000,这是这一页任何一行都值得跑的检查

    两个读数加起来等于 1 不是舍入的巧合,它是「余」这个字的定义。按面积读,它的意思是钟形曲线下的一切,要么落在离中心一个单位以内,要么落在外面。这一行也是最直接能换算成那个熟悉数字的一行:大约 68% 落在一个标准差以内。

  2. 二,尾巴开始变薄

    1. erf(2) 是 0.995322,曲线基本已经爬到顶
    2. 余函数是 1 − 0.995322 = 0.0046777,已经不到半个百分点
    3. 用科学计数法写出来是 4.677735 × 10⁻³
    4. 两个读数仍然相加为一,余函数还剩四位有效数字

    要盯的精度在余函数上而不是在误差函数上。用一个极接近 1 的数去减 1 会丢掉前面的位数,到这一行余函数已经丢掉了大半——这也是这一页让它走科学计数法、按有效位单独处理,而不是按固定小数位印的原因。

  3. 四,余函数开始不够用

    1. erf(4) 的真值是 1 减去约 1.54 × 10⁻⁸
    2. 在双精度里这与 1 无法区分,所以误差函数那一格印的正是 1
    3. 余函数于是按 1 − erf 算出来,得到 1.541726 × 10⁻⁸
    4. 精度就是在这一步减法里丢掉的:答案只剩下为数不多的几位有效数字

    这是这一页诚实的边界,也是输入范围停在 6 的原因。这里的余函数是两个在前八位小数上一致的数相减的差,是一段相消之后剩下的残渣;真值是 1.5417 × 10⁻⁸,其中前几位还可靠。到 x = 6 时两个双精度数已经相等,减法返回精确的 0,而真值约为 2 × 10⁻¹⁷。

局限

输入限制在正负 6 之间。这是精度上的限制而不是性能上的:再往外误差函数离 1 太近,双精度表示不出那个差,页面印的就是噪声。即便在这个范围内也有一个值得知道的限制——余函数是用减法算出来的,x 过了约 4.5 之后这次减法会把大部分有效位抵消掉,那里的 erfc 只剩几位可信数字。这一点本页不打算修:要修就得为余函数单独写一套渐近展开,而不是给现有这套打补丁。误差函数本身在整个范围内精确到最后一两位。这一页只给两个值:标准正态分布函数不在输出之列,因为它是同一份信息换一条路线,而正态分布计算器能带着均值与标准差把它当概率报出来。全页不涉及任何单位,输入是纯数。数值来自为本页手写的级数而不是平台库,因为这个语言没有提供。

常见问题

误差函数是干什么用的?
度量高斯曲线从中心到某一点之间有多少面积,而在标准正态分布里这就是概率。x = 1 处的值是 0.842701,加 1 再除以 2 得 0.921351,那就是标准正态变量落在均值两侧各一个标准差以内的概率。
erfc 是什么?它与 erf 什么关系?
它是余误差函数,定义就是 1 减误差函数,所以这一页的两个读数永远相加为 1。它之所以是一个独立的函数而不是附带品,是因为输入大时你要的正是它:x = 4 时误差函数已经平到 1 上,只有余函数还带着信息。
为什么不能填大于 6 的数?
因为过了 6 就没有东西可量了。x = 6 处的真值是 1 减去约 2 × 10⁻¹⁷,双精度分辨不出它与 1 的差别,误差函数那一格会印 1、余函数那一格会印精确的 0。这条限制说的是什么能被表示出来,而不是算起来有多难——那里的级数大约两百项就收敛了。
为什么输入大时余函数就不准了?
因为它是减出来的。当误差函数是 0.99999999999846256 时,用 1 减它只剩下几位有效数字,前面全是相消的噪声。x = 5 处余函数的真值是 1.5374598 × 10⁻¹²,本页给出的是 1.5364 × 10⁻¹²。误差函数本身不受这个影响,这也是它成为主读数的原因。
能在这里直接得到正态分布的概率吗?
不能,而且这一页是有意不给的。标准正态分布函数确实由误差函数加 1 除以 2 搭成,但正态分布计算器除了值之外还收均值与标准差,并把概率直接报出来——对那个问题来说,这比一个标准化之后的数字是更好的答案。

参考资料

相关计算器