1

是否有任何普遍适用的技巧来减少 C 或 C++ 中浮点舍入误差的累积?我主要考虑如何编写编译成最佳汇编语言指令的代码,尽管整体算法设计的策略也是受欢迎的。

4

5 回答 5

6

数值分析是一个完整的数学领域,它不会被简化为一些可以盲目应用的技巧。

于 2012-09-19T07:14:49.863 回答
3

我知道的唯一技巧是,当你对一堆数字求和时,不要一次做一个 - 将它们分组,以便加法的数字大致相同。例如,要对大量随机数求和,请逐对递归求和。

于 2012-09-19T02:19:10.427 回答
2

人们得到关于这些东西的博士论文,所以你不会在这里得到真正可靠的建议,只是提示。一个技巧是避免减去值相当接近的数字。这会放大噪声位的影响。

于 2012-09-19T13:43:47.537 回答
0

您可以启用 FPU 的扩展浮点精度以在内部使用 10 个字节。这就是我们使用的。

http://www.website.masmforum.com/tutorials/fptute/fpuchap1.htm

您还可以对数字进行排序,以便对相似数量的数字执行操作。

于 2012-09-19T02:19:44.727 回答
0

您可以做很多小事情,例如在单个表达式中执行尽可能多的浮点运算,并确保将运算的所有输入转换为浮点格式。在浮点数和整数之间切换时,请确保在整数转换之前向浮点数添加 0.5 的因子,以确保将值四舍五入为最接近的整数。使用双精度数或长双精度数将增加精度,从而降低舍入/累积误差的重要性。

会有一些舍入错误,所以你真的想把它们推到你正在寻找的意义之外。一种选择是使用扩展精度浮点软件库,例如高精度算术库。使用库的好处是精度更高,但操作速度较慢。

于 2012-09-20T23:34:38.123 回答