- 在《关于Matlab的eps函数》中,咱们评论了eps的实质,并运用Matlab的typecast函数(用来完成reinterpret cast)完成了eps的核算;
- 在《关于Matlab的eps函数(续)》,《关于Matlab的eps函数(又续)》,《关于Matlab的eps函数(六)》和《关于Matlab的eps函数(七)——“又续”的续》中,咱们运用位段结构体完成了eps核算,这种版别的可读性比开始用typecast完成的版别要很多了;
- 在《关于Matlab的eps函数(再续)》中,咱们依据mathworks上的一个帖子,评论了运用朴实的数学运算而不是位运算完成eps的办法;
- 在《关于Matlab的eps函数(五)》和《Article 4 in 1: 关于Matlab的eps函数(八) &读Matlab7.7的rank函数 &读Matlab7.7的orth》中,评论了eps函数的几个实践运用;
- 在《关于Matlab的eps函数(九)——Java也有”eps”函数》中,咱们展现了Java中,与eps功用相似的办法ulp的用法,并评论了ulp和eps的不同;
- 在《关于Matlab的eps函数(十)——MATLAB Coder生成的C代码》中,咱们经过MATLAB Coder窥见了官方的eps完成办法;
- 在《GPU Powered Matlab(三)——关于Matlab的eps函数(十一)》和《GPU Powered Matlab(三点一)——关于Matlab的eps函数(十二)》中,咱们试着将eps搬到CUDA GPU上履行。
上图中数值显现控件“数值3”输出的数值为0,阐明LabVIEW节点“核算机ɛ”和Matlab的eps(1)持平。实践上,由于MATLAB的函数支撑可变个数的参数,且函数调用的时分能够省去括号,因而eps(1)也能够写成eps这种方法,这便是导致很多人以为Matlab中的eps是一个常数而非函数的原因。假如勤快的话,在Matlab的Command Window中敲上一行“doc eps”就能看到关于eps的更多信息。
eps(1) * 2 ^ E
得到了eps(R)的值。这儿咱们也能够运用这种方法。
*(type *) &R
的改换,正是咱们所需求的。
>> format hex
取一个双精度浮点数15,转换成字节数组:
>> bytes = typecast(15, uint8)
bytes =
咱们知道,浮点数是由符号,指数,尾数三个部分组成的。这儿试着将字节数组最终一个字节的最高位改成1,对应的浮点数便是符号位变成1,会变成负数:
>> bytes(end) = hex2dec(c0);
>> format; dbl = typecast(bytes, double)
dbl =
再试试对浮点数的指数部分进行操作。双精度浮点数有8个字节,64位。其间符号位1位,指数位11位,尾数位52位,假如想把指数加上1(等效于浮点数乘以2),只需求履行下面的操作:
>> typecast(typecast(15, uint64) bitshift(uint64(1), 52), double)
ans =
首要将双精度浮点数15 reinterpret成unsigned int64,然后加上1左移52位,再reinterpret成double。便是这么简略。