0

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;


}
4

2 に答える 2

3

整数除算を行っており、整数除算の結果は常に整数です。結果を float にキャストするのはその後ですが、それでは遅すぎます。2.0これを修正する最も簡単な方法は、 の代わりに浮動小数点リテラルを使用することです2。これ2.0は double であるため機能し、整数を double で除算すると、最初に整数が double に変換されます。

num(i,0)=(float)(((i+1)-(N1+1)/2.0));
于 2018-03-04T07:24:19.097 に答える