Интерпретировать отпечаток из денормализованного двойника в переполнении стека

Что это означает, когда программа на C ++ выводит следующее число, и каково значение H в конце?

-6.38442e-86H

Вся система слишком велика, чтобы добавить ее сюда, однако вот код, который распечатывает конкретный дубль.

try{
newLogLikelihoodEM= hmm->learningLogLikelihood(data, Arglist::getDiffLogLikelihood(), fileNumbers, rng);
}
catch (SingularCovarianceMatrixException &scme)
{
std::cout << scme.what() << ": doing learning, so restarts for this start-point" << std::endl;
noRestarts++;
restart = true;
}

и класс исключения

class SingularCovarianceMatrixException: public std::exception
{
double det;
public:
SingularCovarianceMatrixException(double det):det(det){};

virtual const char* what() const throw()
{

std::stringstream msg;
msg<< "Singular covariance matrix: determinant="<<det;

return msg.str().c_str();
}
};

И исключение брошено

if(*detCovarianceMatrix<1e-300)
{
throw SingularCovarianceMatrixException(*detCovarianceMatrix);
}

1

Решение

H не является частью числа. Это недопустимый суффикс для числа с плавающей запятой. Что-то еще в вашем коде должно печатать это.

2

Другие решения

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

#include <iostream>
#include <sstream>
#include <string>
#include <stdexcept>

class BadConversion : public std::runtime_error {
public:
BadConversion(std::string const& s)
: std::runtime_error(s)
{ }
};

inline double convertToDouble(std::string const& s,
bool failIfLeftoverChars = true)
{
std::istringstream i(s);
double x;
char c;
if (!(i >> x) || (failIfLeftoverChars && i.get(c)))
throw BadConversion("convertToDouble(\"" + s + "\")");
return x;
}

int main()
{
double d1 = convertToDouble("-6.38442e-86") ;
std::cout << d1 << std::endl ;
d1 = convertToDouble("-6.38442e-86H");
std::cout << d1 << std::endl ;
}

Какой код я взял у одного из моих предыдущих ответы о том, как проверить, если string является integer,

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector