2011-08-17 70 views
0

使用双I型三次样条插值算法。 这项工作看起来很成功,但当计算出非常小的值时,出现了6%左右的相对误差。C++数值分析精确的数据结构?

双数据类型是否足以进行准确的科学数值分析?

回答

6

Double对于大多数应用程序来说具有足够的精度。当然这是有限的,但通过使用错误算法总是可能浪费任何精度。事实上,这应该是你的第一个嫌疑犯。仔细看看你的代码,看看你是否正在做一些让四舍五入错误累积得比所需要的更快的事情,或者做一些冒险的事情,比如减去彼此非常接近的值。

+0

你对它是算法问题。我刚刚改变了算法,我得到了改进的数据。对于更多的时候,我用新的算法使用长双重类型,我可以得到更准确的数据。 – webnoon

0

如果double值足以满足您的需求,取决于您正在使用的数字的类型。正如Henning所说,最好看一下你正在使用的算法,并确保它们在数值上是稳定的。

对于初学者,这里有一个很好的加法算法:Kahan summation algorithm

1

科学数值分析很难得到正确的,这就是为什么我把它留给专业人士。你有没有考虑过使用数字库而不是自己写? Eigen是我目前最喜欢的地方:http://eigen.tuxfamily.org/index.php?title=Main_Page

我总是亲近手边的数值食谱(nr.com)的最新副本,它有一个很好的插值章节。 NR具有限制性许可,但作者知道他们在做什么,并对每种数字技术提供简洁的说明。其他图书馆包括:ATLAS和GNU科学图书馆。

为了回答你的问题,对于大多数科学应用来说,双重应该足够了,我同意以前的海报,它应该喜欢算法问题。您是否考虑过发布您正在使用的算法的代码?