是否有任何普遍适用的技巧来减少浮点舍入误差的C或C ++的积累? 我主要是想怎么写被编译成最佳汇编语言指令代码,虽然整体算法设计策略也欢迎。
Answer 1:
我所知道的唯一诀窍是,当你总结一串数字,不要做一次一个 - 它们分组,以便增加上大致相同大小的数字。 综上所述巨大例如随机数的阵列,通过对递归总结。
Answer 2:
数值分析是数学的整个领域,它不会降低到一些小技巧可以盲目申请。
Answer 3:
人们得到博士学位的写作这个东西,这样你就不会得到真正在这里固体的意见,只是提示。 一个尖端是避免减去在数值上非常接近号码; 放大所述噪声位的效果。
Answer 4:
您可以启用扩展FPU浮点精度,内部使用10个字节。 这就是我们使用。
http://www.website.masmforum.com/tutorials/fptute/fpuchap1.htm
您也可以号码,这样的操作是在类似规模的数字进行排序。
Answer 5:
有许多小事情可以做,比如在一个单一的表达做尽可能多的浮点运算越好,并确保所有输入操作转换成浮点格式。 当浮动之间的切换点和整数确保整数转换之前的0.5的因子添加到浮子以确保值被舍入为最接近的整数。 用双打或双打长将增加的精度量,从而减轻舍入/累积误差的意义。
您将有舍入误差的一些量,所以你真的想要把他们过去,你要寻找的意义。 其中一个选择是使用扩展精度浮点软件库,如高精度运算库 。 使用图书馆有较高的精度在运行速度较慢的成本是有利的。
文章来源: How to reduce C/C++ floating-point roundoff