MATLAB 帮助中心
更改使用的变量精度
digits(d)
d1 = digits
d1 = digits(d)
digits(d) 将涉及可变精度算术(例如 vpa)的符号计算精度设置为 d 位有效小数。默认值为 32 位。
d
vpa
示例
d1 = digits 返回当前 vpa 使用的精度。
d1
d1 = digits(d) 设置新的精度 d,并将旧精度返回到 d1 中。
全部折叠
默认情况下,MATLAB® 使用 16 位精度。要提高精度,请使用 vpa。vpa 的默认精度为 32 位。通过使用 digits,可以将精度提高到 32 位以上。
digits
使用 vpa 求 pi,其精度为默认的 32 位。使用 digits 确认当前精度为 32。
pi
pi32 = vpa(pi)
pi32 = 3.1415926535897932384626433832795
currentPrecision = digits
currentPrecision = 32
将 digits 的当前值保存到 d1 中,并将新精度设置为 70 位。使用 vpa 求 pi。结果是 70 位数。
70
d1 = digits(70); pi100 = vpa(pi)
pi100 = 3.141592653589793238462643383279502884197169399375105820974944592307816
请注意,vpa 将返回符号输出。要将符号输出与不接受符号值的 MATLAB 函数结合使用,请使用 double 将符号值转换为双精度值。
double
最后,还原 digits 的旧值以进行后续计算。
digits(d1)
有关详细信息,请参阅Increase Precision of Numeric Calculations。
通过使用精度较低的 vpa 来提高 MATLAB 计算的速度。使用 digits 设置较低的精度。
首先,求对大型输入执行运算所用的时间。
input = 1:0.01:500; tic zeta(input); toc
Elapsed time is 21.361450 seconds.
现在,使用 vpa 以较低的精度重复该运算。通过使用 digits 将精度降低到 8 位。然后,使用 vpa 降低 input 的精度,并执行相同的运算。所用时间显著减少。
8
input
d1 = digits(8); vpaInput = vpa(input); tic zeta(vpaInput); toc
Elapsed time is 10.423610 seconds.
有关详细信息,请参阅Increase Speed by Reducing Precision。
使用 vpa 函数或 digits 函数指定的位数是保证的位数。工具箱内部使用的位数可能比您指定的位数多几位。这些额外的位数称为保护位数。例如,将位数设置为 4,然后用四位数字显示 1/3 的浮点近似值。
d1 = digits(4); a = vpa(1/3)
a = 0.3333
现在,用 20 位数字显示 a。结果表明,工具箱在计算 a 时在内部使用了超过四位数字。由于存在舍入误差,以下结果的最后几位数字不正确。
a
d2 = digits(20); vpa(a)
ans = 0.33333333333303016843
还原 digits 的旧值以进行后续计算。
隐藏的舍入误差可能导致意外结果。例如,分别以默认的 32 位精度和 10 位精度计算数字 1/10。
a = vpa(1/10)
a = 0.1
d1 = digits(10); b = vpa(1/10)
b = 0.1
现在,计算差值 a - b。结果不为 0。
a - b
c = a - b
c = 0.000000000000000000086736173798840354720600815844403
差值 a - b 不等于零,因为工具箱内部将 10 位数字 b = 0.1 提升到 32 位精度。此过程会产生舍入误差。工具箱实际上按如下方式计算差值 a - b。
b = vpa(b)
b = 0.09999999999999999991326382620116
假设您将一个双精度浮点数转换为一个符号对象,然后对该对象应用 vpa 函数。结果可能取决于您将浮点数转换为符号对象的方法。您可以使用 sym 函数通过指定其可选的第二个参量来选择转换方法,该参量可以是 "r"、"f"、"d" 或 "e"。默认为 "r"。例如,将常数 π=3.141592653589793... 转换为符号对象。
sym
"r"
"f"
"d"
"e"
r = sym(pi)
r = π
f = sym(pi,"f")
f = 884279719003555281474976710656
884279719003555281474976710656
d = sym(pi,"d")
d = 3.1415926535897931159979634685442
e = sym(pi,"e")
e = π-198 eps359
π-198 eps359
尽管工具箱在屏幕上以不同方式显示这些数字,但它们都是 pi 的有理数近似值。使用 vpa 将 pi 的这些有理数近似值转换回浮点值。
将位数设置为 4。四个近似值中有三个得出相同的结果。
d1 = digits(4); rvpa = vpa(r)
rvpa = 3.142
fvpa = vpa(f)
fvpa = 3.142
dvpa = vpa(d)
dvpa = 3.142
evpa = vpa(e)
evpa = 3.142-0.5515 eps
现在,将位数设置为 40。pi 的符号近似值之间的差异变得更加明显。
d2 = digits(40); rvpa = vpa(r)
rvpa = 3.141592653589793238462643383279502884197
fvpa = 3.141592653589793115997963468544185161591
dvpa = 3.1415926535897931159979634685442
evpa = 3.141592653589793238462643383279502884197-0.5515320334261838440111420612813370473538 eps
新精度设置,指定为正整数标量。该设置指定用于可变精度计算的有效小数位数。d 必须大于 1 且小于 108+1。如果值 d 不是整数,则 digits 将其舍入到最接近的整数。
当前精度设置,以双精度数形式返回。该设置指定当前用于可变精度计算的有效小数位数。
在 R2006a 之前推出
double | vpa
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
欧洲
亚太
联系您当地的办事处