|
|
1
30
听起来你想用 Kahan Summation .
|
|
|
2
1
|
|
|
3
1
但在做这些之前,我们可能只是将结果累加成一个双精度。那会很有帮助的。 |
|
|
4
0
如果在.NET中使用IEnumerable上存在的LINQ.Sum()扩展方法。那就是:
|
|
|
5
0
绝对最佳的方法是使用优先级队列,如下所示:
(此代码假定数字为正数;一般来说,队列应该按绝对值排序) 说明:给出一个数字列表,为了尽可能精确地相加,你应该努力使数字接近,t.i.消除小数字和大数字之间的差异。这就是为什么要将两个最小的数字相加,从而增加列表的最小值,减少列表中最小值和最大值之间的差异,并将问题大小减少1。 不幸的是,考虑到您使用的是OpenCL,我不知道如何将其矢量化。但我几乎可以肯定这是可以的。你可能会看一看关于向量算法的书,令人惊讶的是它们实际上有多么强大: Vector Models for Data-Parallel Computing |
|
|
Leo · 为什么carg(-0)返回-pi? 1 年前 |
|
Fyodor · 在C中使用sin和cos计算数学表达式不正确? 2 年前 |
|
|
Alexander · 为什么数字的输出不同? 2 年前 |
|
Ronny · 如何防止程序返回“inf”? 2 年前 |
|
|
EMS · 为什么双重打印的值与C中的浮点值相同,而它们的大小不同? 2 年前 |
|
|
Dakolas · 对python十进制库感到困惑 2 年前 |
|
|
RTC222 · 无法获取vrndscalepd的正确舍入模式代码 2 年前 |