到底如何用MATLAB计算一笔数组元素的总和()函数?它使用任何补偿求和算法,如卡亨吗?
13个视图(30天)
显示旧的评论
目前我从事软件项目翻译一些MATLAB代码的Java。在这个过程中,我意识到,这的输出
MATLAB的总和()函数
适用于一些“单”或“双重”数组不是相同的一个普通的连续循环中数组元素。我没有找到任何进一步的信息关于sum()的具体实现在任何最近的MATLAB版本(例如我R2019a),所以我试图复制其功能通过实现一些常见的求和算法等浮点加法
卡亨求和算法
或者它的一些变体。然而,结果没有与MATLAB的输出的总和()。
有人知道任何细节实现MATLAB的总和()函数?是任何形式的补偿包括求和?“单一”数组求和之前把“双”?求和分布在多个线程默认吗?数组排序来减少错误是由于小和大的浮点数?
0评论
更多的答案(3)
dpb
2021年11月8日
TMW算法不公开文档或文档描述中提供的超出部分,偶尔一个算法部分可能会增加一些额外的洞察力。
我没有戳来戳去调查,以下线程有一些信息
//www.tianjin-qmedu.com/matlabcentral/answers/550-compensated-summation-in-sum?s_tid=answers_rc1-1_p1_MLT answer_822
当然,如前所述,虽然不可能改变了,没有保证TMW没有改变任何启发式规则。
布鲁诺陈德良
2021年11月9日
编辑:布鲁诺陈德良
2021年11月9日
根据我的测试似乎MATLAB并不总和块向量上操作时,确保结果是一致的,即不取决于数量的线程。
> > =兰德(1,1 e7);
> > maxNumCompThreads = 1;
> >抽搐;s1 = (a)和toc
s1 =
4.9999 e + 06
运行时间是0.005212秒。
> > maxNumCompThreads = 4;
> >抽搐;s4 = (a)和toc
s4 =
4.9999 e + 06
运行时间是0.005153秒。
> > s1-s4
ans =
0
> >党卫军=总和(排序(a));
> > ss-s1
ans =
3.7253 e-09
国际海事组织意见和刚从左到右进行线性与一些内部国际比赛结果fiw的比特数> 64。
这个在某些版本(2015 ?)MATLAB实现了多线程的矢量和,引发了一些问题,一直在讨论旧的新闻组,然后切换回单线程。
使用多线程和2 d或ND-array,其中每个线程负责一组向量。
所有假设的algorirthm TMW没有文档。