| 查看: 579 | 回复: 3 | ||
| 当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖 | ||
jiangxia0909木虫 (小有名气)
|
[求助]
如何有效地避免double型数据相加时产生的误差
|
|
|
遇到问题:如一维的double数组 A[6]={-100.5, -50.9, 3.89, -4.58, 10.999, 200.8}; 这里只是一个例子,实际运算时,数组中数值之间的差距会更大。如果按数组下标依次累加,则可能产生计算误差。 想请教的问题是:如何实现double数组的累加,可降低或者避免此类计算误差 。 目前只知道避免大数加小数,但对于任意的double数组的累加是否有更有效地算法。希望小木虫里的大神指点指点。 |
» 猜你喜欢
基元I理论下三大核心空间现象精准推导与细节解析
已经有0人回复
基于基元 I 统一理论的反重力理论推导
已经有0人回复
物理学I论文润色/翻译怎么收费?
已经有86人回复
基于基元I统一理论的量子力学本源推导
已经有1人回复
推荐一款可以AI辅助写作的Latex编辑器SmartLatexEditor,超级好用,AI润色,全免费
已经有20人回复
【EI|Scopus 双检索】第六届智能机器人系统国际会议(ISoIRS 2026)
已经有0人回复
2026年第四届电动车与车辆工程国际会议(CEVVE 2026)
已经有0人回复
4楼2017-10-22 13:17:04
lijf517
木虫 (小有名气)
- 应助: 39 (小学生)
- 金币: 3391.9
- 红花: 14
- 帖子: 293
- 在线: 390.9小时
- 虫号: 2249203
- 注册: 2013-01-18
- 性别: GG
- 专业: 力学
|
这要看你的具体的应用场景。这种数值误差是不可避免的。写代码时数组声明为double型的,这样最终基本可保证累加后小数点后十位左右有效数字,这已经足够了。从物理角度来说,被累加的是同一物理量,量级上不会差太多。比如说你不会计算一只大象和单个电子的质量之和。如果真有量级差别比较大的两个数相加,小数被忽略物理上也是合理的。所以,结论就是,你根本不用考虑这个问题。双精度数组的普通顺序加法就足够了。如果你还是不放心,加之前先把数组的元素按绝对值大小从小到大排个序,然后依次相加,这样理论上可以最大程度避免大小数相加带来的数值误差。我测试比对过,这样的结果和原始数组直接相加结果差距很小,费时且没有必要。事实上,如果你写并行代码的话,经常出现同一数组分布式存储在多个核上,这时数组求和的顺序是随机的,你不大可能从算法层面来避免这种大小数求和。我看过的即便是一些大牛写的非常有名的程序,也不会考虑这种大小数求和带来的数值误差。费时且没意义 发自小木虫Android客户端 |
» 本帖已获得的红花(最新10朵)
2楼2017-08-10 22:17:06
jiangxia0909
木虫 (小有名气)
- 应助: 0 (幼儿园)
- 金币: 1744.5
- 散金: 130
- 红花: 1
- 帖子: 121
- 在线: 45.2小时
- 虫号: 3058912
- 注册: 2014-03-16
- 性别: MM
- 专业: 固体力学
3楼2017-08-11 23:04:36













回复此楼
jiangxia0909
10