我正在写在C ++小和不充分的线性代数库的一个项目(对不起)。我执行使用双精度数字矩阵和操作。我做的对吗?我应该执行一个模板类呢?是否有一个更精确的类型周围?

有帮助吗?

解决方案

我已经写使用模板一个C ++线性代数库。我的想法是,我们可能要使用复数或扩展精度数的一天。这也许是七年前,我们还没有做呢。我们几乎总是使用双打作为模板类型,我们的typedef做出那么容易。

有几次,我们已经走了另一条路,使用类型的的超过两倍。例如,我们已经使用了浮动而非双在存储器结合的申请中所描述这里。但是,我们使用双打时99.9%的

如果你使用模板参数,注意使用整数类型,但隐含需要浮点类型。例如,假设你有一个矩阵,其元素都是整数,所以你用一个矩阵的类。但是当你传递一个线性解算器。现在你的算法是用做的整数的分工,你的结果是错误的。 (我已经做过了!)

其他提示

我将实施使用模板的类/结构。在开始的时候,你很可能会满足于仅仅double,但我发现,在每一个项目中,我的没有实施矩阵作为模板,后来我后悔了。

此外,它给您使用更有趣元件代数的机会 - 区间算术,概率分布,复杂的数学,定点匹配,子矩阵,简单的数学:-)等

  

我正在写一个小的和不充分   在C ++线性代数库,获得   项目(对不起)

哎哟!要小心,非常非常小心...查看 JAMA / TNT - 这是得到了NIST邮票的审批就可以了,他们已经处理了一些“简单”线性代数运算例如各种保理算法。线性代数涉及大量的棘手问题与计算精度(如希尔伯特矩阵)并不亚于我喜欢做我自己的事情,这是您可能希望使用一个已经得到了很好的考验了良好坚实基础的一个领域。

您应该能够使用长与它的两倍(不是很确定的说),但算法本身可能比矩阵的精确度更为重要。

最后一个问题的答案:是的,有,这就是所谓的long double和至少那样精确,double。对于是否使用模板或不是,是的,我会用模板。这对他们来说是一个伟大的用例,我认为这将使移植到其他一些标号码类型更容易。然后,您可以也只需一个的typedef float和/或双矩阵,根据不同的系统您正在运行,哪一个工作更快/更好。

不要做任何额外的工作,为自己。如果你可以用双(或长双)获得通过走这一点。

听起来好像这只是一个小项目,在这种情况下,模板的事情只会让为你工作。

使用模板来定义元素类型还没有被讨论的另一个选项。这并不会造成多大,如果有的话,额外的工作,但允许后来的一些变化。

有没有其他类型的更精确的比长双的其中也有硬件支持即可。但你是免费的,如果你觉得更高精度的需要,使自己的类型。然而,他们会比原生的双类型相当慢,甚至广泛的优化。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top