当在函数定义中使用特征库时,未按预期存储小数点

时间:2018-03-04 07:19:57

标签: c++ eigen function-definition

我正在使用Eigen库进行C ++程序,当我执行代码时,我得到了变量P

`-4 -3 -2 -1 0 1 2 3 4 5`

但它应该是-4.5 -3.5-2.5-1.5-0.5 1.5 2.5 3.5 4.5 数字四舍五入到最接近无穷大的整数。请帮我找到解决问题的方法。

#include<iostream>
#include<math.h>
#include<stdlib.h>
#include<eigen3/Eigen/Dense>
#include<eigen3/Eigen/Core>
using namespace Eigen;
using namespace std;
using Eigen::MatrixXd;
using Eigen::MatrixXf;

MatrixXf create_linear_array(int &N1 , double &dx)
{


int i;MatrixXf num(10,1);
    for(i=0;i<10;i++)
     num(i,0)=(float)(((i+1)-(N1+1)/2));
return num;
}

int main()
{
//---------------------INITIALISATION & DECLARATION------------------------------

    double dx=0.030;
    int N1=10;

    MatrixXf P;
    P=create_linear_array(N1,dx);

    cout<<P<<endl;
    return 0;


}

2 个答案:

答案 0 :(得分:2)

您正在进行整数除法,整数除法的结果始终为整数。之后才将结果转换为浮点数,但是为时已晚。解决此问题的最简单方法是使用浮点文字2.0而不是2。这是有效的,因为2.0是一个double,当你将整数除以double时,整数会先转换为double。

num(i,0)=(float)(((i+1)-(N1+1)/2.0));

答案 1 :(得分:1)

@john已经指出了你的错误的原因。我只想指出Eigen中有built-in function LinSpaced你想做什么:

int N1=10;

MatrixXf P;  // consider using VectorXf here
float const limit = 0.5f*(N1-1);
P = VectorXf::LinSpaced(N1, -limit, +limit);