| 查看: 550 | 回复: 3 | ||
jiangxia0909木虫 (小有名气)
|
[求助]
如何有效地避免double型数据相加时产生的误差
|
|
遇到问题:如一维的double数组 A[6]={-100.5, -50.9, 3.89, -4.58, 10.999, 200.8}; 这里只是一个例子,实际运算时,数组中数值之间的差距会更大。如果按数组下标依次累加,则可能产生计算误差。 想请教的问题是:如何实现double数组的累加,可降低或者避免此类计算误差 。 目前只知道避免大数加小数,但对于任意的double数组的累加是否有更有效地算法。希望小木虫里的大神指点指点。 |
» 猜你喜欢
求标准粉末衍射卡号 ICDD 01-076-1802
已经有0人回复
新西兰Robinson研究所招收全奖PhD
已经有0人回复
物理学I论文润色/翻译怎么收费?
已经有165人回复
石墨烯转移--二氧化硅衬底石墨烯
已经有0人回复
笼目材料中量子自旋液体基态的证据
已经有0人回复
数学教学论硕士可以读数学物理博士吗?
已经有0人回复
德国亥姆霍兹Hereon中心汉堡分部招镁合金腐蚀裂变SCC课题方向2026公派博士生
已经有4人回复
澳门大学 应用物理及材料工程研究院 潘晖教授课题组诚招博士后
已经有11人回复
求助NH4V4O10晶体的CIF文件
已经有0人回复
英国全奖博士招聘-深度学习与量子物理
已经有0人回复
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
4楼2017-10-22 13:17:04











回复此楼
jiangxia0909