Matrix 如何求浮点矩阵乘法的精度?

Matrix 如何求浮点矩阵乘法的精度?,matrix,multidimensional-array,floating-point,precision,matrix-multiplication,Matrix,Multidimensional Array,Floating Point,Precision,Matrix Multiplication,我试图分析当数据大小减小时,浮点计算是如何变得更加不准确的。为了做到这一点,我想对浮点表示的不同变体执行简单的矩阵运算,例如float64、float32和float16。由于float64计算将给出三个计算中最精确的结果,因此我假设所有float64计算都会给出预期结果(即,误差=0) 问题是,当我将计算结果与预期结果进行比较时,我不知道如何将我得到的所有单个误差量化到一个指标中。我知道某些方法,例如求误差平均值或误差平方和(SSE),但我只是想知道是否有一种标准方法可以计算给定矩阵计算的总体

我试图分析当数据大小减小时,浮点计算是如何变得更加不准确的。为了做到这一点,我想对浮点表示的不同变体执行简单的矩阵运算,例如float64、float32和float16。由于float64计算将给出三个计算中最精确的结果,因此我假设所有float64计算都会给出预期结果(即,误差=0)


问题是,当我将计算结果与预期结果进行比较时,我不知道如何将我得到的所有单个误差量化到一个指标中。我知道某些方法,例如求误差平均值或误差平方和(SSE),但我只是想知道是否有一种标准方法可以计算给定矩阵计算的总体误差。

也许条件数的一种变体会有所帮助?请参见此处:

也许条件编号的变体会有所帮助?请看这里:

如果有一种计算给定矩阵计算总误差的标准方法

考虑矩阵大小为1的情况。然后我们进入了一个熟悉的一维域

如何将
y\u计算为\u浮点值
y\u预期值
进行比较?即使在这种情况下,也没有一个标准来衡量这些数字作为浮点数应该如何进行比较。减去?分它通常是上下文敏感的。所以对OP的问题说“不”

但也有一些常见的做法。因此,对于选定的案例,一个潜在的“是”的OP问题


浮点计算通常通过计算值和数学期望值之间的差值来评估*

对于N维矩阵,矩阵误差可以使用N2元素误差中的一个


*ULP的缩放在每2次方附近有一些问题,在0.0附近有更多问题。有很多方法可以缓解这种情况,但我们已经陷入了困境

如果有一种计算给定矩阵计算总误差的标准方法

考虑矩阵大小为1的情况。然后我们进入了一个熟悉的一维域

如何将
y\u计算为\u浮点值
y\u预期值
进行比较?即使在这种情况下,也没有一个标准来衡量这些数字作为浮点数应该如何进行比较。减去?分它通常是上下文敏感的。所以对OP的问题说“不”

但也有一些常见的做法。因此,对于选定的案例,一个潜在的“是”的OP问题


浮点计算通常通过计算值和数学期望值之间的差值来评估*

对于N维矩阵,矩阵误差可以使用N2元素误差中的一个


*ULP的缩放在每2次方附近有一些问题,在0.0附近有更多问题。有很多方法可以缓解这种情况,但我们已经陷入了困境

error = (y_computed_as_float - y_expected)/ulpf((float) y_expected);