我目前正在移植一些应用程序,以使用ARM特性,并使用在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产生的结果不同。“
为什么基于树的缩减会从左到右不同呢?他们的意思是因为四舍五入的错误,还是我遗漏了什么?
发布于 2019-01-18 09:42:38
是的,浮点数学由于时间上的四舍五入而不是很有关联,所以你做这些运算的顺序是很重要的。
您可能需要严格地从左到右顺序准确地实现正确的操作顺序,否则通常需要将上半部提取到另一个向量,然后垂直地添加到第一个向量中。然后重复这一缩小,直到您下降到一个单一的元素。
https://stackoverflow.com/questions/54250596
复制相似问题