实验变量格式精度的一半gydF4y2Ba

过去一个月里,我一直在使用16位浮点运算的变量格式描述gydF4y2Ba在这篇文章中gydF4y2Ba。令人沮丧的工作。我发现一半的有限精度和有限范围精度使它几乎没有可用的实验与矩阵计算,我喜欢做的事情。在这篇文章中我将描述其中的几个实验。gydF4y2Ba

我并不是说一半精度浮点不是有用的。组织包括英特尔和谷歌都采用IEEE 754标准gydF4y2Bafp16gydF4y2Ba和新gydF4y2Babfloat16gydF4y2Ba格式在机器学习和图像处理工作,gydF4y2Ba链接gydF4y2Ba。我只是不推荐格式一般工程和科学计算。gydF4y2Ba

内容gydF4y2Ba

vfp16gydF4y2Ba

我已经修改了gydF4y2Ba帮助gydF4y2Ba为我的变量格式精度一半对象条目。这是更新后的版本。gydF4y2Ba

医生gydF4y2Bavfp16gydF4y2Ba

这是目前可用的函数的列表。正如你所看到的,这远不是一套完整,主力的功能gydF4y2BamldividegydF4y2Ba(反斜杠),gydF4y2Ba陆gydF4y2Ba,gydF4y2BaqrgydF4y2Ba和gydF4y2Ba圣言会gydF4y2Ba是可用的,但我还没有做任何关于复杂的运算,所以呢gydF4y2BaeiggydF4y2Ba是不在名单上。gydF4y2Ba

方法(vfp16)gydF4y2Ba
陆方法类vfp16: abs修复+单小二进制ge马克斯权力大小下三角阵ctranspose gt -精密sqrt triu诊断接头十六进制mldivide qr subsasgn使用uint disp horzcat mrdivide最大浮点数subsindex uminus显示isfinite mtimes最小正浮点数subsref vertcat双le ne rem和vfp16 eps log2标准圆的圣言eq lt次包装标志gydF4y2Ba

vfp16解剖学gydF4y2Ba

这是一个重复的图我在我以前的文章,现在我使用除外gydF4y2Bavfp16gydF4y2Ba对象本身计算参数。gydF4y2Ba

  • pgydF4y2Ba的精度,在分数的比特数。gydF4y2Ba
  • 每股收益gydF4y2Ba从1到下一个更大的距离吗gydF4y2Bavfp16gydF4y2Ba号码。gydF4y2Ba
  • 最大浮点数gydF4y2Ba是最大的gydF4y2Bavfp16gydF4y2Ba号码。gydF4y2Ba
  • 最小正浮点数gydF4y2Ba是最小的规范化gydF4y2Bavfp16gydF4y2Ba号码。gydF4y2Ba
  • 小gydF4y2Ba是最小的弱智者gydF4y2Bavfp16gydF4y2Ba号码。gydF4y2Ba
