繁体   English   中英

如何减少C / C ++浮点舍入

[英]How to reduce C/C++ floating-point roundoff

是否有任何通用的技巧可以减少C或C ++中浮点舍入错误的累积? 我主要在考虑如何编写可编译为最佳汇编语言指令的代码,尽管也欢迎采用总体算法设计策略。

数值分析是数学的一个完整领域,它并没有局限于可以盲目应用的一些技巧。

我知道的唯一技巧是,在对一堆数字求和时,不要一次做一个-将它们分组,以使加法运算的数量近似相等。 例如,要对大量随机数求和,请按对递归求和。

人们可以从PhD上找到有关此方面的文章,因此在这里您不会得到真正可靠的建议,而仅是技巧。 一个技巧是避免减去价值相当接近的数字; 放大了噪声位的影响。

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

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

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

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

将有一些舍入错误,因此您确实想将它们推到想要的意义之外。 一种选择是使用扩展的精度浮点软件库,例如High Precision Arithmetic Library 使用库的好处是精度更高,但操作速度较慢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM