我目前正在移植一些应用程序,以将ARM SVE功能与SVE的ARM C语言扩展中定义的内在功能一起使用。
在检查文档时,我遇到了两个函数,它们使用归约法来总结浮点向量的元素。那是使用从左到右和基于树的约简。
float64_t svadda[_f64](svbool_t pg, float64_t initial, svfloat64_t op);
float64_t svaddv[_f64](svbool_t pg, svfloat64_t op);
文档:
这些函数(ADDV)对浮点向量的所有活动元素求和。他们使用基于树的约简而不是从左到右的约简,因此结果可能与ADDA产生的结果不同。”
为什么基于树的约简与从左到右的约简不同?它们是由于四舍五入的错误而表示这个意思还是我错过了什么?
答案 0 :(得分:0)
是的,由于四舍五入的临时性,浮点数学不是很相关,所以操作的顺序很重要。
您可能需要严格按照从左到右的顺序来正确实现正确的操作顺序,否则通常您需要将上半部分提取到另一个向量中,然后垂直添加到第一个向量中,以求和。然后重复此缩小操作,直到找到单个元素为止。