2012-11-25 107 views
0

可能重复:
Precision of multiplication by 1.0 and int <=> float conversion差异在犰狳乘法

我使用的犰狳C++库线性和因与取得一致的结果的困难。当我打印vector,freq时,这些是正确的值,但是当我将它与标量值相乘时,这是错误的。即使使用freq * 1.0!任何建议都会很棒。

mat::fixed<621,1>freq; 
2.0 * arma::datum::pi * freq 
+0

您可以将代码放在乘法和存储之后打印出来吗? – rutgersmike

+0

我试过两种方法: mat :: fixed <621,1> freq cout << 2.0 * arma :: datum :: pi * freq << endl; 和,我也打印它使用mat w = 2.0 * arma :: datum :: pi * freq; w.print()在不同的运行中给出不同的值。 –

+0

在计算中使用它之前,你正在初始化'freq'吗?否则,它是垃圾。 – rutgersmike

回答

1

我无法复制您的问题。

您需要发布显示问题的确切独立代码。换句话说,你正在使用的所有功能。这意味着您发布的程序可以在没有任何其他函数的情况下编译,并且只使用Armadillo依赖项(即没有Matlab)。

当使用下面的代码,我没有得到任何的问题:

#include <iostream> 
#include "armadillo" 

using namespace arma; 
using namespace std; 

int main(int argc, char** argv) 
    { 
    mat::fixed<621,1> freq; 
    freq.ones(); 

    cout << 2.0 * arma::datum::pi * freq << endl; 

    return 0; 
    } 

顺便说一句,google搜索的matlab2arma()函数(在评论的问题提到的)显示由第三方做一个黑客。将固定大小的矩阵与任何涉及手动内存管理的黑客混合可能会导致问题。除非你知道你在做什么,否则不要修改内部的Armadillo指针。