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 视图返回稍作修改的值的主要内容,如果未能解决你的问题,请参考以下文章