Возможный дубликат:
Точность умножения на 1,0 и int <знак равно> преобразование с плавающей точкой
Я использую линейную библиотеку Armadillo C ++ и испытываю трудности с получением последовательных результатов. Когда я печатаю вектор freq, это правильные значения, но когда я умножаю его на скалярное значение, это неправильно. Даже с частотой * 1,0! Любые предложения будут великолепны.
mat::fixed<621,1>freq;
2.0 * arma::datum::pi * freq
Я не могу воспроизвести вашу проблему.
Вам необходимо опубликовать точный автономный код, который демонстрирует проблему. Другими словами, все функции, которые вы используете. Это означает, что публикуемая вами программа может быть скомпилирована без каких-либо других функций и с использованием только зависимостей Armadillo (т.е. без Matlab).
При использовании следующего кода у меня не возникает никаких проблем:
#include <iostream>
#include "armadillo"
using namespace arma;
using namespace std;
int main(int argc, char** argv)
{
mat::fixed<621,1> freq;
freq.ones();
cout << 2.0 * arma::datum::pi * freq << endl;
return 0;
}
Кстати, поиск в Google для функции matlab2arma () (упомянутой в комментариях к вопросу) показывает взлом, совершенный третьей стороной. Смешивание матриц фиксированного размера с любыми видами взломов, связанных с ручным управлением памятью, может привести к проблемам. Не изменяйте внутренние указатели Armadillo, если вы не знаете, что делаете.
Других решений пока нет …