C ++ GSL Векторное представление возвращает слегка измененное значение - PullRequest
0 голосов
/ 22 марта 2020

Используя GSL (GNU Scientifi c Library), я пытаюсь понять, почему gsl_vector_view_array () возвращает слегка измененное значение после присваивания.

В приведенном ниже коде я объявляю vector_view 'qview_test ', которая связана с таблицей q_test [0] = 0,0 и отображает ее значение, равное 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 Ответ

0 голосов
/ 22 марта 2020

Для меня это выглядит как округление с плавающей запятой . По сути, любое десятичное число может иметь только конечную точность, и все промежуточные числа округляются до ближайшего числа с плавающей точкой.

Я не знаком с gsl, поэтому я не знаю, почему он отображает так много цифр.

Другими словами, чтобы получить более точное значение, дайте вашему числу больше битов (128-разрядное число с плавающей запятой или что-то в этом роде). как это) быть представленным. Это даст вам больше точности, однако вам, скорее всего, она не понадобится.

...