【问题标题】:Discrepancy in Armadillo Multiplication [duplicate]犰狳乘法的差异[重复]
【发布时间】:2012-11-12 22:30:22
【问题描述】:

可能重复:
Precision of multiplication by 1.0 and int <=> float conversion

我正在使用 armadillo c++ 线性库,但难以获得一致的结果。当我打印向量 freq 时,这些是正确的值,但是当我将它与标量值相乘时,它是错误的。即使使用频率 * 1.0!任何建议都会很棒。

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

【问题讨论】:

  • 你能把你打印出来的代码贴出来吗?
  • 我尝试了两种方法:mat::fixed freq cout
  • 在计算中使用freq 之前是否对其进行了初始化?否则就是垃圾。
  • mat::fixed数据; mat::固定时间;垫::固定频率; matlab2arma(频率,freq_ptr); cout
  • 是的,我正在初始化频率。 Freq 具有正确的值。即使我乘以 freq * 1.0,它也会给出不正确的值

标签: c++ armadillo


【解决方案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;
  }

顺便说一句,谷歌搜索 matlab2arma() 函数(在问题的 cmets 中提到)显示了由第 3 方完成的黑客攻击。将固定大小的矩阵与涉及手动内存管理的任何类型的黑客混合使用可能会导致问题。除非您知道自己在做什么,否则不要修改内部 Armadillo 指针。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多