1. eps函数说明:浮点相对精度,为正数。
2. 相关语法
(1)d=eps;matlab中一般默认数值数据类型为double(双精度),所以eps=eps(1)=eps(‘double’)=2^(-52)=2.2204e-16;
(2)d=eps(x);其中x的数据类型可以是单精度或者双精度,返回从abs(x)到与x精度相同的下一个较大浮点数的正距离;如果x为duration(Lengths of time in fixed-length units,时间单位),则返回下一个较大的duration值。eps(x)会随着x的数据类型和数值大小而变化,如下所示:随着想增加,浮点精度也会增加;另外double型数值的浮点精度小于single型数值的浮点精度,精度越小表明取点可以越密集;
数据类型 | single | double | duration(以小时为单位) |
eps(1) | 1.1921e-07 | 2.2204e-16 | 1.2935e-16小时 |
eps(10) | 9.5367e-07 | 1.7764e-15 | 2.0696e-15小时 |
(3)d=eps(datatype);根据datatype指定的数据类型返回eps值,该数据类型可以是 'double'
或 'single'
。eps('double')=eps(double(1)),eps('single')=eps(single(1));
3. eps使用说明:在除数中出现0的情况时,需要采用eps函数,防止matlab报错(matlab 2018版本)或者计算结果为NaN (2021版本);如下程序:
x=-8:0.5:8;
y=sin(x)./x;
当x=0时,y计算结果为NaN;而当x趋向于0零时,y=1;
为了获得正确的结果,需要在除数x上添加eps,如下所示,这时,当x=0时,y=1;
y=sin(x)./(x+eps)
4. eps其他说明:matlab中会将[x,x+a*eps(x)] (其中0≤a<0.5)范围内的数值默认为x,将[x+a*eps(x), x+eps(x)] (其中0.5≤a≤1)范围内的数值默认为x+eps(x); 如下逻辑判断语句:
1==1+0.3*eps;logical 1;
1==1+0.5*eps;logical 0;
需要说明一点,在[x-a*eps(x),x] (其中0≤a<0.5)范围内的数值不一定为x;因为浮点精度eps在不同x下取值不一样,随着abs(x)的增大,精度eps也会增加,取点数变得稀疏;
1==1-0.3*eps; logical 0;
1==1-0.1*eps;logical 1;
附加:matlab单精度和双精度的区别为:存储不同、范围不同、转换不同。 1、单精度:单精度在计算机中用 4 个字节来存储的。 2、双精度:双精度在计算机中用 8 个字节来存储的。 1、单精度:单精度表示的数值的范围比双精度表示的数值的范围小。 2、双精度:双精度表示的数值的范围比单精度表示的数值的范围大。