disp (gydF4y2Ba“p每股收益最大浮点数最小正浮点数小的gydF4y2Ba)gydF4y2Ba为gydF4y2Bap = 1:15 vfp16 (gydF4y2Ba“精度”gydF4y2Ba,p) x = vfp16 (1);y = (eps (x)最大浮点数(x)最小正浮点数(x)小(x));流(gydF4y2Ba' % 4 d % 12.4克% 12.4 g % 12.4克% 12.4 g \ n”gydF4y2Ba、磷、双(y))gydF4y2Ba结束gydF4y2Ba
便士每股收益最大浮点数最小正浮点数小1 0.5正0 0 2 0.25正0 0 3 0.125正0 0 4 0.0625 - 1.742 e + e - 308 308 2.225 1.391 0.03125 - 1.32 e + e - 309 154 0.01563 2.983 9.323 e - 154 e - 156 6 1.149 e + e - 77 77 3.454 5.398 0.007813 3.39 e+38 1.175 e - 79 7 38吗9.184 e-41 8 0.003906 - 1.841 e + 19 2.168 e-19 8.47 e-22 9 0.001953 - 4.291 e + 09年9.313平台以及1.819 e-12 10 0.0009766 6.55 5.96 6.104 e + 04 e-05 e-08 11 0.25 0.0002441 0.0004883 255.9 0.01563 7.629 e-06 12 16 4 1 0.0001221 0.0001221 6.104 e-05 13 14 15 0 4 0 0 2正0.0001221 0.0001221gydF4y2Ba

精密等于1、2或3有12位致力于指数等gydF4y2Ba最大浮点数gydF4y2Ba,gydF4y2Ba最小正浮点数gydF4y2Ba和gydF4y2Ba小gydF4y2Ba不能用MATLAB的传统表示双精度运算这实际上意味着gydF4y2Bavfp16gydF4y2Ba不能利用扩展范围。gydF4y2Ba

另一方面,精度等于11或更高版本,gydF4y2Ba每股收益gydF4y2Ba小于gydF4y2Ba最小正浮点数gydF4y2Ba,所以下溢而不是凑整主导的准确性。特别是逐渐下溢gydF4y2Ba从gydF4y2Ba,计算精度测量与这些行为严重。因此我一直gydF4y2BapgydF4y2Ba范围内gydF4y2Ba4 < = p < = 10gydF4y2Ba。gydF4y2Ba

逐渐下溢gydF4y2Ba

之前我们有IEEE标准,代码移植到不同的体系结构必须发现机器精度。这样做是涉及以下计算的一种方式。让我们使用标准gydF4y2Bafp16gydF4y2Ba已gydF4y2Bap = 10gydF4y2Ba和gydF4y2Ba“弱智者”gydF4y2Ba转gydF4y2Ba“上”gydF4y2Ba。gydF4y2Ba

格式gydF4y2Ba短gydF4y2Bavfp16 (gydF4y2Ba“fp16”gydF4y2Ba)= vfp16 (4) / vfp16 (3) = a - 1 c = b + b + b e = 1 - cgydF4y2Ba
0.3330 = 1.3330 b = c = 0.9990 e = 9.7656 e-04gydF4y2Ba

用精确算法,gydF4y2BabgydF4y2Ba将1/3,gydF4y2BacgydF4y2Ba1,gydF4y2BaegydF4y2Ba将是零。但是,除非我们有一个三元的电脑,必须有一个在部门3舍入误差。这是唯一的舍入误差。所以gydF4y2BabgydF4y2Ba不是1/3,gydF4y2BacgydF4y2Ba不是1,gydF4y2BaegydF4y2Ba等于附近浮动数字的间隔,但大于1.0。换句话说,gydF4y2BaegydF4y2Ba等于gydF4y2Ba每股收益(1)gydF4y2Ba。gydF4y2Ba

做一下再次与精度等于11和逐渐下溢关闭。gydF4y2Ba

vfp16 (gydF4y2Ba“精度”gydF4y2Ba11gydF4y2Ba“弱智者”gydF4y2Ba,gydF4y2Ba“关闭”gydF4y2Ba)= vfp16 (4) / vfp16 (3) = a - 1 c = b + b + b e = 1 - cgydF4y2Ba
0.3335 = 1.3335 b = c = 1.0005 e = 0gydF4y2Ba

现在,除3轮向上而不是向下gydF4y2BacgydF4y2Ba比一个略大,但计算吗gydF4y2BaegydF4y2Ba下溢,刷新到零。这是一个简单的示例,但它演示了逐渐下溢的重要性指数范围有限。gydF4y2Ba

融合将添加gydF4y2Ba

乘融合添加只有温和的区别在剩余的舍入误差gydF4y2BaRgydF4y2Ba从一个随机的10矩阵的LU分解,以非零的数gydF4y2BaRgydF4y2Ba。gydF4y2Ba

vfp16 (gydF4y2Ba“弱智者”gydF4y2Ba,gydF4y2Ba“上”gydF4y2Ba)形式= {gydF4y2Ba“fp16”gydF4y2Ba,gydF4y2Ba“bfloat16”gydF4y2Ba};菲利普-马萨= {gydF4y2Ba“关闭”gydF4y2Ba,gydF4y2Ba“上”gydF4y2Ba};rng (17)gydF4y2Ba为gydF4y2Baj = 1:2 vfp16 ({j}) = vfp16 (randn (10,10));gydF4y2Ba为gydF4y2Bak = 1:2 vfp16 (gydF4y2Ba菲利普-马萨的gydF4y2Ba菲利普-马萨{k}) (L U p) = lu (A);R = L * U - (p:);次要情节(2,2,2 * (j - 1) + k)间谍(双(R))标题([形式{j}gydF4y2Ba”,菲利普-马萨”gydF4y2Ba菲利普-马萨{k}])gydF4y2Ba结束gydF4y2Ba结束gydF4y2Bavfp16 (gydF4y2Ba“弱智者”gydF4y2Ba,gydF4y2Ba“上”gydF4y2Ba)gydF4y2Ba

QR列旋转,弗兰克矩阵gydF4y2Ba

弗兰克矩阵fn美元是一个有趣的测试矩阵。这是F_6美元。gydF4y2Ba

F6 =画廊(gydF4y2Ba“弗兰克”gydF4y2Ba6)gydF4y2Ba
F6 = 6 5 4 3 2 1 5 5 4 3 2 1 0 4 4 3 2 1 0 0 3 3 2 1 0 0 0 2 2 1 0 0 0 0 1 1gydF4y2Ba

我们要计算列旋转的QR分解和看r_n美元,最后对角元素R美元。事实证明,fn美元接近一个矩阵秩的n - 1美元,这是预测r_n衰减到零美元指数n增加美元。这是R美元的QR分解(列旋转)F_6美元;你可以看到指数小的开端对角元素。gydF4y2Ba

[Q, R E] = qr (F6);RgydF4y2Ba
R = -8.1240 -6.7700 -5.1698 -6.8931 -3.4466 -1.7233 -3.8944 0.5136 0.6847 0.3424 0.1712 0 0 3.6068 2.4986 2.7742 1.3871 0 0 0 0 0 0 0 -1.6652 0.5547 0.2773 0.0053 1.0001 - 1.0000 0 0 0 0 0gydF4y2Ba

当QR分解精度是由我们的一半计算算术这个指数衰减不能长期跟踪。在接下来的对数图黑线r_n美元。其他线得到的值gydF4y2Bavfp16gydF4y2Ba不同精度的算法。尽管美元r_{15}小于10美元^{-10}$,没有其他的值小于10美元^ {4}$。gydF4y2Ba

破碎的线是由完全零不能标注在对数图。gydF4y2Ba

Rn = 0 (1、15);rn = 0 (10、15);gydF4y2Ba为gydF4y2Ban = 1:15 =画廊(gydF4y2Ba“弗兰克”gydF4y2Ban);(~ R E) = qr (A);Rn (n) = R (n, n);gydF4y2Ba为gydF4y2Bap = 4:10 vfp16 (gydF4y2Ba“精度”gydF4y2Ba,p) X = vfp16(一个);[~ r e] = qrp (X);rn (p, n) = r (n, n);gydF4y2Ba结束gydF4y2Ba结束gydF4y2Baxqrp_print xqrp_plotgydF4y2Ba
n 2 3 4…13 14 15 Rn 4.47 e-01 2.43 e-01 -9.41 e-02……-1.41 e-09 1.09平台以及-7.82 e-12 rn p 4 -0.4375 -0.2813 0.0547……5 -0.0547 -0.1875 -0.1406 -0.4844 -0.2969 0.0977……6 -0.0332 0.0000 0.0332 -0.4297 -0.2266 0.1074……7 -0.0308 0.0154 -0.0308 -0.4453 -0.2402 0.1016……8 0.0000 0.0078 -0.0078 -0.4434 -0.2402 0.0879……9 -0.0118 0.0000 0.0000 -0.4473 -0.2412 0.0879……10 -0.0020 0.0000 -0.0039 -0.4468 -0.2429 0.0952……-0.0039 -0.0039 0.0000gydF4y2Ba

圣言,希尔伯特矩阵gydF4y2Ba

现在有两个球员熟悉这个博客的读者,gydF4y2Ba希尔伯特矩阵gydF4y2Ba和gydF4y2Ba奇异值分解gydF4y2Ba。这是H_5美元。gydF4y2Ba

格式gydF4y2Ba老鼠gydF4y2BaH5 = hilb (5)gydF4y2Ba
H5 = 1 1/2 1/3 1/4 1/2 1/3 1/4 1/5 1/5 1/6 1/3 1/4 1/5 1/6 1/7 1/5 1/6 1/7 1/8 1/5 1/6 1/7 1/8 1/9 1/4gydF4y2Ba

正定矩阵是对称的,所以其奇异值等于其特征值。看看奇异值H_6美元正在迅速衰减。gydF4y2Ba

格式gydF4y2Ba短gydF4y2BaggydF4y2Ba到H6 = hilb (6);sigma6 =圣言(编辑)gydF4y2Ba
sigma6 = 1.6189 0.24236 0.016322 0.00061575 1.2571 1.0828 e-05 e-07gydF4y2Ba

这个实验就像弗兰克矩阵的QR,除了对数最小奇异值的情节几乎是完全线性和陡峭的斜坡。你可以看到红线从IEEE标准p = 10追踪\ sigma_n美元的最好的工作。gydF4y2Ba

sn = 0 (10、13);gydF4y2Ba为gydF4y2Ban = 13 A = hilb (n);S =圣言();Sn (n) = S (n);gydF4y2Ba为gydF4y2Bap = 4:10 vfp16 (gydF4y2Ba“精度”gydF4y2Ba,p) X = vfp16(一个);s =圣言(X);sn (p, n) = s (n);gydF4y2Ba结束gydF4y2Ba结束gydF4y2Baxsvd_hilbert_print xsvd_hilbert_plotgydF4y2Ba
n 2 3 4…11日12日13日Sn 6.57 e-02 2.69 e 03 9.67 e-05……3.40 e15汽油1.11 e-16 3.79 e-18 sn p 4 6.99 e-02 4.81 e 03 1.89 e 03……1.90 6.91 3.13 4.44 2.11 e-04 e-04 e-04 5 e-02 e 03 2.24 e 03……2.36 6.56 5.45 2.20 2.05 e-04 e-04 e-05 6 e-02 e 03 0.00 e + 00……3.09 6.72 1.33 1.18 2.44 e-04 e-05 e-04 7 e-02 9.89 e 03 e-05……1.22 e-04 1.70 e-05 6.97 e-05 8 6.46 e-02 2.79 e 03 1.74 e-04……2.91 6.59 2.43 4.46 2.36 e-05 e-05 e-05 9 e-02 3.12 e 03 e-05……2.61 6.55 1.27 8.70 6.78 e-06 e-06 e-05 10 e-02 3.67 e 03 e-05……3.45 9.33 8.26 e-07 e-06 e-06gydF4y2Ba

圣言,合伙人矩阵gydF4y2Ba

现在不同的东西。我讨论了画廊所称的gydF4y2Ba合伙人矩阵gydF4y2Ba五年前。这是P_5美元。gydF4y2Ba

格式gydF4y2Ba老鼠gydF4y2BaP5 =画廊(gydF4y2Ba“合伙人”gydF4y2Ba5)gydF4y2Ba
P5 = 2 2 2/3 2/3 2 2 2/3 -2/5 2/5 -2/7 -2/5 2/3 2 2 2/3 2/3 2 2 2/9 2/7 2/5 2/7 2/5 2/3 2gydF4y2Ba

大部分的奇异值收敛\π美元。我不确定最小奇异值在哪里,但它肯定不会零成倍增长。现在的计算gydF4y2Bavfp16gydF4y2Ba与任何精度范围内gydF4y2Ba4 < = p < = 10gydF4y2Ba做一个好工作。gydF4y2Ba

Sn = 0 (1、13);sn = 0 (10、13);gydF4y2Ba为gydF4y2Ban = 13 =画廊(gydF4y2Ba“合伙人”gydF4y2Ban);S =圣言();Sn (n) = S (n);gydF4y2Ba为gydF4y2Bap = 4:10 vfp16 (gydF4y2Ba“精度”gydF4y2Ba,p) X = vfp16(一个);s =圣言(X);sn (p, n) = s (n);gydF4y2Ba结束gydF4y2Ba结束gydF4y2Baxsvd_parter_print xsvd_parter_plotgydF4y2Ba
n 2 3 4…11日12日13日Sn 1.7370 1.6053 1.5217……sn p 4 1.7430 1.2814 1.2640 1.2485 1.5907 - 1.4846…5 1.3287 1.3204 1.3339 1.7430 1.5502 1.4985……6 1.2493 1.2373 1.2223 1.7227 1.5997 1.5093……7 1.2799 1.2582 1.2521 1.7327 1.6050 1.5283……8 1.2874 1.2639 1.2488 1.7407 1.6038 1.5229……9 1.2843 1.2641 1.2478 1.7380 1.6040 1.5216……10 1.2799 1.2628 1.2474 1.7361 1.6051 1.5206……1.2822 1.2646 1.2479gydF4y2Ba

克里夫的实验室gydF4y2Ba

我将会更新gydF4y2BaCleve_s实验室gydF4y2Ba在MATLAB中央文件交换到4.30版本,包括我的改变gydF4y2Ba@vfp16gydF4y2Ba。gydF4y2Ba




发表与MATLAB®R2018bgydF4y2Ba

|gydF4y2Ba

评论gydF4y2Ba

留下你的评论,请点击gydF4y2Ba在这里gydF4y2BaMathWorks账户登录或创建一个新的。gydF4y2Ba