我正在将ILMath.Vec()与MatLab进行比较,我发现了重大的舍入错误。
例如,如果我为每个系统创建一个向量(使用开始:0
,步骤:1.2635048525911006
,结束:20700
):
MatLab:[Start:Step:End]
ILNumerics:Vec<double>(Start, Step, End)
然后取平均值abs差值,得到1.56019608343883E-09
的平均误差。但是,如果手动创建矢量(使用乘法),我得到的平均误差仅为3.10973469197506E-13
,误差小4倍。
在查看ILNumerics的vec函数(使用Reflector)后,我想我知道为什么平均误差值如此之大。 ILMath.vec()函数使用加法与乘法。将步长值16,384乘以与相同,将步长值x N(其中N是当前循环计数)乘以16,384次!添加的舍入误差加起来非常快!
请考虑解决此问题。