N
更多信息
- 除非 expr 中的数是精确的,或者具有足够高的精度,否则 N[expr,n] 可能无法给出具有 n 位精度的结果.
- N[expr,n] 可能在内部计算时会超过 n 位精度.
- $MaxExtraPrecision 指定将会在内部使用到的最大超额精度.
- 精度 n 以 10 进制数给出;它不必是一个整数.
- n 必须在 $MinPrecision 和 $MaxPrecision 之间. $MaxPrecision 可以被设置为 Infinity.
- n 可以小于 $MachinePrecision.
- N[expr] 给出一个机器精度数,只要它的大小在 $MinMachineNumber 和 $MaxMachineNumber 之间.
- N[expr] 等价于 N[expr,MachinePrecision].
- N[0] 给出具有机器精度的数 0..
- N 将所有非零数转化为 Real 或 Complex 形式.
- N 把它所遇到的任何函数的每个参数依次转换成数值形式,除非该函数的头具有一个诸如 NHoldAll 的属性.
- 你可以使用 N[f[args]]:=value 和 N[f[args],n]:=value 来定义函数的数值值.
- N[expr,{p,a}] 尽可能产生精度最多 p、准确度最多 a 的结果.
- N[expr,{Infinity,a}] 尽可能产生准确度 a 的结果.
- N[expr,{Infinity,1}] 尽可能求出 expr 整数部分的近似值.
范例
打开所有单元 关闭所有单元基本范例 (3)
范围 (20)
数学常数 (4)
N[Pi, 50]N[Khinchin, 50]N[1000!]N[2 ^ 1000000]N[ArcSin[3]]用 NumericQ 可以检验更复杂一些的符号式数学常量:
c = Exp[Sin[Sqrt[2]] + BesselJ[3, 4]];NumericQ[c]在通常情况下,NumericQ 表达式表示可以计算到任意精度的数:
N[c]N[c, 47]普通表达式 (3)
机器精度和相应精度 (4)
N[e] 通常用机器数替代并计算结果:
e[h_] = Cos[1] - (Sin[1 + h] - Sin[1 - h]) / (2 h)N[e[10 ^ -12]]e[10. ^ -12]ListLogLogPlot[h = 10 ^ -k;Table[{h, Abs[N[e[h]]]}, {k, 0, 16}]]当 p 不是 MachinePrecision 时,N[e,p] 用任意精度数自适应地进行计算:
e[h_] = Cos[1] - (Sin[1 + h] - Sin[1 - h]) / (2 h);N[e[10 ^ -12], 20]Show[ListLogLogPlot[h = 10 ^ -k;Table[{h, Abs[N[e[h], 20]]}, {k, 0, 16}]],
LogLogPlot[Cos[1] h^2 / 6, {h, 10 ^ -16, 1}]]自适应精度控制对超额精度有一个默认的界限,$MaxExtraPrecision:
N[1 - Sqrt[1 - Exp[-1000]], 20]达到界限时,您可以增加 $MaxExtraPrecision 来解决问题:
Block[{$MaxExtraPrecision = 500}, N[1 - Sqrt[1 - Exp[-1000]], 20]]N 不会提高输入中近似数的精度:
e = 1. + 2`20 x + 3`30x ^ 2N[e, 25]{Precision[%], Precision[e]}您可以用 SetPrecision 增加输入表达式的精度:
SetPrecision[e, 20]数据对象和特定规则 (5)
N 不会影响明确的数值幂:
N[x ^ (3 / 2)]N[Pi ^ x]如果幂不是 NumericQ,它会改变:
N[E ^ (x + Pi)]NumericQ[x + Pi]对 SparseArray 对象的处理是以所表示的数组为基础的:
s = SparseArray[{{i_, j_} /; Abs[i - j] ≤ 1 -> 3Abs[i - j] - 2}, {5, 5}]ns = N[s]{MatrixForm[s], MatrixForm[ns]}通常,N[Normal[s]] 恒等于 Normal[N[s]]:
N[Normal[s]] === Normal[N[s]]类似 InterpolatingFunction 的数据对象有特定的规则以使得仅仅数据受到影响:
ifun = ListInterpolation[{0, 1, 1, 0}, {{0, 1}}]nifun = N[ifun]{ifun[1 / 2], nifun[1 / 2]}int = Integrate[Sinc[Exp[-1 / x]], {x, 0, 1}]N[int]下面用 NIntegrate:
NIntegrate[Sinc[Exp[-1 / x]], {x, 0, 1}]Timing[N[int, 20]]在这个例子中,直接使用 NIntegrate 或许更好一些:
Timing[NIntegrate[Sinc[Exp[-1 / x]], {x, 0, 1}, WorkingPrecision -> 20]]e = 2 - x;N[e]FullForm[e]FullForm[N[e]]定义特定规则 (4)
用 NHoldAll 属性避免一个加指标变量受到 N 的影响:
SetAttributes[x, NHoldAll]此时 N 仅影响系数:
N[1 + 2 x[1] + 3 x[2] + 4 x[1] x[2]]若没有这个设置, N 同时影响到指标:
N[1 + 2y[1] + 3 y[2] + 4 y[1] y[2]]N[pit] := N[Pi / 2]Sin[pit]在 N 中则计算:
N[%]N[pit, pa_] := N[Pi / 2, pa]N[π - 2 pit, {∞, 20}]nthroot[x_ ? InexactNumberQ /; Positive[x], n_Integer /; Positive[n]] := FixedPoint[((n - 1) # ^ n + x) / (n # ^ (n - 1))&, N[1, Precision[x]]]用 NHoldRest 避免它的第二个自变量转换为实数:
SetAttributes[nthroot, NHoldRest]crt = nthroot[2, 3]N[crt]N[crt, 47]spoly[cp_][x_] := Module[{c, n, p, y},
{p, c} = Transpose[SortBy[cp, Last]];
n = p[[-1]];
y = c[[-1]];
Do[y = c[[k]] + x ^ (n - p[[k]]) * y;n = p[[k]], {k, Length[p] - 1, 1, -1}];
If[n > 0, y *= x ^ n];
y]注意要确保 N 仅影响系数,而不是幂:
N[e : spoly[cp_], pa_] := Module[{p, c, nc},
{c, p} = Transpose[cp];
nc = N[c, pa];
If[nc === c, e, spoly[Transpose[{nc, p}]]]]要使规则有效,需要阻止默认对参变量的 N 计算:
SetAttributes[spoly, NHoldAll]sp = spoly[{{1, 1}, {2, 2}, {3, 4}, {4, 8}}]{sp[x], Expand[sp[x]]}nsp = N[sp]nsp[π]推广和延伸 (3)
属性和关系 (3)
N[e] 的结果通常有精度 MachinePrecision:
N[Exp[Sin[1000]]]Precision[%]ne = N[Exp[1000]]Precision[%]N[Exp[Sin[1000]], 47]Precision[%]N[1 - Sqrt[1 - Exp[-1000]], 20]通常增加 $MaxExtraPrecision 将解决这个问题:
Block[{$MaxExtraPrecision = 500}, N[1 - Sqrt[1 - Exp[-1000]], 20]]Precision[%]N[1 / GoldenRatio + 1 - GoldenRatio, 20]N[1 / GoldenRatio + 1 - GoldenRatio, {∞, 20}]Accuracy[%]N[e,{∞,a}] 的结果通常有 Accuracy 等于 a:
N[Exp[100], {∞, -10}]Accuracy[%]N[10000000000(Exp[100] - Exp[999999999999 / 10000000000]), {∞, 20}]通常增加 $MaxExtraPrecision 将解决这一问题:
Block[{$MaxExtraPrecision = 200}, N[10000000000(Exp[100] - Exp[999999999999 / 10000000000]), {∞, 20}]]Accuracy[%]历史
1988年引入 (1.0) | 在以下年份被更新:1996 (3.0) ▪ 1999 (4.0) ▪ 2003 (5.0)
文本
Wolfram Research (1988),N,Wolfram 语言函数,https://reference.wolfram.com/language/ref/N.html (更新于 2003 年).
CMS
Wolfram 语言. 1988. "N." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2003. https://reference.wolfram.com/language/ref/N.html.
APA
Wolfram 语言. (1988). N. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/N.html 年
BibTeX
@misc{reference.wolfram_2026_n, author="Wolfram Research", title="{N}", year="2003", howpublished="\url{https://reference.wolfram.com/language/ref/N.html}", note=[Accessed: 03-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_n, organization={Wolfram Research}, title={N}, year={2003}, url={https://reference.wolfram.com/language/ref/N.html}, note=[Accessed: 03-November-2026]}