C++ GSL Vector 视图返回稍作修改的值

Posted

技术标签:

【中文标题】C++ GSL Vector 视图返回稍作修改的值【英文标题】:C++ GSL Vector view returns slightly modified value 【发布时间】: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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于C++ GSL Vector 视图返回稍作修改的值的主要内容,如果未能解决你的问题,请参考以下文章

c++如何让find_if函数能查找多个符合条件的值?

get 返回一个不是最新的值

C++ Vector对象默认构造初始化,它的值是多少?谢谢

C++ Vector对象默认构造初始化,它的值是多少?谢谢

无法在嵌入 C++ 的 Python 代码中修改 time.time() 返回的值

GSL 快速傅里叶变换 - 双值高斯?