【问题标题】:C++ GSL Vector view returns slightly modified valueC++ GSL Vector 视图返回稍作修改的值
【发布时间】:2020-03-21 23:00:56
【问题描述】:

使用 GSL(GNU 科学图书馆),我试图理解为什么 gsl_vector_view_array() 在赋值后返回一个稍微修改的值。

在下面的代码中,我声明了一个链接到表 q_test[0]=0.0 的 vector_view 'qview_test',并显示其值为 0.0。然后,我更改了 q_test[0]=1.12348 的值并期望 qview_test 的值相同,但它被更改为 qview_test=1.1234800000000000341771055900608189。

你如何解释这样的结果?如何在没有 GSL 的情况下复制结果?

#include <iostream>
#include <gsl/gsl_blas.h>
using namespace std;

double q_test[1]={0.0};
gsl_vector_view qview_test;

int nb_variable = 1;

int main()
{

    qview_test=gsl_vector_view_array(q_test,nb_variable);

    cout.precision(35);
    cout << "qview before: " << gsl_vector_get(&qview_test.vector,0)<< endl;

    // Assign value
    q_test[0]=1.12348;

    cout << "qview after: " << gsl_vector_get(&qview_test.vector,0) << endl;

    return 0;
}

感谢您的帮助,

H.Nam

【问题讨论】:

    标签: c++ vector memory-management view gsl


    【解决方案1】:

    对我来说,这看起来像 浮点舍入。 基本上任何十进制数只能具有有限的精度,并且介于两者之间的所有数字都会四舍五入到最接近的浮点数。

    我对 gsl 不熟悉,所以我不知道为什么它会显示这么多数字。

    换句话说,为了更精确,给您的数字提供更多位(128 位浮点数或类似的东西)来表示。这将为您提供更高的精度,但您很可能不需要它。

    【讨论】:

      猜你喜欢
      • 2010-12-17
      • 2012-07-07
      • 1970-01-01
      • 1970-01-01
      • 2017-04-07
      • 2016-08-03
      • 2014-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多