Я вижу странное поведение в функциях комплексных чисел Научной библиотеки GNU.Проблема демонстрируется в следующем фрагменте:
#include <iostream>
#include <gsl/gsl_complex.h>
#include <gsl/gsl_complex_math.h>
int main() {
double realNumber = 1.0;
gsl_complex complexNumber;
GSL_SET_COMPLEX(&complexNumber, 1.0, 1.0);
printf("%p: ", &realNumber);
printf("%f\n", realNumber);
gsl_complex_add(complexNumber,complexNumber);
printf("%p: ", &realNumber);
printf("%f\n", realNumber);
return 0;
}
Вывод
0061FF18: 1.000000
0061FF1C: 0.000000
Функция gsl_complex_add
изменяет значение указателя на realNumber
, так что оно больше неуказывает на realNumber
, хотя realNumber
, похоже, никак не связан с функцией.Я предполагаю, что это из-за некоторого переполнения.
Проблема не возникает, если я использую std::cout
вместо printf
;Я полагаю, что это связано с компилятором.
Если я объявляю realNumber
как static
, проблема не возникает.
Если я объявляю realNumber
как const
, printf("%p: ", &realNumber);
возвращает неверное значение, но printf("%f\n", realNumber);
возвращает правильное.
Это ошибка или я делаю что-то, чего не должно быть?
Я использую компилятор g ++ (версия6.3.0) на компьютере с Windows.
Заранее благодарим за помощь.